#
tokens: 49634/50000 114/825 files (page 2/43)
lines: off (toggle) GitHub
raw markdown copy
This is page 2 of 43. Use http://codebase.md/taurgis/sfcc-dev-mcp?lines=false&page={x} to view the full context.

# Directory Structure

```
├── .DS_Store
├── .github
│   ├── dependabot.yml
│   ├── instructions
│   │   ├── mcp-node-tests.instructions.md
│   │   └── mcp-yml-tests.instructions.md
│   ├── ISSUE_TEMPLATE
│   │   ├── bug_report.yml
│   │   ├── config.yml
│   │   ├── documentation.yml
│   │   ├── feature_request.yml
│   │   └── question.yml
│   ├── PULL_REQUEST_TEMPLATE
│   │   ├── bug_fix.md
│   │   ├── documentation.md
│   │   └── new_tool.md
│   ├── pull_request_template.md
│   └── workflows
│       ├── ci.yml
│       ├── deploy-pages.yml
│       ├── publish.yml
│       └── update-docs.yml
├── .gitignore
├── .husky
│   └── pre-commit
├── aegis.config.docs-only.json
├── aegis.config.json
├── aegis.config.with-dw.json
├── AGENTS.md
├── ai-instructions
│   ├── claude-desktop
│   │   └── claude_custom_instructions.md
│   ├── cursor
│   │   └── .cursor
│   │       └── rules
│   │           ├── debugging-workflows.mdc
│   │           ├── hooks-development.mdc
│   │           ├── isml-templates.mdc
│   │           ├── job-framework.mdc
│   │           ├── performance-optimization.mdc
│   │           ├── scapi-endpoints.mdc
│   │           ├── security-patterns.mdc
│   │           ├── sfcc-development.mdc
│   │           ├── sfra-controllers.mdc
│   │           ├── sfra-models.mdc
│   │           ├── system-objects.mdc
│   │           └── testing-patterns.mdc
│   └── github-copilot
│       └── copilot-instructions.md
├── CHANGELOG.md
├── CONTRIBUTING.md
├── docs
│   ├── best-practices
│   │   ├── cartridge_creation.md
│   │   ├── isml_templates.md
│   │   ├── job_framework.md
│   │   ├── localserviceregistry.md
│   │   ├── ocapi_hooks.md
│   │   ├── performance.md
│   │   ├── scapi_custom_endpoint.md
│   │   ├── scapi_hooks.md
│   │   ├── security.md
│   │   ├── sfra_client_side_js.md
│   │   ├── sfra_controllers.md
│   │   ├── sfra_models.md
│   │   └── sfra_scss.md
│   ├── dw_campaign
│   │   ├── ABTest.md
│   │   ├── ABTestMgr.md
│   │   ├── ABTestSegment.md
│   │   ├── AmountDiscount.md
│   │   ├── ApproachingDiscount.md
│   │   ├── BonusChoiceDiscount.md
│   │   ├── BonusDiscount.md
│   │   ├── Campaign.md
│   │   ├── CampaignMgr.md
│   │   ├── CampaignStatusCodes.md
│   │   ├── Coupon.md
│   │   ├── CouponMgr.md
│   │   ├── CouponRedemption.md
│   │   ├── CouponStatusCodes.md
│   │   ├── Discount.md
│   │   ├── DiscountPlan.md
│   │   ├── FixedPriceDiscount.md
│   │   ├── FixedPriceShippingDiscount.md
│   │   ├── FreeDiscount.md
│   │   ├── FreeShippingDiscount.md
│   │   ├── PercentageDiscount.md
│   │   ├── PercentageOptionDiscount.md
│   │   ├── PriceBookPriceDiscount.md
│   │   ├── Promotion.md
│   │   ├── PromotionMgr.md
│   │   ├── PromotionPlan.md
│   │   ├── SlotContent.md
│   │   ├── SourceCodeGroup.md
│   │   ├── SourceCodeInfo.md
│   │   ├── SourceCodeStatusCodes.md
│   │   └── TotalFixedPriceDiscount.md
│   ├── dw_catalog
│   │   ├── Catalog.md
│   │   ├── CatalogMgr.md
│   │   ├── Category.md
│   │   ├── CategoryAssignment.md
│   │   ├── CategoryLink.md
│   │   ├── PriceBook.md
│   │   ├── PriceBookMgr.md
│   │   ├── Product.md
│   │   ├── ProductActiveData.md
│   │   ├── ProductAttributeModel.md
│   │   ├── ProductAvailabilityLevels.md
│   │   ├── ProductAvailabilityModel.md
│   │   ├── ProductInventoryList.md
│   │   ├── ProductInventoryMgr.md
│   │   ├── ProductInventoryRecord.md
│   │   ├── ProductLink.md
│   │   ├── ProductMgr.md
│   │   ├── ProductOption.md
│   │   ├── ProductOptionModel.md
│   │   ├── ProductOptionValue.md
│   │   ├── ProductPriceInfo.md
│   │   ├── ProductPriceModel.md
│   │   ├── ProductPriceTable.md
│   │   ├── ProductSearchHit.md
│   │   ├── ProductSearchModel.md
│   │   ├── ProductSearchRefinementDefinition.md
│   │   ├── ProductSearchRefinements.md
│   │   ├── ProductSearchRefinementValue.md
│   │   ├── ProductVariationAttribute.md
│   │   ├── ProductVariationAttributeValue.md
│   │   ├── ProductVariationModel.md
│   │   ├── Recommendation.md
│   │   ├── SearchModel.md
│   │   ├── SearchRefinementDefinition.md
│   │   ├── SearchRefinements.md
│   │   ├── SearchRefinementValue.md
│   │   ├── SortingOption.md
│   │   ├── SortingRule.md
│   │   ├── Store.md
│   │   ├── StoreGroup.md
│   │   ├── StoreInventoryFilter.md
│   │   ├── StoreInventoryFilterValue.md
│   │   ├── StoreMgr.md
│   │   ├── Variant.md
│   │   └── VariationGroup.md
│   ├── dw_content
│   │   ├── Content.md
│   │   ├── ContentMgr.md
│   │   ├── ContentSearchModel.md
│   │   ├── ContentSearchRefinementDefinition.md
│   │   ├── ContentSearchRefinements.md
│   │   ├── ContentSearchRefinementValue.md
│   │   ├── Folder.md
│   │   ├── Library.md
│   │   ├── MarkupText.md
│   │   └── MediaFile.md
│   ├── dw_crypto
│   │   ├── CertificateRef.md
│   │   ├── CertificateUtils.md
│   │   ├── Cipher.md
│   │   ├── Encoding.md
│   │   ├── JWE.md
│   │   ├── JWEHeader.md
│   │   ├── JWS.md
│   │   ├── JWSHeader.md
│   │   ├── KeyRef.md
│   │   ├── Mac.md
│   │   ├── MessageDigest.md
│   │   ├── SecureRandom.md
│   │   ├── Signature.md
│   │   ├── WeakCipher.md
│   │   ├── WeakMac.md
│   │   ├── WeakMessageDigest.md
│   │   ├── WeakSignature.md
│   │   └── X509Certificate.md
│   ├── dw_customer
│   │   ├── AddressBook.md
│   │   ├── AgentUserMgr.md
│   │   ├── AgentUserStatusCodes.md
│   │   ├── AuthenticationStatus.md
│   │   ├── Credentials.md
│   │   ├── Customer.md
│   │   ├── CustomerActiveData.md
│   │   ├── CustomerAddress.md
│   │   ├── CustomerCDPData.md
│   │   ├── CustomerContextMgr.md
│   │   ├── CustomerGroup.md
│   │   ├── CustomerList.md
│   │   ├── CustomerMgr.md
│   │   ├── CustomerPasswordConstraints.md
│   │   ├── CustomerPaymentInstrument.md
│   │   ├── CustomerStatusCodes.md
│   │   ├── EncryptedObject.md
│   │   ├── ExternalProfile.md
│   │   ├── OrderHistory.md
│   │   ├── ProductList.md
│   │   ├── ProductListItem.md
│   │   ├── ProductListItemPurchase.md
│   │   ├── ProductListMgr.md
│   │   ├── ProductListRegistrant.md
│   │   ├── Profile.md
│   │   └── Wallet.md
│   ├── dw_extensions.applepay
│   │   ├── ApplePayHookResult.md
│   │   └── ApplePayHooks.md
│   ├── dw_extensions.facebook
│   │   ├── FacebookFeedHooks.md
│   │   └── FacebookProduct.md
│   ├── dw_extensions.paymentrequest
│   │   ├── PaymentRequestHookResult.md
│   │   └── PaymentRequestHooks.md
│   ├── dw_extensions.payments
│   │   ├── SalesforceBancontactPaymentDetails.md
│   │   ├── SalesforceCardPaymentDetails.md
│   │   ├── SalesforceEpsPaymentDetails.md
│   │   ├── SalesforceIdealPaymentDetails.md
│   │   ├── SalesforceKlarnaPaymentDetails.md
│   │   ├── SalesforcePaymentDetails.md
│   │   ├── SalesforcePaymentIntent.md
│   │   ├── SalesforcePaymentMethod.md
│   │   ├── SalesforcePaymentRequest.md
│   │   ├── SalesforcePaymentsHooks.md
│   │   ├── SalesforcePaymentsMgr.md
│   │   ├── SalesforcePaymentsSiteConfiguration.md
│   │   ├── SalesforcePayPalOrder.md
│   │   ├── SalesforcePayPalOrderAddress.md
│   │   ├── SalesforcePayPalOrderPayer.md
│   │   ├── SalesforcePayPalPaymentDetails.md
│   │   ├── SalesforceSepaDebitPaymentDetails.md
│   │   └── SalesforceVenmoPaymentDetails.md
│   ├── dw_extensions.pinterest
│   │   ├── PinterestAvailability.md
│   │   ├── PinterestFeedHooks.md
│   │   ├── PinterestOrder.md
│   │   ├── PinterestOrderHooks.md
│   │   └── PinterestProduct.md
│   ├── dw_io
│   │   ├── CSVStreamReader.md
│   │   ├── CSVStreamWriter.md
│   │   ├── File.md
│   │   ├── FileReader.md
│   │   ├── FileWriter.md
│   │   ├── InputStream.md
│   │   ├── OutputStream.md
│   │   ├── PrintWriter.md
│   │   ├── RandomAccessFileReader.md
│   │   ├── Reader.md
│   │   ├── StringWriter.md
│   │   ├── Writer.md
│   │   ├── XMLIndentingStreamWriter.md
│   │   ├── XMLStreamConstants.md
│   │   ├── XMLStreamReader.md
│   │   └── XMLStreamWriter.md
│   ├── dw_job
│   │   ├── JobExecution.md
│   │   └── JobStepExecution.md
│   ├── dw_net
│   │   ├── FTPClient.md
│   │   ├── FTPFileInfo.md
│   │   ├── HTTPClient.md
│   │   ├── HTTPRequestPart.md
│   │   ├── Mail.md
│   │   ├── SFTPClient.md
│   │   ├── SFTPFileInfo.md
│   │   ├── WebDAVClient.md
│   │   └── WebDAVFileInfo.md
│   ├── dw_object
│   │   ├── ActiveData.md
│   │   ├── CustomAttributes.md
│   │   ├── CustomObject.md
│   │   ├── CustomObjectMgr.md
│   │   ├── Extensible.md
│   │   ├── ExtensibleObject.md
│   │   ├── Note.md
│   │   ├── ObjectAttributeDefinition.md
│   │   ├── ObjectAttributeGroup.md
│   │   ├── ObjectAttributeValueDefinition.md
│   │   ├── ObjectTypeDefinition.md
│   │   ├── PersistentObject.md
│   │   ├── SimpleExtensible.md
│   │   └── SystemObjectMgr.md
│   ├── dw_order
│   │   ├── AbstractItem.md
│   │   ├── AbstractItemCtnr.md
│   │   ├── Appeasement.md
│   │   ├── AppeasementItem.md
│   │   ├── Basket.md
│   │   ├── BasketMgr.md
│   │   ├── BonusDiscountLineItem.md
│   │   ├── CouponLineItem.md
│   │   ├── CreateAgentBasketLimitExceededException.md
│   │   ├── CreateBasketFromOrderException.md
│   │   ├── CreateCouponLineItemException.md
│   │   ├── CreateOrderException.md
│   │   ├── CreateTemporaryBasketLimitExceededException.md
│   │   ├── GiftCertificate.md
│   │   ├── GiftCertificateLineItem.md
│   │   ├── GiftCertificateMgr.md
│   │   ├── GiftCertificateStatusCodes.md
│   │   ├── Invoice.md
│   │   ├── InvoiceItem.md
│   │   ├── LineItem.md
│   │   ├── LineItemCtnr.md
│   │   ├── Order.md
│   │   ├── OrderAddress.md
│   │   ├── OrderItem.md
│   │   ├── OrderMgr.md
│   │   ├── OrderPaymentInstrument.md
│   │   ├── OrderProcessStatusCodes.md
│   │   ├── PaymentCard.md
│   │   ├── PaymentInstrument.md
│   │   ├── PaymentMethod.md
│   │   ├── PaymentMgr.md
│   │   ├── PaymentProcessor.md
│   │   ├── PaymentStatusCodes.md
│   │   ├── PaymentTransaction.md
│   │   ├── PriceAdjustment.md
│   │   ├── PriceAdjustmentLimitTypes.md
│   │   ├── ProductLineItem.md
│   │   ├── ProductShippingCost.md
│   │   ├── ProductShippingLineItem.md
│   │   ├── ProductShippingModel.md
│   │   ├── Return.md
│   │   ├── ReturnCase.md
│   │   ├── ReturnCaseItem.md
│   │   ├── ReturnItem.md
│   │   ├── Shipment.md
│   │   ├── ShipmentShippingCost.md
│   │   ├── ShipmentShippingModel.md
│   │   ├── ShippingLineItem.md
│   │   ├── ShippingLocation.md
│   │   ├── ShippingMethod.md
│   │   ├── ShippingMgr.md
│   │   ├── ShippingOrder.md
│   │   ├── ShippingOrderItem.md
│   │   ├── SumItem.md
│   │   ├── TaxGroup.md
│   │   ├── TaxItem.md
│   │   ├── TaxMgr.md
│   │   ├── TrackingInfo.md
│   │   └── TrackingRef.md
│   ├── dw_order.hooks
│   │   ├── CalculateHooks.md
│   │   ├── OrderHooks.md
│   │   ├── PaymentHooks.md
│   │   ├── ReturnHooks.md
│   │   └── ShippingOrderHooks.md
│   ├── dw_rpc
│   │   ├── SOAPUtil.md
│   │   ├── Stub.md
│   │   └── WebReference.md
│   ├── dw_suggest
│   │   ├── BrandSuggestions.md
│   │   ├── CategorySuggestions.md
│   │   ├── ContentSuggestions.md
│   │   ├── CustomSuggestions.md
│   │   ├── ProductSuggestions.md
│   │   ├── SearchPhraseSuggestions.md
│   │   ├── SuggestedCategory.md
│   │   ├── SuggestedContent.md
│   │   ├── SuggestedPhrase.md
│   │   ├── SuggestedProduct.md
│   │   ├── SuggestedTerm.md
│   │   ├── SuggestedTerms.md
│   │   ├── Suggestions.md
│   │   └── SuggestModel.md
│   ├── dw_svc
│   │   ├── FTPService.md
│   │   ├── FTPServiceDefinition.md
│   │   ├── HTTPFormService.md
│   │   ├── HTTPFormServiceDefinition.md
│   │   ├── HTTPService.md
│   │   ├── HTTPServiceDefinition.md
│   │   ├── LocalServiceRegistry.md
│   │   ├── Result.md
│   │   ├── Service.md
│   │   ├── ServiceCallback.md
│   │   ├── ServiceConfig.md
│   │   ├── ServiceCredential.md
│   │   ├── ServiceDefinition.md
│   │   ├── ServiceProfile.md
│   │   ├── ServiceRegistry.md
│   │   ├── SOAPService.md
│   │   └── SOAPServiceDefinition.md
│   ├── dw_system
│   │   ├── AgentUserStatusCodes.md
│   │   ├── Cache.md
│   │   ├── CacheMgr.md
│   │   ├── HookMgr.md
│   │   ├── InternalObject.md
│   │   ├── JobProcessMonitor.md
│   │   ├── Log.md
│   │   ├── Logger.md
│   │   ├── LogNDC.md
│   │   ├── OrganizationPreferences.md
│   │   ├── Pipeline.md
│   │   ├── PipelineDictionary.md
│   │   ├── RemoteInclude.md
│   │   ├── Request.md
│   │   ├── RequestHooks.md
│   │   ├── Response.md
│   │   ├── RESTErrorResponse.md
│   │   ├── RESTResponseMgr.md
│   │   ├── RESTSuccessResponse.md
│   │   ├── SearchStatus.md
│   │   ├── Session.md
│   │   ├── Site.md
│   │   ├── SitePreferences.md
│   │   ├── Status.md
│   │   ├── StatusItem.md
│   │   ├── System.md
│   │   └── Transaction.md
│   ├── dw_util
│   │   ├── ArrayList.md
│   │   ├── Assert.md
│   │   ├── BigInteger.md
│   │   ├── Bytes.md
│   │   ├── Calendar.md
│   │   ├── Collection.md
│   │   ├── Currency.md
│   │   ├── DateUtils.md
│   │   ├── Decimal.md
│   │   ├── FilteringCollection.md
│   │   ├── Geolocation.md
│   │   ├── HashMap.md
│   │   ├── HashSet.md
│   │   ├── Iterator.md
│   │   ├── LinkedHashMap.md
│   │   ├── LinkedHashSet.md
│   │   ├── List.md
│   │   ├── Locale.md
│   │   ├── Map.md
│   │   ├── MapEntry.md
│   │   ├── MappingKey.md
│   │   ├── MappingMgr.md
│   │   ├── PropertyComparator.md
│   │   ├── SecureEncoder.md
│   │   ├── SecureFilter.md
│   │   ├── SeekableIterator.md
│   │   ├── Set.md
│   │   ├── SortedMap.md
│   │   ├── SortedSet.md
│   │   ├── StringUtils.md
│   │   ├── Template.md
│   │   └── UUIDUtils.md
│   ├── dw_value
│   │   ├── EnumValue.md
│   │   ├── MimeEncodedText.md
│   │   ├── Money.md
│   │   └── Quantity.md
│   ├── dw_web
│   │   ├── ClickStream.md
│   │   ├── ClickStreamEntry.md
│   │   ├── Cookie.md
│   │   ├── Cookies.md
│   │   ├── CSRFProtection.md
│   │   ├── Form.md
│   │   ├── FormAction.md
│   │   ├── FormElement.md
│   │   ├── FormElementValidationResult.md
│   │   ├── FormField.md
│   │   ├── FormFieldOption.md
│   │   ├── FormFieldOptions.md
│   │   ├── FormGroup.md
│   │   ├── FormList.md
│   │   ├── FormListItem.md
│   │   ├── Forms.md
│   │   ├── HttpParameter.md
│   │   ├── HttpParameterMap.md
│   │   ├── LoopIterator.md
│   │   ├── PageMetaData.md
│   │   ├── PageMetaTag.md
│   │   ├── PagingModel.md
│   │   ├── Resource.md
│   │   ├── URL.md
│   │   ├── URLAction.md
│   │   ├── URLParameter.md
│   │   ├── URLRedirect.md
│   │   ├── URLRedirectMgr.md
│   │   └── URLUtils.md
│   ├── sfra
│   │   ├── account.md
│   │   ├── address.md
│   │   ├── billing.md
│   │   ├── cart.md
│   │   ├── categories.md
│   │   ├── content.md
│   │   ├── locale.md
│   │   ├── order.md
│   │   ├── payment.md
│   │   ├── price-default.md
│   │   ├── price-range.md
│   │   ├── price-tiered.md
│   │   ├── product-bundle.md
│   │   ├── product-full.md
│   │   ├── product-line-items.md
│   │   ├── product-search.md
│   │   ├── product-tile.md
│   │   ├── querystring.md
│   │   ├── render.md
│   │   ├── request.md
│   │   ├── response.md
│   │   ├── server.md
│   │   ├── shipping.md
│   │   ├── store.md
│   │   ├── stores.md
│   │   └── totals.md
│   └── TopLevel
│       ├── APIException.md
│       ├── arguments.md
│       ├── Array.md
│       ├── ArrayBuffer.md
│       ├── BigInt.md
│       ├── Boolean.md
│       ├── ConversionError.md
│       ├── DataView.md
│       ├── Date.md
│       ├── Error.md
│       ├── ES6Iterator.md
│       ├── EvalError.md
│       ├── Fault.md
│       ├── Float32Array.md
│       ├── Float64Array.md
│       ├── Function.md
│       ├── Generator.md
│       ├── global.md
│       ├── Int16Array.md
│       ├── Int32Array.md
│       ├── Int8Array.md
│       ├── InternalError.md
│       ├── IOError.md
│       ├── Iterable.md
│       ├── Iterator.md
│       ├── JSON.md
│       ├── Map.md
│       ├── Math.md
│       ├── Module.md
│       ├── Namespace.md
│       ├── Number.md
│       ├── Object.md
│       ├── QName.md
│       ├── RangeError.md
│       ├── ReferenceError.md
│       ├── RegExp.md
│       ├── Set.md
│       ├── StopIteration.md
│       ├── String.md
│       ├── Symbol.md
│       ├── SyntaxError.md
│       ├── SystemError.md
│       ├── TypeError.md
│       ├── Uint16Array.md
│       ├── Uint32Array.md
│       ├── Uint8Array.md
│       ├── Uint8ClampedArray.md
│       ├── URIError.md
│       ├── WeakMap.md
│       ├── WeakSet.md
│       ├── XML.md
│       ├── XMLList.md
│       └── XMLStreamError.md
├── docs-site
│   ├── .gitignore
│   ├── App.tsx
│   ├── components
│   │   ├── Badge.tsx
│   │   ├── BreadcrumbSchema.tsx
│   │   ├── CodeBlock.tsx
│   │   ├── Collapsible.tsx
│   │   ├── ConfigBuilder.tsx
│   │   ├── ConfigHero.tsx
│   │   ├── ConfigModeTabs.tsx
│   │   ├── icons.tsx
│   │   ├── Layout.tsx
│   │   ├── LightCodeContainer.tsx
│   │   ├── NewcomerCTA.tsx
│   │   ├── NextStepsStrip.tsx
│   │   ├── OnThisPage.tsx
│   │   ├── Search.tsx
│   │   ├── SEO.tsx
│   │   ├── Sidebar.tsx
│   │   ├── StructuredData.tsx
│   │   ├── ToolCard.tsx
│   │   ├── ToolFilters.tsx
│   │   ├── Typography.tsx
│   │   └── VersionBadge.tsx
│   ├── constants.tsx
│   ├── index.html
│   ├── main.tsx
│   ├── metadata.json
│   ├── package-lock.json
│   ├── package.json
│   ├── pages
│   │   ├── AIInterfacesPage.tsx
│   │   ├── ConfigurationPage.tsx
│   │   ├── DevelopmentPage.tsx
│   │   ├── ExamplesPage.tsx
│   │   ├── FeaturesPage.tsx
│   │   ├── HomePage.tsx
│   │   ├── SecurityPage.tsx
│   │   ├── ToolsPage.tsx
│   │   └── TroubleshootingPage.tsx
│   ├── postcss.config.js
│   ├── public
│   │   ├── .well-known
│   │   │   └── security.txt
│   │   ├── 404.html
│   │   ├── android-chrome-192x192.png
│   │   ├── android-chrome-512x512.png
│   │   ├── apple-touch-icon.png
│   │   ├── explain-product-pricing-methods-no-mcp.png
│   │   ├── explain-product-pricing-methods.png
│   │   ├── favicon-16x16.png
│   │   ├── favicon-32x32.png
│   │   ├── favicon.ico
│   │   ├── llms.txt
│   │   ├── robots.txt
│   │   ├── site.webmanifest
│   │   └── sitemap.xml
│   ├── README.md
│   ├── scripts
│   │   ├── generate-search-index.js
│   │   ├── generate-sitemap.js
│   │   └── search-dev.js
│   ├── src
│   │   └── styles
│   │       ├── input.css
│   │       └── prism-theme.css
│   ├── tailwind.config.js
│   ├── tsconfig.json
│   ├── types.ts
│   ├── utils
│   │   ├── search.ts
│   │   └── toolsData.ts
│   └── vite.config.ts
├── eslint.config.js
├── jest.config.js
├── LICENSE
├── package-lock.json
├── package.json
├── README.md
├── scripts
│   └── convert-docs.js
├── SECURITY.md
├── server.json
├── src
│   ├── clients
│   │   ├── base
│   │   │   ├── http-client.ts
│   │   │   ├── oauth-token.ts
│   │   │   └── ocapi-auth-client.ts
│   │   ├── best-practices-client.ts
│   │   ├── cartridge-generation-client.ts
│   │   ├── docs
│   │   │   ├── class-content-parser.ts
│   │   │   ├── class-name-resolver.ts
│   │   │   ├── documentation-scanner.ts
│   │   │   ├── index.ts
│   │   │   └── referenced-types-extractor.ts
│   │   ├── docs-client.ts
│   │   ├── log-client.ts
│   │   ├── logs
│   │   │   ├── index.ts
│   │   │   ├── log-analyzer.ts
│   │   │   ├── log-client.ts
│   │   │   ├── log-constants.ts
│   │   │   ├── log-file-discovery.ts
│   │   │   ├── log-file-reader.ts
│   │   │   ├── log-formatter.ts
│   │   │   ├── log-processor.ts
│   │   │   ├── log-types.ts
│   │   │   └── webdav-client-manager.ts
│   │   ├── ocapi
│   │   │   ├── code-versions-client.ts
│   │   │   ├── site-preferences-client.ts
│   │   │   └── system-objects-client.ts
│   │   ├── ocapi-client.ts
│   │   └── sfra-client.ts
│   ├── config
│   │   ├── configuration-factory.ts
│   │   └── dw-json-loader.ts
│   ├── core
│   │   ├── handlers
│   │   │   ├── abstract-log-tool-handler.ts
│   │   │   ├── base-handler.ts
│   │   │   ├── best-practices-handler.ts
│   │   │   ├── cartridge-handler.ts
│   │   │   ├── client-factory.ts
│   │   │   ├── code-version-handler.ts
│   │   │   ├── docs-handler.ts
│   │   │   ├── job-log-handler.ts
│   │   │   ├── job-log-tool-config.ts
│   │   │   ├── log-handler.ts
│   │   │   ├── log-tool-config.ts
│   │   │   ├── sfra-handler.ts
│   │   │   ├── system-object-handler.ts
│   │   │   └── validation-helpers.ts
│   │   ├── server.ts
│   │   └── tool-definitions.ts
│   ├── index.ts
│   ├── main.ts
│   ├── services
│   │   ├── file-system-service.ts
│   │   ├── index.ts
│   │   └── path-service.ts
│   ├── tool-configs
│   │   ├── best-practices-tool-config.ts
│   │   ├── cartridge-tool-config.ts
│   │   ├── code-version-tool-config.ts
│   │   ├── docs-tool-config.ts
│   │   ├── job-log-tool-config.ts
│   │   ├── log-tool-config.ts
│   │   ├── sfra-tool-config.ts
│   │   └── system-object-tool-config.ts
│   ├── types
│   │   └── types.ts
│   └── utils
│       ├── cache.ts
│       ├── job-log-tool-config.ts
│       ├── job-log-utils.ts
│       ├── log-cache.ts
│       ├── log-tool-config.ts
│       ├── log-tool-constants.ts
│       ├── log-tool-utils.ts
│       ├── logger.ts
│       ├── ocapi-url-builder.ts
│       ├── path-resolver.ts
│       ├── query-builder.ts
│       ├── utils.ts
│       └── validator.ts
├── tests
│   ├── __mocks__
│   │   ├── docs-client.ts
│   │   ├── src
│   │   │   └── clients
│   │   │       └── base
│   │   │           └── http-client.js
│   │   └── webdav.js
│   ├── base-handler.test.ts
│   ├── base-http-client.test.ts
│   ├── best-practices-handler.test.ts
│   ├── cache.test.ts
│   ├── cartridge-handler.test.ts
│   ├── class-content-parser.test.ts
│   ├── class-name-resolver.test.ts
│   ├── client-factory.test.ts
│   ├── code-version-handler.test.ts
│   ├── code-versions-client.test.ts
│   ├── config.test.ts
│   ├── configuration-factory.test.ts
│   ├── docs-handler.test.ts
│   ├── documentation-scanner.test.ts
│   ├── file-system-service.test.ts
│   ├── job-log-handler.test.ts
│   ├── job-log-utils.test.ts
│   ├── log-client.test.ts
│   ├── log-handler.test.ts
│   ├── log-processor.test.ts
│   ├── logger.test.ts
│   ├── mcp
│   │   ├── AGENTS.md
│   │   ├── node
│   │   │   ├── activate-code-version-advanced.full-mode.programmatic.test.js
│   │   │   ├── code-versions.full-mode.programmatic.test.js
│   │   │   ├── generate-cartridge-structure.docs-only.programmatic.test.js
│   │   │   ├── get-available-best-practice-guides.docs-only.programmatic.test.js
│   │   │   ├── get-available-sfra-documents.programmatic.test.js
│   │   │   ├── get-best-practice-guide.docs-only.programmatic.test.js
│   │   │   ├── get-hook-reference.docs-only.programmatic.test.js
│   │   │   ├── get-job-execution-summary.full-mode.programmatic.test.js
│   │   │   ├── get-job-log-entries.full-mode.programmatic.test.js
│   │   │   ├── get-latest-debug.full-mode.programmatic.test.js
│   │   │   ├── get-latest-error.full-mode.programmatic.test.js
│   │   │   ├── get-latest-info.full-mode.programmatic.test.js
│   │   │   ├── get-latest-job-log-files.full-mode.programmatic.test.js
│   │   │   ├── get-latest-warn.full-mode.programmatic.test.js
│   │   │   ├── get-log-file-contents.full-mode.programmatic.test.js
│   │   │   ├── get-sfcc-class-documentation.docs-only.programmatic.test.js
│   │   │   ├── get-sfcc-class-info.docs-only.programmatic.test.js
│   │   │   ├── get-sfra-categories.docs-only.programmatic.test.js
│   │   │   ├── get-sfra-document.programmatic.test.js
│   │   │   ├── get-sfra-documents-by-category.docs-only.programmatic.test.js
│   │   │   ├── get-system-object-definition.full-mode.programmatic.test.js
│   │   │   ├── get-system-object-definitions.docs-only.programmatic.test.js
│   │   │   ├── get-system-object-definitions.full-mode.programmatic.test.js
│   │   │   ├── list-log-files.full-mode.programmatic.test.js
│   │   │   ├── list-sfcc-classes.docs-only.programmatic.test.js
│   │   │   ├── search-best-practices.docs-only.programmatic.test.js
│   │   │   ├── search-custom-object-attribute-definitions.full-mode.programmatic.test.js
│   │   │   ├── search-job-logs-by-name.full-mode.programmatic.test.js
│   │   │   ├── search-job-logs.full-mode.programmatic.test.js
│   │   │   ├── search-logs.full-mode.programmatic.test.js
│   │   │   ├── search-sfcc-classes.docs-only.programmatic.test.js
│   │   │   ├── search-sfcc-methods.docs-only.programmatic.test.js
│   │   │   ├── search-sfra-documentation.docs-only.programmatic.test.js
│   │   │   ├── search-site-preferences.full-mode.programmatic.test.js
│   │   │   ├── search-system-object-attribute-definitions.full-mode.programmatic.test.js
│   │   │   ├── search-system-object-attribute-groups.full-mode.programmatic.test.js
│   │   │   ├── summarize-logs.full-mode.programmatic.test.js
│   │   │   ├── tools.docs-only.programmatic.test.js
│   │   │   └── tools.full-mode.programmatic.test.js
│   │   ├── README.md
│   │   ├── test-fixtures
│   │   │   └── dw.json
│   │   └── yaml
│   │       ├── activate-code-version.docs-only.test.mcp.yml
│   │       ├── activate-code-version.full-mode.test.mcp.yml
│   │       ├── get_latest_error.test.mcp.yml
│   │       ├── get-available-best-practice-guides.docs-only.test.mcp.yml
│   │       ├── get-available-best-practice-guides.full-mode.test.mcp.yml
│   │       ├── get-available-sfra-documents.docs-only.test.mcp.yml
│   │       ├── get-available-sfra-documents.full-mode.test.mcp.yml
│   │       ├── get-best-practice-guide.docs-only.test.mcp.yml
│   │       ├── get-best-practice-guide.full-mode.test.mcp.yml
│   │       ├── get-code-versions.docs-only.test.mcp.yml
│   │       ├── get-code-versions.full-mode.test.mcp.yml
│   │       ├── get-hook-reference.docs-only.test.mcp.yml
│   │       ├── get-hook-reference.full-mode.test.mcp.yml
│   │       ├── get-job-execution-summary.full-mode.test.mcp.yml
│   │       ├── get-job-log-entries.full-mode.test.mcp.yml
│   │       ├── get-latest-debug.full-mode.test.mcp.yml
│   │       ├── get-latest-error.full-mode.test.mcp.yml
│   │       ├── get-latest-info.full-mode.test.mcp.yml
│   │       ├── get-latest-job-log-files.full-mode.test.mcp.yml
│   │       ├── get-latest-warn.full-mode.test.mcp.yml
│   │       ├── get-log-file-contents.full-mode.test.mcp.yml
│   │       ├── get-sfcc-class-documentation.docs-only.test.mcp.yml
│   │       ├── get-sfcc-class-documentation.full-mode.test.mcp.yml
│   │       ├── get-sfcc-class-info.docs-only.test.mcp.yml
│   │       ├── get-sfcc-class-info.full-mode.test.mcp.yml
│   │       ├── get-sfra-categories.docs-only.test.mcp.yml
│   │       ├── get-sfra-categories.full-mode.test.mcp.yml
│   │       ├── get-sfra-document.docs-only.test.mcp.yml
│   │       ├── get-sfra-document.full-mode.test.mcp.yml
│   │       ├── get-sfra-documents-by-category.docs-only.test.mcp.yml
│   │       ├── get-sfra-documents-by-category.full-mode.test.mcp.yml
│   │       ├── get-system-object-definition.docs-only.test.mcp.yml
│   │       ├── get-system-object-definition.full-mode.test.mcp.yml
│   │       ├── get-system-object-definitions.docs-only.test.mcp.yml
│   │       ├── get-system-object-definitions.full-mode.test.mcp.yml
│   │       ├── list-log-files.full-mode.test.mcp.yml
│   │       ├── list-sfcc-classes.docs-only.test.mcp.yml
│   │       ├── list-sfcc-classes.full-mode.test.mcp.yml
│   │       ├── search-best-practices.docs-only.test.mcp.yml
│   │       ├── search-best-practices.full-mode.test.mcp.yml
│   │       ├── search-custom-object-attribute-definitions.docs-only.test.mcp.yml
│   │       ├── search-custom-object-attribute-definitions.test.mcp.yml
│   │       ├── search-job-logs-by-name.full-mode.test.mcp.yml
│   │       ├── search-job-logs.full-mode.test.mcp.yml
│   │       ├── search-logs.full-mode.test.mcp.yml
│   │       ├── search-sfcc-classes.docs-only.test.mcp.yml
│   │       ├── search-sfcc-classes.full-mode.test.mcp.yml
│   │       ├── search-sfcc-methods.docs-only.test.mcp.yml
│   │       ├── search-sfcc-methods.full-mode.test.mcp.yml
│   │       ├── search-sfra-documentation.docs-only.test.mcp.yml
│   │       ├── search-sfra-documentation.full-mode.test.mcp.yml
│   │       ├── search-site-preferences.docs-only.test.mcp.yml
│   │       ├── search-site-preferences.full-mode.test.mcp.yml
│   │       ├── search-system-object-attribute-definitions.docs-only.test.mcp.yml
│   │       ├── search-system-object-attribute-definitions.full-mode.test.mcp.yml
│   │       ├── search-system-object-attribute-groups.docs-only.test.mcp.yml
│   │       ├── search-system-object-attribute-groups.full-mode.test.mcp.yml
│   │       ├── summarize-logs.full-mode.test.mcp.yml
│   │       ├── tools.docs-only.test.mcp.yml
│   │       └── tools.full-mode.test.mcp.yml
│   ├── oauth-token.test.ts
│   ├── ocapi-auth-client.test.ts
│   ├── ocapi-client.test.ts
│   ├── path-service.test.ts
│   ├── query-builder.test.ts
│   ├── referenced-types-extractor.test.ts
│   ├── servers
│   │   ├── sfcc-mock-server
│   │   │   ├── mock-data
│   │   │   │   └── ocapi
│   │   │   │       ├── code-versions.json
│   │   │   │       ├── custom-object-attributes-customapi.json
│   │   │   │       ├── custom-object-attributes-globalsettings.json
│   │   │   │       ├── custom-object-attributes-versionhistory.json
│   │   │   │       ├── site-preferences-ccv.json
│   │   │   │       ├── site-preferences-fastforward.json
│   │   │   │       ├── site-preferences-sfra.json
│   │   │   │       ├── site-preferences-storefront.json
│   │   │   │       ├── site-preferences-system.json
│   │   │   │       ├── system-object-attribute-groups-campaign.json
│   │   │   │       ├── system-object-attribute-groups-category.json
│   │   │   │       ├── system-object-attribute-groups-order.json
│   │   │   │       ├── system-object-attribute-groups-product.json
│   │   │   │       ├── system-object-attribute-groups-sitepreferences.json
│   │   │   │       ├── system-object-attributes-customeraddress.json
│   │   │   │       ├── system-object-attributes-product-expanded.json
│   │   │   │       ├── system-object-attributes-product.json
│   │   │   │       ├── system-object-definition-category.json
│   │   │   │       ├── system-object-definition-customer.json
│   │   │   │       ├── system-object-definition-customeraddress.json
│   │   │   │       ├── system-object-definition-order.json
│   │   │   │       ├── system-object-definition-product.json
│   │   │   │       ├── system-object-definitions-old.json
│   │   │   │       └── system-object-definitions.json
│   │   │   ├── package-lock.json
│   │   │   ├── package.json
│   │   │   ├── README.md
│   │   │   ├── scripts
│   │   │   │   └── setup-logs.js
│   │   │   ├── server.js
│   │   │   └── src
│   │   │       ├── app.js
│   │   │       ├── config
│   │   │       │   └── server-config.js
│   │   │       ├── middleware
│   │   │       │   ├── auth.js
│   │   │       │   ├── cors.js
│   │   │       │   └── logging.js
│   │   │       ├── routes
│   │   │       │   ├── ocapi
│   │   │       │   │   ├── code-versions-handler.js
│   │   │       │   │   ├── oauth-handler.js
│   │   │       │   │   ├── ocapi-error-utils.js
│   │   │       │   │   ├── ocapi-utils.js
│   │   │       │   │   ├── site-preferences-handler.js
│   │   │       │   │   └── system-objects-handler.js
│   │   │       │   ├── ocapi.js
│   │   │       │   └── webdav.js
│   │   │       └── utils
│   │   │           ├── mock-data-loader.js
│   │   │           └── webdav-xml.js
│   │   └── sfcc-mock-server-manager.ts
│   ├── sfcc-mock-server.test.ts
│   ├── site-preferences-client.test.ts
│   ├── system-objects-client.test.ts
│   ├── utils.test.ts
│   ├── validation-helpers.test.ts
│   └── validator.test.ts
├── tsconfig.json
└── tsconfig.test.json
```

# Files

--------------------------------------------------------------------------------
/docs/dw_extensions.payments/SalesforceEpsPaymentDetails.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.payments

# Class SalesforceEpsPaymentDetails

## Inheritance Hierarchy

- Object
  - dw.extensions.payments.SalesforcePaymentDetails
  - dw.extensions.payments.SalesforceEpsPaymentDetails

## Description

Details to a Salesforce Payments payment of type SalesforcePaymentMethod.TYPE_EPS. See Salesforce Payments documentation for how to gain access and configure it for use on your sites.

## Properties

### bank

**Type:** String (Read Only)

The bank used for the payment, or null if not known.

## Constructor Summary

## Method Summary

### getBank

**Signature:** `getBank() : String`

Returns the bank used for the payment, or null if not known.

## Method Detail

## Method Details

### getBank

**Signature:** `getBank() : String`

**Description:** Returns the bank used for the payment, or null if not known.

**Returns:**

bank

**See Also:**

SalesforcePaymentMethod.getBank()

---
```

--------------------------------------------------------------------------------
/docs/dw_extensions.payments/SalesforceIdealPaymentDetails.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.payments

# Class SalesforceIdealPaymentDetails

## Inheritance Hierarchy

- Object
  - dw.extensions.payments.SalesforcePaymentDetails
  - dw.extensions.payments.SalesforceIdealPaymentDetails

## Description

Details to a Salesforce Payments payment of type SalesforcePaymentMethod.TYPE_IDEAL. See Salesforce Payments documentation for how to gain access and configure it for use on your sites.

## Properties

### bank

**Type:** String (Read Only)

The bank used for the payment, or null if not known.

## Constructor Summary

## Method Summary

### getBank

**Signature:** `getBank() : String`

Returns the bank used for the payment, or null if not known.

## Method Detail

## Method Details

### getBank

**Signature:** `getBank() : String`

**Description:** Returns the bank used for the payment, or null if not known.

**Returns:**

bank

**See Also:**

SalesforcePaymentMethod.getBank()

---
```

--------------------------------------------------------------------------------
/docs-site/components/Badge.tsx:
--------------------------------------------------------------------------------

```typescript
import React from 'react';

interface BadgeProps {
  children: React.ReactNode;
  variant?: 'success' | 'warning' | 'error' | 'info' | 'default';
  size?: 'sm' | 'md';
  className?: string;
}

const variantStyles = {
  success: 'bg-green-100 text-green-800 border-green-200',
  warning: 'bg-yellow-100 text-yellow-800 border-yellow-200',
  error: 'bg-red-100 text-red-800 border-red-200',
  info: 'bg-blue-100 text-blue-800 border-blue-200',
  default: 'bg-gray-100 text-gray-800 border-gray-200'
};

const sizeStyles = {
  sm: 'text-xs px-2 py-1',
  md: 'text-sm px-3 py-1'
};

export const Badge: React.FC<BadgeProps> = ({ 
  children, 
  variant = 'default', 
  size = 'md',
  className = ''
}) => {
  return (
    <span 
      className={`inline-flex items-center font-medium rounded-full border ${variantStyles[variant]} ${sizeStyles[size]} ${className}`}
    >
      {children}
    </span>
  );
};

export default Badge;

```

--------------------------------------------------------------------------------
/docs/dw_campaign/PercentageDiscount.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.campaign

# Class PercentageDiscount

## Inheritance Hierarchy

- Object
  - dw.campaign.Discount
  - dw.campaign.PercentageDiscount

## Description

Represents a percentage-off discount in the discount plan, for example "10% off all T-Shirts".

## Properties

### percentage

**Type:** Number (Read Only)

The percentage discount value, for example 10.00 for a "10% off"
 discount.

## Constructor Summary

PercentageDiscount(percentage : Number) Create a percentage-discount on the fly.

## Method Summary

### getPercentage

**Signature:** `getPercentage() : Number`

Returns the percentage discount value, for example 10.00 for a "10% off" discount.

## Constructor Detail

## Method Detail

## Method Details

### getPercentage

**Signature:** `getPercentage() : Number`

**Description:** Returns the percentage discount value, for example 10.00 for a "10% off" discount.

**Returns:**

Discount percentage value

---
```

--------------------------------------------------------------------------------
/tests/servers/sfcc-mock-server/src/middleware/cors.js:
--------------------------------------------------------------------------------

```javascript
/**
 * CORS Middleware
 * 
 * Handles Cross-Origin Resource Sharing configuration for the unified server.
 * Provides permissive CORS settings suitable for testing environments.
 */

const cors = require('cors');

/**
 * Create CORS middleware with appropriate settings for testing
 */
function createCorsMiddleware() {
    return cors({
        origin: '*',
        methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS', 'PROPFIND'],
        allowedHeaders: [
            'Content-Type', 
            'Authorization', 
            'Depth', 
            'Range',
            'X-Requested-With',
            'Cache-Control'
        ],
        exposedHeaders: [
            'Content-Range', 
            'Accept-Ranges',
            'Content-Length',
            'Last-Modified'
        ],
        credentials: true,
        preflightContinue: false,
        optionsSuccessStatus: 200
    });
}

module.exports = {
    createCorsMiddleware
};
```

--------------------------------------------------------------------------------
/docs/dw_object/SimpleExtensible.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.object

# Class SimpleExtensible

## Inheritance Hierarchy

- Object
  - dw.object.SimpleExtensible

## Description

Base class alternative to ExtensibleObject for customizable objects which do not rely on the metadata system. Unlike Extensible any custom attributes can be set on the fly and are not checked against an available list. Similar to Extensible method getCustom() is the central point to retrieve and store the objects attribute values.

## Properties

### custom

**Type:** CustomAttributes (Read Only)

The custom attributes for this object.

## Constructor Summary

## Method Summary

### getCustom

**Signature:** `getCustom() : CustomAttributes`

Returns the custom attributes for this object.

## Method Detail

## Method Details

### getCustom

**Signature:** `getCustom() : CustomAttributes`

**Description:** Returns the custom attributes for this object.

**Returns:**

the custom attributes for this object.

---
```

--------------------------------------------------------------------------------
/docs/dw_campaign/FixedPriceDiscount.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.campaign

# Class FixedPriceDiscount

## Inheritance Hierarchy

- Object
  - dw.campaign.Discount
  - dw.campaign.FixedPriceDiscount

## Description

Represents a fix price discount in the discount plan, for example "Shipping only 0.99 all orders $25 or more."

## Properties

### fixedPrice

**Type:** Number (Read Only)

The fixed price amount, for example 0.99 for a "Shipping only $0.99"
 discount.

## Constructor Summary

FixedPriceDiscount(amount : Number) Create a fixed-price-discount on the fly.

## Method Summary

### getFixedPrice

**Signature:** `getFixedPrice() : Number`

Returns the fixed price amount, for example 0.99 for a "Shipping only $0.99" discount.

## Constructor Detail

## Method Detail

## Method Details

### getFixedPrice

**Signature:** `getFixedPrice() : Number`

**Description:** Returns the fixed price amount, for example 0.99 for a "Shipping only $0.99" discount.

**Returns:**

Fixed price amount

---
```

--------------------------------------------------------------------------------
/docs/dw_campaign/BonusDiscount.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.campaign

# Class BonusDiscount

## Inheritance Hierarchy

- Object
  - dw.campaign.Discount
  - dw.campaign.BonusDiscount

## Description

Represents a bonus discount in the discount plan, for example "Get a free DVD with your purchase of any DVD player."

## Properties

### bonusProducts

**Type:** Collection (Read Only)

The bonus products associated with this discount that are in
 stock, online and assigned to site catalog.

## Constructor Summary

## Method Summary

### getBonusProducts

**Signature:** `getBonusProducts() : Collection`

Returns the bonus products associated with this discount that are in stock, online and assigned to site catalog.

## Method Detail

## Method Details

### getBonusProducts

**Signature:** `getBonusProducts() : Collection`

**Description:** Returns the bonus products associated with this discount that are in stock, online and assigned to site catalog.

**Returns:**

Collection of bonus products

---
```

--------------------------------------------------------------------------------
/docs-site/constants.tsx:
--------------------------------------------------------------------------------

```typescript
import { NavGroup } from './types';

// Date constants for structured data
export const SITE_DATES = {
  PUBLISHED: "2025-09-13T08:00:00+00:00", // Last week
  MODIFIED: "2025-09-20T08:00:00+00:00"   // Today
} as const;

export const NAVIGATION_LINKS: NavGroup[] = [
  {
    title: 'GETTING STARTED',
    items: [
      { label: 'Introduction', path: '/' },
      { label: 'AI Assistant Setup', path: '/ai-interfaces/' },
      { label: 'Configuration Guide', path: '/configuration/' },
    ],
  },
  {
    title: 'FEATURES',
    items: [
      { label: 'Features Overview', path: '/features/' },
      { label: 'Available Tools', path: '/tools/' },
      { label: 'Examples & Use Cases', path: '/examples/' },
      { label: 'Security Guidelines', path: '/security/' },
    ],
  },
  {
    title: 'DEVELOPMENT',
    items: [
      { label: 'Development Guide', path: '/development/' },
      { label: 'Troubleshooting', path: '/troubleshooting/' },
    ],
  },
];
```

--------------------------------------------------------------------------------
/docs/dw_suggest/SuggestedProduct.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.suggest

# Class SuggestedProduct

## Inheritance Hierarchy

- Object
  - dw.suggest.SuggestedProduct

## Description

This class represents a suggested product. Use getProductSearchHit() method to get access to the actual ProductSearchHit object.

## Properties

### productSearchHit

**Type:** ProductSearchHit (Read Only)

This method returns the actual ProductSearchHit object
 corresponding to this suggested product.

## Constructor Summary

## Method Summary

### getProductSearchHit

**Signature:** `getProductSearchHit() : ProductSearchHit`

This method returns the actual ProductSearchHit object corresponding to this suggested product.

## Method Detail

## Method Details

### getProductSearchHit

**Signature:** `getProductSearchHit() : ProductSearchHit`

**Description:** This method returns the actual ProductSearchHit object corresponding to this suggested product.

**Returns:**

the product search hit corresponding to this suggested product

---
```

--------------------------------------------------------------------------------
/docs/dw_campaign/FixedPriceShippingDiscount.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.campaign

# Class FixedPriceShippingDiscount

## Inheritance Hierarchy

- Object
  - dw.campaign.Discount
  - dw.campaign.FixedPriceShippingDiscount

## Description

Represents a fixed price shipping discount in the discount plan, for example "Shipping only 0.99 for iPods."

## Properties

### fixedPrice

**Type:** Number (Read Only)

The fixed price amount, for example 0.99 for a "Shipping only $0.99"
 discount.

## Constructor Summary

FixedPriceShippingDiscount(amount : Number) Create a fixed-price-shipping-discount on the fly.

## Method Summary

### getFixedPrice

**Signature:** `getFixedPrice() : Number`

Returns the fixed price amount, for example 0.99 for a "Shipping only $0.99" discount.

## Constructor Detail

## Method Detail

## Method Details

### getFixedPrice

**Signature:** `getFixedPrice() : Number`

**Description:** Returns the fixed price amount, for example 0.99 for a "Shipping only $0.99" discount.

**Returns:**

Fixed price amount

---
```

--------------------------------------------------------------------------------
/src/core/handlers/log-handler.ts:
--------------------------------------------------------------------------------

```typescript
import { AbstractLogToolHandler } from './abstract-log-tool-handler.js';
import { HandlerContext } from './base-handler.js';
import { GenericToolSpec } from './base-handler.js';
import { ToolArguments } from './base-handler.js';
import { LOG_TOOL_CONFIG } from '../../tool-configs/log-tool-config.js';
import { LOG_TOOL_NAMES_SET, LogToolName } from '../../utils/log-tool-constants.js';

/**
 * Handler for standard log tools using config-driven dispatch
 * Handles log reading, searching, and analysis operations
 */
export class LogToolHandler extends AbstractLogToolHandler<LogToolName> {
  constructor(context: HandlerContext, subLoggerName: string) {
    super(context, subLoggerName);
  }

  canHandle(toolName: string): boolean {
    return LOG_TOOL_NAMES_SET.has(toolName as LogToolName);
  }

  protected getToolNameSet(): Set<LogToolName> {
    return LOG_TOOL_NAMES_SET;
  }

  protected getToolConfig(): Record<string, GenericToolSpec<ToolArguments, any>> {
    return LOG_TOOL_CONFIG;
  }
}

```

--------------------------------------------------------------------------------
/docs/dw_extensions.payments/SalesforceSepaDebitPaymentDetails.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.payments

# Class SalesforceSepaDebitPaymentDetails

## Inheritance Hierarchy

- Object
  - dw.extensions.payments.SalesforcePaymentDetails
  - dw.extensions.payments.SalesforceSepaDebitPaymentDetails

## Description

Details to a Salesforce Payments payment of type SalesforcePaymentMethod.TYPE_SEPA_DEBIT. See Salesforce Payments documentation for how to gain access and configure it for use on your sites.

## Properties

### last4

**Type:** String (Read Only)

The last 4 digits of the account number, or null if not known.

## Constructor Summary

## Method Summary

### getLast4

**Signature:** `getLast4() : String`

Returns the last 4 digits of the account number, or null if not known.

## Method Detail

## Method Details

### getLast4

**Signature:** `getLast4() : String`

**Description:** Returns the last 4 digits of the account number, or null if not known.

**Returns:**

last 4 digits of the account number

**See Also:**

SalesforcePaymentMethod.getLast4()

---
```

--------------------------------------------------------------------------------
/tests/servers/sfcc-mock-server/package.json:
--------------------------------------------------------------------------------

```json
{
  "name": "sfcc-mock-server",
  "version": "1.0.0",
  "description": "Unified SFCC Mock Server combining WebDAV and OCAPI functionality for testing",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "dev": "node server.js --dev",
    "start:port": "node server.js --port 3001",
    "start:custom": "node server.js --host 0.0.0.0 --port 3000 --dev",
    "setup": "npm install && npm run setup:logs",
    "setup:clean": "rm -rf mock-data/logs && mkdir -p mock-data/logs && echo 'Cleaned up mock logs directory.'",
    "setup:logs": "npm run setup:clean && node scripts/setup-logs.js",
    "test": "echo \"No tests yet\" && exit 0"
  },
  "dependencies": {
    "express": "^4.18.2",
    "cors": "^2.8.5"
  },
  "devDependencies": {
    "@types/node": "^18.0.0"
  },
  "keywords": [
    "sfcc",
    "webdav",
    "ocapi",
    "mock",
    "testing",
    "mcp",
    "salesforce",
    "b2c-commerce",
    "unified"
  ],
  "author": "SFCC Dev MCP",
  "license": "MIT",
  "engines": {
    "node": ">=16.0.0"
  }
}
```

--------------------------------------------------------------------------------
/docs/dw_system/PipelineDictionary.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.system

# Class PipelineDictionary

## Inheritance Hierarchy

- Object
  - dw.system.PipelineDictionary

## Description

The class provides access to the values in the pipeline dictionary. You use dynamic properties to access values, such as pdict.myvalue or pdict['myvalue']; The class is used in two different contexts, one where access is limited to the declared input/output values and second to a context with full access. Inside scripts, the PipelineDictionary allows you to access declared in/out values (regardless of the alias used in the pipeline and the actual key under which the value is stored). In templates and pipelines, all values can be accessed. In templates the pipeline dictionary is exposed as variable pdict (e.g. ${pdict.Product.ID}). There are several values that are automatically stored in the PipelineDictionary with each request. These include but are not limited to: CurrentSession CurrentRequest CurrentHttpParameterMap CurrentForms CurrentCustomer etc.

## Constructor Summary

## Method Summary
```

--------------------------------------------------------------------------------
/docs/TopLevel/Iterator.md:
--------------------------------------------------------------------------------

```markdown
## Package: TopLevel

# Class Iterator

## Inheritance Hierarchy

- Object
  - Iterator

## Description

An Iterator is a special object that lets you access items from a collection one at a time, while keeping track of its current position within that sequence.

## Constructor Summary

Iterator(object : Object) Creates an Iterator instance for the specified object.

Iterator(object : Object, keysOnly : boolean) Creates an Iterator instance for the specified object's keys.

## Method Summary

### next

**Signature:** `next() : Object`

Returns the next item in the iterator.

## Constructor Detail

## Method Detail

## Method Details

### next

**Signature:** `next() : Object`

**Description:** Returns the next item in the iterator. If there are no items left, the StopIteration exception is thrown. You should generally use this method in the context of a try...catch block to handle the StopIteration case. There is no guaranteed ordering of the data.

**Returns:**

the next item in the iterator.

**See Also:**

StopIteration

---
```

--------------------------------------------------------------------------------
/docs/dw_object/CustomObject.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.object

# Class CustomObject

## Inheritance Hierarchy

- Object
  - dw.object.PersistentObject
  - dw.object.ExtensibleObject
    - dw.object.CustomObject

## Description

Represents a custom object and its corresponding attributes.

## Properties

### custom

**Type:** CustomAttributes (Read Only)

The custom attributes of this
 object.

### type

**Type:** String (Read Only)

The type of the CustomObject.

## Constructor Summary

## Method Summary

### getCustom

**Signature:** `getCustom() : CustomAttributes`

Returns the custom attributes of this object.

### getType

**Signature:** `getType() : String`

Returns the type of the CustomObject.

## Method Detail

## Method Details

### getCustom

**Signature:** `getCustom() : CustomAttributes`

**Description:** Returns the custom attributes of this object.

**Returns:**

the custom attributes of this object.

---

### getType

**Signature:** `getType() : String`

**Description:** Returns the type of the CustomObject.

**Returns:**

the type of the CustomObject.

---
```

--------------------------------------------------------------------------------
/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-order.json:
--------------------------------------------------------------------------------

```json
{
  "_v": "23.2",
  "_type": "object_attribute_group_search_result",
  "count": 3,
  "hits": [
    {
      "_type": "object_attribute_group",
      "_resource_state": "256cec6da337c7b993ba0de0994a172eb411c100943c06b8d5656c915f1e2062",
      "id": "adyen",
      "link": "https://localhost:3000/s/-/dw/data/v23_2/system_object_definitions/Order/attribute_groups/adyen"
    },
    {
      "_type": "object_attribute_group",
      "_resource_state": "6c7374d3c12695b8144a566072c295a002e671b23c240a45ebb7e72d65310847",
      "id": "ccv",
      "link": "https://localhost:3000/s/-/dw/data/v23_2/system_object_definitions/Order/attribute_groups/ccv"
    },
    {
      "_type": "object_attribute_group",
      "_resource_state": "27a8a78cd8e1d604af912bce266d1c55d9ceae76513f18a221b2d27451ef6657",
      "id": "tracking",
      "link": "https://localhost:3000/s/-/dw/data/v23_2/system_object_definitions/Order/attribute_groups/tracking"
    }
  ],
  "query": {
    "match_all_query": {
      "_type": "match_all_query"
    }
  },
  "start": 0,
  "total": 3
}
```

--------------------------------------------------------------------------------
/docs-site/components/NextStepsStrip.tsx:
--------------------------------------------------------------------------------

```typescript
import React from 'react';
import { H3 } from './Typography';

export const NextStepsStrip: React.FC = () => {
  const cards = [
    { href: '/ai-interfaces', title: '🤖 AI Interface Setup', desc: 'Connect Claude, Copilot, Cursor' },
    { href: '/tools', title: '🛠️ Tool Surface', desc: 'Explore all available tools' },
    { href: '/examples', title: '💡 Examples', desc: 'Real prompts & outcomes' },
    { href: '/troubleshooting', title: '🐛 Troubleshooting', desc: 'Diagnose common issues' }
  ];
  return (
    <div className="grid sm:grid-cols-2 lg:grid-cols-4 gap-5 mt-4">
      {cards.map(c => (
        <a key={c.href} href={c.href} className="group block rounded-xl border border-gray-200 bg-white p-5 hover:border-blue-400 hover:shadow transition no-underline focus:outline-none focus:ring-2 focus:ring-blue-500">
          <H3 className="text-base font-semibold mb-1 group-hover:text-blue-700">{c.title}</H3>
          <p className="text-xs text-gray-600">{c.desc}</p>
        </a>
      ))}
    </div>
  );
};

export default NextStepsStrip;

```

--------------------------------------------------------------------------------
/src/core/handlers/job-log-handler.ts:
--------------------------------------------------------------------------------

```typescript
import { AbstractLogToolHandler } from './abstract-log-tool-handler.js';
import { HandlerContext } from './base-handler.js';
import { GenericToolSpec } from './base-handler.js';
import { ToolArguments } from './base-handler.js';
import { JOB_LOG_TOOL_CONFIG } from '../../tool-configs/job-log-tool-config.js';
import { JOB_LOG_TOOL_NAMES_SET, JobLogToolName } from '../../utils/log-tool-constants.js';

/**
 * Handler for job-specific log tools using config-driven dispatch
 * Separates job log operations from standard log operations for better maintainability
 */
export class JobLogToolHandler extends AbstractLogToolHandler<JobLogToolName> {
  constructor(context: HandlerContext, subLoggerName: string) {
    super(context, subLoggerName);
  }

  canHandle(toolName: string): boolean {
    return JOB_LOG_TOOL_NAMES_SET.has(toolName as JobLogToolName);
  }

  protected getToolNameSet(): Set<JobLogToolName> {
    return JOB_LOG_TOOL_NAMES_SET;
  }

  protected getToolConfig(): Record<string, GenericToolSpec<ToolArguments, any>> {
    return JOB_LOG_TOOL_CONFIG;
  }
}

```

--------------------------------------------------------------------------------
/docs/TopLevel/Boolean.md:
--------------------------------------------------------------------------------

```markdown
## Package: TopLevel

# Class Boolean

## Inheritance Hierarchy

- Object
  - Boolean

## Description

Provides support for boolean values.

## Constructor Summary

Boolean(value : String) Constructs the Boolean using the specified String value.

Boolean(value : Number) Constructs the Boolean using the specified Number value.

## Method Summary

### toString

**Signature:** `toString() : String`

Returns true or false depending on the value used to create the Boolean.

### valueOf

**Signature:** `valueOf() : Object`

Returns the primitive boolean contained in the Boolean object.

## Constructor Detail

## Method Detail

## Method Details

### toString

**Signature:** `toString() : String`

**Description:** Returns true or false depending on the value used to create the Boolean.

**Returns:**

true or false depending on the value used to create the Boolean.

---

### valueOf

**Signature:** `valueOf() : Object`

**Description:** Returns the primitive boolean contained in the Boolean object.

**Returns:**

the primitive boolean contained in the Boolean object.

---
```

--------------------------------------------------------------------------------
/docs/dw_campaign/ABTest.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.campaign

# Class ABTest

## Inheritance Hierarchy

- Object
  - dw.object.PersistentObject
  - dw.campaign.ABTest

## Description

Object representing an AB-test in Commerce Cloud Digital. AB-tests provide the merchant the ability to compare one set of storefront "experiences" - promotions, sorting rules, and slot configurations in particular - against another set. The merchant configures different AB-test segments which define the sets of experiences that the merchant wishes to test. AB-tests run for a configured period of time, and customers are randomly assigned by the platform to the test segments according to allocation percentages defined by the merchant.

## Properties

### ID

**Type:** String (Read Only)

Get the test ID for this AB-test.

## Constructor Summary

## Method Summary

### getID

**Signature:** `getID() : String`

Get the test ID for this AB-test.

## Method Detail

## Method Details

### getID

**Signature:** `getID() : String`

**Description:** Get the test ID for this AB-test.

**Returns:**

the test ID for this AB-test.

---
```

--------------------------------------------------------------------------------
/docs/dw_order/PaymentStatusCodes.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.order

# Class PaymentStatusCodes

## Inheritance Hierarchy

- Object
  - dw.order.PaymentStatusCodes

## Description

Helper class containing status codes for the various errors that can occur when validating a payment card. One of these codes is returned as part of a Status object when a unsuccessful call to the VerifyPaymentCard or VerifyCreditCard pipelet is made. The same codes are used when calling PaymentCard.verify(Number, Number, String) or PaymentCard.verify(Number, Number, String, String).

## Constants

### CREDITCARD_INVALID_CARD_NUMBER

**Type:** String = "CREDITCARD_INVALID_CARD_NUMBER"

The code indicates that the credit card number is incorrect.

### CREDITCARD_INVALID_EXPIRATION_DATE

**Type:** String = "CREDITCARD_INVALID_EXPIRATION_DATE"

The code indicates that the credit card is expired.

### CREDITCARD_INVALID_SECURITY_CODE

**Type:** String = "CREDITCARD_INVALID_SECURITY_CODE"

The code indicates that the credit card security code length is invalid.

## Properties

## Constructor Summary

PaymentStatusCodes()

## Method Summary

## Constructor Detail
```

--------------------------------------------------------------------------------
/docs/dw_extensions.payments/SalesforceKlarnaPaymentDetails.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.payments

# Class SalesforceKlarnaPaymentDetails

## Inheritance Hierarchy

- Object
  - dw.extensions.payments.SalesforcePaymentDetails
  - dw.extensions.payments.SalesforceKlarnaPaymentDetails

## Description

Details to a Salesforce Payments payment of type SalesforcePaymentMethod.TYPE_KLARNA. See Salesforce Payments documentation for how to gain access and configure it for use on your sites.

## Properties

### paymentMethodCategory

**Type:** String (Read Only)

The payment method category used for the payment, or null if not known.

## Constructor Summary

## Method Summary

### getPaymentMethodCategory

**Signature:** `getPaymentMethodCategory() : String`

Returns the payment method category used for the payment, or null if not known.

## Method Detail

## Method Details

### getPaymentMethodCategory

**Signature:** `getPaymentMethodCategory() : String`

**Description:** Returns the payment method category used for the payment, or null if not known.

**Returns:**

payment method category

**See Also:**

SalesforcePaymentMethod.getPaymentMethodCategory()

---
```

--------------------------------------------------------------------------------
/docs/dw_system/RESTSuccessResponse.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.system

# Class RESTSuccessResponse

## Inheritance Hierarchy

- Object
  - dw.system.RESTSuccessResponse

## Description

This class represents a REST success response that is compliant with the RFC standards. It can only be instantiated using the createSuccess methods in RESTResponseMgr. Here is an example: var body = {"hello": "world"} var success = RESTResponseMgr.createSuccess(body); success.render(); The above script would result in an HTTP response with status code 200 and the following body: { "hello": "world" }

## Constructor Summary

## Method Summary

### render

**Signature:** `render() : void`

Sends the RESTSuccessResponse object as an HTTP response to the client.

## Method Detail

## Method Details

### render

**Signature:** `render() : void`

**Description:** Sends the RESTSuccessResponse object as an HTTP response to the client. This sets the "Content-Type" header to "application/json" and expects the body to be a valid JavaScript JSON object.

**Throws:**

IllegalStateException - If the RESTSuccessResponse object is already rendered.
Exception - If there is an error while serializing the body.

---
```

--------------------------------------------------------------------------------
/docs/TopLevel/IOError.md:
--------------------------------------------------------------------------------

```markdown
## Package: TopLevel

# Class IOError

## Inheritance Hierarchy

- Object
  - TopLevel.Error
  - IOError

## Description

This error indicates an I/O related error in the system. The IOError is always related to a systems internal Java exception. The class provides access to some more details about this internal Java exception.

## Properties

### causeFullName

**Type:** String

If the exception is associated with a root cause, the property
 contains the full name of the associated Java exception.

### causeMessage

**Type:** String

If the exception is associated with a root cause, the property
 contains the message of the associated Java exception.

### causeName

**Type:** String

If the exception is associated with a root cause, the property
 contains the simplified name of the associated Java exception.

### javaFullName

**Type:** String

The full name of the underlying Java exception.

### javaMessage

**Type:** String

The message of the underlying Java exception.

### javaName

**Type:** String

The simplified name of the underlying Java exception.

## Constructor Summary

IOError()

## Method Summary

## Constructor Detail
```

--------------------------------------------------------------------------------
/docs/dw_suggest/SuggestedPhrase.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.suggest

# Class SuggestedPhrase

## Inheritance Hierarchy

- Object
  - dw.suggest.SuggestedPhrase

## Description

This class represents a suggested phrase. Use getPhrase() method to get access to the phrase.

## Properties

### exactMatch

**Type:** boolean (Read Only)

This method returns a flag signaling whether this phrase is a exact match.

### phrase

**Type:** String (Read Only)

This method returns the actual phrase as a string value.

## Constructor Summary

## Method Summary

### getPhrase

**Signature:** `getPhrase() : String`

This method returns the actual phrase as a string value.

### isExactMatch

**Signature:** `isExactMatch() : boolean`

This method returns a flag signaling whether this phrase is a exact match.

## Method Detail

## Method Details

### getPhrase

**Signature:** `getPhrase() : String`

**Description:** This method returns the actual phrase as a string value.

**Returns:**

the phrase

---

### isExactMatch

**Signature:** `isExactMatch() : boolean`

**Description:** This method returns a flag signaling whether this phrase is a exact match.

**Returns:**

true if this phrase is a exact match, false otherwise

---
```

--------------------------------------------------------------------------------
/docs/dw_web/URLRedirect.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.web

# Class URLRedirect

## Inheritance Hierarchy

- Object
  - dw.web.URLRedirect

## Description

Represents a URLRedirect in Commerce Cloud Digital.

## Properties

### location

**Type:** String (Read Only)

The URL which was calculated to be the redirect URL.
 The Location parameter can be directly used as value for an redirect location.

### status

**Type:** Number (Read Only)

The corresponding status code for the redirect location.

## Constructor Summary

## Method Summary

### getLocation

**Signature:** `getLocation() : String`

Returns the URL which was calculated to be the redirect URL.

### getStatus

**Signature:** `getStatus() : Number`

Returns the corresponding status code for the redirect location.

## Method Detail

## Method Details

### getLocation

**Signature:** `getLocation() : String`

**Description:** Returns the URL which was calculated to be the redirect URL. The Location parameter can be directly used as value for an redirect location.

**Returns:**

redirect location

---

### getStatus

**Signature:** `getStatus() : Number`

**Description:** Returns the corresponding status code for the redirect location.

**Returns:**

status code

---
```

--------------------------------------------------------------------------------
/docs/dw_io/CSVStreamWriter.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.io

# Class CSVStreamWriter

## Inheritance Hierarchy

- Object
  - dw.io.CSVStreamWriter

## Description

The class writes a CSV file. Note: when this class is used with sensitive data, be careful in persisting sensitive information to disk.

## Constructor Summary

CSVStreamWriter(writer : Writer) Create a new CSVStreamWriter with a ',' as separator and '"' as quote character.

CSVStreamWriter(writer : Writer, separator : String) Create a new CSVStreamWriter with the specified separator and '"' as quote character.

CSVStreamWriter(writer : Writer, separator : String, quote : String) Create a new CSVStreamWriter with the specified separator and the specified quote character.

## Method Summary

### close

**Signature:** `close() : void`

Closes the underlying writer.

### writeNext

**Signature:** `writeNext(line : String...) : void`

Write a single line to the CSV file.

## Constructor Detail

## Method Detail

## Method Details

### close

**Signature:** `close() : void`

**Description:** Closes the underlying writer.

---

### writeNext

**Signature:** `writeNext(line : String...) : void`

**Description:** Write a single line to the CSV file.

**Parameters:**

- `line`: an array of strings.

---
```

--------------------------------------------------------------------------------
/docs-site/package.json:
--------------------------------------------------------------------------------

```json
{
  "name": "sfcc-dev-mcp-docs",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  "scripts": {
    "dev": "npm run build:css && vite-react-ssg dev",
    "build": "npm run build:css && npm run generate:search-index && npm run generate:sitemap && vite-react-ssg build",
    "preview": "vite preview",
    "build:css": "tailwindcss -i ./src/styles/input.css -o ./public/index.css",
    "build:css:watch": "tailwindcss -i ./src/styles/input.css -o ./public/index.css --watch",
    "generate:search-index": "node scripts/generate-search-index.js",
    "generate:sitemap": "node scripts/generate-sitemap.js",
    "search-dev": "node scripts/search-dev.js",
    "search:generate": "node scripts/search-dev.js generate",
    "search:validate": "node scripts/search-dev.js validate"
  },
  "dependencies": {
    "@tailwindcss/typography": "^0.5.16",
    "@types/prismjs": "^1.26.5",
    "prismjs": "^1.30.0",
    "react": "^19.1.1",
    "react-dom": "^19.1.1",
    "react-router-dom": "^6.30.1"
  },
  "devDependencies": {
    "@types/node": "^22.14.0",
    "autoprefixer": "^10.4.20",
    "postcss": "^8.4.49",
    "tailwindcss": "^3.4.17",
    "typescript": "~5.8.2",
    "vite": "^6.2.0",
     "vite-react-ssg": "^0.8.9"
  }
}

```

--------------------------------------------------------------------------------
/docs/TopLevel/SystemError.md:
--------------------------------------------------------------------------------

```markdown
## Package: TopLevel

# Class SystemError

## Inheritance Hierarchy

- Object
  - TopLevel.Error
  - SystemError

## Description

This error indicates an error in the system, which doesn't fall into any of the other error categories like for example IOError. The SystemError is always related to a systems internal Java exception. The class provides access to some more details about this internal Java exception.

## Properties

### causeFullName

**Type:** String

If the exception is associated with a root cause, the property
 contains the full name of the associated Java exception.

### causeMessage

**Type:** String

If the exception is associated with a root cause, the property
 contains the message of the associated Java exception.

### causeName

**Type:** String

If the exception is associated with a root cause, the property
 contains the simplified name of the associated Java exception.

### javaFullName

**Type:** String

The full name of the underlying Java exception.

### javaMessage

**Type:** String

The message of the underlying Java exception.

### javaName

**Type:** String

The simplified name of the underlying Java exception.

## Constructor Summary

SystemError()

## Method Summary

## Constructor Detail
```

--------------------------------------------------------------------------------
/docs/dw_web/URLAction.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.web

# Class URLAction

## Inheritance Hierarchy

- Object
  - dw.web.URLAction

## Description

The class is needed for the URL creation within template processing. It represents a reference to a pipeline name and start node, usually used in a HREF or a FORM action. URLAction instances are usually passed to one of the methods in URLUtils in order to generate an appropriately constructed Commerce Cloud Digital URL. For example: var urlAction : URLAction = new URLAction("SimplePipeline-Start", "SampleSite"); var url : URL = URLUtils.abs(false, urlAction1); // url.toString() equals "http://" + request.httpHost + "/on/demandware.store/Sites-SampleSite-Site/default/SimplePipeline-Start"

## Constructor Summary

URLAction(action : String) Constructs an action for the current site and locale.

URLAction(action : String, siteName : String) Constructs an action for the specified site and the current locale.

URLAction(action : String, siteName : String, locale : String) Constructs an action for the specified site and locale.

URLAction(action : String, siteName : String, locale : String, hostName : String) Constructs an URL action for the specified site, locale and hostname.

## Method Summary

## Constructor Detail
```

--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE/documentation.md:
--------------------------------------------------------------------------------

```markdown
## 📚 Documentation Update

### Documentation Type
- [ ] README.md updates
- [ ] copilot-instructions.md updates
- [ ] API documentation (docs/ folder)
- [ ] Best practices guides
- [ ] Code comments/JSDoc
- [ ] Configuration examples
- [ ] Troubleshooting guide

### Changes Made
<!-- Describe what documentation was updated and why -->

### Content Updates
- [ ] New sections added
- [ ] Existing content revised for accuracy
- [ ] Broken links fixed
- [ ] Examples updated/added
- [ ] Structure/organization improved
- [ ] Grammar/spelling corrections
- [ ] Accessibility improvements

### Consistency Checks
- [ ] README.md and copilot-instructions.md kept in sync
- [ ] Tool counts accurate in both files
- [ ] File structure diagrams updated
- [ ] Version numbers consistent
- [ ] Links and references validated

### Target Audience
- [ ] New users/first-time setup
- [ ] SFCC developers using the MCP server
- [ ] Contributors and maintainers
- [ ] Advanced users and integrators

### Validation
- [ ] Markdown syntax validated
- [ ] Links tested and functional
- [ ] Code examples tested
- [ ] Configuration examples verified
- [ ] Screenshots/diagrams current

### Related Issues
Closes #

---
**This PR improves project documentation to enhance user experience and maintainability.**

```

--------------------------------------------------------------------------------
/docs/dw_catalog/ProductSearchRefinementValue.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.catalog

# Class ProductSearchRefinementValue

## Inheritance Hierarchy

- Object
  - dw.catalog.SearchRefinementValue
  - dw.catalog.ProductSearchRefinementValue

## Description

Represents the value of a product search refinement.

## Properties

### valueFrom

**Type:** Number (Read Only)

The lower bound for price refinements.  For example, 50.00
 for a range of $50.00 - $99.99.

### valueTo

**Type:** Number (Read Only)

The upper bound for price refinements.  For example, 99.99
 for a range of $50.00 - $99.99.

## Constructor Summary

## Method Summary

### getValueFrom

**Signature:** `getValueFrom() : Number`

Returns the lower bound for price refinements.

### getValueTo

**Signature:** `getValueTo() : Number`

Returns the upper bound for price refinements.

## Method Detail

## Method Details

### getValueFrom

**Signature:** `getValueFrom() : Number`

**Description:** Returns the lower bound for price refinements. For example, 50.00 for a range of $50.00 - $99.99.

**Returns:**

the lower bound for price refinements.

---

### getValueTo

**Signature:** `getValueTo() : Number`

**Description:** Returns the upper bound for price refinements. For example, 99.99 for a range of $50.00 - $99.99.

**Returns:**

the upper bound for price refinements.

---
```

--------------------------------------------------------------------------------
/docs-site/components/Collapsible.tsx:
--------------------------------------------------------------------------------

```typescript
import React from 'react';

interface CollapsibleProps {
  title: string;
  defaultOpen?: boolean;
  children: React.ReactNode;
  intent?: 'info' | 'warn' | 'danger' | 'plain';
  id?: string;
  className?: string;
}

const intentStyles: Record<string,string> = {
  info: 'border-blue-200 bg-blue-50',
  warn: 'border-yellow-200 bg-yellow-50',
  danger: 'border-red-200 bg-red-50',
  plain: 'border-gray-200 bg-white'
};

export const Collapsible: React.FC<CollapsibleProps> = ({ title, defaultOpen=false, children, intent='plain', id, className = '' }) => {
  const [open, setOpen] = React.useState(defaultOpen);
  return (
    <div id={id} className={`rounded-xl border ${intentStyles[intent]} overflow-hidden ${className}`}> 
      <button
        onClick={() => setOpen(o=>!o)}
        className="w-full flex items-center justify-between px-5 py-3 text-left text-sm font-semibold text-gray-800 focus:outline-none focus:ring-2 focus:ring-blue-500"
        aria-expanded={open}
      >
        <span>{title}</span>
        <span className="ml-4 text-gray-500">{open ? '−' : '+'}</span>
      </button>
      {open && (
        <div className="px-5 pb-5 pt-1 text-sm text-gray-700 space-y-4 animate-fade-in">
          {children}
        </div>
      )}
    </div>
  );
};

export default Collapsible;

```

--------------------------------------------------------------------------------
/docs/dw_customer/CustomerContextMgr.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.customer

# Class CustomerContextMgr

## Inheritance Hierarchy

- Object
  - dw.customer.CustomerContextMgr

## Description

Provides helper methods for managing customer context, such as the Effective Time for which the customer is shopping at

## Properties

### effectiveTime

**Type:** Date

Get the effective time associated with the customer. By default, the effective time is null.

## Constructor Summary

## Method Summary

### getEffectiveTime

**Signature:** `static getEffectiveTime() : Date`

Get the effective time associated with the customer.

### setEffectiveTime

**Signature:** `static setEffectiveTime(effectiveTime : Date) : void`

Set the effective time for the customer.

## Method Detail

## Method Details

### getEffectiveTime

**Signature:** `static getEffectiveTime() : Date`

**Description:** Get the effective time associated with the customer. By default, the effective time is null.

**Returns:**

effective time. When null is returned it means no effective time is associated with the customer

---

### setEffectiveTime

**Signature:** `static setEffectiveTime(effectiveTime : Date) : void`

**Description:** Set the effective time for the customer. Null is allowed to remove effective time from the customer.

**Parameters:**

- `effectiveTime`: the effective time.

---
```

--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE/bug_fix.md:
--------------------------------------------------------------------------------

```markdown
## 🐛 Bug Fix

### Bug Summary
<!-- Brief description of the bug being fixed -->

### Root Cause Analysis
<!-- Explain what caused the bug -->

### Solution Approach
<!-- Describe how the fix addresses the root cause -->

### Changes Made
- [ ] Code changes in specific files
- [ ] Configuration updates
- [ ] Dependency updates
- [ ] Test additions/modifications

### Files Modified
<!-- List the main files changed -->
- 
- 
- 

### Testing Strategy
- [ ] Regression tests added to prevent reoccurrence
- [ ] Existing tests updated if needed
- [ ] Manual testing performed
- [ ] Edge cases validated
- [ ] Both operating modes tested (if applicable)

### Backward Compatibility
- [ ] No breaking changes
- [ ] Breaking changes documented and justified
- [ ] Migration guide provided (if breaking)

### Risk Assessment
- [ ] Low risk - isolated change
- [ ] Medium risk - affects multiple components
- [ ] High risk - core functionality changes

### Verification Steps
<!-- How to verify the fix works -->
1. 
2. 
3. 

### Performance Impact
- [ ] No performance impact
- [ ] Performance improvement
- [ ] Minimal performance impact (acceptable)

### Related Issues
Fixes #

### Additional Notes
<!-- Any other relevant information -->

---
**This PR resolves a bug while maintaining system stability and backward compatibility.**

```

--------------------------------------------------------------------------------
/docs/dw_system/OrganizationPreferences.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.system

# Class OrganizationPreferences

## Inheritance Hierarchy

- Object
  - dw.object.PersistentObject
  - dw.object.ExtensibleObject
    - dw.system.OrganizationPreferences

## Description

OrganizationPreferences is a container for custom global (i.e. organization-level) attributes. The object corresponds with system object definition "OrganizationPreferences". It has no system attributes and exists only as a place for merchants to define custom attributes which need to be available to all of their sites. An instance is obtained by calling System.getPreferences(). Once an instance of the container is obtained, it is possible to read/write organization preference values by using the usual syntax for ExtensibleObject instances. For example: var orgPrefs : OrganizationPreferences = dw.system.System.getPreferences(); var myOrgPrefValue : String = orgPrefs.getCustom()["myOrgPref"]; Note: this class allows access to sensitive security-related data. Pay special attention to PCI DSS v3. requirements 2, 4, and 12. Commerce Cloud Digital defines many organization-level preferences, relating to locale, timezone, geolocations, etc, which can be managed within the "Global Preferences" module of the Business Manager, but these preferences are not accessible through this object.

## Constructor Summary

## Method Summary
```

--------------------------------------------------------------------------------
/docs/dw_extensions.payments/SalesforcePaymentDetails.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.payments

# Class SalesforcePaymentDetails

## Inheritance Hierarchy

- Object
  - dw.extensions.payments.SalesforcePaymentDetails

## Description

Base class details to a Salesforce Payments payment. See Salesforce Payments documentation for how to gain access and configure it for use on your sites. Some payment types like SalesforcePaymentMethod.TYPE_CARD contain additional details like the card brand, or the last 4 digits of the card number. Details to those payments will be of a specific subclass of this class like SalesforceCardPaymentDetails. Other payment types have no additional information so their details are represented by an object of this base type.

## Properties

### type

**Type:** String (Read Only)

The payment type.

## Constructor Summary

## Method Summary

### getType

**Signature:** `getType() : String`

Returns the payment type.

## Method Detail

## Method Details

### getType

**Signature:** `getType() : String`

**Description:** Returns the payment type.

**Returns:**

payment type

**See Also:**

SalesforcePaymentMethod.TYPE_BANCONTACT
SalesforcePaymentMethod.TYPE_CARD
SalesforcePaymentMethod.TYPE_EPS
SalesforcePaymentMethod.TYPE_IDEAL
SalesforcePaymentMethod.TYPE_KLARNA
SalesforcePaymentMethod.TYPE_SEPA_DEBIT
SalesforcePayPalOrder.TYPE_PAYPAL
SalesforcePayPalOrder.TYPE_VENMO

---
```

--------------------------------------------------------------------------------
/docs/dw_customer/CustomerList.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.customer

# Class CustomerList

## Inheritance Hierarchy

- Object
  - dw.customer.CustomerList

## Description

Object representing the collection of customers who are registered for a given site. In Commerce Cloud Digital, every site has exactly one assigned customer list but multiple sites may share a customer list.

## Properties

### description

**Type:** String (Read Only)

Get the optional description of the customer list.

### ID

**Type:** String (Read Only)

Get the ID of the customer list.  For customer lists that were created automatically
 for a given site, this is equal to the ID of the site itself.

## Constructor Summary

## Method Summary

### getDescription

**Signature:** `getDescription() : String`

Get the optional description of the customer list.

### getID

**Signature:** `getID() : String`

Get the ID of the customer list.

## Method Detail

## Method Details

### getDescription

**Signature:** `getDescription() : String`

**Description:** Get the optional description of the customer list.

**Returns:**

The optional description of the list.

---

### getID

**Signature:** `getID() : String`

**Description:** Get the ID of the customer list. For customer lists that were created automatically for a given site, this is equal to the ID of the site itself.

**Returns:**

The ID of the customer list.

---
```

--------------------------------------------------------------------------------
/docs/dw_customer/CustomerCDPData.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.customer

# Class CustomerCDPData

## Inheritance Hierarchy

- Object
  - dw.customer.CustomerCDPData

## Description

Represents the read-only Customer's Salesforce CDP (Customer Data Platform) data for a Customer in Commerce Cloud. Please see Salesforce CDP enablement documentation

## Properties

### empty

**Type:** boolean (Read Only)

Return true if the CDPData is empty (has no meaningful data)

### segments

**Type:** String (Read Only)

An array containing the CDP segments for the customer, or an empty array if no segments found

## Constructor Summary

## Method Summary

### getSegments

**Signature:** `getSegments() : String[]`

Returns an array containing the CDP segments for the customer, or an empty array if no segments found

### isEmpty

**Signature:** `isEmpty() : boolean`

Return true if the CDPData is empty (has no meaningful data)

## Method Detail

## Method Details

### getSegments

**Signature:** `getSegments() : String[]`

**Description:** Returns an array containing the CDP segments for the customer, or an empty array if no segments found

**Returns:**

a collection containing the CDP segments for the customer

---

### isEmpty

**Signature:** `isEmpty() : boolean`

**Description:** Return true if the CDPData is empty (has no meaningful data)

**Returns:**

true if CDPData is empty, false otherwise

---
```

--------------------------------------------------------------------------------
/docs/dw_campaign/CouponRedemption.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.campaign

# Class CouponRedemption

## Inheritance Hierarchy

- Object
  - dw.campaign.CouponRedemption

## Description

Represents a redeemed coupon.

## Properties

### customerEmail

**Type:** String (Read Only)

Returns email of redeeming customer.

### orderNo

**Type:** String (Read Only)

Returns number of the order the code was redeemed with.

### redemptionDate

**Type:** Date (Read Only)

Returns date of redemption.

## Constructor Summary

## Method Summary

### getCustomerEmail

**Signature:** `getCustomerEmail() : String`

Returns email of redeeming customer.

### getOrderNo

**Signature:** `getOrderNo() : String`

Returns number of the order the code was redeemed with.

### getRedemptionDate

**Signature:** `getRedemptionDate() : Date`

Returns date of redemption.

## Method Detail

## Method Details

### getCustomerEmail

**Signature:** `getCustomerEmail() : String`

**Description:** Returns email of redeeming customer.

**Returns:**

email of redeeming customer.

---

### getOrderNo

**Signature:** `getOrderNo() : String`

**Description:** Returns number of the order the code was redeemed with.

**Returns:**

number of the order the code was redeemed with.

---

### getRedemptionDate

**Signature:** `getRedemptionDate() : Date`

**Description:** Returns date of redemption.

**Returns:**

date of redemption.

---
```

--------------------------------------------------------------------------------
/docs/dw_object/ObjectAttributeValueDefinition.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.object

# Class ObjectAttributeValueDefinition

## Inheritance Hierarchy

- Object
  - dw.object.ObjectAttributeValueDefinition

## Description

Represents the value definition associated with an object attribute.

## Properties

### displayValue

**Type:** String (Read Only)

A display name that can be used to present this value in
 the user interface. For example, the value might be '1' but the display
 name might be 'Order Exported'.

### value

**Type:** Object (Read Only)

The actual value for the attribute.

## Constructor Summary

## Method Summary

### getDisplayValue

**Signature:** `getDisplayValue() : String`

Returns a display name that can be used to present this value in the user interface.

### getValue

**Signature:** `getValue() : Object`

Returns the actual value for the attribute.

## Method Detail

## Method Details

### getDisplayValue

**Signature:** `getDisplayValue() : String`

**Description:** Returns a display name that can be used to present this value in the user interface. For example, the value might be '1' but the display name might be 'Order Exported'.

**Returns:**

a display name that can be used to present this value in the user interface.

---

### getValue

**Signature:** `getValue() : Object`

**Description:** Returns the actual value for the attribute.

**Returns:**

the actual value for the attribute.

---
```

--------------------------------------------------------------------------------
/docs/dw_catalog/StoreGroup.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.catalog

# Class StoreGroup

## Inheritance Hierarchy

- Object
  - dw.object.PersistentObject
  - dw.object.ExtensibleObject
    - dw.catalog.StoreGroup

## Description

Represents a store group. Store groups can be used to group the stores for different marketing purposes.

## Properties

### ID

**Type:** String (Read Only)

The ID of the store group.

### name

**Type:** String (Read Only)

The name of the store group.

### stores

**Type:** Collection (Read Only)

All the stores that are assigned to the store group.

## Constructor Summary

## Method Summary

### getID

**Signature:** `getID() : String`

Returns the ID of the store group.

### getName

**Signature:** `getName() : String`

Returns the name of the store group.

### getStores

**Signature:** `getStores() : Collection`

Returns all the stores that are assigned to the store group.

## Method Detail

## Method Details

### getID

**Signature:** `getID() : String`

**Description:** Returns the ID of the store group.

**Returns:**

ID of the store group

---

### getName

**Signature:** `getName() : String`

**Description:** Returns the name of the store group.

**Returns:**

name of the store group

---

### getStores

**Signature:** `getStores() : Collection`

**Description:** Returns all the stores that are assigned to the store group.

**Returns:**

collection of the stores

---
```

--------------------------------------------------------------------------------
/docs/dw_extensions.payments/SalesforceBancontactPaymentDetails.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.payments

# Class SalesforceBancontactPaymentDetails

## Inheritance Hierarchy

- Object
  - dw.extensions.payments.SalesforcePaymentDetails
  - dw.extensions.payments.SalesforceBancontactPaymentDetails

## Description

Details to a Salesforce Payments payment of type SalesforcePaymentMethod.TYPE_BANCONTACT. See Salesforce Payments documentation for how to gain access and configure it for use on your sites.

## Properties

### bankName

**Type:** String (Read Only)

The bank name, or null if not known.

### last4

**Type:** String (Read Only)

The last 4 digits of the account number, or null if not known.

## Constructor Summary

## Method Summary

### getBankName

**Signature:** `getBankName() : String`

Returns the bank name, or null if not known.

### getLast4

**Signature:** `getLast4() : String`

Returns the last 4 digits of the account number, or null if not known.

## Method Detail

## Method Details

### getBankName

**Signature:** `getBankName() : String`

**Description:** Returns the bank name, or null if not known.

**Returns:**

bank name

**See Also:**

SalesforcePaymentMethod.getBankName()

---

### getLast4

**Signature:** `getLast4() : String`

**Description:** Returns the last 4 digits of the account number, or null if not known.

**Returns:**

last 4 digits of the account number

**See Also:**

SalesforcePaymentMethod.getLast4()

---
```

--------------------------------------------------------------------------------
/docs/TopLevel/XMLStreamError.md:
--------------------------------------------------------------------------------

```markdown
## Package: TopLevel

# Class XMLStreamError

## Inheritance Hierarchy

- Object
  - TopLevel.Error
  - XMLStreamError

## Description

This error indicates an XML streaming related error in the system. The IOError is always related to a systems internal Java exception. The class provides access to some more details about this internal Java exception. In particular the class informs about the location of the error.

## Properties

### causeFullName

**Type:** String

If the exception is associated with a root cause, the property
 contains the full name of the associated Java exception.

### causeMessage

**Type:** String

If the exception is associated with a root cause, the property
 contains the message of the associated Java exception.

### causeName

**Type:** String

If the exception is associated with a root cause, the property
 contains the simplified name of the associated Java exception.

### javaFullName

**Type:** String

The full name of the underlying Java exception.

### javaMessage

**Type:** String

The message of the underlying Java exception.

### javaName

**Type:** String

The simplified name of the underlying Java exception.

### xmlColumnNumber

**Type:** Number

The column number where the error occured.

### xmlLineNumber

**Type:** Number

The line where the error occured.

## Constructor Summary

XMLStreamError()

## Method Summary

## Constructor Detail
```

--------------------------------------------------------------------------------
/docs/dw_object/Extensible.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.object

# Class Extensible

## Inheritance Hierarchy

- Object
  - dw.object.Extensible

## Description

Base class alternative to ExtensibleObject for objects customizable through the metadata system. Similar to ExtensibleObject: the describe() method provides access to the related object-type metadata. The getCustom() method is the central point to retrieve and store the objects attribute values themselves.

## Properties

### custom

**Type:** CustomAttributes (Read Only)

The custom attributes for this object.

## Constructor Summary

## Method Summary

### describe

**Signature:** `describe() : ObjectTypeDefinition`

Returns the meta data of this object.

### getCustom

**Signature:** `getCustom() : CustomAttributes`

Returns the custom attributes for this object.

## Method Detail

## Method Details

### describe

**Signature:** `describe() : ObjectTypeDefinition`

**Description:** Returns the meta data of this object. If no meta data is available the method returns null. The returned ObjectTypeDefinition can be used to retrieve the metadata for any of the custom attributes.

**Returns:**

the meta data of this object. If no meta data is available the method returns null.

---

### getCustom

**Signature:** `getCustom() : CustomAttributes`

**Description:** Returns the custom attributes for this object.

**Returns:**

the custom attributes for this object.

---
```

--------------------------------------------------------------------------------
/docs/dw_system/CacheMgr.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.system

# Class CacheMgr

## Inheritance Hierarchy

- Object
  - dw.system.CacheMgr

## Description

The CacheMgr class is the entry point for using custom caches. The CacheMgr can manage multiple custom caches that share one storage space. Each individual cache has a unique ID and an optional expiration time that specifies the maximum time (in seconds) an entry is stored in the cache. For registering caches inside the cartridge root folder, a 'package.json' file with a 'caches' entry must exist. The registration of caches is independent of any site context. "caches": "./caches.json" The caches entry links to a JSON file, with a path relative to the 'package.json' file. This file lists all registered caches inside the caches property: { "caches": [ { "id": "UnlimitedTestCache" }, { "id": "TestCacheWithExpiration", "expireAfterSeconds": 10 } ] }

## Constructor Summary

## Method Summary

### getCache

**Signature:** `static getCache(cacheID : String) : Cache`

Returns the defined cache instance for the given ID.

## Method Detail

## Method Details

### getCache

**Signature:** `static getCache(cacheID : String) : Cache`

**Description:** Returns the defined cache instance for the given ID. Throws an exception when the requested cache has not been defined in any caches.json descriptor.

**Parameters:**

- `cacheID`: The ID of the cache.

**Returns:**

The registered cache.

---
```

--------------------------------------------------------------------------------
/docs/dw_util/DateUtils.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.util

# Class DateUtils

## Inheritance Hierarchy

- Object
  - dw.util.DateUtils

## Description

A class with several utility methods for Date objects.

## Constructor Summary

## Method Summary

### nowForInstance

**Signature:** `static nowForInstance() : Date`

Returns the current time stamp in the time zone of the instance.

### nowForSite

**Signature:** `static nowForSite() : Date`

Returns the current timestamp in the time zone of the current site.

### nowInUTC

**Signature:** `static nowInUTC() : Date`

Returns the current time stamp in UTC.

## Method Detail

## Method Details

### nowForInstance

**Signature:** `static nowForInstance() : Date`

**Description:** Returns the current time stamp in the time zone of the instance.

**Deprecated:**

Use System.getCalendar() instead.

**Returns:**

the current time stamp in the time zone of the instance.

---

### nowForSite

**Signature:** `static nowForSite() : Date`

**Description:** Returns the current timestamp in the time zone of the current site.

**Deprecated:**

Use Site.getCalendar() instead.

**Returns:**

the current timestamp in the time zone of the current site.

---

### nowInUTC

**Signature:** `static nowInUTC() : Date`

**Description:** Returns the current time stamp in UTC.

**Deprecated:**

Create a new Calendar object and set the time zone "UTC" instead.

**Returns:**

the current time stamp in UTC.

---
```

--------------------------------------------------------------------------------
/src/clients/logs/log-types.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * TypeScript interfaces and types for log operations
 */

export type LogLevel = 'error' | 'warn' | 'info' | 'debug';

export interface LogFileInfo {
  name: string;
  size: number;
  lastModified: string;
}

export interface LogFileMetadata {
  filename: string;
  lastmod: string;
}

export interface LogSummary {
  date: string;
  errorCount: number;
  warningCount: number;
  infoCount: number;
  debugCount: number;
  keyIssues: string[];
  files: string[];
}

export interface LogEntry {
  entry: string;
  filename: string;
  order: number;
  timestamp?: Date; // Extracted timestamp for chronological sorting
}

export interface ProcessedLogEntry {
  content: string;
  timestamp?: string;
  level?: string;
  source?: string;
}

export interface LogSearchOptions {
  pattern: string;
  logLevel?: LogLevel;
  limit: number;
  date?: string;
}

export interface LogFileFilter {
  level?: LogLevel;
  date?: string;
  includeCustom?: boolean;
  includeJobLogs?: boolean;
}

export interface JobLogInfo {
  jobName: string;
  jobId: string;
  logFile: string;
  lastModified: string;
  size?: number;
}

export interface JobLogFilter {
  jobName?: string;
  limit?: number;
  sortByRecent?: boolean;
}

export interface WebDAVClientConfig {
  hostname: string;
  username?: string;
  password?: string;
  clientId?: string;
  clientSecret?: string;
}

export interface FileReadOptions {
  maxBytes?: number;
}

```

--------------------------------------------------------------------------------
/.github/workflows/deploy-pages.yml:
--------------------------------------------------------------------------------

```yaml
name: Deploy GitHub Pages

on:
  push:
    branches: [ main ]
    paths:
      - 'docs-site/**'
      - '.github/workflows/deploy-pages.yml'
  pull_request:
    branches: [ main ]
    paths:
      - 'docs-site/**'
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v5

      - name: Setup Node.js
        uses: actions/setup-node@v5
        with:
          node-version: '18'
          cache: 'npm'
          cache-dependency-path: './docs-site/package-lock.json'

      - name: Install dependencies
        working-directory: ./docs-site
        run: npm ci

      - name: Clean build directory
        working-directory: ./docs-site
        run: rm -rf dist

      - name: Build site
        working-directory: ./docs-site
        run: npm run build
        env:
          NODE_ENV: production

      - name: Setup Pages
        uses: actions/configure-pages@v5

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v4
        with:
          path: ./docs-site/dist

  deploy:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

```

--------------------------------------------------------------------------------
/docs-site/components/LightCodeContainer.tsx:
--------------------------------------------------------------------------------

```typescript
import React from 'react';

interface LightCodeContainerProps {
  children: React.ReactNode;
  className?: string;
  /**
   * Visual accent variant. Currently only 'blue' is used but additional
   * variants are easy to extend without editing all call sites again.
   */
  variant?: 'blue' | 'green' | 'purple' | 'indigo' | 'amber' | 'gray';
  /**
   * If true, removes the default shadow for flatter contexts.
   */
  flat?: boolean;
}

const VARIANT_STYLES: Record<string, { bg: string; border: string }> = {
  blue: { bg: 'bg-blue-50', border: 'border-blue-100' },
  green: { bg: 'bg-green-50', border: 'border-green-100' },
  purple: { bg: 'bg-purple-50', border: 'border-purple-100' },
  indigo: { bg: 'bg-indigo-50', border: 'border-indigo-100' },
  amber: { bg: 'bg-amber-50', border: 'border-amber-100' },
  gray: { bg: 'bg-gray-50', border: 'border-gray-200' }
};

/**
 * Standardized light accent container for wrapping code blocks (or related content)
 * ensuring consistent styling across pages instead of ad-hoc duplicated class names.
 */
const LightCodeContainer: React.FC<LightCodeContainerProps> = ({
  children,
  className = '',
  variant = 'blue',
  flat = false
}) => {
  const { bg, border } = VARIANT_STYLES[variant] || VARIANT_STYLES.blue;
  return (
    <div className={`${bg} ${border} rounded-xl p-6 ${flat ? '' : 'shadow-md'} ${className}`.trim()}>
      {children}
    </div>
  );
};

export default LightCodeContainer;

```

--------------------------------------------------------------------------------
/docs/dw_io/PrintWriter.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.io

# Class PrintWriter

## Inheritance Hierarchy

- Object
  - dw.io.Writer
  - dw.io.PrintWriter

## Description

Template output stream writer. Printwriter is available in the template scripting context and is used to write data into the template output stream. You cannot instantiate this class directly. Instead, the system assigns the object to variable named 'out' in the script context to be used by the template scripts. Note: when this class is used with sensitive data, be careful in persisting sensitive information to disk.

## Constructor Summary

## Method Summary

### print

**Signature:** `print(str : String) : void`

Prints the given string into the output stream.

### println

**Signature:** `println(str : String) : void`

Print the given string followed by a line break into the output stream.

### println

**Signature:** `println() : void`

Prints a line break into the output stream.

## Method Detail

## Method Details

### print

**Signature:** `print(str : String) : void`

**Description:** Prints the given string into the output stream.

**Parameters:**

- `str`: the String object

---

### println

**Signature:** `println(str : String) : void`

**Description:** Print the given string followed by a line break into the output stream.

**Parameters:**

- `str`: the String object

---

### println

**Signature:** `println() : void`

**Description:** Prints a line break into the output stream.

---
```

--------------------------------------------------------------------------------
/docs/dw_suggest/ProductSuggestions.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.suggest

# Class ProductSuggestions

## Inheritance Hierarchy

- Object
  - dw.suggest.Suggestions
  - dw.suggest.ProductSuggestions

## Description

The product suggestion container provides access to products found using the suggested terms. The method getSuggestedProducts() can be used to get the list of found products. Furthermore the list of suggested terms, after processing the original user input search query, is accessible through SearchPhraseSuggestions.getSuggestedTerms() method.

## Properties

### suggestedProducts

**Type:** Iterator (Read Only)

This method returns a list of products which were found
 using the suggested terms as search criteria.
 The product lookup is being executed in the current catalog and locale.

## Constructor Summary

## Method Summary

### getSuggestedProducts

**Signature:** `getSuggestedProducts() : Iterator`

This method returns a list of products which were found using the suggested terms as search criteria.

## Method Detail

## Method Details

### getSuggestedProducts

**Signature:** `getSuggestedProducts() : Iterator`

**Description:** This method returns a list of products which were found using the suggested terms as search criteria. The product lookup is being executed in the current catalog and locale.

**Returns:**

a iterator containing a SuggestedProduct instance for each found product, the iterator might be empty

**See Also:**

Suggestions.hasSuggestions()

---
```

--------------------------------------------------------------------------------
/src/utils/path-resolver.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Path Resolver Helper
 *
 * Provides utilities for resolving file and directory paths based on the current working directory.
 * This abstraction allows for easier path management and testing.
 */

import path from 'path';
import { fileURLToPath } from 'url';

export class PathResolver {
  /**
   * Get the current working directory (project root)
   */
  static getCurrentWorkingDir(): string {
    // Get the directory of the current module file
    const __filename = fileURLToPath(import.meta.url);
    const __dirname = path.dirname(__filename);

    // Return the parent directory (project root)
    return path.resolve(__dirname, '..');
  }

  /**
   * Get a path relative to the current working directory
   */
  static getRelativePath(...pathSegments: string[]): string {
    const currentDir = this.getCurrentWorkingDir();

    return path.join(currentDir, ...pathSegments);
  }

  /**
   * Get the docs directory path relative to the current working directory
   */
  static getDocsPath(): string {
    return this.getRelativePath('docs');
  }

  /**
   * Get the best practices docs directory path relative to the current working directory
   */
  static getBestPracticesPath(): string {
    return this.getRelativePath('docs', 'best-practices');
  }

  /**
   * Get the SFRA docs directory path relative to the current working directory
   */
  static getSFRADocsPath(): string {
    return this.getRelativePath('docs', 'sfra');
  }
}

```

--------------------------------------------------------------------------------
/docs/dw_web/Form.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.web

# Class Form

## Inheritance Hierarchy

- Object
  - dw.web.FormElement
  - dw.web.FormGroup
    - dw.web.Form

## Description

The class is the top level element in the form instance hierachy.

## Properties

### secureKeyHtmlName

**Type:** String (Read Only)

The secure key html name to be used for the hidden input field
 that will contain the secure key value.

### secureKeyValue

**Type:** String (Read Only)

The secure key value that is generated for the form to use
 in a hidden input field for authentication.

## Constructor Summary

## Method Summary

### getSecureKeyHtmlName

**Signature:** `getSecureKeyHtmlName() : String`

Returns the secure key html name to be used for the hidden input field that will contain the secure key value.

### getSecureKeyValue

**Signature:** `getSecureKeyValue() : String`

Returns the secure key value that is generated for the form to use in a hidden input field for authentication.

## Method Detail

## Method Details

### getSecureKeyHtmlName

**Signature:** `getSecureKeyHtmlName() : String`

**Description:** Returns the secure key html name to be used for the hidden input field that will contain the secure key value.

**Returns:**

the secure key html name

---

### getSecureKeyValue

**Signature:** `getSecureKeyValue() : String`

**Description:** Returns the secure key value that is generated for the form to use in a hidden input field for authentication.

**Returns:**

the secure key value

---
```

--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------

```yaml
version: 2
updates:
  # Enable version updates for npm
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
      day: "monday"
      time: "06:00"
    open-pull-requests-limit: 10
    reviewers:
      - "taurgis"
    assignees:
      - "taurgis"
    commit-message:
      prefix: "deps"
      include: "scope"
    labels:
      - "dependencies"
      - "automated"
    # Group updates for better PR management
    groups:
      eslint:
        patterns:
          - "eslint*"
          - "@eslint/*"
          - "typescript-eslint"
      jest:
        patterns:
          - "jest*"
          - "@types/jest"
          - "ts-jest"
      types:
        patterns:
          - "@types/*"
      mcp:
        patterns:
          - "@modelcontextprotocol/*"
    # Allow both direct and indirect updates
    allow:
      - dependency-type: "direct"
      - dependency-type: "indirect"
    # Ignore specific packages if needed (uncomment and modify as necessary)
    # ignore:
    #   - dependency-name: "package-name"
    #     versions: ["1.x", "2.x"]

  # Enable version updates for GitHub Actions
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
      day: "monday"
      time: "06:00"
    open-pull-requests-limit: 5
    reviewers:
      - "taurgis"
    assignees:
      - "taurgis"
    commit-message:
      prefix: "ci"
      include: "scope"
    labels:
      - "github-actions"
      - "automated"

```

--------------------------------------------------------------------------------
/docs/dw_campaign/SourceCodeGroup.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.campaign

# Class SourceCodeGroup

## Inheritance Hierarchy

- Object
  - dw.object.PersistentObject
  - dw.object.ExtensibleObject
    - dw.campaign.SourceCodeGroup

## Description

A source code group defines a collection of source codes. Source code groups are generally pattern based and any source code satisfying the pattern belongs to the group. In this way, merchants may define a large set of source codes which qualify a customer for site experiences (different prices, for example), which customers without that source code do not receive. The class SourceCodeInfo represents an individual source code.

## Properties

### ID

**Type:** String (Read Only)

The ID of the SourceCodeGroup.

### priceBooks

**Type:** Collection (Read Only)

A Collection of PriceBooks the SourceCodeGroup is assigned to.

## Constructor Summary

## Method Summary

### getID

**Signature:** `getID() : String`

The ID of the SourceCodeGroup.

### getPriceBooks

**Signature:** `getPriceBooks() : Collection`

Returns a Collection of PriceBooks the SourceCodeGroup is assigned to.

## Method Detail

## Method Details

### getID

**Signature:** `getID() : String`

**Description:** The ID of the SourceCodeGroup.

**Returns:**

the ID.

---

### getPriceBooks

**Signature:** `getPriceBooks() : Collection`

**Description:** Returns a Collection of PriceBooks the SourceCodeGroup is assigned to.

**Returns:**

Collection of PriceBooks the SourceCodeGroup is assigned to.

---
```

--------------------------------------------------------------------------------
/docs/TopLevel/Symbol.md:
--------------------------------------------------------------------------------

```markdown
## Package: TopLevel

# Class Symbol

## Inheritance Hierarchy

- Object
  - Symbol

## Description

Symbol is a primitive data type that can serve as object properties. Symbol instance can be created explicitly or via a global registry, see for(String).

## Constants

## Properties

## Constructor Summary

Symbol() Creates a new symbol.

Symbol(description : String) Creates a new symbol.

## Method Summary

### for

**Signature:** `static for(key : String) : Symbol`

Obtains a symbol from the global registry.

### keyFor

**Signature:** `static keyFor(symbol : Symbol) : String`

Returns the key within the global symbol registry under which the given symbol is stored.

## Constructor Detail

## Method Detail

## Method Details

### for

**Signature:** `static for(key : String) : Symbol`

**Description:** Obtains a symbol from the global registry. If no symbol exists for the key within the registry a new symbol is created and stored in the global registry.

**API Versioned:**

From version 21.2.

**Parameters:**

- `key`: The key for a symbol within the global registry.

**Returns:**

The found or newly created symbol.

---

### keyFor

**Signature:** `static keyFor(symbol : Symbol) : String`

**Description:** Returns the key within the global symbol registry under which the given symbol is stored.

**Parameters:**

- `symbol`: The symbol to look for.

**Returns:**

The key for the given symbol if the symbol is known to the global registry, else return undefined.

---
```

--------------------------------------------------------------------------------
/docs/dw_suggest/ContentSuggestions.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.suggest

# Class ContentSuggestions

## Inheritance Hierarchy

- Object
  - dw.suggest.Suggestions
  - dw.suggest.ContentSuggestions

## Description

The content suggestion container provides access to content pages found using the suggested terms as search criteria. The method getSuggestedContent() can be used to get the list of found content pages. Furthermore the list of suggested terms, after processing the original user input search query, is accessible through SearchPhraseSuggestions.getSuggestedTerms() method.

## Properties

### suggestedContent

**Type:** Iterator (Read Only)

This method returns a list of content pages which were found
 using the suggested terms as search criteria.
 The content lookup is being executed in the current library and locale.

## Constructor Summary

## Method Summary

### getSuggestedContent

**Signature:** `getSuggestedContent() : Iterator`

This method returns a list of content pages which were found using the suggested terms as search criteria.

## Method Detail

## Method Details

### getSuggestedContent

**Signature:** `getSuggestedContent() : Iterator`

**Description:** This method returns a list of content pages which were found using the suggested terms as search criteria. The content lookup is being executed in the current library and locale.

**Returns:**

a iterator containing a SuggestedContent instance for each found content, the iterator might be empty

**See Also:**

Suggestions.hasSuggestions()

---
```

--------------------------------------------------------------------------------
/docs-site/components/ConfigHero.tsx:
--------------------------------------------------------------------------------

```typescript
import React from 'react';
import { H1, PageSubtitle } from './Typography';

export const ConfigHero: React.FC = () => {
  return (
    <div className="text-center mb-14">
      <div className="inline-flex items-center gap-2 bg-gradient-to-r from-blue-600 to-purple-600 text-white px-4 py-2 rounded-full text-sm font-medium mb-6">
        <svg className="w-4 h-4" fill="currentColor" viewBox="0 0 20 20"><path fillRule="evenodd" d="M11.49 3.17c-.38-1.56-2.6-1.56-2.98 0a1.532 1.532 0 01-2.286.948c-1.372-.836-2.942.734-2.106 2.106.54.886.061 2.042-.947 2.287-1.561.379-1.561 2.6 0 2.978a1.532 1.532 0 01.947 2.287c-.836 1.372.734 2.942 2.106 2.106a1.532 1.532 0 012.287.947c.379 1.561 2.6 1.561 2.978 0a1.533 1.533 0 012.287-.947c1.372.836 2.942-.734 2.106-2.106a1.533 1.533 0 01.947-2.287c1.561-.379 1.561-2.6 0-2.978a1.532 1.532 0 01-.947-2.287c.836-1.372-.734-2.942-2.106-2.106a1.532 1.532 0 01-2.287-.947zM10 13a3 3 0 100-6 3 3 0 000 6z" clipRule="evenodd"/></svg>
        Configuration Guide
      </div>
      <H1 id="configuration" className="text-5xl md:text-6xl font-extrabold bg-gradient-to-r from-gray-900 via-blue-900 to-purple-900 bg-clip-text text-transparent mb-6">Configure in Minutes</H1>
      <PageSubtitle className="text-xl md:text-2xl text-gray-600 max-w-4xl mx-auto leading-relaxed">
        Start zero-config. Add credentials only when you need log analysis, system object exploration & code version control.
      </PageSubtitle>
    </div>
  );
};

export default ConfigHero;

```

--------------------------------------------------------------------------------
/docs/dw_suggest/CategorySuggestions.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.suggest

# Class CategorySuggestions

## Inheritance Hierarchy

- Object
  - dw.suggest.Suggestions
  - dw.suggest.CategorySuggestions

## Description

The category suggestion container provides access to categories found using the suggested terms as search criteria. The method getSuggestedCategories() can be used to get the list of found categories. Furthermore the list of suggested terms, after processing the original user input search query, is accessible through SearchPhraseSuggestions.getSuggestedTerms() method.

## Properties

### suggestedCategories

**Type:** Iterator (Read Only)

This method returns a list of categories which were found
 using the suggested terms as search criteria.
 The category lookup is being executed in the current catalog and locale.

## Constructor Summary

## Method Summary

### getSuggestedCategories

**Signature:** `getSuggestedCategories() : Iterator`

This method returns a list of categories which were found using the suggested terms as search criteria.

## Method Detail

## Method Details

### getSuggestedCategories

**Signature:** `getSuggestedCategories() : Iterator`

**Description:** This method returns a list of categories which were found using the suggested terms as search criteria. The category lookup is being executed in the current catalog and locale.

**Returns:**

a iterator containing a SuggestedCategory instance for each found category, the iterator might be empty

**See Also:**

Suggestions.hasSuggestions()

---
```

--------------------------------------------------------------------------------
/docs/dw_object/ActiveData.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.object

# Class ActiveData

## Inheritance Hierarchy

- Object
  - dw.object.PersistentObject
  - dw.object.ExtensibleObject
    - dw.object.ActiveData

## Description

Represents the active data for an object in Commerce Cloud Digital.

## Properties

### custom

**Type:** CustomAttributes (Read Only)

The custom attributes for this object. The returned object can
 only be used for retrieving attribute values, not storing them. See
 CustomAttributes for a detailed example of the syntax for
 working with custom attributes.

### empty

**Type:** boolean (Read Only)

Return true if the ActiveData doesn't exist for the object

## Constructor Summary

## Method Summary

### getCustom

**Signature:** `getCustom() : CustomAttributes`

Returns the custom attributes for this object.

### isEmpty

**Signature:** `isEmpty() : boolean`

Return true if the ActiveData doesn't exist for the object

## Method Detail

## Method Details

### getCustom

**Signature:** `getCustom() : CustomAttributes`

**Description:** Returns the custom attributes for this object. The returned object can only be used for retrieving attribute values, not storing them. See CustomAttributes for a detailed example of the syntax for working with custom attributes.

**Returns:**

the custom attributes for this object.

---

### isEmpty

**Signature:** `isEmpty() : boolean`

**Description:** Return true if the ActiveData doesn't exist for the object

**Returns:**

true if ActiveData is empty, false otherwise

---
```

--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE/new_tool.md:
--------------------------------------------------------------------------------

```markdown
## 🔧 New MCP Tool Implementation

### Tool Overview
**Tool Name:** `mcp_sfcc-dev_[tool_name]`
**Category:** <!-- SFCC Documentation / Best Practices / Log Analysis / System Objects -->
**Description:** 

### Implementation Details
- **Client Modified/Created:** 
- **New Dependencies:** 
- **SFCC APIs Used:** 

### Tool Schema
```typescript
// Tool definition schema
{
  name: "mcp_sfcc-dev_[tool_name]",
  description: "",
  inputSchema: {
    // Schema details
  }
}
```

### Testing Performed
- [ ] Unit tests for tool handler
- [ ] Integration tests with mock SFCC responses
- [ ] Manual testing in documentation-only mode
- [ ] Manual testing in full mode (if applicable)
- [ ] Error handling validation
- [ ] Parameter validation testing

### Documentation Updates
- [ ] Tool added to copilot-instructions.md tool categories
- [ ] README.md feature list updated
- [ ] Tool count updated in both documentation files
- [ ] JSDoc comments added to implementation
- [ ] Usage examples provided

### Security Considerations
- [ ] Input validation implemented
- [ ] No sensitive data logged
- [ ] Proper error handling without data leaks
- [ ] Authentication requirements verified

### Performance Notes
- [ ] Caching strategy implemented (if applicable)
- [ ] Resource usage reasonable for single-developer workload
- [ ] No blocking operations without proper async handling

### Related Issues
Closes #

---
**This PR adds a new MCP tool following the project's architecture patterns and security guidelines.**

```

--------------------------------------------------------------------------------
/src/clients/ocapi/code-versions-client.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * OCAPI Code Versions Client
 *
 * This module handles all SFCC code version related operations including
 * retrieving code versions and activating specific versions for deployment management.
 */

import { OCAPIConfig } from '../../types/types.js';
import { OCAPIAuthClient } from '../base/ocapi-auth-client.js';
import { Validator } from '../../utils/validator.js';
import { buildOCAPIBaseUrl } from '../../utils/ocapi-url-builder.js';

/**
 * OCAPI Code Versions Client
 * Handles code version management operations for SFCC instances
 */
export class OCAPICodeVersionsClient extends OCAPIAuthClient {
  constructor(config: OCAPIConfig) {
    super(config);
    // Override the baseUrl for this specialized client
    this.baseUrl = buildOCAPIBaseUrl(config);
  }

  /**
   * Get all code versions from the SFCC instance
   *
   * @returns {Promise<any>} Code version result with data array containing version information
   */
  async getCodeVersions(): Promise<any> {
    return this.get('/code_versions');
  }

  /**
   * Activate a specific code version by setting its active flag to true
   *
   * @param {string} codeVersionId - The ID of the code version to activate
   * @returns {Promise<any>} Updated code version object
   */
  async activateCodeVersion(codeVersionId: string): Promise<any> {
    Validator.validateRequired({ codeVersionId }, ['codeVersionId']);

    const requestBody = {
      active: true,
    };

    return this.patch(`/code_versions/${codeVersionId}`, requestBody);
  }
}

```

--------------------------------------------------------------------------------
/docs/TopLevel/Fault.md:
--------------------------------------------------------------------------------

```markdown
## Package: TopLevel

# Class Fault

## Inheritance Hierarchy

- Object
  - TopLevel.Error
  - Fault

## Description

This error indicates an RPC related error in the system. The Fault is always related to a systems internal Java exception. The class provides access to some more details about this internal Java exception. In particular it provides details about the error send from the remote system.

## Properties

### causeFullName

**Type:** String

If the exception is associated with a root cause, the property
 contains the full name of the associated Java exception.

### causeMessage

**Type:** String

If the exception is associated with a root cause, the property
 contains the message of the associated Java exception.

### causeName

**Type:** String

If the exception is associated with a root cause, the property
 contains the simplified name of the associated Java exception.

### faultActor

**Type:** String

Provides some information on who cause the fault along the message
 path.

### faultCode

**Type:** String

An identifier for the specific fault.

### faultDetail

**Type:** String

More detailed information about the fault.

### faultString

**Type:** String

A human readable description for the fault.

### javaFullName

**Type:** String

The full name of the underlying Java exception.

### javaMessage

**Type:** String

The message of the underlying Java exception.

### javaName

**Type:** String

The simplified name of the underlying Java exception.

## Constructor Summary

Fault()

## Method Summary

## Constructor Detail
```

--------------------------------------------------------------------------------
/src/clients/logs/log-constants.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Constants and configuration values for log operations
 */

export const LOG_CONSTANTS = {
  /** Default number of bytes to read from the end of large files */
  DEFAULT_TAIL_BYTES: 200 * 1024, // 200KB

  /** Maximum number of log files to show in listings */
  MAX_LOG_FILES_DISPLAY: 50,

  /** Default search result limit */
  DEFAULT_SEARCH_LIMIT: 20,

  /** Order multiplier for file priority calculation */
  FILE_ORDER_MULTIPLIER: 1000000,

  /** Supported log levels */
  LOG_LEVELS: ['error', 'warn', 'info', 'debug'] as const,
} as const;

export const LOG_FILE_PATTERNS = {
  /** Standard log file pattern (e.g., "error-", "warn-") */
  STANDARD: (level: string) => `${level}-`,

  /** Custom log file pattern (e.g., "customerror-", "customwarn-") */
  CUSTOM: (level: string) => `custom${level}-`,

  /** Job log file pattern (e.g., "Job-") */
  JOB: () => 'Job-',
} as const;

export const JOB_LOG_CONSTANTS = {
  /** Jobs folder path */
  JOBS_FOLDER: '/jobs/',

  /** Default number of job logs to return */
  DEFAULT_JOB_LOG_LIMIT: 10,

  /** Job log file name pattern for matching */
  JOB_LOG_PATTERN: /^Job-.+\.log$/,
} as const;

export const LOG_MESSAGES = {
  NO_FILES_FOUND: (level: string, date: string, available: string) =>
    `No ${level} log files found for date ${date}. Available files: ${available}`,

  NO_SEARCH_MATCHES: (pattern: string, date: string) =>
    `No matches found for "${pattern}" in logs for ${date}`,

  SEARCH_RESULTS: (count: number, pattern: string) =>
    `Found ${count} matches for "${pattern}":`,
} as const;

```

--------------------------------------------------------------------------------
/src/core/handlers/sfra-handler.ts:
--------------------------------------------------------------------------------

```typescript
import { BaseToolHandler, ToolExecutionContext, GenericToolSpec, HandlerContext, ToolArguments } from './base-handler.js';
import { SFRAClient } from '../../clients/sfra-client.js';
import {
  SFRA_TOOL_CONFIG,
  SFRAToolName,
  SFRA_TOOL_NAMES_SET,
} from '../../tool-configs/sfra-tool-config.js';

/**
 * Handler for SFRA documentation tools using config-driven dispatch
 * Provides access to Storefront Reference Architecture documentation
 */
export class SFRAToolHandler extends BaseToolHandler<SFRAToolName> {
  private sfraClient: SFRAClient | null = null;

  constructor(context: HandlerContext, subLoggerName: string) {
    super(context, subLoggerName);
  }

  protected async onInitialize(): Promise<void> {
    if (!this.sfraClient) {
      this.sfraClient = new SFRAClient();
      this.logger.debug('SFRA client initialized');
    }
  }

  protected async onDispose(): Promise<void> {
    this.sfraClient = null;
    this.logger.debug('SFRA client disposed');
  }

  canHandle(toolName: string): boolean {
    return SFRA_TOOL_NAMES_SET.has(toolName as SFRAToolName);
  }

  protected getToolNameSet(): Set<SFRAToolName> {
    return SFRA_TOOL_NAMES_SET;
  }

  protected getToolConfig(): Record<string, GenericToolSpec<ToolArguments, any>> {
    return SFRA_TOOL_CONFIG;
  }

  protected async createExecutionContext(): Promise<ToolExecutionContext> {
    if (!this.sfraClient) {
      throw new Error('SFRA client not initialized');
    }

    return {
      handlerContext: this.context,
      logger: this.logger,
      sfraClient: this.sfraClient,
    };
  }
}

```

--------------------------------------------------------------------------------
/docs/TopLevel/ArrayBuffer.md:
--------------------------------------------------------------------------------

```markdown
## Package: TopLevel

# Class ArrayBuffer

## Inheritance Hierarchy

- Object
  - ArrayBuffer

## Description

The ArrayBuffer represents a generic array of bytes with fixed length. To access and manipulate content, use DataView or a typed array.

## Properties

### byteLength

**Type:** Number

The number of bytes in the array buffer.

## Constructor Summary

ArrayBuffer() Creates an empty array buffer.

ArrayBuffer(byteLength : Number) Creates an array buffer with the given number of bytes.

## Method Summary

### isView

**Signature:** `static isView(object : Object) : boolean`

Returns if the given object is one of the views for an ArrayBuffer, such as a typed array or a DataView.

### slice

**Signature:** `slice(begin : Number, end : Number) : ArrayBuffer`

Returns a new array buffer with a copy of the data of this buffer.

## Constructor Detail

## Method Detail

## Method Details

### isView

**Signature:** `static isView(object : Object) : boolean`

**Description:** Returns if the given object is one of the views for an ArrayBuffer, such as a typed array or a DataView.

**Parameters:**

- `object`: The object to check.

**Returns:**

true if the passed object is a view to an array buffer else return false.

---

### slice

**Signature:** `slice(begin : Number, end : Number) : ArrayBuffer`

**Description:** Returns a new array buffer with a copy of the data of this buffer.

**Parameters:**

- `begin`: Optional. The first included element.
- `end`: Optional. The index of the end. This element is not included.

**Returns:**

The new array object.

---
```

--------------------------------------------------------------------------------
/docs/dw_extensions.payments/SalesforcePayPalPaymentDetails.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.payments

# Class SalesforcePayPalPaymentDetails

## Inheritance Hierarchy

- Object
  - dw.extensions.payments.SalesforcePaymentDetails
  - dw.extensions.payments.SalesforcePayPalPaymentDetails

## Description

Details to a Salesforce Payments payment of type SalesforcePayPalOrder.TYPE_PAYPAL. See Salesforce Payments documentation for how to gain access and configure it for use on your sites.

## Properties

### captureID

**Type:** String (Read Only)

The ID of the capture against the PayPal order, or null if not known.

### payerEmailAddress

**Type:** String (Read Only)

The email address of the payer for the PayPal order, or null if not known.

## Constructor Summary

## Method Summary

### getCaptureID

**Signature:** `getCaptureID() : String`

Returns the ID of the capture against the PayPal order, or null if not known.

### getPayerEmailAddress

**Signature:** `getPayerEmailAddress() : String`

Returns the email address of the payer for the PayPal order, or null if not known.

## Method Detail

## Method Details

### getCaptureID

**Signature:** `getCaptureID() : String`

**Description:** Returns the ID of the capture against the PayPal order, or null if not known.

**Returns:**

PayPal order capture ID

**See Also:**

SalesforcePayPalOrder.getCaptureID()

---

### getPayerEmailAddress

**Signature:** `getPayerEmailAddress() : String`

**Description:** Returns the email address of the payer for the PayPal order, or null if not known.

**Returns:**

payer email address

**See Also:**

SalesforcePayPalOrderPayer.getEmailAddress()

---
```

--------------------------------------------------------------------------------
/docs/dw_order/CreateCouponLineItemException.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.order

# Class CreateCouponLineItemException

## Inheritance Hierarchy

- Object
  - TopLevel.Error
  - TopLevel.APIException
    - dw.order.CreateCouponLineItemException

## Description

This exception could be thrown by LineItemCtnr.createCouponLineItem(String, Boolean) when the provided coupon code is invalid. 'errorCode' property is set to one of the following values: CouponStatusCodes.COUPON_CODE_ALREADY_IN_BASKET = Indicates that coupon code has already been added to basket. CouponStatusCodes.COUPON_ALREADY_IN_BASKET = Indicates that another code of the same MultiCode/System coupon has already been added to basket. CouponStatusCodes.COUPON_CODE_ALREADY_REDEEMED = Indicates that code of MultiCode/System coupon has already been redeemed. CouponStatusCodes.COUPON_CODE_UNKNOWN = Indicates that coupon not found for given coupon code or that the code itself was not found. CouponStatusCodes.COUPON_DISABLED = Indicates that coupon is not enabled. CouponStatusCodes.REDEMPTION_LIMIT_EXCEEDED = Indicates that number of redemptions per code exceeded. CouponStatusCodes.CUSTOMER_REDEMPTION_LIMIT_EXCEEDED = Indicates that number of redemptions per code and customer exceeded. CouponStatusCodes.TIMEFRAME_REDEMPTION_LIMIT_EXCEEDED = Indicates that number of redemptions per code, customer and time exceeded. CouponStatusCodes.NO_ACTIVE_PROMOTION = Indicates that coupon is not assigned to an active promotion.

## Properties

### errorCode

**Type:** String (Read Only)

Returns one of the error codes listed in the class doc.

## Constructor Summary

## Method Summary
```

--------------------------------------------------------------------------------
/docs/TopLevel/WeakSet.md:
--------------------------------------------------------------------------------

```markdown
## Package: TopLevel

# Class WeakSet

## Inheritance Hierarchy

- Object
  - WeakSet

## Description

The WeakSet is set whose elements are subject to garbage collection if there are no more references to the elements. Only objects (no primitives) can be stored. Elements can't be iterated.

## Constructor Summary

WeakSet() Creates an empty Set.

WeakSet(values : Iterable) If the passed value is null or undefined then an empty set is constructed.

## Method Summary

### add

**Signature:** `add(object : Object) : WeakSet`

Adds an element to the set.

### delete

**Signature:** `delete(object : Object) : boolean`

Removes the element from the set.

### has

**Signature:** `has(object : Object) : boolean`

Returns if this set contains the given object.

## Constructor Detail

## Method Detail

## Method Details

### add

**Signature:** `add(object : Object) : WeakSet`

**Description:** Adds an element to the set. Does nothing if the set already contains the element.

**Parameters:**

- `object`: The object to add.

**Returns:**

This set object.

---

### delete

**Signature:** `delete(object : Object) : boolean`

**Description:** Removes the element from the set.

**Parameters:**

- `object`: The object to be removed.

**Returns:**

true if the set contained the object that was removed. Else false is returned.

---

### has

**Signature:** `has(object : Object) : boolean`

**Description:** Returns if this set contains the given object.

**Parameters:**

- `object`: The object to look for.

**Returns:**

true if the set contains the object else false is returned.

---
```

--------------------------------------------------------------------------------
/docs/dw_object/PersistentObject.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.object

# Class PersistentObject

## Inheritance Hierarchy

- Object
  - dw.object.PersistentObject

## Description

Common base class for all objects in Commerce Cloud Digital that have an identity and can be stored and retrieved. Each entity is identified by a unique universal identifier (a UUID).

## Properties

### creationDate

**Type:** Date (Read Only)

The date that this object was created.

### lastModified

**Type:** Date (Read Only)

The date that this object was last modified.

### UUID

**Type:** String (Read Only)

The unique universal identifier for this object.

## Constructor Summary

## Method Summary

### getCreationDate

**Signature:** `getCreationDate() : Date`

Returns the date that this object was created.

### getLastModified

**Signature:** `getLastModified() : Date`

Returns the date that this object was last modified.

### getUUID

**Signature:** `getUUID() : String`

Returns the unique universal identifier for this object.

## Method Detail

## Method Details

### getCreationDate

**Signature:** `getCreationDate() : Date`

**Description:** Returns the date that this object was created.

**Returns:**

the date that this object was created.

---

### getLastModified

**Signature:** `getLastModified() : Date`

**Description:** Returns the date that this object was last modified.

**Returns:**

the date that this object was last modified.

---

### getUUID

**Signature:** `getUUID() : String`

**Description:** Returns the unique universal identifier for this object.

**Returns:**

the unique universal identifier for this object.

---
```

--------------------------------------------------------------------------------
/docs/dw_extensions.pinterest/PinterestOrderHooks.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.pinterest

# Class PinterestOrderHooks

## Inheritance Hierarchy

- dw.extensions.pinterest.PinterestOrderHooks

## Description

PinterestOrderHooks interface containing extension points for customizing Pinterest order status. These hooks are not executed in a transaction. The extension points (hook names), and the functions that are called by each extension point. A function must be defined inside a JavaScript source and must be exported. The script with the exported hook function must be located inside a site cartridge. Inside the site cartridge a 'package.json' file with a 'hooks' entry must exist. "hooks": "./hooks.json" The hooks entry links to a json file, relative to the 'package.json' file. This file lists all registered hooks inside the hooks property: "hooks": [ {"name": "dw.extensions.pinterest.order.getStatus", "script": "./hooks.ds"} ] A hook entry has a 'name' and a 'script' property. The 'name' contains the extension point, the hook name. The 'script' contains the script relative to the hooks file, with the exported hook function.

## Constants

## Properties

## Constructor Summary

## Method Summary

### getStatus

**Signature:** `getStatus(order : PinterestOrder) : Status`

Called to retrieve status for the given order.

## Method Detail

## Method Details

### getStatus

**Signature:** `getStatus(order : PinterestOrder) : Status`

**Description:** Called to retrieve status for the given order. Return a null status for unknown orders.

**Parameters:**

- `order`: the Pinterest order

**Returns:**

a non-null Status ends the hook execution

---
```

--------------------------------------------------------------------------------
/docs/dw_order/GiftCertificateStatusCodes.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.order

# Class GiftCertificateStatusCodes

## Inheritance Hierarchy

- Object
  - dw.order.GiftCertificateStatusCodes

## Description

Helper class containing status codes for the various errors that can occur when redeeming a gift certificate. One of these codes is returned as part of a Status object when a unsuccessful call to the RedeemGiftCertificate pipelet is made.

## Constants

### GIFTCERTIFICATE_CURRENCY_MISMATCH

**Type:** String = "GIFTCERTIFICATE_CURRENCY_MISMATCH"

Indicates that an error occurred because the Gift Certificate was in a different currency than the Basket.

### GIFTCERTIFICATE_DISABLED

**Type:** String = "GIFTCERTIFICATE_DISABLED"

Indicates that an error occurred because the Gift Certificate is currently disabled.

### GIFTCERTIFICATE_INSUFFICIENT_BALANCE

**Type:** String = "GIFTCERTIFICATE_INSUFFICIENT_BALANCE"

Indicates that an error occurred because the Gift Certificate does not have a sufficient balance to perform the requested operation.

### GIFTCERTIFICATE_NOT_FOUND

**Type:** String = "GIFTCERTIFICATE_NOT_FOUND"

Indicates that an error occurred because the Gift Certificate was not found.

### GIFTCERTIFICATE_PENDING

**Type:** String = "GIFTCERTIFICATE_PENDING"

Indicates that an error occurred because the Gift Certificate is pending and is not available for use.

### GIFTCERTIFICATE_REDEEMED

**Type:** String = "GIFTCERTIFICATE_REDEEMED"

Indicates that an error occurred because the Gift Certificate has been fully redeemed.

## Properties

## Constructor Summary

GiftCertificateStatusCodes()

## Method Summary

## Constructor Detail
```

--------------------------------------------------------------------------------
/docs/dw_io/XMLStreamConstants.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.io

# Class XMLStreamConstants

## Inheritance Hierarchy

- Object
  - dw.io.XMLStreamConstants

## Description

Useful constants for working with XML streams.

## Constants

### ATTRIBUTE

**Type:** Number = 10

Represents an attribute in an element.

### CDATA

**Type:** Number = 12

Represents a CDATA section in an element.

### CHARACTERS

**Type:** Number = 4

Represents the character data in an XML document.

### COMMENT

**Type:** Number = 5

Represents a comment in an XML document.

### DTD

**Type:** Number = 11

Represents the document type definition.

### END_DOCUMENT

**Type:** Number = 8

Represents the end of an XML document.

### END_ELEMENT

**Type:** Number = 2

Represents the end of an element in an XML document.

### ENTITY_DECLARATION

**Type:** Number = 15

Represents the entity declaration in an XML document.

### ENTITY_REFERENCE

**Type:** Number = 9

Represents an entity reference in an XML document.

### NAMESPACE

**Type:** Number = 13

Represents a namespace declaration in an XML document.

### NOTATION_DECLARATION

**Type:** Number = 14

Represents the notation declaration in an XML document.

### PROCESSING_INSTRUCTION

**Type:** Number = 3

Represents processing instruction in an XML document.

### SPACE

**Type:** Number = 6

Represents a space in an XML document.

### START_DOCUMENT

**Type:** Number = 7

Represents the start of an XML document.

### START_ELEMENT

**Type:** Number = 1

Represents the start of an element in an XML document.

## Properties

## Constructor Summary

XMLStreamConstants()

## Method Summary

## Constructor Detail
```

--------------------------------------------------------------------------------
/docs/dw_io/Writer.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.io

# Class Writer

## Inheritance Hierarchy

- Object
  - dw.io.Writer

## Description

The class supports writing characters to a stream. Note: when this class is used with sensitive data, be careful in persisting sensitive information to disk.

## Constructor Summary

Writer(stream : OutputStream) Create a writer from a stream using UTF-8 character encoding.

Writer(stream : OutputStream, encoding : String) Create a writer from a stream using the specified character encoding.

## Method Summary

### close

**Signature:** `close() : void`

Closes the writer.

### flush

**Signature:** `flush() : void`

Flushes the buffer.

### write

**Signature:** `write(str : String) : void`

Write the given string to the stream.

### write

**Signature:** `write(str : String, off : Number, len : Number) : void`

Write the given string to the stream.

## Constructor Detail

## Method Detail

## Method Details

### close

**Signature:** `close() : void`

**Description:** Closes the writer.

---

### flush

**Signature:** `flush() : void`

**Description:** Flushes the buffer.

---

### write

**Signature:** `write(str : String) : void`

**Description:** Write the given string to the stream.

**Parameters:**

- `str`: the string to write to the stream.

---

### write

**Signature:** `write(str : String, off : Number, len : Number) : void`

**Description:** Write the given string to the stream.

**Parameters:**

- `str`: the string to write to the stream.
- `off`: the offset from which to start writing characters to the stream.
- `len`: the number of characters to write from the stream.

---
```

--------------------------------------------------------------------------------
/docs/dw_extensions.payments/SalesforceVenmoPaymentDetails.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.payments

# Class SalesforceVenmoPaymentDetails

## Inheritance Hierarchy

- Object
  - dw.extensions.payments.SalesforcePaymentDetails
  - dw.extensions.payments.SalesforceVenmoPaymentDetails

## Description

Details to a Salesforce Payments payment of type SalesforcePayPalOrder.TYPE_VENMO. See Salesforce Payments documentation for how to gain access and configure it for use on your sites.

## Properties

### captureID

**Type:** String (Read Only)

The ID of the capture against the PayPal Venmo order, or null if not known.

### payerEmailAddress

**Type:** String (Read Only)

The email address of the payer for the PayPal Venmo order, or null if not known.

## Constructor Summary

## Method Summary

### getCaptureID

**Signature:** `getCaptureID() : String`

Returns the ID of the capture against the PayPal Venmo order, or null if not known.

### getPayerEmailAddress

**Signature:** `getPayerEmailAddress() : String`

Returns the email address of the payer for the PayPal Venmo order, or null if not known.

## Method Detail

## Method Details

### getCaptureID

**Signature:** `getCaptureID() : String`

**Description:** Returns the ID of the capture against the PayPal Venmo order, or null if not known.

**Returns:**

PayPal order capture ID

**See Also:**

SalesforcePayPalOrder.getCaptureID()

---

### getPayerEmailAddress

**Signature:** `getPayerEmailAddress() : String`

**Description:** Returns the email address of the payer for the PayPal Venmo order, or null if not known.

**Returns:**

payer email address

**See Also:**

SalesforcePayPalOrderPayer.getEmailAddress()

---
```

--------------------------------------------------------------------------------
/src/core/handlers/docs-handler.ts:
--------------------------------------------------------------------------------

```typescript
import { BaseToolHandler, ToolExecutionContext, GenericToolSpec, ToolArguments, HandlerContext } from './base-handler.js';
import { SFCCDocumentationClient } from '../../clients/docs-client.js';
import { DOCS_TOOL_CONFIG, DocToolName, DOC_TOOL_NAMES_SET } from '../../tool-configs/docs-tool-config.js';

/**
 * Handler for SFCC documentation tools using config-driven dispatch
 * Provides access to SFCC class information, search, and documentation
 */
export class DocsToolHandler extends BaseToolHandler<DocToolName> {
  private docsClient: SFCCDocumentationClient | null = null;

  constructor(context: HandlerContext, subLoggerName: string) {
    super(context, subLoggerName);
  }

  protected async onInitialize(): Promise<void> {
    if (!this.docsClient) {
      this.docsClient = new SFCCDocumentationClient();
      this.logger.debug('Documentation client initialized');
    }
  }

  protected async onDispose(): Promise<void> {
    this.docsClient = null;
    this.logger.debug('Documentation client disposed');
  }

  canHandle(toolName: string): boolean {
    return DOC_TOOL_NAMES_SET.has(toolName as DocToolName);
  }

  protected getToolNameSet(): Set<DocToolName> {
    return DOC_TOOL_NAMES_SET;
  }

  protected getToolConfig(): Record<string, GenericToolSpec<ToolArguments, any>> {
    return DOCS_TOOL_CONFIG;
  }

  protected async createExecutionContext(): Promise<ToolExecutionContext> {
    if (!this.docsClient) {
      throw new Error('Documentation client not initialized');
    }

    return {
      handlerContext: this.context,
      logger: this.logger,
      docsClient: this.docsClient,
    };
  }
}

```

--------------------------------------------------------------------------------
/src/utils/ocapi-url-builder.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * OCAPI URL Builder Utility
 *
 * Provides centralized URL construction for OCAPI endpoints with support for
 * LOCAL_OCAPI_MOCK_URL environment variable override for testing.
 */

import { OCAPIConfig } from '../types/types.js';

/**
 * Build the base URL for OCAPI Data API endpoints
 *
 * @param config - OCAPI configuration object
 * @returns Base URL for OCAPI Data API endpoints
 */
export function buildOCAPIBaseUrl(config: OCAPIConfig): string {
  const version = config.version ?? 'v23_2';
  const hostname = config.hostname;

  // Check if hostname is localhost (with or without port) for HTTP protocol
  if (hostname === 'localhost' || hostname.startsWith('localhost:')) {
    const protocol = hostname.includes('://') ? '' : 'http://';
    return `${protocol}${hostname}/s/-/dw/data/${version}`;
  }

  // For live SFCC instances, use HTTPS
  return `https://${hostname}/s/-/dw/data/${version}`;
}

/**
 * Build the OAuth token URL for OCAPI authentication
 *
 * @param config - OCAPI configuration object
 * @returns OAuth token endpoint URL
 */
export function buildOCAPIAuthUrl(config: OCAPIConfig): string {
  const hostname = config.hostname;

  // Check if hostname is localhost (with or without port) for fallback
  if (hostname === 'localhost' || hostname.startsWith('localhost:')) {
    // For localhost, use the same host and add the auth endpoint path
    const protocol = hostname.includes('://') ? '' : 'http://';
    return `${protocol}${hostname}/dwsso/oauth2/access_token`;
  }

  // For live SFCC instances, use the default Demandware auth URL
  return 'https://account.demandware.com/dwsso/oauth2/access_token';
}

```

--------------------------------------------------------------------------------
/docs/dw_util/PropertyComparator.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.util

# Class PropertyComparator

## Inheritance Hierarchy

- Object
  - dw.util.PropertyComparator

## Description

This comparator can be used for the List sort() methods and for the SortSet and SortedMap classes. The comparator can be used to make a comparison based on a property of the contained objects. The Comparison is done based on the natural order of the values. It is guaranteed to work for Numbers, Strings, Dates, Money and Quantity values.

## Constructor Summary

PropertyComparator(property : String, otherProperties : String...) Constructs the comparator from the variable length argument list.

PropertyComparator(propertyName : String, sortOrder : boolean) Constructs the comparator.

PropertyComparator(propertyName : String, sortOrder : boolean, nullGreater : boolean) Constructs the comparator.

## Method Summary

### compare

**Signature:** `compare(arg1 : Object, arg2 : Object) : Number`

Compares its two arguments for order.

## Constructor Detail

## Method Detail

## Method Details

### compare

**Signature:** `compare(arg1 : Object, arg2 : Object) : Number`

**Description:** Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second. By default a null value is treated always greater than any other value. In the constructor of a PropertyComparator this default behavior can be changed.

**Parameters:**

- `arg1`: the first object to compare.
- `arg2`: the second object to compare.

**Returns:**

a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

---
```

--------------------------------------------------------------------------------
/docs/dw_util/MappingKey.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.util

# Class MappingKey

## Inheritance Hierarchy

- Object
  - dw.util.MappingKey

## Description

Encapsulates the key for a mapping read in with the ImportKeyValueMapping job step. Can be either single or compound keys. For example, a single string (e.g. product id) or multiple string components (e.g. product id and site).

## Properties

### keyComponents

**Type:** String (Read Only)

Gets the (possible compound) key. If the key consists of only of a single value, the string array
 will simply contain a single element.

### singleComponentKey

**Type:** String (Read Only)

Gets a key that contains only a single key component (i.e. that is not a compound key). Returns null if this is
 not a single component key.

## Constructor Summary

MappingKey(keyComponents : String...) Instantiates a new key using compound key components.

## Method Summary

### getKeyComponents

**Signature:** `getKeyComponents() : String[]`

Gets the (possible compound) key.

### getSingleComponentKey

**Signature:** `getSingleComponentKey() : String`

Gets a key that contains only a single key component (i.e.

## Constructor Detail

## Method Detail

## Method Details

### getKeyComponents

**Signature:** `getKeyComponents() : String[]`

**Description:** Gets the (possible compound) key. If the key consists of only of a single value, the string array will simply contain a single element.

**Returns:**

the key

---

### getSingleComponentKey

**Signature:** `getSingleComponentKey() : String`

**Description:** Gets a key that contains only a single key component (i.e. that is not a compound key). Returns null if this is not a single component key.

**Returns:**

the single key

---
```

--------------------------------------------------------------------------------
/docs/TopLevel/APIException.md:
--------------------------------------------------------------------------------

```markdown
## Package: TopLevel

# Class APIException

## Inheritance Hierarchy

- Object
  - TopLevel.Error
  - APIException

## Description

This error indicates an exceptional outcome of some business logic. Instances of this exception in general provide additional information about the reason of this case. See the actual type referred by the type property for the description of the properties with this additional information. Limitation: The sub classes of this APIException shown in this documentation actually do not exist. All instances are of type APIException, but with different property sets as listed in the sub classes. The APIException is always related to a systems internal Java exception. The class provides access to some more details about this internal Java exception.

## Properties

### causeFullName

**Type:** String

If the exception is associated with a root cause, the property
 contains the full name of the associated Java exception.

### causeMessage

**Type:** String

If the exception is associated with a root cause, the property
 contains the message of the associated Java exception.

### causeName

**Type:** String

If the exception is associated with a root cause, the property
 contains the simplified name of the associated Java exception.

### javaFullName

**Type:** String

The full name of the underlying Java exception.

### javaMessage

**Type:** String

The message of the underlying Java exception.

### javaName

**Type:** String

The simplified name of the underlying Java exception.

### type

**Type:** String

The name of the actual APIException type, without the package name.

## Constructor Summary

APIException()

## Method Summary

## Constructor Detail
```

--------------------------------------------------------------------------------
/docs/dw_extensions.payments/SalesforcePayPalOrderPayer.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.payments

# Class SalesforcePayPalOrderPayer

## Inheritance Hierarchy

- Object
  - dw.extensions.payments.SalesforcePayPalOrderPayer

## Description

Salesforce Payments representation of a PayPal order's payer object. See Salesforce Payments documentation for how to gain access and configure it for use on your sites.

## Properties

### emailAddress

**Type:** String (Read Only)

The payer's email address.

### givenName

**Type:** String (Read Only)

The payer's given name.

### phone

**Type:** String (Read Only)

The payer's national phone number.

### surname

**Type:** String (Read Only)

The payer's surname.

## Constructor Summary

## Method Summary

### getEmailAddress

**Signature:** `getEmailAddress() : String`

Returns the payer's email address.

### getGivenName

**Signature:** `getGivenName() : String`

Returns the payer's given name.

### getPhone

**Signature:** `getPhone() : String`

Returns the payer's national phone number.

### getSurname

**Signature:** `getSurname() : String`

Returns the payer's surname.

## Method Detail

## Method Details

### getEmailAddress

**Signature:** `getEmailAddress() : String`

**Description:** Returns the payer's email address.

**Returns:**

payer's email address

---

### getGivenName

**Signature:** `getGivenName() : String`

**Description:** Returns the payer's given name.

**Returns:**

payer's given name

---

### getPhone

**Signature:** `getPhone() : String`

**Description:** Returns the payer's national phone number.

**Returns:**

payer's national phone number

---

### getSurname

**Signature:** `getSurname() : String`

**Description:** Returns the payer's surname.

**Returns:**

payer's surname

---
```

--------------------------------------------------------------------------------
/docs/dw_svc/ServiceConfig.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.svc

# Class ServiceConfig

## Inheritance Hierarchy

- Object
  - dw.object.PersistentObject
  - dw.object.ExtensibleObject
    - dw.svc.ServiceConfig

## Description

Configuration object for Services.

## Properties

### credential

**Type:** ServiceCredential (Read Only)

The related service credentials.

### ID

**Type:** String (Read Only)

The unique Service ID.

### profile

**Type:** ServiceProfile (Read Only)

The related service profile.

### serviceType

**Type:** String (Read Only)

The type of the service, such as HTTP or SOAP.

## Constructor Summary

## Method Summary

### getCredential

**Signature:** `getCredential() : ServiceCredential`

Returns the related service credentials.

### getID

**Signature:** `getID() : String`

Returns the unique Service ID.

### getProfile

**Signature:** `getProfile() : ServiceProfile`

Returns the related service profile.

### getServiceType

**Signature:** `getServiceType() : String`

Returns the type of the service, such as HTTP or SOAP.

## Method Detail

## Method Details

### getCredential

**Signature:** `getCredential() : ServiceCredential`

**Description:** Returns the related service credentials.

**Returns:**

Related service credentials.

---

### getID

**Signature:** `getID() : String`

**Description:** Returns the unique Service ID.

**Returns:**

unique Service ID.

---

### getProfile

**Signature:** `getProfile() : ServiceProfile`

**Description:** Returns the related service profile.

**Returns:**

Related service profile.

---

### getServiceType

**Signature:** `getServiceType() : String`

**Description:** Returns the type of the service, such as HTTP or SOAP.

**Returns:**

Type of the service, such as HTTP or SOAP.

---
```

--------------------------------------------------------------------------------
/docs-site/vite.config.ts:
--------------------------------------------------------------------------------

```typescript
import path from 'path';
import { defineConfig, loadEnv } from 'vite';

export default defineConfig(({ mode }) => {
    const env = loadEnv(mode, '.', '');
    return {
      base: '/',
      build: {
        target: 'es2018',
        cssCodeSplit: true,
        rollupOptions: {
          output: {
            manualChunks: (id) => {
              if (id.includes('node_modules')) {
                if (id.includes('react')) {
                  return 'vendor';
                }
                if (id.includes('prism')) {
                  return 'prism';
                }
                return 'vendor';
              }
            },
            chunkFileNames: 'assets/[name]-[hash].js',
            entryFileNames: 'assets/[name]-[hash].js',
            assetFileNames: 'assets/[name]-[hash].[ext]'
          },
        },
        minify: 'esbuild',
        sourcemap: false,
        reportCompressedSize: false,
        chunkSizeWarningLimit: 1000
      },
      esbuild: {
        drop: mode === 'production' ? ['console', 'debugger'] : [],
      },
      css: {
        postcss: './postcss.config.js',
        devSourcemap: false
      },
      define: {
        'process.env.API_KEY': JSON.stringify(env.GEMINI_API_KEY),
        'process.env.GEMINI_API_KEY': JSON.stringify(env.GEMINI_API_KEY)
      },
      resolve: {
        alias: {
          '@': path.resolve(__dirname, '.'),
        }
      },
      // Performance optimizations
      optimizeDeps: {
        include: ['react', 'react-dom', 'react-router-dom'],
        exclude: []
      },
      // SSG specific configuration
      ssgOptions: {
        script: 'async',
        dirStyle: 'nested',
        includeAllRoutes: true,
        format: 'esm'
      },
    };
});

```

--------------------------------------------------------------------------------
/docs/dw_catalog/ProductSearchRefinementDefinition.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.catalog

# Class ProductSearchRefinementDefinition

## Inheritance Hierarchy

- Object
  - dw.object.PersistentObject
  - dw.object.ExtensibleObject
    - dw.catalog.SearchRefinementDefinition
      - dw.catalog.ProductSearchRefinementDefinition

## Description

This class provides an interface to refinement options for the product search.

## Properties

### categoryRefinement

**Type:** boolean (Read Only)

Identifies if this is a category refinement.

### priceRefinement

**Type:** boolean (Read Only)

Identifies if this is a price refinement.

### promotionRefinement

**Type:** boolean (Read Only)

Identifies if this is a promotion refinement.

## Constructor Summary

## Method Summary

### isCategoryRefinement

**Signature:** `isCategoryRefinement() : boolean`

Identifies if this is a category refinement.

### isPriceRefinement

**Signature:** `isPriceRefinement() : boolean`

Identifies if this is a price refinement.

### isPromotionRefinement

**Signature:** `isPromotionRefinement() : boolean`

Identifies if this is a promotion refinement.

## Method Detail

## Method Details

### isCategoryRefinement

**Signature:** `isCategoryRefinement() : boolean`

**Description:** Identifies if this is a category refinement.

**Returns:**

true if this is a category refinement, false otherwise.

---

### isPriceRefinement

**Signature:** `isPriceRefinement() : boolean`

**Description:** Identifies if this is a price refinement.

**Returns:**

true if this is a price refinement, false otherwise.

---

### isPromotionRefinement

**Signature:** `isPromotionRefinement() : boolean`

**Description:** Identifies if this is a promotion refinement.

**Returns:**

true if this is a promotion refinement, false otherwise.

---
```

--------------------------------------------------------------------------------
/docs/dw_extensions.pinterest/PinterestAvailability.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.pinterest

# Class PinterestAvailability

## Inheritance Hierarchy

- Object
  - dw.extensions.pinterest.PinterestAvailability

## Description

Represents a row in the Pinterest availability feed export file.

## Properties

### availability

**Type:** String

The availability of the Pinterest product. Possible values are
 PinterestProduct.AVAILABILITY_IN_STOCK or
 PinterestProduct.AVAILABILITY_OUT_OF_STOCK.

### ID

**Type:** String (Read Only)

The ID of the Pinterest product. This is the same as the ID of the Demandware product.

## Constructor Summary

## Method Summary

### getAvailability

**Signature:** `getAvailability() : String`

Returns the availability of the Pinterest product.

### getID

**Signature:** `getID() : String`

Returns the ID of the Pinterest product.

### setAvailability

**Signature:** `setAvailability(availability : String) : void`

Sets the availability of the Pinterest product.

## Method Detail

## Method Details

### getAvailability

**Signature:** `getAvailability() : String`

**Description:** Returns the availability of the Pinterest product. Possible values are PinterestProduct.AVAILABILITY_IN_STOCK or PinterestProduct.AVAILABILITY_OUT_OF_STOCK.

---

### getID

**Signature:** `getID() : String`

**Description:** Returns the ID of the Pinterest product. This is the same as the ID of the Demandware product.

**Returns:**

product ID

---

### setAvailability

**Signature:** `setAvailability(availability : String) : void`

**Description:** Sets the availability of the Pinterest product. Possible values are PinterestProduct.AVAILABILITY_IN_STOCK or PinterestProduct.AVAILABILITY_OUT_OF_STOCK.

**Parameters:**

- `availability`: the availability status to set for this product

---
```

--------------------------------------------------------------------------------
/docs/dw_extensions.payments/SalesforcePaymentsHooks.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.payments

# Class SalesforcePaymentsHooks

## Inheritance Hierarchy

- dw.extensions.payments.SalesforcePaymentsHooks

## Description

This interface represents all script hooks that can be registered to customize the Salesforce Payments functionality. See Salesforce Payments documentation for how to gain access and configure it for use on your sites. It contains the extension points (hook names), and the functions that are called by each extension point. A function must be defined inside a JavaScript source and must be exported. The script with the exported hook function must be located inside a site cartridge. Inside the site cartridge a 'package.json' file with a 'hooks' entry must exist. "hooks": "./hooks.json" The hooks entry links to a json file, relative to the 'package.json' file. This file lists all registered hooks inside the hooks property: "hooks": [ {"name": "dw.extensions.payments.asyncPaymentSucceeded", "script": "./payments.js"} ] A hook entry has a 'name' and a 'script' property. The 'name' contains the extension point, the hook name. The 'script' contains the script relative to the hooks file, with the exported hook function.

## Constants

## Properties

## Constructor Summary

## Method Summary

### asyncPaymentSucceeded

**Signature:** `asyncPaymentSucceeded(order : Order) : Status`

Called when asynchronous payment succeeded for the given order.

## Method Detail

## Method Details

### asyncPaymentSucceeded

**Signature:** `asyncPaymentSucceeded(order : Order) : Status`

**Description:** Called when asynchronous payment succeeded for the given order.

**Parameters:**

- `order`: the order whose asynchronous payment succeeded

**Returns:**

a non-null result ends the hook execution, and is ignored

---
```

--------------------------------------------------------------------------------
/docs/dw_svc/SOAPService.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.svc

# Class SOAPService

## Inheritance Hierarchy

- Object
  - dw.svc.Service
  - dw.svc.SOAPService

## Description

Represents a SOAP WebService.

## Properties

### authentication

**Type:** String

The authentication type.

### serviceClient

**Type:** Object

The serviceClient object.

## Constructor Summary

## Method Summary

### getAuthentication

**Signature:** `getAuthentication() : String`

Returns the authentication type.

### getServiceClient

**Signature:** `getServiceClient() : Object`

Returns the serviceClient object.

### setAuthentication

**Signature:** `setAuthentication(authentication : String) : SOAPService`

Sets the type of authentication.

### setServiceClient

**Signature:** `setServiceClient(o : Object) : SOAPService`

Sets the serviceClient object.

## Method Detail

## Method Details

### getAuthentication

**Signature:** `getAuthentication() : String`

**Description:** Returns the authentication type.

**Returns:**

Authentication type.

---

### getServiceClient

**Signature:** `getServiceClient() : Object`

**Description:** Returns the serviceClient object.

**Returns:**

serviceClient object.

---

### setAuthentication

**Signature:** `setAuthentication(authentication : String) : SOAPService`

**Description:** Sets the type of authentication. Valid values include "BASIC" and "NONE". The default value is BASIC.

**Parameters:**

- `authentication`: Type of authentication.

**Returns:**

this SOAP WebService.

---

### setServiceClient

**Signature:** `setServiceClient(o : Object) : SOAPService`

**Description:** Sets the serviceClient object. This must be set in the prepareCall method, prior to execute being called.

**Parameters:**

- `o`: serviceClient object.

**Returns:**

this SOAP WebService.

---
```

--------------------------------------------------------------------------------
/docs/dw_net/FTPFileInfo.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.net

# Class FTPFileInfo

## Inheritance Hierarchy

- Object
  - dw.net.FTPFileInfo

## Description

The class is used to store information about a remote file. Note: when this class is used with sensitive data, be careful in persisting sensitive information to disk.

## Properties

### directory

**Type:** boolean (Read Only)

Identifies if the file is a directory.

### name

**Type:** String (Read Only)

The name of the file.

### size

**Type:** Number (Read Only)

The size of the file.

### timestamp

**Type:** Date (Read Only)

The timestamp of the file.

## Constructor Summary

FTPFileInfo(name : String, size : Number, directory : boolean, timestamp : Date) Constructs the FTPFileInfo instance.

## Method Summary

### getDirectory

**Signature:** `getDirectory() : boolean`

Identifies if the file is a directory.

### getName

**Signature:** `getName() : String`

Returns the name of the file.

### getSize

**Signature:** `getSize() : Number`

Returns the size of the file.

### getTimestamp

**Signature:** `getTimestamp() : Date`

Returns the timestamp of the file.

## Constructor Detail

## Method Detail

## Method Details

### getDirectory

**Signature:** `getDirectory() : boolean`

**Description:** Identifies if the file is a directory.

**Returns:**

true if the file is a directory, false otherwise.

---

### getName

**Signature:** `getName() : String`

**Description:** Returns the name of the file.

**Returns:**

the name of the file.

---

### getSize

**Signature:** `getSize() : Number`

**Description:** Returns the size of the file.

**Returns:**

the size of the file.

---

### getTimestamp

**Signature:** `getTimestamp() : Date`

**Description:** Returns the timestamp of the file.

**Returns:**

the timestamp of the file.

---
```

--------------------------------------------------------------------------------
/docs/dw_order/OrderProcessStatusCodes.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.order

# Class OrderProcessStatusCodes

## Inheritance Hierarchy

- Object
  - dw.order.OrderProcessStatusCodes

## Description

Contains constants representing different status codes for interacting with an order, such as cancelling or editing an order.

## Constants

### COUPON_INVALID

**Type:** String = "COUPON_INVALID"

Indicates that a coupon in the order is not valid.

### INVENTORY_RESERVATION_FAILED

**Type:** String = "INVENTORY_RESERVATION_FAILED"

Indicates that no inventory could be reserved for the order.

### ORDER_ALREADY_CANCELLED

**Type:** String = "ORDER_CANCELLED"

Indicates that the order could not be used because it has already been cancelled.

### ORDER_ALREADY_EXPORTED

**Type:** String = "ORDER_EXPORTED"

Indicates that the order could not be used because it has already been exported.

### ORDER_ALREADY_FAILED

**Type:** String = "ORDER_FAILED"

Indicates that the order could not be used because it has already been failed.

### ORDER_ALREADY_REPLACED

**Type:** String = "ORDER_REPLACED"

Indicates that the order could not be used because it has already been replaced.

### ORDER_CONTAINS_GC

**Type:** String = "CANCEL_ORDER_GC"

Indicates that the order could not be used because it contains gift certificates.

### ORDER_NOT_CANCELLED

**Type:** String = "ORDER_NOT_CANCELLED"

Indicates that the order could not be used because it is not cancelled.

### ORDER_NOT_FAILED

**Type:** String = "ORDER_NOT_FAILED"

Indicates that the order could not be used because it has not been failed.

### ORDER_NOT_PLACED

**Type:** String = "ORDER_NOT_PLACED"

Indicates that the order could not be used because it has not been placed.

## Properties

## Constructor Summary

OrderProcessStatusCodes()

## Method Summary

## Constructor Detail
```

--------------------------------------------------------------------------------
/docs/dw_extensions.payments/SalesforceCardPaymentDetails.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.extensions.payments

# Class SalesforceCardPaymentDetails

## Inheritance Hierarchy

- Object
  - dw.extensions.payments.SalesforcePaymentDetails
  - dw.extensions.payments.SalesforceCardPaymentDetails

## Description

Details to a Salesforce Payments payment of type SalesforcePaymentMethod.TYPE_CARD. See Salesforce Payments documentation for how to gain access and configure it for use on your sites.

## Properties

### brand

**Type:** String (Read Only)

The card brand, or null if not known.

### last4

**Type:** String (Read Only)

The last 4 digits of the card number, or null if not known.

### walletType

**Type:** String (Read Only)

The type of wallet used to make the card payment, or null if not known.

## Constructor Summary

## Method Summary

### getBrand

**Signature:** `getBrand() : String`

Returns the card brand, or null if not known.

### getLast4

**Signature:** `getLast4() : String`

Returns the last 4 digits of the card number, or null if not known.

### getWalletType

**Signature:** `getWalletType() : String`

Returns the type of wallet used to make the card payment, or null if not known.

## Method Detail

## Method Details

### getBrand

**Signature:** `getBrand() : String`

**Description:** Returns the card brand, or null if not known.

**Returns:**

card brand

**See Also:**

SalesforcePaymentMethod.getBrand()

---

### getLast4

**Signature:** `getLast4() : String`

**Description:** Returns the last 4 digits of the card number, or null if not known.

**Returns:**

last 4 digits of the card number

**See Also:**

SalesforcePaymentMethod.getLast4()

---

### getWalletType

**Signature:** `getWalletType() : String`

**Description:** Returns the type of wallet used to make the card payment, or null if not known.

**Returns:**

wallet type

---
```

--------------------------------------------------------------------------------
/docs/dw_campaign/ABTestMgr.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.campaign

# Class ABTestMgr

## Inheritance Hierarchy

- Object
  - dw.campaign.ABTestMgr

## Description

Manager class used to access AB-test information in the storefront.

## Properties

### assignedTestSegments

**Type:** Collection (Read Only)

Return the AB-test segments to which the current customer is assigned.
 AB-test segments deleted in the meantime will not be returned.

## Constructor Summary

## Method Summary

### getAssignedTestSegments

**Signature:** `static getAssignedTestSegments() : Collection`

Return the AB-test segments to which the current customer is assigned.

### isParticipant

**Signature:** `static isParticipant(testID : String, segmentID : String) : boolean`

Test whether the current customer is a member of the specified AB-test segment.

## Method Detail

## Method Details

### getAssignedTestSegments

**Signature:** `static getAssignedTestSegments() : Collection`

**Description:** Return the AB-test segments to which the current customer is assigned. AB-test segments deleted in the meantime will not be returned.

**Returns:**

unordered collection of ABTestSegment instances representing the AB-test segments to which the current customer is assigned.

---

### isParticipant

**Signature:** `static isParticipant(testID : String, segmentID : String) : boolean`

**Description:** Test whether the current customer is a member of the specified AB-test segment. This method can be used to customize the storefront experience in ways that are not supported using Business Manager configuration alone.

**Parameters:**

- `testID`: The ID of the AB-test, must not be null.
- `segmentID`: The ID of the segment within the AB-test, must not be null.

**Returns:**

true if the current customer is a member of the specified AB-test segment, false otherwise.

---
```

--------------------------------------------------------------------------------
/src/tool-configs/cartridge-tool-config.ts:
--------------------------------------------------------------------------------

```typescript
import { GenericToolSpec, ToolExecutionContext } from '../core/handlers/base-handler.js';
import { ToolArguments } from '../core/handlers/base-handler.js';
import { ValidationHelpers, CommonValidations } from '../core/handlers/validation-helpers.js';
import { CartridgeGenerationClient } from '../clients/cartridge-generation-client.js';

export const CARTRIDGE_TOOL_NAMES = [
  'generate_cartridge_structure',
] as const;

export type CartridgeToolName = typeof CARTRIDGE_TOOL_NAMES[number];
export const CARTRIDGE_TOOL_NAMES_SET = new Set<CartridgeToolName>(CARTRIDGE_TOOL_NAMES);

/**
 * Configuration for cartridge generation tools
 * Maps each tool to its validation, execution, and messaging logic
 */
export const CARTRIDGE_TOOL_CONFIG: Record<CartridgeToolName, GenericToolSpec<ToolArguments, any>> = {
  generate_cartridge_structure: {
    defaults: (args: ToolArguments) => ({
      ...args,
      fullProjectSetup: args.fullProjectSetup ?? true,
    }),
    validate: (args: ToolArguments, toolName: string) => {
      ValidationHelpers.validateArguments(args, CommonValidations.requiredField(
        'cartridgeName',
        'string',
        (value: string) => /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(value),
        'cartridgeName must be a valid identifier (letters, numbers, underscore, hyphen)',
      ), toolName);
    },
    exec: async (args: ToolArguments, context: ToolExecutionContext) => {
      const client = context.cartridgeClient as CartridgeGenerationClient;
      return client.generateCartridgeStructure({
        cartridgeName: args.cartridgeName as string,
        targetPath: args.targetPath as string | undefined,
        fullProjectSetup: args.fullProjectSetup as boolean,
      });
    },
    logMessage: (args: ToolArguments) => `Generate cartridge structure for ${args.cartridgeName}`,
  },
};

```

--------------------------------------------------------------------------------
/docs-site/tailwind.config.js:
--------------------------------------------------------------------------------

```javascript
import typography from '@tailwindcss/typography';

/** @type {import('tailwindcss').Config} */
export default {
  content: [
    './index.html',
    './src/**/*.{js,ts,jsx,tsx}',
    './components/**/*.{js,ts,jsx,tsx}',
    './pages/**/*.{js,ts,jsx,tsx}',
    './*.{js,ts,jsx,tsx}',
  ],
  theme: {
    extend: {
      screens: {
        'xs': '475px',
      },
      typography: {
        DEFAULT: {
          css: {
            maxWidth: 'none',
            'pre': {
              'overflow-x': 'auto',
              'word-wrap': 'normal',
              'white-space': 'pre',
              'max-width': '100%',
              'word-break': 'normal',
            },
            'pre code': {
              'white-space': 'pre',
              'word-break': 'normal',
              'overflow-wrap': 'normal',
            },
            'code': {
              'word-wrap': 'break-word',
              'overflow-wrap': 'break-word',
              'word-break': 'break-word',
            },
            'p code': {
              'word-break': 'break-word',
              'overflow-wrap': 'break-word',
            },
            'li code': {
              'word-break': 'break-word',
              'overflow-wrap': 'break-word',
            },
            'h1, h2, h3, h4, h5, h6': {
              'word-wrap': 'break-word',
              'overflow-wrap': 'break-word',
            },
            'p, li, td, th': {
              'word-wrap': 'break-word',
              'overflow-wrap': 'break-word',
            },
            'table': {
              'width': '100%',
              'table-layout': 'fixed',
            },
            'td, th': {
              'overflow-wrap': 'break-word',
              'word-break': 'break-word',
            },
          },
        },
      },
    },
  },
  plugins: [
    typography,
  ],
};

```

--------------------------------------------------------------------------------
/src/core/handlers/best-practices-handler.ts:
--------------------------------------------------------------------------------

```typescript
import { BaseToolHandler, ToolExecutionContext, GenericToolSpec, HandlerContext, ToolArguments } from './base-handler.js';
import { SFCCBestPracticesClient } from '../../clients/best-practices-client.js';
import {
  BEST_PRACTICES_TOOL_CONFIG,
  BestPracticeToolName,
  BEST_PRACTICE_TOOL_NAMES_SET,
} from '../../tool-configs/best-practices-tool-config.js';

/**
 * Handler for SFCC best practices tools using config-driven dispatch
 * Provides access to development guides, security recommendations, and hook references
 */
export class BestPracticesToolHandler extends BaseToolHandler<BestPracticeToolName> {
  private bestPracticesClient: SFCCBestPracticesClient | null = null;

  constructor(context: HandlerContext, subLoggerName: string) {
    super(context, subLoggerName);
  }

  protected async onInitialize(): Promise<void> {
    if (!this.bestPracticesClient) {
      this.bestPracticesClient = new SFCCBestPracticesClient();
      this.logger.debug('Best practices client initialized');
    }
  }

  protected async onDispose(): Promise<void> {
    this.bestPracticesClient = null;
    this.logger.debug('Best practices client disposed');
  }

  canHandle(toolName: string): boolean {
    return BEST_PRACTICE_TOOL_NAMES_SET.has(toolName as BestPracticeToolName);
  }

  protected getToolNameSet(): Set<BestPracticeToolName> {
    return BEST_PRACTICE_TOOL_NAMES_SET;
  }

  protected getToolConfig(): Record<string, GenericToolSpec<ToolArguments, any>> {
    return BEST_PRACTICES_TOOL_CONFIG;
  }

  protected async createExecutionContext(): Promise<ToolExecutionContext> {
    if (!this.bestPracticesClient) {
      throw new Error('Best practices client not initialized');
    }

    return {
      handlerContext: this.context,
      logger: this.logger,
      bestPracticesClient: this.bestPracticesClient,
    };
  }
}

```

--------------------------------------------------------------------------------
/docs/dw_order/ProductShippingCost.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.order

# Class ProductShippingCost

## Inheritance Hierarchy

- Object
  - dw.order.ProductShippingCost

## Description

Instances of ProductShippingCost represent product specific shipping costs. Use ProductShippingModel.getShippingCost(ShippingMethod) to get the shipping cost for a specific product.

## Properties

### amount

**Type:** Money (Read Only)

The shipping amount.

### fixedPrice

**Type:** boolean (Read Only)

Returns true if shipping cost is a fixed-price shipping cost,
 and false if surcharge shipping cost.

### surcharge

**Type:** boolean (Read Only)

Returns true if shipping cost is a surcharge to the shipment
 shipping cost, and false if fixed-price shipping cost.

## Constructor Summary

## Method Summary

### getAmount

**Signature:** `getAmount() : Money`

Returns the shipping amount.

### isFixedPrice

**Signature:** `isFixedPrice() : boolean`

Returns true if shipping cost is a fixed-price shipping cost, and false if surcharge shipping cost.

### isSurcharge

**Signature:** `isSurcharge() : boolean`

Returns true if shipping cost is a surcharge to the shipment shipping cost, and false if fixed-price shipping cost.

## Method Detail

## Method Details

### getAmount

**Signature:** `getAmount() : Money`

**Description:** Returns the shipping amount.

**Returns:**

Shipping amount

---

### isFixedPrice

**Signature:** `isFixedPrice() : boolean`

**Description:** Returns true if shipping cost is a fixed-price shipping cost, and false if surcharge shipping cost.

**Returns:**

true of fixed-price shipping cost, else false

---

### isSurcharge

**Signature:** `isSurcharge() : boolean`

**Description:** Returns true if shipping cost is a surcharge to the shipment shipping cost, and false if fixed-price shipping cost.

**Returns:**

true of surcharge shipping cost, else false

---
```

--------------------------------------------------------------------------------
/src/tool-configs/code-version-tool-config.ts:
--------------------------------------------------------------------------------

```typescript
import { GenericToolSpec, ToolExecutionContext } from '../core/handlers/base-handler.js';
import { ToolArguments } from '../core/handlers/base-handler.js';
import { ValidationHelpers, CommonValidations } from '../core/handlers/validation-helpers.js';
import { OCAPICodeVersionsClient } from '../clients/ocapi/code-versions-client.js';

export const CODE_VERSION_TOOL_NAMES = [
  'get_code_versions',
  'activate_code_version',
] as const;

export type CodeVersionToolName = typeof CODE_VERSION_TOOL_NAMES[number];
export const CODE_VERSION_TOOL_NAMES_SET = new Set<CodeVersionToolName>(CODE_VERSION_TOOL_NAMES);

/**
 * Configuration for code version tools
 * Maps each tool to its validation, execution, and messaging logic
 */
export const CODE_VERSION_TOOL_CONFIG: Record<CodeVersionToolName, GenericToolSpec<ToolArguments, any>> = {
  get_code_versions: {
    defaults: (args: ToolArguments) => args,
    validate: (_args: ToolArguments, _toolName: string) => {
      // No validation needed for list operation
    },
    exec: async (_args: ToolArguments, context: ToolExecutionContext) => {
      const client = context.codeVersionsClient as OCAPICodeVersionsClient;
      return client.getCodeVersions();
    },
    logMessage: (_args: ToolArguments) => 'Get code versions',
  },

  activate_code_version: {
    defaults: (args: ToolArguments) => args,
    validate: (args: ToolArguments, toolName: string) => {
      ValidationHelpers.validateArguments(args, CommonValidations.requiredString('codeVersionId'), toolName);
    },
    exec: async (args: ToolArguments, context: ToolExecutionContext) => {
      const client = context.codeVersionsClient as OCAPICodeVersionsClient;
      return client.activateCodeVersion(args.codeVersionId as string);
    },
    logMessage: (args: ToolArguments) => `Activate code version ${args?.codeVersionId}`,
  },
};

```

--------------------------------------------------------------------------------
/docs/dw_value/MimeEncodedText.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.value

# Class MimeEncodedText

## Inheritance Hierarchy

- Object
  - dw.value.MimeEncodedText

## Description

Container for an arbitrary text string its mime type, and encoding

## Properties

### encoding

**Type:** String (Read Only)

The encoding of the text. Encoding is set at creation time and
 can't be changed afterwards

### mimeType

**Type:** String (Read Only)

The mime type of the text. Mime type is set at creation time and
 can't be changed afterwards.

### text

**Type:** String (Read Only)

The text. Text is set at creation time and can't be changed
 afterwards.

## Constructor Summary

MimeEncodedText(text : String, mimeType : String, encoding : String) Creates a new MimeEncodedText with explicit values for mime type and encoding.

MimeEncodedText(text : String) Creates a new MimeEncodedText with the given String as text, mime type of "text/plain;charset=UTF-8" and encoding of "UTF-8"

## Method Summary

### getEncoding

**Signature:** `getEncoding() : String`

Returns the encoding of the text.

### getMimeType

**Signature:** `getMimeType() : String`

Returns the mime type of the text.

### getText

**Signature:** `getText() : String`

Returns the text.

## Constructor Detail

## Method Detail

## Method Details

### getEncoding

**Signature:** `getEncoding() : String`

**Description:** Returns the encoding of the text. Encoding is set at creation time and can't be changed afterwards

**Returns:**

encoding of the text

---

### getMimeType

**Signature:** `getMimeType() : String`

**Description:** Returns the mime type of the text. Mime type is set at creation time and can't be changed afterwards.

**Returns:**

the MimeType of the text

---

### getText

**Signature:** `getText() : String`

**Description:** Returns the text. Text is set at creation time and can't be changed afterwards.

**Returns:**

text stored

---
```

--------------------------------------------------------------------------------
/src/core/handlers/system-object-handler.ts:
--------------------------------------------------------------------------------

```typescript
import { BaseToolHandler, ToolExecutionContext, GenericToolSpec, HandlerContext, ToolArguments } from './base-handler.js';
import { OCAPIClient } from '../../clients/ocapi-client.js';
import { ClientFactory } from './client-factory.js';
import {
  SYSTEM_OBJECT_TOOL_CONFIG,
  SystemObjectToolName,
  SYSTEM_OBJECT_TOOL_NAMES_SET,
} from '../../tool-configs/system-object-tool-config.js';

/**
 * Handler for system object tools using config-driven dispatch
 * Provides access to SFCC system object definitions, attributes, and site preferences
 */
export class SystemObjectToolHandler extends BaseToolHandler<SystemObjectToolName> {
  private ocapiClient: OCAPIClient | null = null;
  private clientFactory: ClientFactory;

  constructor(context: HandlerContext, subLoggerName: string) {
    super(context, subLoggerName);
    this.clientFactory = new ClientFactory(context, this.logger);
  }

  protected async onInitialize(): Promise<void> {
    this.ocapiClient = this.clientFactory.createOCAPIClient();
    if (this.ocapiClient) {
      this.logger.debug('OCAPI client initialized for system objects');
    }
  }

  protected async onDispose(): Promise<void> {
    this.ocapiClient = null;
    this.logger.debug('OCAPI client disposed');
  }

  canHandle(toolName: string): boolean {
    return SYSTEM_OBJECT_TOOL_NAMES_SET.has(toolName as SystemObjectToolName);
  }

  protected getToolNameSet(): Set<SystemObjectToolName> {
    return SYSTEM_OBJECT_TOOL_NAMES_SET;
  }

  protected getToolConfig(): Record<string, GenericToolSpec<ToolArguments, any>> {
    return SYSTEM_OBJECT_TOOL_CONFIG;
  }

  protected async createExecutionContext(): Promise<ToolExecutionContext> {
    if (!this.ocapiClient) {
      throw new Error(ClientFactory.getClientRequiredError('OCAPI'));
    }

    return {
      handlerContext: this.context,
      logger: this.logger,
      ocapiClient: this.ocapiClient,
    };
  }
}

```

--------------------------------------------------------------------------------
/docs/dw_object/ExtensibleObject.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.object

# Class ExtensibleObject

## Inheritance Hierarchy

- Object
  - dw.object.PersistentObject
  - dw.object.ExtensibleObject

## Description

Base class for all persistent business objects in Commerce Cloud Digital that are customizable through the metadata system. All objects in Digital that have custom attributes derive from ExtensibleObject including both system-defined and custom objects. The describe() method provides access to the related object-type metadata. The method getCustom() is the central point to retrieve and store the objects attribute values themselves.

## Properties

### custom

**Type:** CustomAttributes (Read Only)

The custom attributes for this object. The returned object is
 used for retrieving and storing attribute values. See
 CustomAttributes for a detailed example of the syntax for
 working with custom attributes.

## Constructor Summary

## Method Summary

### describe

**Signature:** `describe() : ObjectTypeDefinition`

Returns the meta data of this object.

### getCustom

**Signature:** `getCustom() : CustomAttributes`

Returns the custom attributes for this object.

## Method Detail

## Method Details

### describe

**Signature:** `describe() : ObjectTypeDefinition`

**Description:** Returns the meta data of this object. If no meta data is available the method returns null. The returned ObjectTypeDefinition can be used to retrieve the metadata for any of the custom attributes.

**Returns:**

the meta data of this object. If no meta data is available the method returns null.

---

### getCustom

**Signature:** `getCustom() : CustomAttributes`

**Description:** Returns the custom attributes for this object. The returned object is used for retrieving and storing attribute values. See CustomAttributes for a detailed example of the syntax for working with custom attributes.

**Returns:**

the custom attributes for this object.

---
```

--------------------------------------------------------------------------------
/docs/dw_system/JobProcessMonitor.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.system

# Class JobProcessMonitor

## Inheritance Hierarchy

- Object
  - dw.system.JobProcessMonitor

## Description

Reserved for future use.

## Properties

### totalWork

**Type:** Number

Reserved for future use. Gets the total work count.

### workMessage

**Type:** String

Reserved for future use. Gets the work message.

## Constructor Summary

## Method Summary

### getTotalWork

**Signature:** `getTotalWork() : Number`

Reserved for future use.

### getWorkMessage

**Signature:** `getWorkMessage() : String`

Reserved for future use.

### setTotalWork

**Signature:** `setTotalWork(totalWork : Number) : void`

Reserved for future use.

### setWorkMessage

**Signature:** `setWorkMessage(msg : String) : void`

Reserved for future use.

### worked

**Signature:** `worked(worked : Number) : void`

Reserved for future use.

## Method Detail

## Method Details

### getTotalWork

**Signature:** `getTotalWork() : Number`

**Description:** Reserved for future use. Gets the total work count.

**Returns:**

the total work count.

---

### getWorkMessage

**Signature:** `getWorkMessage() : String`

**Description:** Reserved for future use. Gets the work message.

**Returns:**

the work message.

---

### setTotalWork

**Signature:** `setTotalWork(totalWork : Number) : void`

**Description:** Reserved for future use. Sets the total work count.

**Parameters:**

- `totalWork`: the total work count.

---

### setWorkMessage

**Signature:** `setWorkMessage(msg : String) : void`

**Description:** Reserved for future use. Sets the work message.

**Parameters:**

- `msg`: the messageto use. If msg is null, then an empty string will be used.

---

### worked

**Signature:** `worked(worked : Number) : void`

**Description:** Reserved for future use. Increments the count of work items by the value of the specified parameter.

**Parameters:**

- `worked`: the number of items worked.

---
```

--------------------------------------------------------------------------------
/docs/dw_system/LogNDC.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.system

# Class LogNDC

## Inheritance Hierarchy

- Object
  - dw.system.LogNDC

## Description

A Nested Diagnostic Context, or NDC in short, is an instrument to distinguish interleaved log output from different sources. Log output is typically interleaved when a server handles multiple script calls near-simultaneously.

## Constructor Summary

## Method Summary

### peek

**Signature:** `peek() : String`

Looks at the last diagnostic context at the top of this NDC without removing it.

### pop

**Signature:** `pop() : String`

Clients should call this method before leaving a diagnostic context.

### push

**Signature:** `push(message : String) : void`

Push new diagnostic context information for the current script execution.

### remove

**Signature:** `remove() : void`

Remove the diagnostic context for this script call.

## Method Detail

## Method Details

### peek

**Signature:** `peek() : String`

**Description:** Looks at the last diagnostic context at the top of this NDC without removing it. The returned value is the value that was pushed last. If no context is available, then the empty string "" is returned.

**Returns:**

String The innermost diagnostic context.

---

### pop

**Signature:** `pop() : String`

**Description:** Clients should call this method before leaving a diagnostic context. The returned value is the value that was pushed last. If no context is available, then the empty string "" is returned. NOTE: The NDC is removed after every script execution.

**Returns:**

String The innermost diagnostic context.

---

### push

**Signature:** `push(message : String) : void`

**Description:** Push new diagnostic context information for the current script execution.

**Parameters:**

- `message`: - The new diagnostic context information.

---

### remove

**Signature:** `remove() : void`

**Description:** Remove the diagnostic context for this script call.

---
```

--------------------------------------------------------------------------------
/docs/dw_order.hooks/OrderHooks.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.order.hooks

# Class OrderHooks

## Inheritance Hierarchy

- dw.order.hooks.OrderHooks

## Description

This interface represents all script hooks that can be registered to customize the order logic. It contains the extension points (hook names), and the functions that are called by each extension point. A function must be defined inside a JavaScript source and must be exported. The script with the exported hook function must be located inside a site cartridge. Inside the site cartridge a 'package.json' file with a 'hooks' entry must exist. "hooks": "./hooks.json" The hooks entry links to a json file, relative to the 'package.json' file. This file lists all registered hooks inside the hooks property: "hooks": [ {"name": "dw.order.createOrderNo", "script": "./orders.ds"}, ] A hook entry has a 'name' and a 'script' property. The 'name' contains the extension point, the hook name. The 'script' contains the script relative to the hooks file, with the exported hook function.

## Constants

## Properties

## Constructor Summary

## Method Summary

### createOrderNo

**Signature:** `createOrderNo() : String`

This hook is responsible for creating a new order number.

## Method Detail

## Method Details

### createOrderNo

**Signature:** `createOrderNo() : String`

**Description:** This hook is responsible for creating a new order number. By default order numbers are generated by using OrderMgr.createOrderSequenceNo(). Use this hook to customize the order number generation. E.g. a prefix or suffix could be added. exports.createOrderNo = function(){ var orderSeqNo = OrderMgr.createOrderSequenceNo(); var prefix = Site.getCurrent().getSiteId(); return prefix + "_"+orderSeqNo; }; If the method returns null or an blank string order number generation will fall back to OrderMgr.createOrderSequenceNo(). The maximum length of the order number is 50 characters.

**Returns:**

the order number

---
```

--------------------------------------------------------------------------------
/docs/dw_net/SFTPFileInfo.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.net

# Class SFTPFileInfo

## Inheritance Hierarchy

- Object
  - dw.net.SFTPFileInfo

## Description

The class is used to store information about a remote file. Note: when this class is used with sensitive data, be careful in persisting sensitive information to disk.

## Properties

### directory

**Type:** boolean (Read Only)

Identifies if the file is a directory.

### modificationTime

**Type:** Date (Read Only)

The last modification time of the file/directory.

### name

**Type:** String (Read Only)

The name of the file/directory.

### size

**Type:** Number (Read Only)

The size of the file/directory.

## Constructor Summary

SFTPFileInfo(name : String, size : Number, directory : boolean, mtime : Number) Constructs the SFTPFileInfo instance.

## Method Summary

### getDirectory

**Signature:** `getDirectory() : boolean`

Identifies if the file is a directory.

### getModificationTime

**Signature:** `getModificationTime() : Date`

Returns the last modification time of the file/directory.

### getName

**Signature:** `getName() : String`

Returns the name of the file/directory.

### getSize

**Signature:** `getSize() : Number`

Returns the size of the file/directory.

## Constructor Detail

## Method Detail

## Method Details

### getDirectory

**Signature:** `getDirectory() : boolean`

**Description:** Identifies if the file is a directory.

**Returns:**

true if the file is a directory, false otherwise.

---

### getModificationTime

**Signature:** `getModificationTime() : Date`

**Description:** Returns the last modification time of the file/directory.

**Returns:**

the last modification time.

---

### getName

**Signature:** `getName() : String`

**Description:** Returns the name of the file/directory.

**Returns:**

the name.

---

### getSize

**Signature:** `getSize() : Number`

**Description:** Returns the size of the file/directory.

**Returns:**

the size.

---
```

--------------------------------------------------------------------------------
/docs/dw_io/StringWriter.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.io

# Class StringWriter

## Inheritance Hierarchy

- Object
  - dw.io.Writer
  - dw.io.StringWriter

## Description

A Writer that can be used to generate a String. In most cases it is not necessary to use StringWriter. If the final destination of the output is a file, use FileWriter directly. This will help to reduce memory usage. If you wish to transfer a feed to a remote FTP, SFTP or WebDAV server, first write the feed to the file system using FileWriter and optionally CSVStreamWriter or XMLStreamWriter, then upload the file with FTPClient.putBinary(String, File), SFTPClient.putBinary(String, File), or WebDAVClient.put(String, File). Note: when this class is used with sensitive data, be careful in persisting sensitive information to disk.

## Constructor Summary

StringWriter() Creates a new StringWriter.

## Method Summary

### toString

**Signature:** `toString() : String`

Returns a string representation of this writer.

### write

**Signature:** `write(str : String) : void`

Write the given string to the stream.

### write

**Signature:** `write(str : String, off : Number, len : Number) : void`

Write the given string to the stream.

## Constructor Detail

## Method Detail

## Method Details

### toString

**Signature:** `toString() : String`

**Description:** Returns a string representation of this writer.

**Returns:**

a string representation of this writer.

---

### write

**Signature:** `write(str : String) : void`

**Description:** Write the given string to the stream.

**Parameters:**

- `str`: the string to write to the stream.

---

### write

**Signature:** `write(str : String, off : Number, len : Number) : void`

**Description:** Write the given string to the stream.

**Parameters:**

- `str`: the string to write to the stream.
- `off`: the offset from which to start writing characters to the stream.
- `len`: the number of characters to write from the stream.

---
```

--------------------------------------------------------------------------------
/tests/servers/sfcc-mock-server/src/routes/ocapi.js:
--------------------------------------------------------------------------------

```javascript
/**
 * OCAPI Route Handler
 * 
 * Lightweight orchestrator that delegates OCAPI requests to specialized handlers.
 * Follows single responsibility principle with modular handler architecture.
 */

const express = require('express');
const MockDataLoader = require('../utils/mock-data-loader');

// Import modular handlers
const OAuthHandler = require('./ocapi/oauth-handler');
const SystemObjectsHandler = require('./ocapi/system-objects-handler');
const SitePreferencesHandler = require('./ocapi/site-preferences-handler');
const CodeVersionsHandler = require('./ocapi/code-versions-handler');

class OCAPIRouteHandler {
    constructor(config, authManager) {
        this.config = config;
        this.authManager = authManager;
        this.dataLoader = new MockDataLoader(config.mockDataPath);
        this.router = express.Router();
        this.setupRoutes();
    }

    setupRoutes() {
        // Initialize modular handlers
        const oAuthHandler = new OAuthHandler(this.authManager);
        const systemObjectsHandler = new SystemObjectsHandler(this.config, this.dataLoader);
        const sitePreferencesHandler = new SitePreferencesHandler(this.config, this.dataLoader);
        const codeVersionsHandler = new CodeVersionsHandler(this.config, this.dataLoader);

        // OAuth routes (no authentication required)
        this.router.use('/', oAuthHandler.getRouter());

        // Apply authentication middleware to all OCAPI data endpoints
        const requireAuth = this.authManager.requireAuth();
        
        // Mount authenticated handlers
        this.router.use('/', requireAuth, systemObjectsHandler.getRouter());
        this.router.use('/', requireAuth, sitePreferencesHandler.getRouter());
        this.router.use('/', requireAuth, codeVersionsHandler.getRouter());
    }

    /**
     * Get the configured router
     */
    getRouter() {
        return this.router;
    }
}

module.exports = OCAPIRouteHandler;
```

--------------------------------------------------------------------------------
/src/utils/job-log-utils.ts:
--------------------------------------------------------------------------------

```typescript
/**
 * Shared utilities for job log operations
 */

export class JobLogValidators {
  /**
   * Allowed log levels for job logs (includes 'all' for job-specific operations)
   */
  static readonly ALLOWED_LEVELS = ['error', 'warn', 'info', 'debug', 'all'] as const;

  /**
   * Validate job log level parameter
   * @param level - The level to validate
   * @param toolName - Optional tool name for better error messages
   */
  static validateJobLogLevel(level: string, toolName?: string): void {
    if (!this.ALLOWED_LEVELS.includes(level as any)) {
      const errorPrefix = toolName ? `${toolName}: ` : '';
      throw new Error(
        `${errorPrefix}Invalid log level: ${level}. Must be one of: ${this.ALLOWED_LEVELS.join(', ')}`,
      );
    }
  }

  /**
   * Get default limit based on operation type
   * @param operationType - Type of operation ('search' | 'entries' | 'files')
   */
  static getDefaultLimit(operationType: 'search' | 'entries' | 'files'): number {
    switch (operationType) {
      case 'search':
        return 20;
      case 'entries':
        return 10;
      case 'files':
        return 10;
      default:
        return 10;
    }
  }
}

export class JobLogFormatters {
  /**
   * Format a consistent log message for job operations
   * @param operation - The operation being performed
   * @param params - Parameters for the operation
   */
  static formatJobLogMessage(
    operation: string,
    params: {
      jobName?: string;
      level?: string;
      limit?: number;
      pattern?: string;
    },
  ): string {
    const parts = [operation];

    if (params.jobName) {
      parts.push(`jobName=${params.jobName}`);
    }

    if (params.level) {
      parts.push(`level=${params.level}`);
    }

    if (params.limit !== undefined) {
      parts.push(`limit=${params.limit}`);
    }

    if (params.pattern) {
      parts.push(`pattern="${params.pattern}"`);
    }

    return parts.join(' ');
  }
}

```

--------------------------------------------------------------------------------
/docs/dw_object/Note.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.object

# Class Note

## Inheritance Hierarchy

- Object
  - dw.object.Note

## Description

Represents a note that can be attached to any persistent object that supports this feature.

## Properties

### createdBy

**Type:** String (Read Only)

Return the login ID of user that is stored in the session at the time
 the note is created.

### creationDate

**Type:** Date (Read Only)

Return the date and time that the note was created.  This is usually
 set by the system, but may be specified if the note is generated
 via an import.

### subject

**Type:** String (Read Only)

Return the subject of the note.

### text

**Type:** String (Read Only)

Return the text of the note.

## Constructor Summary

## Method Summary

### getCreatedBy

**Signature:** `getCreatedBy() : String`

Return the login ID of user that is stored in the session at the time the note is created.

### getCreationDate

**Signature:** `getCreationDate() : Date`

Return the date and time that the note was created.

### getSubject

**Signature:** `getSubject() : String`

Return the subject of the note.

### getText

**Signature:** `getText() : String`

Return the text of the note.

## Method Detail

## Method Details

### getCreatedBy

**Signature:** `getCreatedBy() : String`

**Description:** Return the login ID of user that is stored in the session at the time the note is created.

**Returns:**

the username.

---

### getCreationDate

**Signature:** `getCreationDate() : Date`

**Description:** Return the date and time that the note was created. This is usually set by the system, but may be specified if the note is generated via an import.

**Returns:**

the creation date.

---

### getSubject

**Signature:** `getSubject() : String`

**Description:** Return the subject of the note.

**Returns:**

the subject.

---

### getText

**Signature:** `getText() : String`

**Description:** Return the text of the note.

**Returns:**

the text.

---
```

--------------------------------------------------------------------------------
/docs/dw_io/XMLIndentingStreamWriter.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.io

# Class XMLIndentingStreamWriter

## Inheritance Hierarchy

- Object
  - dw.io.XMLStreamWriter
  - dw.io.XMLIndentingStreamWriter

## Description

A XMLIndentingStreamWriter writes the XML output formatted for good readability. Note: when this class is used with sensitive data, be careful in persisting sensitive information to disk.

## Properties

### indent

**Type:** String

The indent.

### newLine

**Type:** String

The string that is used for a new line character. The
 default is the normal new line character.

## Constructor Summary

XMLIndentingStreamWriter(writer : Writer) Constructs the writer for the specified writer.

## Method Summary

### getIndent

**Signature:** `getIndent() : String`

Returns the indent.

### getNewLine

**Signature:** `getNewLine() : String`

Returns the string that is used for a new line character.

### setIndent

**Signature:** `setIndent(indent : String) : void`

Specifies a string that will be used as identing characters.

### setNewLine

**Signature:** `setNewLine(newLine : String) : void`

Sets the string that is used for a new line character.

## Constructor Detail

## Method Detail

## Method Details

### getIndent

**Signature:** `getIndent() : String`

**Description:** Returns the indent.

**Returns:**

Returns the indent.

---

### getNewLine

**Signature:** `getNewLine() : String`

**Description:** Returns the string that is used for a new line character. The default is the normal new line character.

**Returns:**

the new line.

---

### setIndent

**Signature:** `setIndent(indent : String) : void`

**Description:** Specifies a string that will be used as identing characters. The default are two space characters.

**Parameters:**

- `indent`: The indent to set.

---

### setNewLine

**Signature:** `setNewLine(newLine : String) : void`

**Description:** Sets the string that is used for a new line character.

**Parameters:**

- `newLine`: The newLine to set.

---
```

--------------------------------------------------------------------------------
/src/core/handlers/cartridge-handler.ts:
--------------------------------------------------------------------------------

```typescript
import { BaseToolHandler, ToolExecutionContext, GenericToolSpec, HandlerContext, ToolArguments } from './base-handler.js';
import { CartridgeGenerationClient } from '../../clients/cartridge-generation-client.js';
import { ClientFactory } from './client-factory.js';
import {
  CARTRIDGE_TOOL_CONFIG,
  CartridgeToolName,
  CARTRIDGE_TOOL_NAMES_SET,
} from '../../tool-configs/cartridge-tool-config.js';

/**
 * Handler for cartridge generation tools using config-driven dispatch
 * Provides automated cartridge structure creation with complete project setup
 */
export class CartridgeToolHandler extends BaseToolHandler<CartridgeToolName> {
  private cartridgeClient: CartridgeGenerationClient | null = null;
  private clientFactory: ClientFactory;

  constructor(context: HandlerContext, subLoggerName: string) {
    super(context, subLoggerName);
    this.clientFactory = new ClientFactory(context, this.logger);
  }

  protected async onInitialize(): Promise<void> {
    if (!this.cartridgeClient) {
      this.cartridgeClient = this.clientFactory.createCartridgeClient();
      this.logger.debug('Cartridge generation client initialized');
    }
  }

  protected async onDispose(): Promise<void> {
    this.cartridgeClient = null;
    this.logger.debug('Cartridge generation client disposed');
  }

  canHandle(toolName: string): boolean {
    return CARTRIDGE_TOOL_NAMES_SET.has(toolName as CartridgeToolName);
  }

  protected getToolNameSet(): Set<CartridgeToolName> {
    return CARTRIDGE_TOOL_NAMES_SET;
  }

  protected getToolConfig(): Record<string, GenericToolSpec<ToolArguments, any>> {
    return CARTRIDGE_TOOL_CONFIG;
  }

  protected async createExecutionContext(): Promise<ToolExecutionContext> {
    if (!this.cartridgeClient) {
      throw new Error('Cartridge generation client not initialized');
    }

    return {
      handlerContext: this.context,
      logger: this.logger,
      cartridgeClient: this.cartridgeClient,
    };
  }
}

```

--------------------------------------------------------------------------------
/docs/dw_system/RequestHooks.md:
--------------------------------------------------------------------------------

```markdown
## Package: dw.system

# Class RequestHooks

## Inheritance Hierarchy

- dw.system.RequestHooks

## Description

This class represents all script hooks that can be registered to receive notifications about storefront requests. It contains the extension points (hook names), and the functions that are called by each extension point. A function must be defined inside a JavaScript source and must be exported. The script with the exported hook function must be located inside a site cartridge. Inside the site cartridge a 'package.json' file with a 'hooks' entry must exist. "hooks": "./hooks.json" The hooks entry links to a json file, relative to the 'package.json' file. This file lists all registered hooks inside the hooks property: "hooks": [ {"name": "dw.system.request.onSession", "script": "./script.js"}, {"name": "dw.system.request.onRequest", "script": "./script.js"}, ] A hook entry has a 'name' and a 'script' property. The 'name' contains the extension point, the hook name. The 'script' contains the script relative to the hooks file, with the exported hook function.

## Constants

## Properties

## Constructor Summary

## Method Summary

### onRequest

**Signature:** `onRequest() : Status`

The function is called by extension point extensionPointOnRequest.

### onSession

**Signature:** `onSession() : Status`

The function is called by extension point extensionPointOnSession.

## Method Detail

## Method Details

### onRequest

**Signature:** `onRequest() : Status`

**Description:** The function is called by extension point extensionPointOnRequest. It is called when a storefront request was received from the client.

**Returns:**

Status.OK for success.Status.ERROR for error.

---

### onSession

**Signature:** `onSession() : Status`

**Description:** The function is called by extension point extensionPointOnSession. It is called when a new storefront session was started.

**Returns:**

Status.OK for success.Status.ERROR for error.

---
```

--------------------------------------------------------------------------------
/docs-site/components/ToolFilters.tsx:
--------------------------------------------------------------------------------

```typescript
import React from 'react';
import { TOOL_CATEGORIES, tools } from '../utils/toolsData';

interface ToolFiltersProps {
  activeCategory: string;
  setActiveCategory: (c: string) => void;
  search: string;
  setSearch: (s: string) => void;
}

const ToolFilters: React.FC<ToolFiltersProps> = ({ activeCategory, setActiveCategory, search, setSearch }) => {
  const categories = ['All', ...TOOL_CATEGORIES];
  const counts: Record<string, number> = React.useMemo(() => {
    const base: Record<string, number> = { All: tools.length };
    TOOL_CATEGORIES.forEach(cat => { base[cat] = tools.filter(t => t.category === cat).length; });
    return base;
  }, []);
  return (
    <div className="space-y-4">
      <div className="flex flex-wrap gap-2">
        {categories.map(cat => {
          const active = activeCategory === cat;
            return (
              <button key={cat} onClick={() => setActiveCategory(cat)} className={`text-xs px-3 py-1.5 rounded-full border transition font-medium flex items-center gap-2 ${active ? 'bg-gradient-to-r from-blue-600 to-purple-600 text-white border-blue-600 shadow' : 'bg-white text-gray-700 border-gray-200 hover:border-blue-400 hover:text-blue-600'}`}>
                <span>{cat}</span>
                <span className={`text-[10px] px-1.5 py-0.5 rounded-full ${active ? 'bg-white/20 border border-white/30' : 'bg-gray-100 text-gray-600'}`}>{counts[cat]}</span>
              </button>
            );
        })}
      </div>
      <div className="relative max-w-sm">
        <input value={search} onChange={e=>setSearch(e.target.value)} placeholder="Search tools or prompts..." className="w-full border border-gray-200 rounded-lg px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-blue-400" />
        {search && <button onClick={()=>setSearch('')} className="absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600 text-xs">Clear</button>}
      </div>
    </div>
  );
};

export default ToolFilters;

```
Page 2/43FirstPrevNextLast