sfcc-dev-mcp 1.0.19 → 1.0.21
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/dist/clients/logs/index.d.ts +13 -0
- package/dist/clients/logs/index.d.ts.map +1 -0
- package/dist/clients/logs/index.js +15 -0
- package/dist/clients/logs/index.js.map +1 -0
- package/dist/clients/logs/log-analyzer.d.ts +55 -0
- package/dist/clients/logs/log-analyzer.d.ts.map +1 -0
- package/dist/clients/logs/log-analyzer.js +228 -0
- package/dist/clients/logs/log-analyzer.js.map +1 -0
- package/dist/clients/logs/log-client.d.ts +87 -0
- package/dist/clients/logs/log-client.d.ts.map +1 -0
- package/dist/clients/logs/log-client.js +418 -0
- package/dist/clients/logs/log-client.js.map +1 -0
- package/dist/clients/logs/log-constants.d.ts +37 -0
- package/dist/clients/logs/log-constants.d.ts.map +1 -0
- package/dist/clients/logs/log-constants.js +37 -0
- package/dist/clients/logs/log-constants.js.map +1 -0
- package/dist/clients/logs/log-file-discovery.d.ts +64 -0
- package/dist/clients/logs/log-file-discovery.d.ts.map +1 -0
- package/dist/clients/logs/log-file-discovery.js +249 -0
- package/dist/clients/logs/log-file-discovery.js.map +1 -0
- package/dist/clients/logs/log-file-reader.d.ts +55 -0
- package/dist/clients/logs/log-file-reader.d.ts.map +1 -0
- package/dist/clients/logs/log-file-reader.js +207 -0
- package/dist/clients/logs/log-file-reader.js.map +1 -0
- package/dist/clients/logs/log-formatter.d.ts +90 -0
- package/dist/clients/logs/log-formatter.d.ts.map +1 -0
- package/dist/clients/logs/log-formatter.js +189 -0
- package/dist/clients/logs/log-formatter.js.map +1 -0
- package/dist/clients/logs/log-processor.d.ts +91 -0
- package/dist/clients/logs/log-processor.d.ts.map +1 -0
- package/dist/clients/logs/log-processor.js +328 -0
- package/dist/clients/logs/log-processor.js.map +1 -0
- package/dist/clients/logs/log-types.d.ts +58 -0
- package/dist/clients/logs/log-types.d.ts.map +1 -0
- package/dist/clients/logs/log-types.js +8 -0
- package/dist/clients/logs/log-types.js.map +1 -0
- package/dist/clients/logs/webdav-client-manager.d.ts +28 -0
- package/dist/clients/logs/webdav-client-manager.d.ts.map +1 -0
- package/dist/clients/logs/webdav-client-manager.js +77 -0
- package/dist/clients/logs/webdav-client-manager.js.map +1 -0
- package/dist/docs/dw_customer/CustomerMgr.md +3 -3
- package/dist/docs/dw_customer/Wallet.md +25 -0
- package/dist/docs/dw_extensions.payments/SalesforceAdyenPaymentIntent.md +156 -0
- package/dist/docs/dw_extensions.payments/SalesforceAdyenSavedPaymentMethod.md +258 -0
- package/dist/docs/dw_extensions.payments/SalesforcePayPalOrder.md +36 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentIntent.md +1 -1
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsHooks.md +68 -1
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsMerchantAccount.md +154 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsMerchantAccountPaymentMethod.md +96 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsMgr.md +311 -2
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsSiteConfiguration.md +26 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsZone.md +458 -0
- package/dist/docs/dw_order/OrderMgr.md +3 -3
- package/dist/docs/dw_order.hooks/BasketMergeHooks.md +4 -4
- package/dist/docs/dw_order.hooks/CheckoutHooks.md +42 -0
- package/dist/utils/path-resolver.d.ts +5 -0
- package/dist/utils/path-resolver.d.ts.map +1 -1
- package/dist/utils/path-resolver.js +27 -5
- package/dist/utils/path-resolver.js.map +1 -1
- package/package.json +9 -3
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -131
- package/.github/ISSUE_TEMPLATE/config.yml +0 -9
- package/.github/ISSUE_TEMPLATE/documentation.yml +0 -117
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -151
- package/.github/ISSUE_TEMPLATE/question.yml +0 -102
- package/.github/PULL_REQUEST_TEMPLATE/bug_fix.md +0 -59
- package/.github/PULL_REQUEST_TEMPLATE/documentation.md +0 -48
- package/.github/PULL_REQUEST_TEMPLATE/new_tool.md +0 -55
- package/.github/agents/official-docs-researcher.agent.md +0 -56
- package/.github/dependabot.yml +0 -65
- package/.github/instructions/mcp-node-tests.instructions.md +0 -30
- package/.github/instructions/mcp-yml-tests.instructions.md +0 -27
- package/.github/pull_request_template.md +0 -103
- package/.github/skills/agent-authoring/SKILL.md +0 -66
- package/.github/skills/mcp-log-debugging/SKILL.md +0 -69
- package/.github/skills/mcp-programmatic-testing/SKILL.md +0 -142
- package/.github/skills/mcp-yaml-testing/SKILL.md +0 -136
- package/.github/skills/salesforce-developer-site-scraper/SKILL.md +0 -102
- package/.github/skills/salesforce-developer-site-scraper/scripts/scrape-to-markdown.js +0 -205
- package/.github/skills/salesforce-help-site-scraper/SKILL.md +0 -84
- package/.github/skills/salesforce-help-site-scraper/scripts/scrape-help-to-markdown.js +0 -212
- package/.github/skills/skill-authoring/SKILL.md +0 -228
- package/.github/skills/skill-authoring/references/PATTERNS.md +0 -384
- package/.github/workflows/ci.yml +0 -103
- package/.github/workflows/deploy-pages.yml +0 -59
- package/.github/workflows/publish.yml +0 -112
- package/.github/workflows/update-docs.yml +0 -182
- package/.husky/pre-commit +0 -2
- package/AGENTS.md +0 -638
- package/CONTRIBUTING.md +0 -323
- package/SECURITY.md +0 -148
- package/aegis.config.docs-only.json +0 -9
- package/aegis.config.json +0 -12
- package/aegis.config.with-dw.json +0 -15
- package/ai-instructions/AGENTS.md +0 -628
- package/ai-instructions/skills/sfcc-caching/SKILL.md +0 -89
- package/ai-instructions/skills/sfcc-cartridge-development/SKILL.md +0 -240
- package/ai-instructions/skills/sfcc-forms-development/SKILL.md +0 -261
- package/ai-instructions/skills/sfcc-forms-development/references/ARCHITECTURE-SGJC-SFRA.md +0 -143
- package/ai-instructions/skills/sfcc-forms-development/references/FORM-XML-CHEATSHEET.md +0 -127
- package/ai-instructions/skills/sfcc-fraud-prevention/SKILL.md +0 -95
- package/ai-instructions/skills/sfcc-hooks-registration/SKILL.md +0 -39
- package/ai-instructions/skills/sfcc-isml-development/SKILL.md +0 -370
- package/ai-instructions/skills/sfcc-isml-development/references/REMOTE-INCLUDES.md +0 -116
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-LAYOUTS.md +0 -50
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CART-ACCOUNT-AUTH.md +0 -45
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CATALOG.md +0 -85
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-STRUCTURE-COMPONENTS.md +0 -63
- package/ai-instructions/skills/sfcc-isml-development/references/UTILITIES-EXPRESSIONS.md +0 -159
- package/ai-instructions/skills/sfcc-isml-development/references/sfra-base-templates-architecture.md +0 -13
- package/ai-instructions/skills/sfcc-job-development/SKILL.md +0 -334
- package/ai-instructions/skills/sfcc-job-development/references/CHUNK-ORIENTED.md +0 -393
- package/ai-instructions/skills/sfcc-job-development/references/STEPTYPES-JSON.md +0 -271
- package/ai-instructions/skills/sfcc-job-development/references/TASK-ORIENTED.md +0 -257
- package/ai-instructions/skills/sfcc-localization/SKILL.md +0 -92
- package/ai-instructions/skills/sfcc-localization/references/CONTROLLERS.md +0 -63
- package/ai-instructions/skills/sfcc-localization/references/FORMATTING.md +0 -29
- package/ai-instructions/skills/sfcc-localization/references/FORMS-LOCALIZATION.md +0 -33
- package/ai-instructions/skills/sfcc-localization/references/JAVASCRIPT-LOCALIZATION.md +0 -41
- package/ai-instructions/skills/sfcc-localization/references/LOCALE-SWITCHING.md +0 -35
- package/ai-instructions/skills/sfcc-localization/references/PATTERNS.md +0 -740
- package/ai-instructions/skills/sfcc-localization/references/PROPERTIES-ENCODING.md +0 -25
- package/ai-instructions/skills/sfcc-localization/references/RESOURCE-BUNDLES.md +0 -67
- package/ai-instructions/skills/sfcc-localization/references/STATIC-FILES.md +0 -23
- package/ai-instructions/skills/sfcc-localization/references/TESTING.md +0 -21
- package/ai-instructions/skills/sfcc-localserviceregistry/SKILL.md +0 -374
- package/ai-instructions/skills/sfcc-logging/SKILL.md +0 -352
- package/ai-instructions/skills/sfcc-logging/references/LOG-FILES.md +0 -282
- package/ai-instructions/skills/sfcc-ocapi-hooks/SKILL.md +0 -350
- package/ai-instructions/skills/sfcc-ocapi-scapi-slas/SKILL.md +0 -108
- package/ai-instructions/skills/sfcc-page-designer/SKILL.md +0 -353
- package/ai-instructions/skills/sfcc-page-designer/references/ATTRIBUTE-TYPES.md +0 -436
- package/ai-instructions/skills/sfcc-page-designer/references/META-DEFINITIONS.md +0 -322
- package/ai-instructions/skills/sfcc-performance/SKILL.md +0 -424
- package/ai-instructions/skills/sfcc-platform-limits/SKILL.md +0 -89
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/SKILL.md +0 -237
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/AUTHENTICATION.md +0 -214
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/URL-MAPPING.md +0 -253
- package/ai-instructions/skills/sfcc-scapi-hooks/SKILL.md +0 -341
- package/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +0 -380
- package/ai-instructions/skills/sfcc-security/SKILL.md +0 -394
- package/ai-instructions/skills/sfcc-sfra-client-side-js/SKILL.md +0 -270
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/AJAX-CSRF-VALIDATION.md +0 -285
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/BASE-MODULE-INDEX.md +0 -206
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/EXTENSION-PATTERNS.md +0 -165
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/PLUGIN-PATTERNS.md +0 -185
- package/ai-instructions/skills/sfcc-sfra-controllers/SKILL.md +0 -347
- package/ai-instructions/skills/sfcc-sfra-controllers/references/MIDDLEWARE-REFERENCE.md +0 -257
- package/ai-instructions/skills/sfcc-sfra-controllers/references/REMOTE-INCLUDES.md +0 -193
- package/ai-instructions/skills/sfcc-sfra-controllers/references/standard-sfra-controllers.md +0 -814
- package/ai-instructions/skills/sfcc-sfra-models/SKILL.md +0 -322
- package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-PATTERNS.md +0 -530
- package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-STRUCTURE.md +0 -234
- package/ai-instructions/skills/sfcc-sfra-models/references/TESTING-SECURITY.md +0 -417
- package/ai-instructions/skills/sfcc-sfra-scss/SKILL.md +0 -393
- package/ai-instructions/skills/sfcc-webdav-workflows/SKILL.md +0 -111
- package/docs/TopLevel/APIException.md +0 -68
- package/docs/TopLevel/Array.md +0 -897
- package/docs/TopLevel/ArrayBuffer.md +0 -79
- package/docs/TopLevel/BigInt.md +0 -132
- package/docs/TopLevel/Boolean.md +0 -62
- package/docs/TopLevel/ConversionError.md +0 -23
- package/docs/TopLevel/DataView.md +0 -352
- package/docs/TopLevel/Date.md +0 -924
- package/docs/TopLevel/ES6Iterator.md +0 -33
- package/docs/TopLevel/Error.md +0 -88
- package/docs/TopLevel/EvalError.md +0 -23
- package/docs/TopLevel/Fault.md +0 -87
- package/docs/TopLevel/Float32Array.md +0 -130
- package/docs/TopLevel/Float64Array.md +0 -130
- package/docs/TopLevel/Function.md +0 -105
- package/docs/TopLevel/Generator.md +0 -78
- package/docs/TopLevel/IOError.md +0 -62
- package/docs/TopLevel/Int16Array.md +0 -130
- package/docs/TopLevel/Int32Array.md +0 -130
- package/docs/TopLevel/Int8Array.md +0 -130
- package/docs/TopLevel/InternalError.md +0 -23
- package/docs/TopLevel/Iterable.md +0 -41
- package/docs/TopLevel/Iterator.md +0 -48
- package/docs/TopLevel/JSON.md +0 -162
- package/docs/TopLevel/Map.md +0 -216
- package/docs/TopLevel/Math.md +0 -913
- package/docs/TopLevel/Module.md +0 -45
- package/docs/TopLevel/Namespace.md +0 -96
- package/docs/TopLevel/Number.md +0 -417
- package/docs/TopLevel/Object.md +0 -641
- package/docs/TopLevel/QName.md +0 -96
- package/docs/TopLevel/RangeError.md +0 -23
- package/docs/TopLevel/ReferenceError.md +0 -23
- package/docs/TopLevel/RegExp.md +0 -109
- package/docs/TopLevel/Set.md +0 -165
- package/docs/TopLevel/StopIteration.md +0 -20
- package/docs/TopLevel/String.md +0 -1299
- package/docs/TopLevel/Symbol.md +0 -78
- package/docs/TopLevel/SyntaxError.md +0 -23
- package/docs/TopLevel/SystemError.md +0 -62
- package/docs/TopLevel/TypeError.md +0 -23
- package/docs/TopLevel/URIError.md +0 -23
- package/docs/TopLevel/Uint16Array.md +0 -130
- package/docs/TopLevel/Uint32Array.md +0 -130
- package/docs/TopLevel/Uint8Array.md +0 -130
- package/docs/TopLevel/Uint8ClampedArray.md +0 -130
- package/docs/TopLevel/WeakMap.md +0 -137
- package/docs/TopLevel/WeakSet.md +0 -92
- package/docs/TopLevel/XML.md +0 -937
- package/docs/TopLevel/XMLList.md +0 -484
- package/docs/TopLevel/XMLStreamError.md +0 -74
- package/docs/TopLevel/arguments.md +0 -34
- package/docs/TopLevel/global.md +0 -474
- package/docs/dw_campaign/ABTest.md +0 -47
- package/docs/dw_campaign/ABTestMgr.md +0 -70
- package/docs/dw_campaign/ABTestSegment.md +0 -96
- package/docs/dw_campaign/AmountDiscount.md +0 -51
- package/docs/dw_campaign/ApproachingDiscount.md +0 -124
- package/docs/dw_campaign/BonusChoiceDiscount.md +0 -146
- package/docs/dw_campaign/BonusDiscount.md +0 -48
- package/docs/dw_campaign/Campaign.md +0 -365
- package/docs/dw_campaign/CampaignMgr.md +0 -395
- package/docs/dw_campaign/CampaignStatusCodes.md +0 -48
- package/docs/dw_campaign/Coupon.md +0 -310
- package/docs/dw_campaign/CouponMgr.md +0 -144
- package/docs/dw_campaign/CouponRedemption.md +0 -94
- package/docs/dw_campaign/CouponStatusCodes.md +0 -86
- package/docs/dw_campaign/Discount.md +0 -226
- package/docs/dw_campaign/DiscountPlan.md +0 -282
- package/docs/dw_campaign/FixedPriceDiscount.md +0 -52
- package/docs/dw_campaign/FixedPriceShippingDiscount.md +0 -52
- package/docs/dw_campaign/FreeDiscount.md +0 -17
- package/docs/dw_campaign/FreeShippingDiscount.md +0 -17
- package/docs/dw_campaign/PercentageDiscount.md +0 -52
- package/docs/dw_campaign/PercentageOptionDiscount.md +0 -48
- package/docs/dw_campaign/PriceBookPriceDiscount.md +0 -47
- package/docs/dw_campaign/Promotion.md +0 -874
- package/docs/dw_campaign/PromotionMgr.md +0 -386
- package/docs/dw_campaign/PromotionPlan.md +0 -330
- package/docs/dw_campaign/SlotContent.md +0 -144
- package/docs/dw_campaign/SourceCodeGroup.md +0 -72
- package/docs/dw_campaign/SourceCodeInfo.md +0 -144
- package/docs/dw_campaign/SourceCodeStatusCodes.md +0 -36
- package/docs/dw_campaign/TotalFixedPriceDiscount.md +0 -47
- package/docs/dw_catalog/Catalog.md +0 -122
- package/docs/dw_catalog/CatalogMgr.md +0 -182
- package/docs/dw_catalog/Category.md +0 -1308
- package/docs/dw_catalog/CategoryAssignment.md +0 -192
- package/docs/dw_catalog/CategoryLink.md +0 -126
- package/docs/dw_catalog/PriceBook.md +0 -242
- package/docs/dw_catalog/PriceBookMgr.md +0 -204
- package/docs/dw_catalog/Product.md +0 -2593
- package/docs/dw_catalog/ProductActiveData.md +0 -1275
- package/docs/dw_catalog/ProductAttributeModel.md +0 -277
- package/docs/dw_catalog/ProductAvailabilityLevels.md +0 -142
- package/docs/dw_catalog/ProductAvailabilityModel.md +0 -380
- package/docs/dw_catalog/ProductInventoryList.md +0 -140
- package/docs/dw_catalog/ProductInventoryMgr.md +0 -117
- package/docs/dw_catalog/ProductInventoryRecord.md +0 -563
- package/docs/dw_catalog/ProductLink.md +0 -144
- package/docs/dw_catalog/ProductMgr.md +0 -138
- package/docs/dw_catalog/ProductOption.md +0 -214
- package/docs/dw_catalog/ProductOptionModel.md +0 -246
- package/docs/dw_catalog/ProductOptionValue.md +0 -123
- package/docs/dw_catalog/ProductPriceInfo.md +0 -172
- package/docs/dw_catalog/ProductPriceModel.md +0 -745
- package/docs/dw_catalog/ProductPriceTable.md +0 -134
- package/docs/dw_catalog/ProductSearchHit.md +0 -581
- package/docs/dw_catalog/ProductSearchModel.md +0 -2018
- package/docs/dw_catalog/ProductSearchRefinementDefinition.md +0 -97
- package/docs/dw_catalog/ProductSearchRefinementValue.md +0 -73
- package/docs/dw_catalog/ProductSearchRefinements.md +0 -216
- package/docs/dw_catalog/ProductVariationAttribute.md +0 -100
- package/docs/dw_catalog/ProductVariationAttributeValue.md +0 -238
- package/docs/dw_catalog/ProductVariationModel.md +0 -849
- package/docs/dw_catalog/Recommendation.md +0 -314
- package/docs/dw_catalog/SearchModel.md +0 -901
- package/docs/dw_catalog/SearchRefinementDefinition.md +0 -146
- package/docs/dw_catalog/SearchRefinementValue.md +0 -185
- package/docs/dw_catalog/SearchRefinements.md +0 -180
- package/docs/dw_catalog/SortingOption.md +0 -120
- package/docs/dw_catalog/SortingRule.md +0 -47
- package/docs/dw_catalog/Store.md +0 -562
- package/docs/dw_catalog/StoreGroup.md +0 -96
- package/docs/dw_catalog/StoreInventoryFilter.md +0 -74
- package/docs/dw_catalog/StoreInventoryFilterValue.md +0 -74
- package/docs/dw_catalog/StoreMgr.md +0 -236
- package/docs/dw_catalog/Variant.md +0 -859
- package/docs/dw_catalog/VariationGroup.md +0 -792
- package/docs/dw_content/Content.md +0 -534
- package/docs/dw_content/ContentMgr.md +0 -166
- package/docs/dw_content/ContentSearchModel.md +0 -682
- package/docs/dw_content/ContentSearchRefinementDefinition.md +0 -49
- package/docs/dw_content/ContentSearchRefinementValue.md +0 -17
- package/docs/dw_content/ContentSearchRefinements.md +0 -208
- package/docs/dw_content/Folder.md +0 -467
- package/docs/dw_content/Library.md +0 -121
- package/docs/dw_content/MarkupText.md +0 -88
- package/docs/dw_content/MediaFile.md +0 -317
- package/docs/dw_crypto/CertificateRef.md +0 -42
- package/docs/dw_crypto/CertificateUtils.md +0 -187
- package/docs/dw_crypto/Cipher.md +0 -530
- package/docs/dw_crypto/Encoding.md +0 -220
- package/docs/dw_crypto/JWE.md +0 -224
- package/docs/dw_crypto/JWEHeader.md +0 -172
- package/docs/dw_crypto/JWS.md +0 -264
- package/docs/dw_crypto/JWSHeader.md +0 -148
- package/docs/dw_crypto/KeyRef.md +0 -44
- package/docs/dw_crypto/Mac.md +0 -139
- package/docs/dw_crypto/MessageDigest.md +0 -175
- package/docs/dw_crypto/SecureRandom.md +0 -148
- package/docs/dw_crypto/Signature.md +0 -252
- package/docs/dw_crypto/WeakCipher.md +0 -538
- package/docs/dw_crypto/WeakMac.md +0 -121
- package/docs/dw_crypto/WeakMessageDigest.md +0 -163
- package/docs/dw_crypto/WeakSignature.md +0 -242
- package/docs/dw_crypto/X509Certificate.md +0 -193
- package/docs/dw_customer/AddressBook.md +0 -163
- package/docs/dw_customer/AgentUserMgr.md +0 -83
- package/docs/dw_customer/AgentUserStatusCodes.md +0 -96
- package/docs/dw_customer/AuthenticationStatus.md +0 -138
- package/docs/dw_customer/Credentials.md +0 -494
- package/docs/dw_customer/Customer.md +0 -571
- package/docs/dw_customer/CustomerActiveData.md +0 -552
- package/docs/dw_customer/CustomerAddress.md +0 -852
- package/docs/dw_customer/CustomerCDPData.md +0 -70
- package/docs/dw_customer/CustomerContextMgr.md +0 -64
- package/docs/dw_customer/CustomerGroup.md +0 -134
- package/docs/dw_customer/CustomerList.md +0 -71
- package/docs/dw_customer/CustomerMgr.md +0 -735
- package/docs/dw_customer/CustomerPasswordConstraints.md +0 -142
- package/docs/dw_customer/CustomerPaymentInstrument.md +0 -125
- package/docs/dw_customer/CustomerStatusCodes.md +0 -30
- package/docs/dw_customer/EncryptedObject.md +0 -18
- package/docs/dw_customer/ExternalProfile.md +0 -160
- package/docs/dw_customer/OrderHistory.md +0 -111
- package/docs/dw_customer/ProductList.md +0 -1000
- package/docs/dw_customer/ProductListItem.md +0 -504
- package/docs/dw_customer/ProductListItemPurchase.md +0 -145
- package/docs/dw_customer/ProductListMgr.md +0 -234
- package/docs/dw_customer/ProductListRegistrant.md +0 -193
- package/docs/dw_customer/Profile.md +0 -1128
- package/docs/dw_customer/Wallet.md +0 -118
- package/docs/dw_extensions.applepay/ApplePayHookResult.md +0 -209
- package/docs/dw_extensions.applepay/ApplePayHooks.md +0 -255
- package/docs/dw_extensions.facebook/FacebookFeedHooks.md +0 -47
- package/docs/dw_extensions.facebook/FacebookProduct.md +0 -1621
- package/docs/dw_extensions.paymentrequest/PaymentRequestHookResult.md +0 -159
- package/docs/dw_extensions.paymentrequest/PaymentRequestHooks.md +0 -160
- package/docs/dw_extensions.payments/SalesforceBancontactPaymentDetails.md +0 -79
- package/docs/dw_extensions.payments/SalesforceCardPaymentDetails.md +0 -103
- package/docs/dw_extensions.payments/SalesforceEpsPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforceIdealPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforceKlarnaPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforcePayPalOrder.md +0 -246
- package/docs/dw_extensions.payments/SalesforcePayPalOrderAddress.md +0 -191
- package/docs/dw_extensions.payments/SalesforcePayPalOrderPayer.md +0 -118
- package/docs/dw_extensions.payments/SalesforcePayPalPaymentDetails.md +0 -79
- package/docs/dw_extensions.payments/SalesforcePaymentDetails.md +0 -57
- package/docs/dw_extensions.payments/SalesforcePaymentIntent.md +0 -281
- package/docs/dw_extensions.payments/SalesforcePaymentMethod.md +0 -346
- package/docs/dw_extensions.payments/SalesforcePaymentRequest.md +0 -784
- package/docs/dw_extensions.payments/SalesforcePaymentsHooks.md +0 -45
- package/docs/dw_extensions.payments/SalesforcePaymentsMgr.md +0 -634
- package/docs/dw_extensions.payments/SalesforcePaymentsSiteConfiguration.md +0 -95
- package/docs/dw_extensions.payments/SalesforceSepaDebitPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforceVenmoPaymentDetails.md +0 -79
- package/docs/dw_extensions.pinterest/PinterestAvailability.md +0 -86
- package/docs/dw_extensions.pinterest/PinterestFeedHooks.md +0 -69
- package/docs/dw_extensions.pinterest/PinterestOrder.md +0 -232
- package/docs/dw_extensions.pinterest/PinterestOrderHooks.md +0 -45
- package/docs/dw_extensions.pinterest/PinterestProduct.md +0 -850
- package/docs/dw_io/CSVStreamReader.md +0 -80
- package/docs/dw_io/CSVStreamWriter.md +0 -60
- package/docs/dw_io/File.md +0 -614
- package/docs/dw_io/FileReader.md +0 -41
- package/docs/dw_io/FileWriter.md +0 -103
- package/docs/dw_io/InputStream.md +0 -34
- package/docs/dw_io/OutputStream.md +0 -34
- package/docs/dw_io/PrintWriter.md +0 -71
- package/docs/dw_io/RandomAccessFileReader.md +0 -173
- package/docs/dw_io/Reader.md +0 -274
- package/docs/dw_io/StringWriter.md +0 -81
- package/docs/dw_io/Writer.md +0 -92
- package/docs/dw_io/XMLIndentingStreamWriter.md +0 -112
- package/docs/dw_io/XMLStreamConstants.md +0 -114
- package/docs/dw_io/XMLStreamReader.md +0 -1043
- package/docs/dw_io/XMLStreamWriter.md +0 -572
- package/docs/dw_job/JobExecution.md +0 -107
- package/docs/dw_job/JobStepExecution.md +0 -151
- package/docs/dw_net/FTPClient.md +0 -699
- package/docs/dw_net/FTPFileInfo.md +0 -122
- package/docs/dw_net/HTTPClient.md +0 -831
- package/docs/dw_net/HTTPClientLoggingConfig.md +0 -296
- package/docs/dw_net/HTTPRequestPart.md +0 -206
- package/docs/dw_net/Mail.md +0 -551
- package/docs/dw_net/SFTPClient.md +0 -591
- package/docs/dw_net/SFTPFileInfo.md +0 -122
- package/docs/dw_net/WebDAVClient.md +0 -715
- package/docs/dw_net/WebDAVFileInfo.md +0 -184
- package/docs/dw_object/ActiveData.md +0 -75
- package/docs/dw_object/CustomAttributes.md +0 -16
- package/docs/dw_object/CustomObject.md +0 -73
- package/docs/dw_object/CustomObjectMgr.md +0 -291
- package/docs/dw_object/Extensible.md +0 -64
- package/docs/dw_object/ExtensibleObject.md +0 -68
- package/docs/dw_object/Note.md +0 -121
- package/docs/dw_object/ObjectAttributeDefinition.md +0 -481
- package/docs/dw_object/ObjectAttributeGroup.md +0 -170
- package/docs/dw_object/ObjectAttributeValueDefinition.md +0 -72
- package/docs/dw_object/ObjectTypeDefinition.md +0 -216
- package/docs/dw_object/PersistentObject.md +0 -94
- package/docs/dw_object/SimpleExtensible.md +0 -46
- package/docs/dw_object/SystemObjectMgr.md +0 -153
- package/docs/dw_order/AbstractItem.md +0 -244
- package/docs/dw_order/AbstractItemCtnr.md +0 -240
- package/docs/dw_order/Appeasement.md +0 -367
- package/docs/dw_order/AppeasementItem.md +0 -90
- package/docs/dw_order/Basket.md +0 -362
- package/docs/dw_order/BasketMgr.md +0 -418
- package/docs/dw_order/BonusDiscountLineItem.md +0 -248
- package/docs/dw_order/CouponLineItem.md +0 -272
- package/docs/dw_order/CreateAgentBasketLimitExceededException.md +0 -18
- package/docs/dw_order/CreateBasketFromOrderException.md +0 -26
- package/docs/dw_order/CreateCouponLineItemException.md +0 -26
- package/docs/dw_order/CreateOrderException.md +0 -18
- package/docs/dw_order/CreateTemporaryBasketLimitExceededException.md +0 -18
- package/docs/dw_order/GiftCertificate.md +0 -569
- package/docs/dw_order/GiftCertificateLineItem.md +0 -324
- package/docs/dw_order/GiftCertificateMgr.md +0 -197
- package/docs/dw_order/GiftCertificateStatusCodes.md +0 -60
- package/docs/dw_order/Invoice.md +0 -418
- package/docs/dw_order/InvoiceItem.md +0 -222
- package/docs/dw_order/LineItem.md +0 -532
- package/docs/dw_order/LineItemCtnr.md +0 -2431
- package/docs/dw_order/Order.md +0 -2567
- package/docs/dw_order/OrderAddress.md +0 -807
- package/docs/dw_order/OrderItem.md +0 -536
- package/docs/dw_order/OrderMgr.md +0 -535
- package/docs/dw_order/OrderPaymentInstrument.md +0 -220
- package/docs/dw_order/OrderProcessStatusCodes.md +0 -84
- package/docs/dw_order/PaymentCard.md +0 -217
- package/docs/dw_order/PaymentInstrument.md +0 -1462
- package/docs/dw_order/PaymentMethod.md +0 -242
- package/docs/dw_order/PaymentMgr.md +0 -117
- package/docs/dw_order/PaymentProcessor.md +0 -70
- package/docs/dw_order/PaymentStatusCodes.md +0 -42
- package/docs/dw_order/PaymentTransaction.md +0 -328
- package/docs/dw_order/PriceAdjustment.md +0 -640
- package/docs/dw_order/PriceAdjustmentLimitTypes.md +0 -38
- package/docs/dw_order/ProductLineItem.md +0 -1821
- package/docs/dw_order/ProductShippingCost.md +0 -96
- package/docs/dw_order/ProductShippingLineItem.md +0 -326
- package/docs/dw_order/ProductShippingModel.md +0 -125
- package/docs/dw_order/Return.md +0 -360
- package/docs/dw_order/ReturnCase.md +0 -400
- package/docs/dw_order/ReturnCaseItem.md +0 -373
- package/docs/dw_order/ReturnItem.md +0 -362
- package/docs/dw_order/Shipment.md +0 -1251
- package/docs/dw_order/ShipmentShippingCost.md +0 -46
- package/docs/dw_order/ShipmentShippingModel.md +0 -146
- package/docs/dw_order/ShippingLineItem.md +0 -278
- package/docs/dw_order/ShippingLocation.md +0 -366
- package/docs/dw_order/ShippingMethod.md +0 -266
- package/docs/dw_order/ShippingMgr.md +0 -158
- package/docs/dw_order/ShippingOrder.md +0 -561
- package/docs/dw_order/ShippingOrderItem.md +0 -355
- package/docs/dw_order/SumItem.md +0 -147
- package/docs/dw_order/TaxGroup.md +0 -143
- package/docs/dw_order/TaxItem.md +0 -74
- package/docs/dw_order/TaxMgr.md +0 -227
- package/docs/dw_order/TrackingInfo.md +0 -312
- package/docs/dw_order/TrackingRef.md +0 -113
- package/docs/dw_order.hooks/BasketMergeHooks.md +0 -42
- package/docs/dw_order.hooks/CalculateHooks.md +0 -77
- package/docs/dw_order.hooks/OrderHooks.md +0 -41
- package/docs/dw_order.hooks/PaymentHooks.md +0 -180
- package/docs/dw_order.hooks/ReturnHooks.md +0 -135
- package/docs/dw_order.hooks/ShippingOrderHooks.md +0 -245
- package/docs/dw_rpc/SOAPUtil.md +0 -465
- package/docs/dw_rpc/Stub.md +0 -289
- package/docs/dw_rpc/WebReference.md +0 -83
- package/docs/dw_suggest/BrandSuggestions.md +0 -17
- package/docs/dw_suggest/CategorySuggestions.md +0 -53
- package/docs/dw_suggest/ContentSuggestions.md +0 -53
- package/docs/dw_suggest/CustomSuggestions.md +0 -17
- package/docs/dw_suggest/ProductSuggestions.md +0 -53
- package/docs/dw_suggest/SearchPhraseSuggestions.md +0 -117
- package/docs/dw_suggest/SuggestModel.md +0 -403
- package/docs/dw_suggest/SuggestedCategory.md +0 -46
- package/docs/dw_suggest/SuggestedContent.md +0 -46
- package/docs/dw_suggest/SuggestedPhrase.md +0 -70
- package/docs/dw_suggest/SuggestedProduct.md +0 -47
- package/docs/dw_suggest/SuggestedTerm.md +0 -143
- package/docs/dw_suggest/SuggestedTerms.md +0 -132
- package/docs/dw_suggest/Suggestions.md +0 -179
- package/docs/dw_svc/FTPService.md +0 -118
- package/docs/dw_svc/FTPServiceDefinition.md +0 -69
- package/docs/dw_svc/HTTPFormService.md +0 -18
- package/docs/dw_svc/HTTPFormServiceDefinition.md +0 -18
- package/docs/dw_svc/HTTPService.md +0 -415
- package/docs/dw_svc/HTTPServiceDefinition.md +0 -303
- package/docs/dw_svc/LocalServiceRegistry.md +0 -43
- package/docs/dw_svc/Result.md +0 -303
- package/docs/dw_svc/SOAPService.md +0 -115
- package/docs/dw_svc/SOAPServiceDefinition.md +0 -17
- package/docs/dw_svc/Service.md +0 -295
- package/docs/dw_svc/ServiceCallback.md +0 -268
- package/docs/dw_svc/ServiceConfig.md +0 -120
- package/docs/dw_svc/ServiceCredential.md +0 -156
- package/docs/dw_svc/ServiceDefinition.md +0 -176
- package/docs/dw_svc/ServiceProfile.md +0 -168
- package/docs/dw_svc/ServiceRegistry.md +0 -109
- package/docs/dw_system/AgentUserStatusCodes.md +0 -21
- package/docs/dw_system/Cache.md +0 -102
- package/docs/dw_system/CacheMgr.md +0 -42
- package/docs/dw_system/HookMgr.md +0 -66
- package/docs/dw_system/InternalObject.md +0 -56
- package/docs/dw_system/JobProcessMonitor.md +0 -124
- package/docs/dw_system/Log.md +0 -237
- package/docs/dw_system/LogNDC.md +0 -88
- package/docs/dw_system/Logger.md +0 -263
- package/docs/dw_system/OrganizationPreferences.md +0 -18
- package/docs/dw_system/Pipeline.md +0 -73
- package/docs/dw_system/PipelineDictionary.md +0 -16
- package/docs/dw_system/RESTErrorResponse.md +0 -66
- package/docs/dw_system/RESTResponseMgr.md +0 -258
- package/docs/dw_system/RESTSuccessResponse.md +0 -39
- package/docs/dw_system/RemoteInclude.md +0 -74
- package/docs/dw_system/Request.md +0 -839
- package/docs/dw_system/RequestHooks.md +0 -59
- package/docs/dw_system/Response.md +0 -522
- package/docs/dw_system/SearchStatus.md +0 -151
- package/docs/dw_system/Session.md +0 -476
- package/docs/dw_system/Site.md +0 -585
- package/docs/dw_system/SitePreferences.md +0 -49
- package/docs/dw_system/Status.md +0 -273
- package/docs/dw_system/StatusItem.md +0 -273
- package/docs/dw_system/System.md +0 -200
- package/docs/dw_system/Transaction.md +0 -84
- package/docs/dw_util/ArrayList.md +0 -50
- package/docs/dw_util/Assert.md +0 -391
- package/docs/dw_util/BigInteger.md +0 -326
- package/docs/dw_util/Bytes.md +0 -252
- package/docs/dw_util/Calendar.md +0 -921
- package/docs/dw_util/Collection.md +0 -338
- package/docs/dw_util/Currency.md +0 -163
- package/docs/dw_util/DateUtils.md +0 -86
- package/docs/dw_util/Decimal.md +0 -438
- package/docs/dw_util/FilteringCollection.md +0 -93
- package/docs/dw_util/Geolocation.md +0 -271
- package/docs/dw_util/HashMap.md +0 -43
- package/docs/dw_util/HashSet.md +0 -46
- package/docs/dw_util/Iterator.md +0 -97
- package/docs/dw_util/LinkedHashMap.md +0 -43
- package/docs/dw_util/LinkedHashSet.md +0 -46
- package/docs/dw_util/List.md +0 -519
- package/docs/dw_util/Locale.md +0 -267
- package/docs/dw_util/Map.md +0 -313
- package/docs/dw_util/MapEntry.md +0 -70
- package/docs/dw_util/MappingKey.md +0 -76
- package/docs/dw_util/MappingMgr.md +0 -122
- package/docs/dw_util/PropertyComparator.md +0 -51
- package/docs/dw_util/SecureEncoder.md +0 -350
- package/docs/dw_util/SecureFilter.md +0 -350
- package/docs/dw_util/SeekableIterator.md +0 -176
- package/docs/dw_util/Set.md +0 -19
- package/docs/dw_util/SortedMap.md +0 -148
- package/docs/dw_util/SortedSet.md +0 -151
- package/docs/dw_util/StringUtils.md +0 -753
- package/docs/dw_util/Template.md +0 -88
- package/docs/dw_util/UUIDUtils.md +0 -38
- package/docs/dw_value/EnumValue.md +0 -92
- package/docs/dw_value/MimeEncodedText.md +0 -103
- package/docs/dw_value/Money.md +0 -610
- package/docs/dw_value/Quantity.md +0 -376
- package/docs/dw_web/CSRFProtection.md +0 -83
- package/docs/dw_web/ClickStream.md +0 -157
- package/docs/dw_web/ClickStreamEntry.md +0 -289
- package/docs/dw_web/Cookie.md +0 -396
- package/docs/dw_web/Cookies.md +0 -46
- package/docs/dw_web/Form.md +0 -74
- package/docs/dw_web/FormAction.md +0 -199
- package/docs/dw_web/FormElement.md +0 -220
- package/docs/dw_web/FormElementValidationResult.md +0 -157
- package/docs/dw_web/FormField.md +0 -603
- package/docs/dw_web/FormFieldOption.md +0 -238
- package/docs/dw_web/FormFieldOptions.md +0 -42
- package/docs/dw_web/FormGroup.md +0 -199
- package/docs/dw_web/FormList.md +0 -126
- package/docs/dw_web/FormListItem.md +0 -48
- package/docs/dw_web/Forms.md +0 -16
- package/docs/dw_web/HttpParameter.md +0 -513
- package/docs/dw_web/HttpParameterMap.md +0 -185
- package/docs/dw_web/LoopIterator.md +0 -261
- package/docs/dw_web/PageMetaData.md +0 -230
- package/docs/dw_web/PageMetaTag.md +0 -142
- package/docs/dw_web/PagingModel.md +0 -389
- package/docs/dw_web/Resource.md +0 -126
- package/docs/dw_web/URL.md +0 -213
- package/docs/dw_web/URLAction.md +0 -26
- package/docs/dw_web/URLParameter.md +0 -22
- package/docs/dw_web/URLRedirect.md +0 -71
- package/docs/dw_web/URLRedirectMgr.md +0 -73
- package/docs/dw_web/URLUtils.md +0 -1264
- package/docs/isml/isactivedatacontext.md +0 -382
- package/docs/isml/isactivedatahead.md +0 -566
- package/docs/isml/isanalyticsoff.md +0 -537
- package/docs/isml/isapplepay.md +0 -667
- package/docs/isml/isbreak.md +0 -687
- package/docs/isml/isbuynow.md +0 -682
- package/docs/isml/iscache.md +0 -802
- package/docs/isml/iscomment.md +0 -794
- package/docs/isml/iscomponent.md +0 -797
- package/docs/isml/iscontent.md +0 -594
- package/docs/isml/iscontinue.md +0 -563
- package/docs/isml/iscookie.md +0 -798
- package/docs/isml/isdecorate.md +0 -818
- package/docs/isml/isif.md +0 -737
- package/docs/isml/isinclude.md +0 -874
- package/docs/isml/isloop.md +0 -377
- package/docs/isml/ismodule.md +0 -844
- package/docs/isml/isnext.md +0 -672
- package/docs/isml/isobject.md +0 -760
- package/docs/isml/ispayment.md +0 -577
- package/docs/isml/ispaymentmessages.md +0 -664
- package/docs/isml/isprint.md +0 -875
- package/docs/isml/isredirect.md +0 -716
- package/docs/isml/isremove.md +0 -725
- package/docs/isml/isreplace.md +0 -783
- package/docs/isml/isscript.md +0 -859
- package/docs/isml/isselect.md +0 -908
- package/docs/isml/isset.md +0 -585
- package/docs/isml/isslot.md +0 -824
- package/docs/isml/isstatus.md +0 -711
- package/docs/sfra/account.md +0 -145
- package/docs/sfra/address.md +0 -84
- package/docs/sfra/billing.md +0 -90
- package/docs/sfra/cart.md +0 -134
- package/docs/sfra/categories.md +0 -124
- package/docs/sfra/content.md +0 -133
- package/docs/sfra/locale.md +0 -126
- package/docs/sfra/order.md +0 -219
- package/docs/sfra/payment.md +0 -131
- package/docs/sfra/price-default.md +0 -118
- package/docs/sfra/price-range.md +0 -77
- package/docs/sfra/price-tiered.md +0 -117
- package/docs/sfra/product-bundle.md +0 -164
- package/docs/sfra/product-full.md +0 -179
- package/docs/sfra/product-line-items.md +0 -147
- package/docs/sfra/product-search.md +0 -245
- package/docs/sfra/product-tile.md +0 -95
- package/docs/sfra/querystring.md +0 -240
- package/docs/sfra/render.md +0 -354
- package/docs/sfra/request.md +0 -210
- package/docs/sfra/response.md +0 -391
- package/docs/sfra/server.md +0 -375
- package/docs/sfra/shipping.md +0 -181
- package/docs/sfra/store.md +0 -145
- package/docs/sfra/stores.md +0 -190
- package/docs/sfra/totals.md +0 -184
- package/docs-site-v2/.vitepress/config.mts +0 -190
- package/docs-site-v2/.vitepress/theme/components/AssistantTabs.vue +0 -96
- package/docs-site-v2/.vitepress/theme/components/Callout.vue +0 -10
- package/docs-site-v2/.vitepress/theme/components/Collapsible.vue +0 -14
- package/docs-site-v2/.vitepress/theme/components/DwJsonBuilder.vue +0 -82
- package/docs-site-v2/.vitepress/theme/components/HomeSections.vue +0 -552
- package/docs-site-v2/.vitepress/theme/components/InstructionFilesTabs.vue +0 -87
- package/docs-site-v2/.vitepress/theme/components/ModeTabs.vue +0 -70
- package/docs-site-v2/.vitepress/theme/components/NewcomerCTA.vue +0 -14
- package/docs-site-v2/.vitepress/theme/components/QuickStartCards.vue +0 -20
- package/docs-site-v2/.vitepress/theme/components/QuickStartHero.vue +0 -20
- package/docs-site-v2/.vitepress/theme/components/SkillsList.vue +0 -48
- package/docs-site-v2/.vitepress/theme/components/ToolExplorer.vue +0 -85
- package/docs-site-v2/.vitepress/theme/custom.css +0 -1373
- package/docs-site-v2/.vitepress/theme/index.ts +0 -39
- package/docs-site-v2/data/skills.ts +0 -147
- package/docs-site-v2/data/tools.ts +0 -490
- package/docs-site-v2/development/index.md +0 -151
- package/docs-site-v2/examples/index.md +0 -333
- package/docs-site-v2/features/index.md +0 -144
- package/docs-site-v2/guide/ai-interfaces.md +0 -58
- package/docs-site-v2/guide/configuration.md +0 -208
- package/docs-site-v2/guide/index.md +0 -50
- package/docs-site-v2/index.md +0 -32
- package/docs-site-v2/package-lock.json +0 -2511
- package/docs-site-v2/package.json +0 -15
- package/docs-site-v2/public/404.html +0 -15
- 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/explain-product-pricing-methods-no-mcp.png +0 -0
- package/docs-site-v2/public/explain-product-pricing-methods.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 +0 -4174
- package/docs-site-v2/public/llms.txt +0 -44
- package/docs-site-v2/public/logo-dark.svg +0 -8
- package/docs-site-v2/public/logo.svg +0 -8
- package/docs-site-v2/public/robots.txt +0 -20
- package/docs-site-v2/public/site.webmanifest +0 -50
- package/docs-site-v2/public/sitemap.xml +0 -90
- package/docs-site-v2/script-debugger/index.md +0 -105
- package/docs-site-v2/scripts/generate-llms.js +0 -71
- package/docs-site-v2/scripts/generate-sitemap.js +0 -97
- package/docs-site-v2/security/index.md +0 -115
- package/docs-site-v2/skills/index.md +0 -40
- package/docs-site-v2/tools/index.md +0 -36
- package/docs-site-v2/troubleshooting/index.md +0 -204
- package/eslint.config.js +0 -139
- package/jest.config.js +0 -27
- package/memories/repo/docs-site-v2-build.json +0 -11
- package/scripts/convert-docs.js +0 -633
- package/scripts/validate-server-json.js +0 -68
- package/server.json +0 -20
- package/src/clients/agent-instructions-client.ts +0 -370
- package/src/clients/base/abstract-documentation-client.ts +0 -405
- package/src/clients/base/http-client.ts +0 -152
- package/src/clients/base/oauth-token.ts +0 -164
- package/src/clients/base/ocapi-auth-client.ts +0 -133
- package/src/clients/cartridge/cartridge-generation-client.ts +0 -302
- package/src/clients/cartridge/cartridge-structure.ts +0 -37
- package/src/clients/cartridge/cartridge-templates.ts +0 -246
- package/src/clients/cartridge/index.ts +0 -6
- package/src/clients/docs/class-content-parser.ts +0 -308
- package/src/clients/docs/class-name-resolver.ts +0 -99
- package/src/clients/docs/documentation-scanner.ts +0 -255
- package/src/clients/docs/index.ts +0 -16
- package/src/clients/docs/referenced-types-extractor.ts +0 -92
- package/src/clients/docs-client.ts +0 -393
- package/src/clients/isml-client.ts +0 -353
- package/src/clients/log-client.ts +0 -19
- package/src/clients/ocapi/code-versions-client.ts +0 -54
- package/src/clients/ocapi/site-preferences-client.ts +0 -106
- package/src/clients/ocapi/system-objects-client.ts +0 -148
- package/src/clients/ocapi-client.ts +0 -53
- package/src/clients/script-debugger/index.ts +0 -5
- package/src/clients/script-debugger/script-debugger-client.ts +0 -754
- package/src/clients/sfra-client.ts +0 -339
- package/src/config/configuration-factory.ts +0 -201
- package/src/config/dw-json-loader.ts +0 -248
- package/src/config/workspace-roots.ts +0 -540
- package/src/constants/index.ts +0 -1
- package/src/core/handlers/abstract-client-handler.ts +0 -85
- package/src/core/handlers/agent-instructions-handler.ts +0 -48
- package/src/core/handlers/base-handler.ts +0 -172
- package/src/core/handlers/cartridge-handler.ts +0 -38
- package/src/core/handlers/client-factory.ts +0 -140
- package/src/core/handlers/code-version-handler.ts +0 -43
- package/src/core/handlers/docs-handler.ts +0 -19
- package/src/core/handlers/isml-handler.ts +0 -19
- package/src/core/handlers/job-log-handler.ts +0 -39
- package/src/core/handlers/log-handler.ts +0 -39
- package/src/core/handlers/script-debugger-handler.ts +0 -46
- package/src/core/handlers/sfra-handler.ts +0 -23
- package/src/core/handlers/simple-client-handler.ts +0 -78
- package/src/core/handlers/system-object-handler.ts +0 -43
- package/src/core/handlers/validation-helpers.ts +0 -206
- package/src/core/instruction-advisor.ts +0 -122
- package/src/core/server.ts +0 -374
- package/src/core/tool-definitions.ts +0 -30
- package/src/core/tool-schemas/agent-instruction-tools.ts +0 -72
- package/src/core/tool-schemas/cartridge-tools.ts +0 -29
- package/src/core/tool-schemas/code-version-tools.ts +0 -28
- package/src/core/tool-schemas/documentation-tools.ts +0 -104
- package/src/core/tool-schemas/index.ts +0 -27
- package/src/core/tool-schemas/isml-tools.ts +0 -89
- package/src/core/tool-schemas/log-tools.ts +0 -196
- package/src/core/tool-schemas/script-debugger-tools.ts +0 -83
- package/src/core/tool-schemas/sfra-tools.ts +0 -65
- package/src/core/tool-schemas/shared-schemas.ts +0 -158
- package/src/core/tool-schemas/system-object-tools.ts +0 -127
- package/src/index.ts +0 -20
- package/src/main.ts +0 -161
- package/src/services/file-system-service.ts +0 -117
- package/src/services/index.ts +0 -11
- package/src/services/path-service.ts +0 -124
- package/src/tool-configs/agent-instructions-tool-config.ts +0 -83
- package/src/tool-configs/cartridge-tool-config.ts +0 -41
- package/src/tool-configs/code-version-tool-config.ts +0 -37
- package/src/tool-configs/docs-tool-config.ts +0 -103
- package/src/tool-configs/isml-tool-config.ts +0 -87
- package/src/tool-configs/job-log-tool-config.ts +0 -119
- package/src/tool-configs/log-tool-config.ts +0 -110
- package/src/tool-configs/script-debugger-tool-config.ts +0 -69
- package/src/tool-configs/sfra-tool-config.ts +0 -74
- package/src/tool-configs/system-object-tool-config.ts +0 -142
- package/src/types/types.ts +0 -125
- package/src/utils/cache.ts +0 -291
- package/src/utils/category-utils.ts +0 -70
- package/src/utils/log-tool-constants.ts +0 -95
- package/src/utils/logger.ts +0 -260
- package/src/utils/markdown-utils.ts +0 -280
- package/src/utils/ocapi-url-builder.ts +0 -48
- package/src/utils/path-resolver.ts +0 -69
- package/src/utils/path-validation.ts +0 -113
- package/src/utils/query-builder.ts +0 -84
- package/src/utils/utils.ts +0 -139
- package/src/utils/validator.ts +0 -162
- package/tests/__mocks__/docs-client.ts +0 -8
- package/tests/__mocks__/src/clients/base/http-client.js +0 -43
- package/tests/__mocks__/webdav.js +0 -14
- package/tests/base-handler.test.ts +0 -527
- package/tests/base-http-client.test.ts +0 -311
- package/tests/cache.test.ts +0 -453
- package/tests/cartridge-handler.test.ts +0 -290
- package/tests/class-content-parser.test.ts +0 -629
- package/tests/class-name-resolver.test.ts +0 -365
- package/tests/client-factory.test.ts +0 -280
- package/tests/code-version-handler.test.ts +0 -291
- package/tests/code-versions-client.test.ts +0 -156
- package/tests/config.test.ts +0 -285
- package/tests/configuration-factory.test.ts +0 -233
- package/tests/docs-handler.test.ts +0 -359
- package/tests/documentation-scanner.test.ts +0 -755
- package/tests/file-system-service.test.ts +0 -111
- package/tests/isml-client.test.ts +0 -463
- package/tests/isml-handler.test.ts +0 -375
- package/tests/job-log-handler.test.ts +0 -283
- package/tests/log-client.test.ts +0 -768
- package/tests/log-handler.test.ts +0 -365
- package/tests/log-processor.test.ts +0 -243
- package/tests/log-validation.test.ts +0 -149
- package/tests/logger.test.ts +0 -303
- package/tests/mcp/AGENTS.md +0 -162
- package/tests/mcp/README.md +0 -237
- package/tests/mcp/node/activate-code-version-advanced.full-mode.programmatic.test.js +0 -669
- package/tests/mcp/node/code-versions.full-mode.programmatic.test.js +0 -605
- package/tests/mcp/node/evaluate-script.full-mode.programmatic.test.js +0 -387
- package/tests/mcp/node/generate-cartridge-structure.docs-only.programmatic.test.js +0 -644
- package/tests/mcp/node/get-available-sfra-documents.programmatic.test.js +0 -274
- package/tests/mcp/node/get-isml-categories.programmatic.test.js +0 -278
- package/tests/mcp/node/get-isml-element.programmatic.test.js +0 -278
- package/tests/mcp/node/get-isml-elements-by-category.programmatic.test.js +0 -363
- package/tests/mcp/node/get-job-execution-summary.full-mode.programmatic.test.js +0 -432
- package/tests/mcp/node/get-job-log-entries.full-mode.programmatic.test.js +0 -488
- package/tests/mcp/node/get-latest-debug.full-mode.programmatic.test.js +0 -338
- package/tests/mcp/node/get-latest-error.full-mode.programmatic.test.js +0 -255
- package/tests/mcp/node/get-latest-info.full-mode.programmatic.test.js +0 -347
- package/tests/mcp/node/get-latest-job-log-files.full-mode.programmatic.test.js +0 -460
- package/tests/mcp/node/get-latest-warn.full-mode.programmatic.test.js +0 -454
- package/tests/mcp/node/get-log-file-contents.full-mode.programmatic.test.js +0 -381
- package/tests/mcp/node/get-sfcc-class-documentation.docs-only.programmatic.test.js +0 -371
- package/tests/mcp/node/get-sfcc-class-info.docs-only.programmatic.test.js +0 -1032
- package/tests/mcp/node/get-sfra-categories.docs-only.programmatic.test.js +0 -369
- package/tests/mcp/node/get-sfra-document.programmatic.test.js +0 -473
- package/tests/mcp/node/get-sfra-documents-by-category.docs-only.programmatic.test.js +0 -510
- package/tests/mcp/node/get-system-object-definition.full-mode.programmatic.test.js +0 -389
- package/tests/mcp/node/get-system-object-definitions.docs-only.programmatic.test.js +0 -300
- package/tests/mcp/node/get-system-object-definitions.full-mode.programmatic.test.js +0 -387
- package/tests/mcp/node/list-isml-elements.programmatic.test.js +0 -311
- package/tests/mcp/node/list-log-files.full-mode.programmatic.test.js +0 -150
- package/tests/mcp/node/list-sfcc-classes.docs-only.programmatic.test.js +0 -612
- package/tests/mcp/node/search-custom-object-attribute-definitions.full-mode.programmatic.test.js +0 -875
- package/tests/mcp/node/search-isml-elements.programmatic.test.js +0 -325
- package/tests/mcp/node/search-job-logs-by-name.full-mode.programmatic.test.js +0 -330
- package/tests/mcp/node/search-job-logs.full-mode.programmatic.test.js +0 -526
- package/tests/mcp/node/search-logs.full-mode.programmatic.test.js +0 -478
- package/tests/mcp/node/search-sfcc-classes.docs-only.programmatic.test.js +0 -334
- package/tests/mcp/node/search-sfcc-methods.docs-only.programmatic.test.js +0 -487
- package/tests/mcp/node/search-sfra-documentation.docs-only.programmatic.test.js +0 -563
- package/tests/mcp/node/search-site-preferences.full-mode.programmatic.test.js +0 -556
- package/tests/mcp/node/search-system-object-attribute-definitions.full-mode.programmatic.test.js +0 -744
- package/tests/mcp/node/search-system-object-attribute-groups.full-mode.programmatic.test.js +0 -657
- package/tests/mcp/node/summarize-logs.full-mode.programmatic.test.js +0 -357
- package/tests/mcp/node/tools.docs-only.programmatic.test.js +0 -515
- package/tests/mcp/node/tools.full-mode.programmatic.test.js +0 -154
- package/tests/mcp/test-fixtures/dw.json +0 -10
- package/tests/mcp/yaml/activate-code-version.docs-only.test.mcp.yml +0 -318
- package/tests/mcp/yaml/activate-code-version.full-mode.test.mcp.yml +0 -507
- package/tests/mcp/yaml/evaluate-script.full-mode.test.mcp.yml +0 -281
- package/tests/mcp/yaml/get-available-sfra-documents.docs-only.test.mcp.yml +0 -684
- package/tests/mcp/yaml/get-available-sfra-documents.full-mode.test.mcp.yml +0 -684
- package/tests/mcp/yaml/get-code-versions.docs-only.test.mcp.yml +0 -196
- package/tests/mcp/yaml/get-code-versions.full-mode.test.mcp.yml +0 -273
- package/tests/mcp/yaml/get-isml-categories.docs-only.test.mcp.yml +0 -330
- package/tests/mcp/yaml/get-isml-element.docs-only.test.mcp.yml +0 -294
- package/tests/mcp/yaml/get-isml-elements-by-category.docs-only.test.mcp.yml +0 -334
- package/tests/mcp/yaml/get-job-execution-summary.full-mode.test.mcp.yml +0 -148
- package/tests/mcp/yaml/get-job-log-entries.full-mode.test.mcp.yml +0 -284
- package/tests/mcp/yaml/get-latest-debug.full-mode.test.mcp.yml +0 -191
- package/tests/mcp/yaml/get-latest-error.full-mode.test.mcp.yml +0 -195
- package/tests/mcp/yaml/get-latest-info.full-mode.test.mcp.yml +0 -242
- package/tests/mcp/yaml/get-latest-job-log-files.full-mode.test.mcp.yml +0 -189
- package/tests/mcp/yaml/get-latest-warn.full-mode.test.mcp.yml +0 -182
- package/tests/mcp/yaml/get-log-file-contents.full-mode.test.mcp.yml +0 -256
- package/tests/mcp/yaml/get-sfcc-class-documentation.docs-only.test.mcp.yml +0 -2416
- package/tests/mcp/yaml/get-sfcc-class-documentation.full-mode.test.mcp.yml +0 -2416
- package/tests/mcp/yaml/get-sfcc-class-info.docs-only.test.mcp.yml +0 -1225
- package/tests/mcp/yaml/get-sfcc-class-info.full-mode.test.mcp.yml +0 -1225
- package/tests/mcp/yaml/get-sfra-categories.docs-only.test.mcp.yml +0 -452
- package/tests/mcp/yaml/get-sfra-categories.full-mode.test.mcp.yml +0 -452
- package/tests/mcp/yaml/get-sfra-document.docs-only.test.mcp.yml +0 -525
- package/tests/mcp/yaml/get-sfra-document.full-mode.test.mcp.yml +0 -525
- package/tests/mcp/yaml/get-sfra-documents-by-category.docs-only.test.mcp.yml +0 -507
- package/tests/mcp/yaml/get-sfra-documents-by-category.full-mode.test.mcp.yml +0 -507
- package/tests/mcp/yaml/get-system-object-definition.docs-only.test.mcp.yml +0 -208
- package/tests/mcp/yaml/get-system-object-definition.full-mode.test.mcp.yml +0 -191
- package/tests/mcp/yaml/get-system-object-definitions.docs-only.test.mcp.yml +0 -257
- package/tests/mcp/yaml/get-system-object-definitions.full-mode.test.mcp.yml +0 -517
- package/tests/mcp/yaml/get_latest_error.test.mcp.yml +0 -472
- package/tests/mcp/yaml/list-isml-elements.docs-only.test.mcp.yml +0 -212
- package/tests/mcp/yaml/list-log-files.full-mode.test.mcp.yml +0 -89
- package/tests/mcp/yaml/list-sfcc-classes.docs-only.test.mcp.yml +0 -511
- package/tests/mcp/yaml/list-sfcc-classes.full-mode.test.mcp.yml +0 -511
- package/tests/mcp/yaml/search-custom-object-attribute-definitions.docs-only.test.mcp.yml +0 -82
- package/tests/mcp/yaml/search-custom-object-attribute-definitions.test.mcp.yml +0 -387
- package/tests/mcp/yaml/search-isml-elements.docs-only.test.mcp.yml +0 -312
- package/tests/mcp/yaml/search-job-logs-by-name.full-mode.test.mcp.yml +0 -169
- package/tests/mcp/yaml/search-job-logs.full-mode.test.mcp.yml +0 -174
- package/tests/mcp/yaml/search-logs.full-mode.test.mcp.yml +0 -207
- package/tests/mcp/yaml/search-sfcc-classes.docs-only.test.mcp.yml +0 -1157
- package/tests/mcp/yaml/search-sfcc-classes.full-mode.test.mcp.yml +0 -1157
- package/tests/mcp/yaml/search-sfcc-methods.docs-only.test.mcp.yml +0 -723
- package/tests/mcp/yaml/search-sfcc-methods.full-mode.test.mcp.yml +0 -723
- package/tests/mcp/yaml/search-sfra-documentation.docs-only.test.mcp.yml +0 -427
- package/tests/mcp/yaml/search-sfra-documentation.full-mode.test.mcp.yml +0 -427
- package/tests/mcp/yaml/search-site-preferences.docs-only.test.mcp.yml +0 -295
- package/tests/mcp/yaml/search-site-preferences.full-mode.test.mcp.yml +0 -574
- package/tests/mcp/yaml/search-system-object-attribute-definitions.docs-only.test.mcp.yml +0 -168
- package/tests/mcp/yaml/search-system-object-attribute-definitions.full-mode.test.mcp.yml +0 -500
- package/tests/mcp/yaml/search-system-object-attribute-groups.docs-only.test.mcp.yml +0 -278
- package/tests/mcp/yaml/search-system-object-attribute-groups.full-mode.test.mcp.yml +0 -612
- package/tests/mcp/yaml/summarize-logs.full-mode.test.mcp.yml +0 -173
- package/tests/mcp/yaml/tools.docs-only.test.mcp.yml +0 -535
- package/tests/mcp/yaml/tools.full-mode.test.mcp.yml +0 -378
- package/tests/oauth-token.test.ts +0 -725
- package/tests/ocapi-auth-client.test.ts +0 -276
- package/tests/ocapi-client.test.ts +0 -242
- package/tests/path-service.test.ts +0 -96
- package/tests/query-builder.test.ts +0 -281
- package/tests/referenced-types-extractor.test.ts +0 -814
- package/tests/script-debugger-client.test.ts +0 -430
- package/tests/servers/sfcc-mock-server/README.md +0 -208
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/code-versions.json +0 -247
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/custom-object-attributes-customapi.json +0 -128
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/custom-object-attributes-globalsettings.json +0 -92
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/custom-object-attributes-versionhistory.json +0 -256
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-ccv.json +0 -275
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-fastforward.json +0 -123
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-sfra.json +0 -224
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-storefront.json +0 -447
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-system.json +0 -171
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-campaign.json +0 -13
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-category.json +0 -50
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-order.json +0 -32
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-product.json +0 -224
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-sitepreferences.json +0 -62
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attributes-customeraddress.json +0 -109
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attributes-product-expanded.json +0 -183
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attributes-product.json +0 -139
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-category.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-customer.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-customeraddress.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-order.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-product.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definitions-old.json +0 -354
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definitions.json +0 -172
- package/tests/servers/sfcc-mock-server/package-lock.json +0 -879
- package/tests/servers/sfcc-mock-server/package.json +0 -39
- package/tests/servers/sfcc-mock-server/scripts/setup-logs.js +0 -224
- package/tests/servers/sfcc-mock-server/server.js +0 -280
- package/tests/servers/sfcc-mock-server/src/app.js +0 -182
- package/tests/servers/sfcc-mock-server/src/config/server-config.js +0 -124
- package/tests/servers/sfcc-mock-server/src/middleware/auth.js +0 -101
- package/tests/servers/sfcc-mock-server/src/middleware/cors.js +0 -39
- package/tests/servers/sfcc-mock-server/src/middleware/logging.js +0 -124
- package/tests/servers/sfcc-mock-server/src/routes/cartridge-webdav.js +0 -258
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/code-versions-handler.js +0 -184
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/debugger-handler.js +0 -396
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/oauth-handler.js +0 -36
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/ocapi-error-utils.js +0 -221
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/ocapi-utils.js +0 -440
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/site-preferences-handler.js +0 -332
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/system-objects-handler.js +0 -572
- package/tests/servers/sfcc-mock-server/src/routes/ocapi.js +0 -58
- package/tests/servers/sfcc-mock-server/src/routes/storefront.js +0 -86
- package/tests/servers/sfcc-mock-server/src/routes/webdav.js +0 -240
- package/tests/servers/sfcc-mock-server/src/utils/mock-data-loader.js +0 -84
- package/tests/servers/sfcc-mock-server/src/utils/webdav-xml.js +0 -121
- package/tests/servers/sfcc-mock-server-manager.ts +0 -280
- package/tests/sfcc-mock-server.test.ts +0 -423
- package/tests/site-preferences-client.test.ts +0 -358
- package/tests/system-objects-client.test.ts +0 -310
- package/tests/utils.test.ts +0 -477
- package/tests/validation-helpers.test.ts +0 -325
- package/tests/validator.test.ts +0 -416
- package/tests/workspace-roots.test.ts +0 -227
- package/tsconfig.json +0 -20
- package/tsconfig.test.json +0 -20
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Programmatic tests for the MCP tool: get_isml_element
|
|
3
|
-
* Mirrors YAML tests but adds deeper JSON parsing & resilience checks.
|
|
4
|
-
*
|
|
5
|
-
* Validates:
|
|
6
|
-
* 1. Tool is registered
|
|
7
|
-
* 2. Successful retrieval of valid elements (isif, isloop, isprint)
|
|
8
|
-
* 3. Element normalization (with/without 'is' prefix)
|
|
9
|
-
* 4. JSON structure validation (name, title, description, sections, content, category, attributes, filename)
|
|
10
|
-
* 5. Include options (sections, attributes, content)
|
|
11
|
-
* 6. Error handling for non-existent elements
|
|
12
|
-
* 7. Error handling for missing parameters
|
|
13
|
-
* 8. Content quality and completeness
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
import { test, describe, before, after, beforeEach } from 'node:test';
|
|
17
|
-
import { strict as assert } from 'node:assert';
|
|
18
|
-
import { connect } from 'mcp-aegis';
|
|
19
|
-
|
|
20
|
-
describe('get_isml_element (programmatic)', () => {
|
|
21
|
-
let client;
|
|
22
|
-
const CONFIG = './aegis.config.docs-only.json';
|
|
23
|
-
|
|
24
|
-
before(async () => {
|
|
25
|
-
client = await connect(CONFIG);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
after(async () => {
|
|
29
|
-
if (client?.connected) {
|
|
30
|
-
await client.disconnect();
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
beforeEach(() => {
|
|
35
|
-
client.clearAllBuffers();
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
const TOOL_NAME = 'get_isml_element';
|
|
39
|
-
const REQUIRED_KEYS = ['name', 'title', 'description', 'sections', 'content', 'category', 'attributes', 'filename'];
|
|
40
|
-
|
|
41
|
-
test('tool should be registered', async () => {
|
|
42
|
-
const tools = await client.listTools();
|
|
43
|
-
const names = tools.map(t => t.name);
|
|
44
|
-
assert.ok(names.includes(TOOL_NAME), 'Tool not found in listTools');
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
async function invoke(elementName, options = {}) {
|
|
48
|
-
const result = await client.callTool(TOOL_NAME, { elementName, ...options });
|
|
49
|
-
return { result, raw: result.content[0]?.text };
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function safeParseElement(raw) {
|
|
53
|
-
let element;
|
|
54
|
-
try {
|
|
55
|
-
element = JSON.parse(raw);
|
|
56
|
-
} catch (err) {
|
|
57
|
-
assert.fail(`Failed to parse response as JSON: ${err.message}\nRaw: ${raw.substring(0, 500)}`);
|
|
58
|
-
}
|
|
59
|
-
assert.ok(typeof element === 'object' && element !== null, 'Parsed element should be object');
|
|
60
|
-
return element;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
test('retrieve isif element with full details', async () => {
|
|
64
|
-
const { result, raw } = await invoke('isif');
|
|
65
|
-
assert.equal(result.isError, false, 'Should not be error');
|
|
66
|
-
|
|
67
|
-
const element = safeParseElement(raw);
|
|
68
|
-
assert.equal(element.name, 'isif', 'Element name should be isif');
|
|
69
|
-
assert.ok(element.title.includes('isif'), 'Title should mention isif');
|
|
70
|
-
assert.ok(element.description.length > 50, 'Description should be substantial');
|
|
71
|
-
assert.equal(element.category, 'control-flow', 'Should be control-flow category');
|
|
72
|
-
assert.match(element.filename, /isif\.md$/, 'Filename should be isif.md');
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
test('retrieve isloop element details', async () => {
|
|
76
|
-
const { result, raw } = await invoke('isloop');
|
|
77
|
-
assert.equal(result.isError, false, 'Should not be error');
|
|
78
|
-
|
|
79
|
-
const element = safeParseElement(raw);
|
|
80
|
-
assert.equal(element.name, 'isloop', 'Element name should be isloop');
|
|
81
|
-
assert.ok(element.title.includes('isloop'), 'Title should mention isloop');
|
|
82
|
-
assert.equal(element.category, 'control-flow', 'Should be control-flow category');
|
|
83
|
-
});
|
|
84
|
-
|
|
85
|
-
test('retrieve isprint element details', async () => {
|
|
86
|
-
const { result, raw } = await invoke('isprint');
|
|
87
|
-
assert.equal(result.isError, false, 'Should not be error');
|
|
88
|
-
|
|
89
|
-
const element = safeParseElement(raw);
|
|
90
|
-
assert.equal(element.name, 'isprint', 'Element name should be isprint');
|
|
91
|
-
assert.ok(element.title.includes('isprint'), 'Title should mention isprint');
|
|
92
|
-
assert.equal(element.category, 'output', 'Should be output category');
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
test('normalize element name without is prefix', async () => {
|
|
96
|
-
const { result, raw } = await invoke('print');
|
|
97
|
-
assert.equal(result.isError, false, 'Should not be error');
|
|
98
|
-
|
|
99
|
-
const element = safeParseElement(raw);
|
|
100
|
-
assert.equal(element.name, 'isprint', 'Should normalize to isprint');
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
test('all required keys present in response', async () => {
|
|
104
|
-
const { raw } = await invoke('isif');
|
|
105
|
-
const element = safeParseElement(raw);
|
|
106
|
-
|
|
107
|
-
for (const key of REQUIRED_KEYS) {
|
|
108
|
-
assert.ok(Object.prototype.hasOwnProperty.call(element, key), `Element should have ${key}`);
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
test('sections array is populated and reasonable', async () => {
|
|
113
|
-
const { raw } = await invoke('isif');
|
|
114
|
-
const element = safeParseElement(raw);
|
|
115
|
-
|
|
116
|
-
assert.ok(Array.isArray(element.sections), 'Sections should be array');
|
|
117
|
-
assert.ok(element.sections.length >= 5, 'Should have at least 5 sections');
|
|
118
|
-
assert.ok(element.sections.every(s => typeof s === 'string'), 'All sections should be strings');
|
|
119
|
-
assert.ok(element.sections.every(s => s.length > 0), 'All sections should be non-empty');
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
test('attributes array is present', async () => {
|
|
123
|
-
const { raw } = await invoke('isloop');
|
|
124
|
-
const element = safeParseElement(raw);
|
|
125
|
-
|
|
126
|
-
assert.ok(Array.isArray(element.attributes), 'Attributes should be array');
|
|
127
|
-
// Some elements may have empty attributes array, that's ok
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
test('content is substantial markdown text', async () => {
|
|
131
|
-
const { raw } = await invoke('isif');
|
|
132
|
-
const element = safeParseElement(raw);
|
|
133
|
-
|
|
134
|
-
assert.ok(typeof element.content === 'string', 'Content should be string');
|
|
135
|
-
assert.ok(element.content.length > 1000, 'Content should be substantial (>1000 chars)');
|
|
136
|
-
assert.ok(element.content.includes('#'), 'Content should include markdown headers');
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
test('error for non-existent element', async () => {
|
|
140
|
-
const { result } = await invoke('nonexistent');
|
|
141
|
-
assert.equal(result.isError, true, 'Should be error');
|
|
142
|
-
assert.ok(result.content[0].text.includes('not found'), 'Error should mention not found');
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
test('error for missing elementName parameter', async () => {
|
|
146
|
-
const result = await client.callTool(TOOL_NAME, {});
|
|
147
|
-
assert.equal(result.isError, true, 'Should be error for missing parameter');
|
|
148
|
-
assert.match(result.content[0].text, /elementName/i, 'Error should mention elementName');
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
test('include sections option', async () => {
|
|
152
|
-
const { raw } = await invoke('isif', { includeSections: true });
|
|
153
|
-
const element = safeParseElement(raw);
|
|
154
|
-
|
|
155
|
-
assert.ok(Array.isArray(element.sections), 'Sections should be included');
|
|
156
|
-
assert.ok(element.sections.length > 0, 'Sections should not be empty');
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
test('include attributes option', async () => {
|
|
160
|
-
const { raw } = await invoke('isloop', { includeAttributes: true });
|
|
161
|
-
const element = safeParseElement(raw);
|
|
162
|
-
|
|
163
|
-
assert.ok(Array.isArray(element.attributes), 'Attributes should be included');
|
|
164
|
-
});
|
|
165
|
-
|
|
166
|
-
test('include content option', async () => {
|
|
167
|
-
const { raw } = await invoke('isif', { includeContent: true });
|
|
168
|
-
const element = safeParseElement(raw);
|
|
169
|
-
|
|
170
|
-
assert.ok(element.content, 'Content should be included');
|
|
171
|
-
assert.ok(element.content.length > 0, 'Content should not be empty');
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
test('filename pattern validation', async () => {
|
|
175
|
-
const { raw } = await invoke('isif');
|
|
176
|
-
const element = safeParseElement(raw);
|
|
177
|
-
|
|
178
|
-
assert.match(element.filename, /^[a-z0-9-]+\.md$/, 'Filename should be kebab-case .md');
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
test('lastModified timestamp present and valid', async () => {
|
|
182
|
-
const { raw } = await invoke('isif');
|
|
183
|
-
const element = safeParseElement(raw);
|
|
184
|
-
|
|
185
|
-
assert.ok(element.lastModified, 'lastModified should be present');
|
|
186
|
-
const timestamp = new Date(element.lastModified);
|
|
187
|
-
assert.ok(!isNaN(timestamp.getTime()), 'lastModified should be valid date');
|
|
188
|
-
});
|
|
189
|
-
|
|
190
|
-
test('round-trip JSON parse reproducibility', async () => {
|
|
191
|
-
const { raw } = await invoke('isif');
|
|
192
|
-
const element = safeParseElement(raw);
|
|
193
|
-
const roundTrip = JSON.parse(JSON.stringify(element));
|
|
194
|
-
assert.deepEqual(roundTrip, element, 'Round trip serialization must preserve element');
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
test('retrieve multiple different elements successfully', async () => {
|
|
198
|
-
const elements = ['isif', 'isloop', 'isprint', 'isscript', 'isset'];
|
|
199
|
-
|
|
200
|
-
for (const elemName of elements) {
|
|
201
|
-
const { result, raw } = await invoke(elemName);
|
|
202
|
-
assert.equal(result.isError, false, `Should retrieve ${elemName} successfully`);
|
|
203
|
-
const element = safeParseElement(raw);
|
|
204
|
-
assert.equal(element.name, elemName, `Element name should match ${elemName}`);
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
test('description quality (min 50 chars)', async () => {
|
|
209
|
-
const { raw } = await invoke('isif');
|
|
210
|
-
const element = safeParseElement(raw);
|
|
211
|
-
|
|
212
|
-
assert.ok(element.description.length >= 50, `Description should be at least 50 chars, got ${element.description.length}`);
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
test('title quality (reasonable length)', async () => {
|
|
216
|
-
const { raw } = await invoke('isif');
|
|
217
|
-
const element = safeParseElement(raw);
|
|
218
|
-
|
|
219
|
-
assert.ok(element.title.length >= 10, 'Title should be at least 10 chars');
|
|
220
|
-
assert.ok(element.title.length <= 100, 'Title should be at most 100 chars');
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
test('negative path: invalid method should return JSON-RPC error', async () => {
|
|
224
|
-
const response = await client.sendMessage({
|
|
225
|
-
jsonrpc: '2.0',
|
|
226
|
-
id: 'bad-method-1',
|
|
227
|
-
method: 'tools/call_WRONG',
|
|
228
|
-
params: { name: TOOL_NAME, arguments: { elementName: 'isif' } }
|
|
229
|
-
});
|
|
230
|
-
assert.ok(response.error, 'Expected JSON-RPC error object');
|
|
231
|
-
assert.match(response.error.message || '', /method/i, 'Error message should mention method');
|
|
232
|
-
});
|
|
233
|
-
|
|
234
|
-
test('performance: response time under 1000ms', async () => {
|
|
235
|
-
const start = Date.now();
|
|
236
|
-
await invoke('isif');
|
|
237
|
-
const duration = Date.now() - start;
|
|
238
|
-
assert.ok(duration < 1000, `Response should be under 1000ms, got ${duration}ms`);
|
|
239
|
-
});
|
|
240
|
-
|
|
241
|
-
test('case insensitive element name lookup', async () => {
|
|
242
|
-
const { result, raw } = await invoke('ISIF');
|
|
243
|
-
assert.equal(result.isError, false, 'Should handle uppercase');
|
|
244
|
-
const element = safeParseElement(raw);
|
|
245
|
-
assert.equal(element.name, 'isif', 'Should normalize to lowercase');
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
test('mixed case element name lookup', async () => {
|
|
249
|
-
const { result, raw } = await invoke('IsIf');
|
|
250
|
-
assert.equal(result.isError, false, 'Should handle mixed case');
|
|
251
|
-
const element = safeParseElement(raw);
|
|
252
|
-
assert.equal(element.name, 'isif', 'Should normalize to lowercase');
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
test('extraneous parameters are ignored', async () => {
|
|
256
|
-
const { result, raw } = await invoke('isif', { unused: 'value', extra: 123 });
|
|
257
|
-
assert.equal(result.isError, false, 'Should ignore extraneous params');
|
|
258
|
-
const element = safeParseElement(raw);
|
|
259
|
-
assert.equal(element.name, 'isif', 'Should still retrieve element');
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
test('content contains expected markdown structure', async () => {
|
|
263
|
-
const { raw } = await invoke('isif');
|
|
264
|
-
const element = safeParseElement(raw);
|
|
265
|
-
|
|
266
|
-
// Should contain typical markdown elements
|
|
267
|
-
assert.ok(element.content.includes('##'), 'Should have H2 headers');
|
|
268
|
-
assert.ok(element.content.includes('```'), 'Should have code blocks');
|
|
269
|
-
});
|
|
270
|
-
|
|
271
|
-
test('requiredAttributes and optionalAttributes arrays present', async () => {
|
|
272
|
-
const { raw } = await invoke('isif');
|
|
273
|
-
const element = safeParseElement(raw);
|
|
274
|
-
|
|
275
|
-
assert.ok(Array.isArray(element.requiredAttributes), 'requiredAttributes should be array');
|
|
276
|
-
assert.ok(Array.isArray(element.optionalAttributes), 'optionalAttributes should be array');
|
|
277
|
-
});
|
|
278
|
-
});
|
|
@@ -1,363 +0,0 @@
|
|
|
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
|
-
});
|