sfcc-dev-mcp 1.0.19 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/clients/logs/index.d.ts +13 -0
- package/dist/clients/logs/index.d.ts.map +1 -0
- package/dist/clients/logs/index.js +15 -0
- package/dist/clients/logs/index.js.map +1 -0
- package/dist/clients/logs/log-analyzer.d.ts +55 -0
- package/dist/clients/logs/log-analyzer.d.ts.map +1 -0
- package/dist/clients/logs/log-analyzer.js +228 -0
- package/dist/clients/logs/log-analyzer.js.map +1 -0
- package/dist/clients/logs/log-client.d.ts +87 -0
- package/dist/clients/logs/log-client.d.ts.map +1 -0
- package/dist/clients/logs/log-client.js +418 -0
- package/dist/clients/logs/log-client.js.map +1 -0
- package/dist/clients/logs/log-constants.d.ts +37 -0
- package/dist/clients/logs/log-constants.d.ts.map +1 -0
- package/dist/clients/logs/log-constants.js +37 -0
- package/dist/clients/logs/log-constants.js.map +1 -0
- package/dist/clients/logs/log-file-discovery.d.ts +64 -0
- package/dist/clients/logs/log-file-discovery.d.ts.map +1 -0
- package/dist/clients/logs/log-file-discovery.js +249 -0
- package/dist/clients/logs/log-file-discovery.js.map +1 -0
- package/dist/clients/logs/log-file-reader.d.ts +55 -0
- package/dist/clients/logs/log-file-reader.d.ts.map +1 -0
- package/dist/clients/logs/log-file-reader.js +207 -0
- package/dist/clients/logs/log-file-reader.js.map +1 -0
- package/dist/clients/logs/log-formatter.d.ts +90 -0
- package/dist/clients/logs/log-formatter.d.ts.map +1 -0
- package/dist/clients/logs/log-formatter.js +189 -0
- package/dist/clients/logs/log-formatter.js.map +1 -0
- package/dist/clients/logs/log-processor.d.ts +91 -0
- package/dist/clients/logs/log-processor.d.ts.map +1 -0
- package/dist/clients/logs/log-processor.js +328 -0
- package/dist/clients/logs/log-processor.js.map +1 -0
- package/dist/clients/logs/log-types.d.ts +58 -0
- package/dist/clients/logs/log-types.d.ts.map +1 -0
- package/dist/clients/logs/log-types.js +8 -0
- package/dist/clients/logs/log-types.js.map +1 -0
- package/dist/clients/logs/webdav-client-manager.d.ts +28 -0
- package/dist/clients/logs/webdav-client-manager.d.ts.map +1 -0
- package/dist/clients/logs/webdav-client-manager.js +77 -0
- package/dist/clients/logs/webdav-client-manager.js.map +1 -0
- package/dist/docs/dw_customer/CustomerMgr.md +3 -3
- package/dist/docs/dw_customer/Wallet.md +25 -0
- package/dist/docs/dw_extensions.payments/SalesforceAdyenPaymentIntent.md +156 -0
- package/dist/docs/dw_extensions.payments/SalesforceAdyenSavedPaymentMethod.md +258 -0
- package/dist/docs/dw_extensions.payments/SalesforcePayPalOrder.md +36 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentIntent.md +1 -1
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsHooks.md +68 -1
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsMerchantAccount.md +154 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsMerchantAccountPaymentMethod.md +96 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsMgr.md +311 -2
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsSiteConfiguration.md +26 -0
- package/dist/docs/dw_extensions.payments/SalesforcePaymentsZone.md +458 -0
- package/dist/docs/dw_order/OrderMgr.md +3 -3
- package/dist/docs/dw_order.hooks/BasketMergeHooks.md +4 -4
- package/dist/docs/dw_order.hooks/CheckoutHooks.md +42 -0
- package/dist/utils/path-resolver.d.ts +5 -0
- package/dist/utils/path-resolver.d.ts.map +1 -1
- package/dist/utils/path-resolver.js +27 -5
- package/dist/utils/path-resolver.js.map +1 -1
- package/package.json +9 -3
- package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -131
- package/.github/ISSUE_TEMPLATE/config.yml +0 -9
- package/.github/ISSUE_TEMPLATE/documentation.yml +0 -117
- package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -151
- package/.github/ISSUE_TEMPLATE/question.yml +0 -102
- package/.github/PULL_REQUEST_TEMPLATE/bug_fix.md +0 -59
- package/.github/PULL_REQUEST_TEMPLATE/documentation.md +0 -48
- package/.github/PULL_REQUEST_TEMPLATE/new_tool.md +0 -55
- package/.github/agents/official-docs-researcher.agent.md +0 -56
- package/.github/dependabot.yml +0 -65
- package/.github/instructions/mcp-node-tests.instructions.md +0 -30
- package/.github/instructions/mcp-yml-tests.instructions.md +0 -27
- package/.github/pull_request_template.md +0 -103
- package/.github/skills/agent-authoring/SKILL.md +0 -66
- package/.github/skills/mcp-log-debugging/SKILL.md +0 -69
- package/.github/skills/mcp-programmatic-testing/SKILL.md +0 -142
- package/.github/skills/mcp-yaml-testing/SKILL.md +0 -136
- package/.github/skills/salesforce-developer-site-scraper/SKILL.md +0 -102
- package/.github/skills/salesforce-developer-site-scraper/scripts/scrape-to-markdown.js +0 -205
- package/.github/skills/salesforce-help-site-scraper/SKILL.md +0 -84
- package/.github/skills/salesforce-help-site-scraper/scripts/scrape-help-to-markdown.js +0 -212
- package/.github/skills/skill-authoring/SKILL.md +0 -228
- package/.github/skills/skill-authoring/references/PATTERNS.md +0 -384
- package/.github/workflows/ci.yml +0 -103
- package/.github/workflows/deploy-pages.yml +0 -59
- package/.github/workflows/publish.yml +0 -112
- package/.github/workflows/update-docs.yml +0 -182
- package/.husky/pre-commit +0 -2
- package/AGENTS.md +0 -638
- package/CONTRIBUTING.md +0 -323
- package/SECURITY.md +0 -148
- package/aegis.config.docs-only.json +0 -9
- package/aegis.config.json +0 -12
- package/aegis.config.with-dw.json +0 -15
- package/ai-instructions/AGENTS.md +0 -628
- package/ai-instructions/skills/sfcc-caching/SKILL.md +0 -89
- package/ai-instructions/skills/sfcc-cartridge-development/SKILL.md +0 -240
- package/ai-instructions/skills/sfcc-forms-development/SKILL.md +0 -261
- package/ai-instructions/skills/sfcc-forms-development/references/ARCHITECTURE-SGJC-SFRA.md +0 -143
- package/ai-instructions/skills/sfcc-forms-development/references/FORM-XML-CHEATSHEET.md +0 -127
- package/ai-instructions/skills/sfcc-fraud-prevention/SKILL.md +0 -95
- package/ai-instructions/skills/sfcc-hooks-registration/SKILL.md +0 -39
- package/ai-instructions/skills/sfcc-isml-development/SKILL.md +0 -370
- package/ai-instructions/skills/sfcc-isml-development/references/REMOTE-INCLUDES.md +0 -116
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-LAYOUTS.md +0 -50
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CART-ACCOUNT-AUTH.md +0 -45
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-PAGES-CATALOG.md +0 -85
- package/ai-instructions/skills/sfcc-isml-development/references/SFRA-STRUCTURE-COMPONENTS.md +0 -63
- package/ai-instructions/skills/sfcc-isml-development/references/UTILITIES-EXPRESSIONS.md +0 -159
- package/ai-instructions/skills/sfcc-isml-development/references/sfra-base-templates-architecture.md +0 -13
- package/ai-instructions/skills/sfcc-job-development/SKILL.md +0 -334
- package/ai-instructions/skills/sfcc-job-development/references/CHUNK-ORIENTED.md +0 -393
- package/ai-instructions/skills/sfcc-job-development/references/STEPTYPES-JSON.md +0 -271
- package/ai-instructions/skills/sfcc-job-development/references/TASK-ORIENTED.md +0 -257
- package/ai-instructions/skills/sfcc-localization/SKILL.md +0 -92
- package/ai-instructions/skills/sfcc-localization/references/CONTROLLERS.md +0 -63
- package/ai-instructions/skills/sfcc-localization/references/FORMATTING.md +0 -29
- package/ai-instructions/skills/sfcc-localization/references/FORMS-LOCALIZATION.md +0 -33
- package/ai-instructions/skills/sfcc-localization/references/JAVASCRIPT-LOCALIZATION.md +0 -41
- package/ai-instructions/skills/sfcc-localization/references/LOCALE-SWITCHING.md +0 -35
- package/ai-instructions/skills/sfcc-localization/references/PATTERNS.md +0 -740
- package/ai-instructions/skills/sfcc-localization/references/PROPERTIES-ENCODING.md +0 -25
- package/ai-instructions/skills/sfcc-localization/references/RESOURCE-BUNDLES.md +0 -67
- package/ai-instructions/skills/sfcc-localization/references/STATIC-FILES.md +0 -23
- package/ai-instructions/skills/sfcc-localization/references/TESTING.md +0 -21
- package/ai-instructions/skills/sfcc-localserviceregistry/SKILL.md +0 -374
- package/ai-instructions/skills/sfcc-logging/SKILL.md +0 -352
- package/ai-instructions/skills/sfcc-logging/references/LOG-FILES.md +0 -282
- package/ai-instructions/skills/sfcc-ocapi-hooks/SKILL.md +0 -350
- package/ai-instructions/skills/sfcc-ocapi-scapi-slas/SKILL.md +0 -108
- package/ai-instructions/skills/sfcc-page-designer/SKILL.md +0 -353
- package/ai-instructions/skills/sfcc-page-designer/references/ATTRIBUTE-TYPES.md +0 -436
- package/ai-instructions/skills/sfcc-page-designer/references/META-DEFINITIONS.md +0 -322
- package/ai-instructions/skills/sfcc-performance/SKILL.md +0 -424
- package/ai-instructions/skills/sfcc-platform-limits/SKILL.md +0 -89
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/SKILL.md +0 -237
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/AUTHENTICATION.md +0 -214
- package/ai-instructions/skills/sfcc-scapi-custom-endpoints/references/URL-MAPPING.md +0 -253
- package/ai-instructions/skills/sfcc-scapi-hooks/SKILL.md +0 -341
- package/ai-instructions/skills/sfcc-script-evaluation/SKILL.md +0 -380
- package/ai-instructions/skills/sfcc-security/SKILL.md +0 -394
- package/ai-instructions/skills/sfcc-sfra-client-side-js/SKILL.md +0 -270
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/AJAX-CSRF-VALIDATION.md +0 -285
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/BASE-MODULE-INDEX.md +0 -206
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/EXTENSION-PATTERNS.md +0 -165
- package/ai-instructions/skills/sfcc-sfra-client-side-js/references/PLUGIN-PATTERNS.md +0 -185
- package/ai-instructions/skills/sfcc-sfra-controllers/SKILL.md +0 -347
- package/ai-instructions/skills/sfcc-sfra-controllers/references/MIDDLEWARE-REFERENCE.md +0 -257
- package/ai-instructions/skills/sfcc-sfra-controllers/references/REMOTE-INCLUDES.md +0 -193
- package/ai-instructions/skills/sfcc-sfra-controllers/references/standard-sfra-controllers.md +0 -814
- package/ai-instructions/skills/sfcc-sfra-models/SKILL.md +0 -322
- package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-PATTERNS.md +0 -530
- package/ai-instructions/skills/sfcc-sfra-models/references/MODEL-STRUCTURE.md +0 -234
- package/ai-instructions/skills/sfcc-sfra-models/references/TESTING-SECURITY.md +0 -417
- package/ai-instructions/skills/sfcc-sfra-scss/SKILL.md +0 -393
- package/ai-instructions/skills/sfcc-webdav-workflows/SKILL.md +0 -111
- package/docs/TopLevel/APIException.md +0 -68
- package/docs/TopLevel/Array.md +0 -897
- package/docs/TopLevel/ArrayBuffer.md +0 -79
- package/docs/TopLevel/BigInt.md +0 -132
- package/docs/TopLevel/Boolean.md +0 -62
- package/docs/TopLevel/ConversionError.md +0 -23
- package/docs/TopLevel/DataView.md +0 -352
- package/docs/TopLevel/Date.md +0 -924
- package/docs/TopLevel/ES6Iterator.md +0 -33
- package/docs/TopLevel/Error.md +0 -88
- package/docs/TopLevel/EvalError.md +0 -23
- package/docs/TopLevel/Fault.md +0 -87
- package/docs/TopLevel/Float32Array.md +0 -130
- package/docs/TopLevel/Float64Array.md +0 -130
- package/docs/TopLevel/Function.md +0 -105
- package/docs/TopLevel/Generator.md +0 -78
- package/docs/TopLevel/IOError.md +0 -62
- package/docs/TopLevel/Int16Array.md +0 -130
- package/docs/TopLevel/Int32Array.md +0 -130
- package/docs/TopLevel/Int8Array.md +0 -130
- package/docs/TopLevel/InternalError.md +0 -23
- package/docs/TopLevel/Iterable.md +0 -41
- package/docs/TopLevel/Iterator.md +0 -48
- package/docs/TopLevel/JSON.md +0 -162
- package/docs/TopLevel/Map.md +0 -216
- package/docs/TopLevel/Math.md +0 -913
- package/docs/TopLevel/Module.md +0 -45
- package/docs/TopLevel/Namespace.md +0 -96
- package/docs/TopLevel/Number.md +0 -417
- package/docs/TopLevel/Object.md +0 -641
- package/docs/TopLevel/QName.md +0 -96
- package/docs/TopLevel/RangeError.md +0 -23
- package/docs/TopLevel/ReferenceError.md +0 -23
- package/docs/TopLevel/RegExp.md +0 -109
- package/docs/TopLevel/Set.md +0 -165
- package/docs/TopLevel/StopIteration.md +0 -20
- package/docs/TopLevel/String.md +0 -1299
- package/docs/TopLevel/Symbol.md +0 -78
- package/docs/TopLevel/SyntaxError.md +0 -23
- package/docs/TopLevel/SystemError.md +0 -62
- package/docs/TopLevel/TypeError.md +0 -23
- package/docs/TopLevel/URIError.md +0 -23
- package/docs/TopLevel/Uint16Array.md +0 -130
- package/docs/TopLevel/Uint32Array.md +0 -130
- package/docs/TopLevel/Uint8Array.md +0 -130
- package/docs/TopLevel/Uint8ClampedArray.md +0 -130
- package/docs/TopLevel/WeakMap.md +0 -137
- package/docs/TopLevel/WeakSet.md +0 -92
- package/docs/TopLevel/XML.md +0 -937
- package/docs/TopLevel/XMLList.md +0 -484
- package/docs/TopLevel/XMLStreamError.md +0 -74
- package/docs/TopLevel/arguments.md +0 -34
- package/docs/TopLevel/global.md +0 -474
- package/docs/dw_campaign/ABTest.md +0 -47
- package/docs/dw_campaign/ABTestMgr.md +0 -70
- package/docs/dw_campaign/ABTestSegment.md +0 -96
- package/docs/dw_campaign/AmountDiscount.md +0 -51
- package/docs/dw_campaign/ApproachingDiscount.md +0 -124
- package/docs/dw_campaign/BonusChoiceDiscount.md +0 -146
- package/docs/dw_campaign/BonusDiscount.md +0 -48
- package/docs/dw_campaign/Campaign.md +0 -365
- package/docs/dw_campaign/CampaignMgr.md +0 -395
- package/docs/dw_campaign/CampaignStatusCodes.md +0 -48
- package/docs/dw_campaign/Coupon.md +0 -310
- package/docs/dw_campaign/CouponMgr.md +0 -144
- package/docs/dw_campaign/CouponRedemption.md +0 -94
- package/docs/dw_campaign/CouponStatusCodes.md +0 -86
- package/docs/dw_campaign/Discount.md +0 -226
- package/docs/dw_campaign/DiscountPlan.md +0 -282
- package/docs/dw_campaign/FixedPriceDiscount.md +0 -52
- package/docs/dw_campaign/FixedPriceShippingDiscount.md +0 -52
- package/docs/dw_campaign/FreeDiscount.md +0 -17
- package/docs/dw_campaign/FreeShippingDiscount.md +0 -17
- package/docs/dw_campaign/PercentageDiscount.md +0 -52
- package/docs/dw_campaign/PercentageOptionDiscount.md +0 -48
- package/docs/dw_campaign/PriceBookPriceDiscount.md +0 -47
- package/docs/dw_campaign/Promotion.md +0 -874
- package/docs/dw_campaign/PromotionMgr.md +0 -386
- package/docs/dw_campaign/PromotionPlan.md +0 -330
- package/docs/dw_campaign/SlotContent.md +0 -144
- package/docs/dw_campaign/SourceCodeGroup.md +0 -72
- package/docs/dw_campaign/SourceCodeInfo.md +0 -144
- package/docs/dw_campaign/SourceCodeStatusCodes.md +0 -36
- package/docs/dw_campaign/TotalFixedPriceDiscount.md +0 -47
- package/docs/dw_catalog/Catalog.md +0 -122
- package/docs/dw_catalog/CatalogMgr.md +0 -182
- package/docs/dw_catalog/Category.md +0 -1308
- package/docs/dw_catalog/CategoryAssignment.md +0 -192
- package/docs/dw_catalog/CategoryLink.md +0 -126
- package/docs/dw_catalog/PriceBook.md +0 -242
- package/docs/dw_catalog/PriceBookMgr.md +0 -204
- package/docs/dw_catalog/Product.md +0 -2593
- package/docs/dw_catalog/ProductActiveData.md +0 -1275
- package/docs/dw_catalog/ProductAttributeModel.md +0 -277
- package/docs/dw_catalog/ProductAvailabilityLevels.md +0 -142
- package/docs/dw_catalog/ProductAvailabilityModel.md +0 -380
- package/docs/dw_catalog/ProductInventoryList.md +0 -140
- package/docs/dw_catalog/ProductInventoryMgr.md +0 -117
- package/docs/dw_catalog/ProductInventoryRecord.md +0 -563
- package/docs/dw_catalog/ProductLink.md +0 -144
- package/docs/dw_catalog/ProductMgr.md +0 -138
- package/docs/dw_catalog/ProductOption.md +0 -214
- package/docs/dw_catalog/ProductOptionModel.md +0 -246
- package/docs/dw_catalog/ProductOptionValue.md +0 -123
- package/docs/dw_catalog/ProductPriceInfo.md +0 -172
- package/docs/dw_catalog/ProductPriceModel.md +0 -745
- package/docs/dw_catalog/ProductPriceTable.md +0 -134
- package/docs/dw_catalog/ProductSearchHit.md +0 -581
- package/docs/dw_catalog/ProductSearchModel.md +0 -2018
- package/docs/dw_catalog/ProductSearchRefinementDefinition.md +0 -97
- package/docs/dw_catalog/ProductSearchRefinementValue.md +0 -73
- package/docs/dw_catalog/ProductSearchRefinements.md +0 -216
- package/docs/dw_catalog/ProductVariationAttribute.md +0 -100
- package/docs/dw_catalog/ProductVariationAttributeValue.md +0 -238
- package/docs/dw_catalog/ProductVariationModel.md +0 -849
- package/docs/dw_catalog/Recommendation.md +0 -314
- package/docs/dw_catalog/SearchModel.md +0 -901
- package/docs/dw_catalog/SearchRefinementDefinition.md +0 -146
- package/docs/dw_catalog/SearchRefinementValue.md +0 -185
- package/docs/dw_catalog/SearchRefinements.md +0 -180
- package/docs/dw_catalog/SortingOption.md +0 -120
- package/docs/dw_catalog/SortingRule.md +0 -47
- package/docs/dw_catalog/Store.md +0 -562
- package/docs/dw_catalog/StoreGroup.md +0 -96
- package/docs/dw_catalog/StoreInventoryFilter.md +0 -74
- package/docs/dw_catalog/StoreInventoryFilterValue.md +0 -74
- package/docs/dw_catalog/StoreMgr.md +0 -236
- package/docs/dw_catalog/Variant.md +0 -859
- package/docs/dw_catalog/VariationGroup.md +0 -792
- package/docs/dw_content/Content.md +0 -534
- package/docs/dw_content/ContentMgr.md +0 -166
- package/docs/dw_content/ContentSearchModel.md +0 -682
- package/docs/dw_content/ContentSearchRefinementDefinition.md +0 -49
- package/docs/dw_content/ContentSearchRefinementValue.md +0 -17
- package/docs/dw_content/ContentSearchRefinements.md +0 -208
- package/docs/dw_content/Folder.md +0 -467
- package/docs/dw_content/Library.md +0 -121
- package/docs/dw_content/MarkupText.md +0 -88
- package/docs/dw_content/MediaFile.md +0 -317
- package/docs/dw_crypto/CertificateRef.md +0 -42
- package/docs/dw_crypto/CertificateUtils.md +0 -187
- package/docs/dw_crypto/Cipher.md +0 -530
- package/docs/dw_crypto/Encoding.md +0 -220
- package/docs/dw_crypto/JWE.md +0 -224
- package/docs/dw_crypto/JWEHeader.md +0 -172
- package/docs/dw_crypto/JWS.md +0 -264
- package/docs/dw_crypto/JWSHeader.md +0 -148
- package/docs/dw_crypto/KeyRef.md +0 -44
- package/docs/dw_crypto/Mac.md +0 -139
- package/docs/dw_crypto/MessageDigest.md +0 -175
- package/docs/dw_crypto/SecureRandom.md +0 -148
- package/docs/dw_crypto/Signature.md +0 -252
- package/docs/dw_crypto/WeakCipher.md +0 -538
- package/docs/dw_crypto/WeakMac.md +0 -121
- package/docs/dw_crypto/WeakMessageDigest.md +0 -163
- package/docs/dw_crypto/WeakSignature.md +0 -242
- package/docs/dw_crypto/X509Certificate.md +0 -193
- package/docs/dw_customer/AddressBook.md +0 -163
- package/docs/dw_customer/AgentUserMgr.md +0 -83
- package/docs/dw_customer/AgentUserStatusCodes.md +0 -96
- package/docs/dw_customer/AuthenticationStatus.md +0 -138
- package/docs/dw_customer/Credentials.md +0 -494
- package/docs/dw_customer/Customer.md +0 -571
- package/docs/dw_customer/CustomerActiveData.md +0 -552
- package/docs/dw_customer/CustomerAddress.md +0 -852
- package/docs/dw_customer/CustomerCDPData.md +0 -70
- package/docs/dw_customer/CustomerContextMgr.md +0 -64
- package/docs/dw_customer/CustomerGroup.md +0 -134
- package/docs/dw_customer/CustomerList.md +0 -71
- package/docs/dw_customer/CustomerMgr.md +0 -735
- package/docs/dw_customer/CustomerPasswordConstraints.md +0 -142
- package/docs/dw_customer/CustomerPaymentInstrument.md +0 -125
- package/docs/dw_customer/CustomerStatusCodes.md +0 -30
- package/docs/dw_customer/EncryptedObject.md +0 -18
- package/docs/dw_customer/ExternalProfile.md +0 -160
- package/docs/dw_customer/OrderHistory.md +0 -111
- package/docs/dw_customer/ProductList.md +0 -1000
- package/docs/dw_customer/ProductListItem.md +0 -504
- package/docs/dw_customer/ProductListItemPurchase.md +0 -145
- package/docs/dw_customer/ProductListMgr.md +0 -234
- package/docs/dw_customer/ProductListRegistrant.md +0 -193
- package/docs/dw_customer/Profile.md +0 -1128
- package/docs/dw_customer/Wallet.md +0 -118
- package/docs/dw_extensions.applepay/ApplePayHookResult.md +0 -209
- package/docs/dw_extensions.applepay/ApplePayHooks.md +0 -255
- package/docs/dw_extensions.facebook/FacebookFeedHooks.md +0 -47
- package/docs/dw_extensions.facebook/FacebookProduct.md +0 -1621
- package/docs/dw_extensions.paymentrequest/PaymentRequestHookResult.md +0 -159
- package/docs/dw_extensions.paymentrequest/PaymentRequestHooks.md +0 -160
- package/docs/dw_extensions.payments/SalesforceBancontactPaymentDetails.md +0 -79
- package/docs/dw_extensions.payments/SalesforceCardPaymentDetails.md +0 -103
- package/docs/dw_extensions.payments/SalesforceEpsPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforceIdealPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforceKlarnaPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforcePayPalOrder.md +0 -246
- package/docs/dw_extensions.payments/SalesforcePayPalOrderAddress.md +0 -191
- package/docs/dw_extensions.payments/SalesforcePayPalOrderPayer.md +0 -118
- package/docs/dw_extensions.payments/SalesforcePayPalPaymentDetails.md +0 -79
- package/docs/dw_extensions.payments/SalesforcePaymentDetails.md +0 -57
- package/docs/dw_extensions.payments/SalesforcePaymentIntent.md +0 -281
- package/docs/dw_extensions.payments/SalesforcePaymentMethod.md +0 -346
- package/docs/dw_extensions.payments/SalesforcePaymentRequest.md +0 -784
- package/docs/dw_extensions.payments/SalesforcePaymentsHooks.md +0 -45
- package/docs/dw_extensions.payments/SalesforcePaymentsMgr.md +0 -634
- package/docs/dw_extensions.payments/SalesforcePaymentsSiteConfiguration.md +0 -95
- package/docs/dw_extensions.payments/SalesforceSepaDebitPaymentDetails.md +0 -51
- package/docs/dw_extensions.payments/SalesforceVenmoPaymentDetails.md +0 -79
- package/docs/dw_extensions.pinterest/PinterestAvailability.md +0 -86
- package/docs/dw_extensions.pinterest/PinterestFeedHooks.md +0 -69
- package/docs/dw_extensions.pinterest/PinterestOrder.md +0 -232
- package/docs/dw_extensions.pinterest/PinterestOrderHooks.md +0 -45
- package/docs/dw_extensions.pinterest/PinterestProduct.md +0 -850
- package/docs/dw_io/CSVStreamReader.md +0 -80
- package/docs/dw_io/CSVStreamWriter.md +0 -60
- package/docs/dw_io/File.md +0 -614
- package/docs/dw_io/FileReader.md +0 -41
- package/docs/dw_io/FileWriter.md +0 -103
- package/docs/dw_io/InputStream.md +0 -34
- package/docs/dw_io/OutputStream.md +0 -34
- package/docs/dw_io/PrintWriter.md +0 -71
- package/docs/dw_io/RandomAccessFileReader.md +0 -173
- package/docs/dw_io/Reader.md +0 -274
- package/docs/dw_io/StringWriter.md +0 -81
- package/docs/dw_io/Writer.md +0 -92
- package/docs/dw_io/XMLIndentingStreamWriter.md +0 -112
- package/docs/dw_io/XMLStreamConstants.md +0 -114
- package/docs/dw_io/XMLStreamReader.md +0 -1043
- package/docs/dw_io/XMLStreamWriter.md +0 -572
- package/docs/dw_job/JobExecution.md +0 -107
- package/docs/dw_job/JobStepExecution.md +0 -151
- package/docs/dw_net/FTPClient.md +0 -699
- package/docs/dw_net/FTPFileInfo.md +0 -122
- package/docs/dw_net/HTTPClient.md +0 -831
- package/docs/dw_net/HTTPClientLoggingConfig.md +0 -296
- package/docs/dw_net/HTTPRequestPart.md +0 -206
- package/docs/dw_net/Mail.md +0 -551
- package/docs/dw_net/SFTPClient.md +0 -591
- package/docs/dw_net/SFTPFileInfo.md +0 -122
- package/docs/dw_net/WebDAVClient.md +0 -715
- package/docs/dw_net/WebDAVFileInfo.md +0 -184
- package/docs/dw_object/ActiveData.md +0 -75
- package/docs/dw_object/CustomAttributes.md +0 -16
- package/docs/dw_object/CustomObject.md +0 -73
- package/docs/dw_object/CustomObjectMgr.md +0 -291
- package/docs/dw_object/Extensible.md +0 -64
- package/docs/dw_object/ExtensibleObject.md +0 -68
- package/docs/dw_object/Note.md +0 -121
- package/docs/dw_object/ObjectAttributeDefinition.md +0 -481
- package/docs/dw_object/ObjectAttributeGroup.md +0 -170
- package/docs/dw_object/ObjectAttributeValueDefinition.md +0 -72
- package/docs/dw_object/ObjectTypeDefinition.md +0 -216
- package/docs/dw_object/PersistentObject.md +0 -94
- package/docs/dw_object/SimpleExtensible.md +0 -46
- package/docs/dw_object/SystemObjectMgr.md +0 -153
- package/docs/dw_order/AbstractItem.md +0 -244
- package/docs/dw_order/AbstractItemCtnr.md +0 -240
- package/docs/dw_order/Appeasement.md +0 -367
- package/docs/dw_order/AppeasementItem.md +0 -90
- package/docs/dw_order/Basket.md +0 -362
- package/docs/dw_order/BasketMgr.md +0 -418
- package/docs/dw_order/BonusDiscountLineItem.md +0 -248
- package/docs/dw_order/CouponLineItem.md +0 -272
- package/docs/dw_order/CreateAgentBasketLimitExceededException.md +0 -18
- package/docs/dw_order/CreateBasketFromOrderException.md +0 -26
- package/docs/dw_order/CreateCouponLineItemException.md +0 -26
- package/docs/dw_order/CreateOrderException.md +0 -18
- package/docs/dw_order/CreateTemporaryBasketLimitExceededException.md +0 -18
- package/docs/dw_order/GiftCertificate.md +0 -569
- package/docs/dw_order/GiftCertificateLineItem.md +0 -324
- package/docs/dw_order/GiftCertificateMgr.md +0 -197
- package/docs/dw_order/GiftCertificateStatusCodes.md +0 -60
- package/docs/dw_order/Invoice.md +0 -418
- package/docs/dw_order/InvoiceItem.md +0 -222
- package/docs/dw_order/LineItem.md +0 -532
- package/docs/dw_order/LineItemCtnr.md +0 -2431
- package/docs/dw_order/Order.md +0 -2567
- package/docs/dw_order/OrderAddress.md +0 -807
- package/docs/dw_order/OrderItem.md +0 -536
- package/docs/dw_order/OrderMgr.md +0 -535
- package/docs/dw_order/OrderPaymentInstrument.md +0 -220
- package/docs/dw_order/OrderProcessStatusCodes.md +0 -84
- package/docs/dw_order/PaymentCard.md +0 -217
- package/docs/dw_order/PaymentInstrument.md +0 -1462
- package/docs/dw_order/PaymentMethod.md +0 -242
- package/docs/dw_order/PaymentMgr.md +0 -117
- package/docs/dw_order/PaymentProcessor.md +0 -70
- package/docs/dw_order/PaymentStatusCodes.md +0 -42
- package/docs/dw_order/PaymentTransaction.md +0 -328
- package/docs/dw_order/PriceAdjustment.md +0 -640
- package/docs/dw_order/PriceAdjustmentLimitTypes.md +0 -38
- package/docs/dw_order/ProductLineItem.md +0 -1821
- package/docs/dw_order/ProductShippingCost.md +0 -96
- package/docs/dw_order/ProductShippingLineItem.md +0 -326
- package/docs/dw_order/ProductShippingModel.md +0 -125
- package/docs/dw_order/Return.md +0 -360
- package/docs/dw_order/ReturnCase.md +0 -400
- package/docs/dw_order/ReturnCaseItem.md +0 -373
- package/docs/dw_order/ReturnItem.md +0 -362
- package/docs/dw_order/Shipment.md +0 -1251
- package/docs/dw_order/ShipmentShippingCost.md +0 -46
- package/docs/dw_order/ShipmentShippingModel.md +0 -146
- package/docs/dw_order/ShippingLineItem.md +0 -278
- package/docs/dw_order/ShippingLocation.md +0 -366
- package/docs/dw_order/ShippingMethod.md +0 -266
- package/docs/dw_order/ShippingMgr.md +0 -158
- package/docs/dw_order/ShippingOrder.md +0 -561
- package/docs/dw_order/ShippingOrderItem.md +0 -355
- package/docs/dw_order/SumItem.md +0 -147
- package/docs/dw_order/TaxGroup.md +0 -143
- package/docs/dw_order/TaxItem.md +0 -74
- package/docs/dw_order/TaxMgr.md +0 -227
- package/docs/dw_order/TrackingInfo.md +0 -312
- package/docs/dw_order/TrackingRef.md +0 -113
- package/docs/dw_order.hooks/BasketMergeHooks.md +0 -42
- package/docs/dw_order.hooks/CalculateHooks.md +0 -77
- package/docs/dw_order.hooks/OrderHooks.md +0 -41
- package/docs/dw_order.hooks/PaymentHooks.md +0 -180
- package/docs/dw_order.hooks/ReturnHooks.md +0 -135
- package/docs/dw_order.hooks/ShippingOrderHooks.md +0 -245
- package/docs/dw_rpc/SOAPUtil.md +0 -465
- package/docs/dw_rpc/Stub.md +0 -289
- package/docs/dw_rpc/WebReference.md +0 -83
- package/docs/dw_suggest/BrandSuggestions.md +0 -17
- package/docs/dw_suggest/CategorySuggestions.md +0 -53
- package/docs/dw_suggest/ContentSuggestions.md +0 -53
- package/docs/dw_suggest/CustomSuggestions.md +0 -17
- package/docs/dw_suggest/ProductSuggestions.md +0 -53
- package/docs/dw_suggest/SearchPhraseSuggestions.md +0 -117
- package/docs/dw_suggest/SuggestModel.md +0 -403
- package/docs/dw_suggest/SuggestedCategory.md +0 -46
- package/docs/dw_suggest/SuggestedContent.md +0 -46
- package/docs/dw_suggest/SuggestedPhrase.md +0 -70
- package/docs/dw_suggest/SuggestedProduct.md +0 -47
- package/docs/dw_suggest/SuggestedTerm.md +0 -143
- package/docs/dw_suggest/SuggestedTerms.md +0 -132
- package/docs/dw_suggest/Suggestions.md +0 -179
- package/docs/dw_svc/FTPService.md +0 -118
- package/docs/dw_svc/FTPServiceDefinition.md +0 -69
- package/docs/dw_svc/HTTPFormService.md +0 -18
- package/docs/dw_svc/HTTPFormServiceDefinition.md +0 -18
- package/docs/dw_svc/HTTPService.md +0 -415
- package/docs/dw_svc/HTTPServiceDefinition.md +0 -303
- package/docs/dw_svc/LocalServiceRegistry.md +0 -43
- package/docs/dw_svc/Result.md +0 -303
- package/docs/dw_svc/SOAPService.md +0 -115
- package/docs/dw_svc/SOAPServiceDefinition.md +0 -17
- package/docs/dw_svc/Service.md +0 -295
- package/docs/dw_svc/ServiceCallback.md +0 -268
- package/docs/dw_svc/ServiceConfig.md +0 -120
- package/docs/dw_svc/ServiceCredential.md +0 -156
- package/docs/dw_svc/ServiceDefinition.md +0 -176
- package/docs/dw_svc/ServiceProfile.md +0 -168
- package/docs/dw_svc/ServiceRegistry.md +0 -109
- package/docs/dw_system/AgentUserStatusCodes.md +0 -21
- package/docs/dw_system/Cache.md +0 -102
- package/docs/dw_system/CacheMgr.md +0 -42
- package/docs/dw_system/HookMgr.md +0 -66
- package/docs/dw_system/InternalObject.md +0 -56
- package/docs/dw_system/JobProcessMonitor.md +0 -124
- package/docs/dw_system/Log.md +0 -237
- package/docs/dw_system/LogNDC.md +0 -88
- package/docs/dw_system/Logger.md +0 -263
- package/docs/dw_system/OrganizationPreferences.md +0 -18
- package/docs/dw_system/Pipeline.md +0 -73
- package/docs/dw_system/PipelineDictionary.md +0 -16
- package/docs/dw_system/RESTErrorResponse.md +0 -66
- package/docs/dw_system/RESTResponseMgr.md +0 -258
- package/docs/dw_system/RESTSuccessResponse.md +0 -39
- package/docs/dw_system/RemoteInclude.md +0 -74
- package/docs/dw_system/Request.md +0 -839
- package/docs/dw_system/RequestHooks.md +0 -59
- package/docs/dw_system/Response.md +0 -522
- package/docs/dw_system/SearchStatus.md +0 -151
- package/docs/dw_system/Session.md +0 -476
- package/docs/dw_system/Site.md +0 -585
- package/docs/dw_system/SitePreferences.md +0 -49
- package/docs/dw_system/Status.md +0 -273
- package/docs/dw_system/StatusItem.md +0 -273
- package/docs/dw_system/System.md +0 -200
- package/docs/dw_system/Transaction.md +0 -84
- package/docs/dw_util/ArrayList.md +0 -50
- package/docs/dw_util/Assert.md +0 -391
- package/docs/dw_util/BigInteger.md +0 -326
- package/docs/dw_util/Bytes.md +0 -252
- package/docs/dw_util/Calendar.md +0 -921
- package/docs/dw_util/Collection.md +0 -338
- package/docs/dw_util/Currency.md +0 -163
- package/docs/dw_util/DateUtils.md +0 -86
- package/docs/dw_util/Decimal.md +0 -438
- package/docs/dw_util/FilteringCollection.md +0 -93
- package/docs/dw_util/Geolocation.md +0 -271
- package/docs/dw_util/HashMap.md +0 -43
- package/docs/dw_util/HashSet.md +0 -46
- package/docs/dw_util/Iterator.md +0 -97
- package/docs/dw_util/LinkedHashMap.md +0 -43
- package/docs/dw_util/LinkedHashSet.md +0 -46
- package/docs/dw_util/List.md +0 -519
- package/docs/dw_util/Locale.md +0 -267
- package/docs/dw_util/Map.md +0 -313
- package/docs/dw_util/MapEntry.md +0 -70
- package/docs/dw_util/MappingKey.md +0 -76
- package/docs/dw_util/MappingMgr.md +0 -122
- package/docs/dw_util/PropertyComparator.md +0 -51
- package/docs/dw_util/SecureEncoder.md +0 -350
- package/docs/dw_util/SecureFilter.md +0 -350
- package/docs/dw_util/SeekableIterator.md +0 -176
- package/docs/dw_util/Set.md +0 -19
- package/docs/dw_util/SortedMap.md +0 -148
- package/docs/dw_util/SortedSet.md +0 -151
- package/docs/dw_util/StringUtils.md +0 -753
- package/docs/dw_util/Template.md +0 -88
- package/docs/dw_util/UUIDUtils.md +0 -38
- package/docs/dw_value/EnumValue.md +0 -92
- package/docs/dw_value/MimeEncodedText.md +0 -103
- package/docs/dw_value/Money.md +0 -610
- package/docs/dw_value/Quantity.md +0 -376
- package/docs/dw_web/CSRFProtection.md +0 -83
- package/docs/dw_web/ClickStream.md +0 -157
- package/docs/dw_web/ClickStreamEntry.md +0 -289
- package/docs/dw_web/Cookie.md +0 -396
- package/docs/dw_web/Cookies.md +0 -46
- package/docs/dw_web/Form.md +0 -74
- package/docs/dw_web/FormAction.md +0 -199
- package/docs/dw_web/FormElement.md +0 -220
- package/docs/dw_web/FormElementValidationResult.md +0 -157
- package/docs/dw_web/FormField.md +0 -603
- package/docs/dw_web/FormFieldOption.md +0 -238
- package/docs/dw_web/FormFieldOptions.md +0 -42
- package/docs/dw_web/FormGroup.md +0 -199
- package/docs/dw_web/FormList.md +0 -126
- package/docs/dw_web/FormListItem.md +0 -48
- package/docs/dw_web/Forms.md +0 -16
- package/docs/dw_web/HttpParameter.md +0 -513
- package/docs/dw_web/HttpParameterMap.md +0 -185
- package/docs/dw_web/LoopIterator.md +0 -261
- package/docs/dw_web/PageMetaData.md +0 -230
- package/docs/dw_web/PageMetaTag.md +0 -142
- package/docs/dw_web/PagingModel.md +0 -389
- package/docs/dw_web/Resource.md +0 -126
- package/docs/dw_web/URL.md +0 -213
- package/docs/dw_web/URLAction.md +0 -26
- package/docs/dw_web/URLParameter.md +0 -22
- package/docs/dw_web/URLRedirect.md +0 -71
- package/docs/dw_web/URLRedirectMgr.md +0 -73
- package/docs/dw_web/URLUtils.md +0 -1264
- package/docs/isml/isactivedatacontext.md +0 -382
- package/docs/isml/isactivedatahead.md +0 -566
- package/docs/isml/isanalyticsoff.md +0 -537
- package/docs/isml/isapplepay.md +0 -667
- package/docs/isml/isbreak.md +0 -687
- package/docs/isml/isbuynow.md +0 -682
- package/docs/isml/iscache.md +0 -802
- package/docs/isml/iscomment.md +0 -794
- package/docs/isml/iscomponent.md +0 -797
- package/docs/isml/iscontent.md +0 -594
- package/docs/isml/iscontinue.md +0 -563
- package/docs/isml/iscookie.md +0 -798
- package/docs/isml/isdecorate.md +0 -818
- package/docs/isml/isif.md +0 -737
- package/docs/isml/isinclude.md +0 -874
- package/docs/isml/isloop.md +0 -377
- package/docs/isml/ismodule.md +0 -844
- package/docs/isml/isnext.md +0 -672
- package/docs/isml/isobject.md +0 -760
- package/docs/isml/ispayment.md +0 -577
- package/docs/isml/ispaymentmessages.md +0 -664
- package/docs/isml/isprint.md +0 -875
- package/docs/isml/isredirect.md +0 -716
- package/docs/isml/isremove.md +0 -725
- package/docs/isml/isreplace.md +0 -783
- package/docs/isml/isscript.md +0 -859
- package/docs/isml/isselect.md +0 -908
- package/docs/isml/isset.md +0 -585
- package/docs/isml/isslot.md +0 -824
- package/docs/isml/isstatus.md +0 -711
- package/docs/sfra/account.md +0 -145
- package/docs/sfra/address.md +0 -84
- package/docs/sfra/billing.md +0 -90
- package/docs/sfra/cart.md +0 -134
- package/docs/sfra/categories.md +0 -124
- package/docs/sfra/content.md +0 -133
- package/docs/sfra/locale.md +0 -126
- package/docs/sfra/order.md +0 -219
- package/docs/sfra/payment.md +0 -131
- package/docs/sfra/price-default.md +0 -118
- package/docs/sfra/price-range.md +0 -77
- package/docs/sfra/price-tiered.md +0 -117
- package/docs/sfra/product-bundle.md +0 -164
- package/docs/sfra/product-full.md +0 -179
- package/docs/sfra/product-line-items.md +0 -147
- package/docs/sfra/product-search.md +0 -245
- package/docs/sfra/product-tile.md +0 -95
- package/docs/sfra/querystring.md +0 -240
- package/docs/sfra/render.md +0 -354
- package/docs/sfra/request.md +0 -210
- package/docs/sfra/response.md +0 -391
- package/docs/sfra/server.md +0 -375
- package/docs/sfra/shipping.md +0 -181
- package/docs/sfra/store.md +0 -145
- package/docs/sfra/stores.md +0 -190
- package/docs/sfra/totals.md +0 -184
- package/docs-site-v2/.vitepress/config.mts +0 -190
- package/docs-site-v2/.vitepress/theme/components/AssistantTabs.vue +0 -96
- package/docs-site-v2/.vitepress/theme/components/Callout.vue +0 -10
- package/docs-site-v2/.vitepress/theme/components/Collapsible.vue +0 -14
- package/docs-site-v2/.vitepress/theme/components/DwJsonBuilder.vue +0 -82
- package/docs-site-v2/.vitepress/theme/components/HomeSections.vue +0 -552
- package/docs-site-v2/.vitepress/theme/components/InstructionFilesTabs.vue +0 -87
- package/docs-site-v2/.vitepress/theme/components/ModeTabs.vue +0 -70
- package/docs-site-v2/.vitepress/theme/components/NewcomerCTA.vue +0 -14
- package/docs-site-v2/.vitepress/theme/components/QuickStartCards.vue +0 -20
- package/docs-site-v2/.vitepress/theme/components/QuickStartHero.vue +0 -20
- package/docs-site-v2/.vitepress/theme/components/SkillsList.vue +0 -48
- package/docs-site-v2/.vitepress/theme/components/ToolExplorer.vue +0 -85
- package/docs-site-v2/.vitepress/theme/custom.css +0 -1373
- package/docs-site-v2/.vitepress/theme/index.ts +0 -39
- package/docs-site-v2/data/skills.ts +0 -147
- package/docs-site-v2/data/tools.ts +0 -490
- package/docs-site-v2/development/index.md +0 -151
- package/docs-site-v2/examples/index.md +0 -333
- package/docs-site-v2/features/index.md +0 -144
- package/docs-site-v2/guide/ai-interfaces.md +0 -58
- package/docs-site-v2/guide/configuration.md +0 -208
- package/docs-site-v2/guide/index.md +0 -50
- package/docs-site-v2/index.md +0 -32
- package/docs-site-v2/package-lock.json +0 -2511
- package/docs-site-v2/package.json +0 -15
- package/docs-site-v2/public/404.html +0 -15
- package/docs-site-v2/public/android-chrome-192x192.png +0 -0
- package/docs-site-v2/public/android-chrome-512x512.png +0 -0
- package/docs-site-v2/public/apple-touch-icon.png +0 -0
- package/docs-site-v2/public/explain-product-pricing-methods-no-mcp.png +0 -0
- package/docs-site-v2/public/explain-product-pricing-methods.png +0 -0
- package/docs-site-v2/public/favicon-16x16.png +0 -0
- package/docs-site-v2/public/favicon-32x32.png +0 -0
- package/docs-site-v2/public/favicon.ico +0 -0
- package/docs-site-v2/public/index.css +0 -4174
- package/docs-site-v2/public/llms.txt +0 -44
- package/docs-site-v2/public/logo-dark.svg +0 -8
- package/docs-site-v2/public/logo.svg +0 -8
- package/docs-site-v2/public/robots.txt +0 -20
- package/docs-site-v2/public/site.webmanifest +0 -50
- package/docs-site-v2/public/sitemap.xml +0 -90
- package/docs-site-v2/script-debugger/index.md +0 -105
- package/docs-site-v2/scripts/generate-llms.js +0 -71
- package/docs-site-v2/scripts/generate-sitemap.js +0 -97
- package/docs-site-v2/security/index.md +0 -115
- package/docs-site-v2/skills/index.md +0 -40
- package/docs-site-v2/tools/index.md +0 -36
- package/docs-site-v2/troubleshooting/index.md +0 -204
- package/eslint.config.js +0 -139
- package/jest.config.js +0 -27
- package/memories/repo/docs-site-v2-build.json +0 -11
- package/scripts/convert-docs.js +0 -633
- package/scripts/validate-server-json.js +0 -68
- package/server.json +0 -20
- package/src/clients/agent-instructions-client.ts +0 -370
- package/src/clients/base/abstract-documentation-client.ts +0 -405
- package/src/clients/base/http-client.ts +0 -152
- package/src/clients/base/oauth-token.ts +0 -164
- package/src/clients/base/ocapi-auth-client.ts +0 -133
- package/src/clients/cartridge/cartridge-generation-client.ts +0 -302
- package/src/clients/cartridge/cartridge-structure.ts +0 -37
- package/src/clients/cartridge/cartridge-templates.ts +0 -246
- package/src/clients/cartridge/index.ts +0 -6
- package/src/clients/docs/class-content-parser.ts +0 -308
- package/src/clients/docs/class-name-resolver.ts +0 -99
- package/src/clients/docs/documentation-scanner.ts +0 -255
- package/src/clients/docs/index.ts +0 -16
- package/src/clients/docs/referenced-types-extractor.ts +0 -92
- package/src/clients/docs-client.ts +0 -393
- package/src/clients/isml-client.ts +0 -353
- package/src/clients/log-client.ts +0 -19
- package/src/clients/ocapi/code-versions-client.ts +0 -54
- package/src/clients/ocapi/site-preferences-client.ts +0 -106
- package/src/clients/ocapi/system-objects-client.ts +0 -148
- package/src/clients/ocapi-client.ts +0 -53
- package/src/clients/script-debugger/index.ts +0 -5
- package/src/clients/script-debugger/script-debugger-client.ts +0 -754
- package/src/clients/sfra-client.ts +0 -339
- package/src/config/configuration-factory.ts +0 -201
- package/src/config/dw-json-loader.ts +0 -248
- package/src/config/workspace-roots.ts +0 -540
- package/src/constants/index.ts +0 -1
- package/src/core/handlers/abstract-client-handler.ts +0 -85
- package/src/core/handlers/agent-instructions-handler.ts +0 -48
- package/src/core/handlers/base-handler.ts +0 -172
- package/src/core/handlers/cartridge-handler.ts +0 -38
- package/src/core/handlers/client-factory.ts +0 -140
- package/src/core/handlers/code-version-handler.ts +0 -43
- package/src/core/handlers/docs-handler.ts +0 -19
- package/src/core/handlers/isml-handler.ts +0 -19
- package/src/core/handlers/job-log-handler.ts +0 -39
- package/src/core/handlers/log-handler.ts +0 -39
- package/src/core/handlers/script-debugger-handler.ts +0 -46
- package/src/core/handlers/sfra-handler.ts +0 -23
- package/src/core/handlers/simple-client-handler.ts +0 -78
- package/src/core/handlers/system-object-handler.ts +0 -43
- package/src/core/handlers/validation-helpers.ts +0 -206
- package/src/core/instruction-advisor.ts +0 -122
- package/src/core/server.ts +0 -374
- package/src/core/tool-definitions.ts +0 -30
- package/src/core/tool-schemas/agent-instruction-tools.ts +0 -72
- package/src/core/tool-schemas/cartridge-tools.ts +0 -29
- package/src/core/tool-schemas/code-version-tools.ts +0 -28
- package/src/core/tool-schemas/documentation-tools.ts +0 -104
- package/src/core/tool-schemas/index.ts +0 -27
- package/src/core/tool-schemas/isml-tools.ts +0 -89
- package/src/core/tool-schemas/log-tools.ts +0 -196
- package/src/core/tool-schemas/script-debugger-tools.ts +0 -83
- package/src/core/tool-schemas/sfra-tools.ts +0 -65
- package/src/core/tool-schemas/shared-schemas.ts +0 -158
- package/src/core/tool-schemas/system-object-tools.ts +0 -127
- package/src/index.ts +0 -20
- package/src/main.ts +0 -161
- package/src/services/file-system-service.ts +0 -117
- package/src/services/index.ts +0 -11
- package/src/services/path-service.ts +0 -124
- package/src/tool-configs/agent-instructions-tool-config.ts +0 -83
- package/src/tool-configs/cartridge-tool-config.ts +0 -41
- package/src/tool-configs/code-version-tool-config.ts +0 -37
- package/src/tool-configs/docs-tool-config.ts +0 -103
- package/src/tool-configs/isml-tool-config.ts +0 -87
- package/src/tool-configs/job-log-tool-config.ts +0 -119
- package/src/tool-configs/log-tool-config.ts +0 -110
- package/src/tool-configs/script-debugger-tool-config.ts +0 -69
- package/src/tool-configs/sfra-tool-config.ts +0 -74
- package/src/tool-configs/system-object-tool-config.ts +0 -142
- package/src/types/types.ts +0 -125
- package/src/utils/cache.ts +0 -291
- package/src/utils/category-utils.ts +0 -70
- package/src/utils/log-tool-constants.ts +0 -95
- package/src/utils/logger.ts +0 -260
- package/src/utils/markdown-utils.ts +0 -280
- package/src/utils/ocapi-url-builder.ts +0 -48
- package/src/utils/path-resolver.ts +0 -69
- package/src/utils/path-validation.ts +0 -113
- package/src/utils/query-builder.ts +0 -84
- package/src/utils/utils.ts +0 -139
- package/src/utils/validator.ts +0 -162
- package/tests/__mocks__/docs-client.ts +0 -8
- package/tests/__mocks__/src/clients/base/http-client.js +0 -43
- package/tests/__mocks__/webdav.js +0 -14
- package/tests/base-handler.test.ts +0 -527
- package/tests/base-http-client.test.ts +0 -311
- package/tests/cache.test.ts +0 -453
- package/tests/cartridge-handler.test.ts +0 -290
- package/tests/class-content-parser.test.ts +0 -629
- package/tests/class-name-resolver.test.ts +0 -365
- package/tests/client-factory.test.ts +0 -280
- package/tests/code-version-handler.test.ts +0 -291
- package/tests/code-versions-client.test.ts +0 -156
- package/tests/config.test.ts +0 -285
- package/tests/configuration-factory.test.ts +0 -233
- package/tests/docs-handler.test.ts +0 -359
- package/tests/documentation-scanner.test.ts +0 -755
- package/tests/file-system-service.test.ts +0 -111
- package/tests/isml-client.test.ts +0 -463
- package/tests/isml-handler.test.ts +0 -375
- package/tests/job-log-handler.test.ts +0 -283
- package/tests/log-client.test.ts +0 -768
- package/tests/log-handler.test.ts +0 -365
- package/tests/log-processor.test.ts +0 -243
- package/tests/log-validation.test.ts +0 -149
- package/tests/logger.test.ts +0 -303
- package/tests/mcp/AGENTS.md +0 -162
- package/tests/mcp/README.md +0 -237
- package/tests/mcp/node/activate-code-version-advanced.full-mode.programmatic.test.js +0 -669
- package/tests/mcp/node/code-versions.full-mode.programmatic.test.js +0 -605
- package/tests/mcp/node/evaluate-script.full-mode.programmatic.test.js +0 -387
- package/tests/mcp/node/generate-cartridge-structure.docs-only.programmatic.test.js +0 -644
- package/tests/mcp/node/get-available-sfra-documents.programmatic.test.js +0 -274
- package/tests/mcp/node/get-isml-categories.programmatic.test.js +0 -278
- package/tests/mcp/node/get-isml-element.programmatic.test.js +0 -278
- package/tests/mcp/node/get-isml-elements-by-category.programmatic.test.js +0 -363
- package/tests/mcp/node/get-job-execution-summary.full-mode.programmatic.test.js +0 -432
- package/tests/mcp/node/get-job-log-entries.full-mode.programmatic.test.js +0 -488
- package/tests/mcp/node/get-latest-debug.full-mode.programmatic.test.js +0 -338
- package/tests/mcp/node/get-latest-error.full-mode.programmatic.test.js +0 -255
- package/tests/mcp/node/get-latest-info.full-mode.programmatic.test.js +0 -347
- package/tests/mcp/node/get-latest-job-log-files.full-mode.programmatic.test.js +0 -460
- package/tests/mcp/node/get-latest-warn.full-mode.programmatic.test.js +0 -454
- package/tests/mcp/node/get-log-file-contents.full-mode.programmatic.test.js +0 -381
- package/tests/mcp/node/get-sfcc-class-documentation.docs-only.programmatic.test.js +0 -371
- package/tests/mcp/node/get-sfcc-class-info.docs-only.programmatic.test.js +0 -1032
- package/tests/mcp/node/get-sfra-categories.docs-only.programmatic.test.js +0 -369
- package/tests/mcp/node/get-sfra-document.programmatic.test.js +0 -473
- package/tests/mcp/node/get-sfra-documents-by-category.docs-only.programmatic.test.js +0 -510
- package/tests/mcp/node/get-system-object-definition.full-mode.programmatic.test.js +0 -389
- package/tests/mcp/node/get-system-object-definitions.docs-only.programmatic.test.js +0 -300
- package/tests/mcp/node/get-system-object-definitions.full-mode.programmatic.test.js +0 -387
- package/tests/mcp/node/list-isml-elements.programmatic.test.js +0 -311
- package/tests/mcp/node/list-log-files.full-mode.programmatic.test.js +0 -150
- package/tests/mcp/node/list-sfcc-classes.docs-only.programmatic.test.js +0 -612
- package/tests/mcp/node/search-custom-object-attribute-definitions.full-mode.programmatic.test.js +0 -875
- package/tests/mcp/node/search-isml-elements.programmatic.test.js +0 -325
- package/tests/mcp/node/search-job-logs-by-name.full-mode.programmatic.test.js +0 -330
- package/tests/mcp/node/search-job-logs.full-mode.programmatic.test.js +0 -526
- package/tests/mcp/node/search-logs.full-mode.programmatic.test.js +0 -478
- package/tests/mcp/node/search-sfcc-classes.docs-only.programmatic.test.js +0 -334
- package/tests/mcp/node/search-sfcc-methods.docs-only.programmatic.test.js +0 -487
- package/tests/mcp/node/search-sfra-documentation.docs-only.programmatic.test.js +0 -563
- package/tests/mcp/node/search-site-preferences.full-mode.programmatic.test.js +0 -556
- package/tests/mcp/node/search-system-object-attribute-definitions.full-mode.programmatic.test.js +0 -744
- package/tests/mcp/node/search-system-object-attribute-groups.full-mode.programmatic.test.js +0 -657
- package/tests/mcp/node/summarize-logs.full-mode.programmatic.test.js +0 -357
- package/tests/mcp/node/tools.docs-only.programmatic.test.js +0 -515
- package/tests/mcp/node/tools.full-mode.programmatic.test.js +0 -154
- package/tests/mcp/test-fixtures/dw.json +0 -10
- package/tests/mcp/yaml/activate-code-version.docs-only.test.mcp.yml +0 -318
- package/tests/mcp/yaml/activate-code-version.full-mode.test.mcp.yml +0 -507
- package/tests/mcp/yaml/evaluate-script.full-mode.test.mcp.yml +0 -281
- package/tests/mcp/yaml/get-available-sfra-documents.docs-only.test.mcp.yml +0 -684
- package/tests/mcp/yaml/get-available-sfra-documents.full-mode.test.mcp.yml +0 -684
- package/tests/mcp/yaml/get-code-versions.docs-only.test.mcp.yml +0 -196
- package/tests/mcp/yaml/get-code-versions.full-mode.test.mcp.yml +0 -273
- package/tests/mcp/yaml/get-isml-categories.docs-only.test.mcp.yml +0 -330
- package/tests/mcp/yaml/get-isml-element.docs-only.test.mcp.yml +0 -294
- package/tests/mcp/yaml/get-isml-elements-by-category.docs-only.test.mcp.yml +0 -334
- package/tests/mcp/yaml/get-job-execution-summary.full-mode.test.mcp.yml +0 -148
- package/tests/mcp/yaml/get-job-log-entries.full-mode.test.mcp.yml +0 -284
- package/tests/mcp/yaml/get-latest-debug.full-mode.test.mcp.yml +0 -191
- package/tests/mcp/yaml/get-latest-error.full-mode.test.mcp.yml +0 -195
- package/tests/mcp/yaml/get-latest-info.full-mode.test.mcp.yml +0 -242
- package/tests/mcp/yaml/get-latest-job-log-files.full-mode.test.mcp.yml +0 -189
- package/tests/mcp/yaml/get-latest-warn.full-mode.test.mcp.yml +0 -182
- package/tests/mcp/yaml/get-log-file-contents.full-mode.test.mcp.yml +0 -256
- package/tests/mcp/yaml/get-sfcc-class-documentation.docs-only.test.mcp.yml +0 -2416
- package/tests/mcp/yaml/get-sfcc-class-documentation.full-mode.test.mcp.yml +0 -2416
- package/tests/mcp/yaml/get-sfcc-class-info.docs-only.test.mcp.yml +0 -1225
- package/tests/mcp/yaml/get-sfcc-class-info.full-mode.test.mcp.yml +0 -1225
- package/tests/mcp/yaml/get-sfra-categories.docs-only.test.mcp.yml +0 -452
- package/tests/mcp/yaml/get-sfra-categories.full-mode.test.mcp.yml +0 -452
- package/tests/mcp/yaml/get-sfra-document.docs-only.test.mcp.yml +0 -525
- package/tests/mcp/yaml/get-sfra-document.full-mode.test.mcp.yml +0 -525
- package/tests/mcp/yaml/get-sfra-documents-by-category.docs-only.test.mcp.yml +0 -507
- package/tests/mcp/yaml/get-sfra-documents-by-category.full-mode.test.mcp.yml +0 -507
- package/tests/mcp/yaml/get-system-object-definition.docs-only.test.mcp.yml +0 -208
- package/tests/mcp/yaml/get-system-object-definition.full-mode.test.mcp.yml +0 -191
- package/tests/mcp/yaml/get-system-object-definitions.docs-only.test.mcp.yml +0 -257
- package/tests/mcp/yaml/get-system-object-definitions.full-mode.test.mcp.yml +0 -517
- package/tests/mcp/yaml/get_latest_error.test.mcp.yml +0 -472
- package/tests/mcp/yaml/list-isml-elements.docs-only.test.mcp.yml +0 -212
- package/tests/mcp/yaml/list-log-files.full-mode.test.mcp.yml +0 -89
- package/tests/mcp/yaml/list-sfcc-classes.docs-only.test.mcp.yml +0 -511
- package/tests/mcp/yaml/list-sfcc-classes.full-mode.test.mcp.yml +0 -511
- package/tests/mcp/yaml/search-custom-object-attribute-definitions.docs-only.test.mcp.yml +0 -82
- package/tests/mcp/yaml/search-custom-object-attribute-definitions.test.mcp.yml +0 -387
- package/tests/mcp/yaml/search-isml-elements.docs-only.test.mcp.yml +0 -312
- package/tests/mcp/yaml/search-job-logs-by-name.full-mode.test.mcp.yml +0 -169
- package/tests/mcp/yaml/search-job-logs.full-mode.test.mcp.yml +0 -174
- package/tests/mcp/yaml/search-logs.full-mode.test.mcp.yml +0 -207
- package/tests/mcp/yaml/search-sfcc-classes.docs-only.test.mcp.yml +0 -1157
- package/tests/mcp/yaml/search-sfcc-classes.full-mode.test.mcp.yml +0 -1157
- package/tests/mcp/yaml/search-sfcc-methods.docs-only.test.mcp.yml +0 -723
- package/tests/mcp/yaml/search-sfcc-methods.full-mode.test.mcp.yml +0 -723
- package/tests/mcp/yaml/search-sfra-documentation.docs-only.test.mcp.yml +0 -427
- package/tests/mcp/yaml/search-sfra-documentation.full-mode.test.mcp.yml +0 -427
- package/tests/mcp/yaml/search-site-preferences.docs-only.test.mcp.yml +0 -295
- package/tests/mcp/yaml/search-site-preferences.full-mode.test.mcp.yml +0 -574
- package/tests/mcp/yaml/search-system-object-attribute-definitions.docs-only.test.mcp.yml +0 -168
- package/tests/mcp/yaml/search-system-object-attribute-definitions.full-mode.test.mcp.yml +0 -500
- package/tests/mcp/yaml/search-system-object-attribute-groups.docs-only.test.mcp.yml +0 -278
- package/tests/mcp/yaml/search-system-object-attribute-groups.full-mode.test.mcp.yml +0 -612
- package/tests/mcp/yaml/summarize-logs.full-mode.test.mcp.yml +0 -173
- package/tests/mcp/yaml/tools.docs-only.test.mcp.yml +0 -535
- package/tests/mcp/yaml/tools.full-mode.test.mcp.yml +0 -378
- package/tests/oauth-token.test.ts +0 -725
- package/tests/ocapi-auth-client.test.ts +0 -276
- package/tests/ocapi-client.test.ts +0 -242
- package/tests/path-service.test.ts +0 -96
- package/tests/query-builder.test.ts +0 -281
- package/tests/referenced-types-extractor.test.ts +0 -814
- package/tests/script-debugger-client.test.ts +0 -430
- package/tests/servers/sfcc-mock-server/README.md +0 -208
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/code-versions.json +0 -247
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/custom-object-attributes-customapi.json +0 -128
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/custom-object-attributes-globalsettings.json +0 -92
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/custom-object-attributes-versionhistory.json +0 -256
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-ccv.json +0 -275
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-fastforward.json +0 -123
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-sfra.json +0 -224
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-storefront.json +0 -447
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/site-preferences-system.json +0 -171
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-campaign.json +0 -13
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-category.json +0 -50
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-order.json +0 -32
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-product.json +0 -224
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attribute-groups-sitepreferences.json +0 -62
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attributes-customeraddress.json +0 -109
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attributes-product-expanded.json +0 -183
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-attributes-product.json +0 -139
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-category.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-customer.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-customeraddress.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-order.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definition-product.json +0 -26
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definitions-old.json +0 -354
- package/tests/servers/sfcc-mock-server/mock-data/ocapi/system-object-definitions.json +0 -172
- package/tests/servers/sfcc-mock-server/package-lock.json +0 -879
- package/tests/servers/sfcc-mock-server/package.json +0 -39
- package/tests/servers/sfcc-mock-server/scripts/setup-logs.js +0 -224
- package/tests/servers/sfcc-mock-server/server.js +0 -280
- package/tests/servers/sfcc-mock-server/src/app.js +0 -182
- package/tests/servers/sfcc-mock-server/src/config/server-config.js +0 -124
- package/tests/servers/sfcc-mock-server/src/middleware/auth.js +0 -101
- package/tests/servers/sfcc-mock-server/src/middleware/cors.js +0 -39
- package/tests/servers/sfcc-mock-server/src/middleware/logging.js +0 -124
- package/tests/servers/sfcc-mock-server/src/routes/cartridge-webdav.js +0 -258
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/code-versions-handler.js +0 -184
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/debugger-handler.js +0 -396
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/oauth-handler.js +0 -36
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/ocapi-error-utils.js +0 -221
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/ocapi-utils.js +0 -440
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/site-preferences-handler.js +0 -332
- package/tests/servers/sfcc-mock-server/src/routes/ocapi/system-objects-handler.js +0 -572
- package/tests/servers/sfcc-mock-server/src/routes/ocapi.js +0 -58
- package/tests/servers/sfcc-mock-server/src/routes/storefront.js +0 -86
- package/tests/servers/sfcc-mock-server/src/routes/webdav.js +0 -240
- package/tests/servers/sfcc-mock-server/src/utils/mock-data-loader.js +0 -84
- package/tests/servers/sfcc-mock-server/src/utils/webdav-xml.js +0 -121
- package/tests/servers/sfcc-mock-server-manager.ts +0 -280
- package/tests/sfcc-mock-server.test.ts +0 -423
- package/tests/site-preferences-client.test.ts +0 -358
- package/tests/system-objects-client.test.ts +0 -310
- package/tests/utils.test.ts +0 -477
- package/tests/validation-helpers.test.ts +0 -325
- package/tests/validator.test.ts +0 -416
- package/tests/workspace-roots.test.ts +0 -227
- package/tsconfig.json +0 -20
- package/tsconfig.test.json +0 -20
|
@@ -1,540 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workspace Roots Management for SFCC MCP Server
|
|
3
|
-
*
|
|
4
|
-
* This module handles secure discovery and validation of workspace roots
|
|
5
|
-
* provided by MCP clients, enabling automatic dw.json discovery from the
|
|
6
|
-
* VS Code workspace without requiring absolute paths.
|
|
7
|
-
*
|
|
8
|
-
* Configuration Discovery Priority:
|
|
9
|
-
* 1. CLI parameter (--dw-json) - handled in main.ts
|
|
10
|
-
* 2. Environment variables (SFCC_*) - handled in main.ts
|
|
11
|
-
* 3. MCP workspace roots (this module) - called after client connects
|
|
12
|
-
*
|
|
13
|
-
* This discovery mechanism is preferred over CWD-based search because
|
|
14
|
-
* MCP servers often start with cwd set to the user's home directory,
|
|
15
|
-
* not the project directory. The MCP workspace roots capability provides
|
|
16
|
-
* the correct project context from VS Code/Copilot/Cursor.
|
|
17
|
-
*
|
|
18
|
-
* Security considerations:
|
|
19
|
-
* - Only file:// URIs are accepted (per MCP spec)
|
|
20
|
-
* - Path traversal attacks are prevented
|
|
21
|
-
* - System directories are blocked
|
|
22
|
-
* - Symlink resolution is handled securely
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
import { existsSync, realpathSync, statSync } from 'fs';
|
|
26
|
-
import { resolve, normalize, join, isAbsolute } from 'path';
|
|
27
|
-
import { fileURLToPath } from 'url';
|
|
28
|
-
import { Logger } from '../utils/logger.js';
|
|
29
|
-
import { DwJsonConfig } from '../types/types.js';
|
|
30
|
-
import { loadSecureDwJson } from './dw-json-loader.js';
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* MCP client root from roots/list response
|
|
34
|
-
*/
|
|
35
|
-
export interface MCPClientRoot {
|
|
36
|
-
uri: string;
|
|
37
|
-
name?: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Represents a validated workspace root
|
|
42
|
-
*/
|
|
43
|
-
export interface ValidatedWorkspaceRoot {
|
|
44
|
-
/** Original URI from the client */
|
|
45
|
-
uri: string;
|
|
46
|
-
/** Resolved absolute path */
|
|
47
|
-
path: string;
|
|
48
|
-
/** Optional name for the root */
|
|
49
|
-
name?: string;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Result of workspace roots discovery
|
|
54
|
-
*/
|
|
55
|
-
export interface WorkspaceDiscoveryResult {
|
|
56
|
-
/** Whether discovery was successful */
|
|
57
|
-
success: boolean;
|
|
58
|
-
/** Discovered dw.json configuration if found */
|
|
59
|
-
config?: DwJsonConfig;
|
|
60
|
-
/** Path to the discovered dw.json file */
|
|
61
|
-
dwJsonPath?: string;
|
|
62
|
-
/** Reason for failure or skip */
|
|
63
|
-
reason?: string;
|
|
64
|
-
/** Number of workspace roots received from client */
|
|
65
|
-
rootsReceived?: number;
|
|
66
|
-
/** Number of valid roots after security validation */
|
|
67
|
-
validRoots?: number;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Security validation result
|
|
72
|
-
*/
|
|
73
|
-
interface ValidationResult {
|
|
74
|
-
isValid: boolean;
|
|
75
|
-
error?: string;
|
|
76
|
-
resolvedPath?: string;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Dangerous system paths that should never be accessed
|
|
81
|
-
* These are blocked to prevent accidental or malicious access to sensitive areas
|
|
82
|
-
*/
|
|
83
|
-
const BLOCKED_SYSTEM_PATHS: readonly string[] = [
|
|
84
|
-
'/etc',
|
|
85
|
-
'/proc',
|
|
86
|
-
'/sys',
|
|
87
|
-
'/dev',
|
|
88
|
-
'/root',
|
|
89
|
-
'/var/log',
|
|
90
|
-
'/var/run',
|
|
91
|
-
'/boot',
|
|
92
|
-
'/sbin',
|
|
93
|
-
'/bin',
|
|
94
|
-
// Windows system paths
|
|
95
|
-
'C:\\Windows',
|
|
96
|
-
'C:\\Program Files',
|
|
97
|
-
'C:\\ProgramData',
|
|
98
|
-
// Common sensitive directories
|
|
99
|
-
'.ssh',
|
|
100
|
-
'.gnupg',
|
|
101
|
-
'.aws',
|
|
102
|
-
'.config/gcloud',
|
|
103
|
-
] as const;
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Allowed path prefixes for workspace roots
|
|
107
|
-
* These are the typical locations where development projects reside
|
|
108
|
-
*/
|
|
109
|
-
const ALLOWED_PATH_PATTERNS: readonly RegExp[] = [
|
|
110
|
-
// User home directories
|
|
111
|
-
/^\/Users\/[^/]+\//i, // macOS
|
|
112
|
-
/^\/home\/[^/]+\//i, // Linux (allow all users, not just runner)
|
|
113
|
-
/^C:\\Users\\[^\\]+\\/i, // Windows
|
|
114
|
-
// Common project directories
|
|
115
|
-
/^\/opt\//i,
|
|
116
|
-
/^\/var\/www\//i,
|
|
117
|
-
/^\/srv\//i,
|
|
118
|
-
// Temp directories (for testing)
|
|
119
|
-
/^\/tmp\//i,
|
|
120
|
-
/^\/private\/tmp\//i, // macOS real temp path
|
|
121
|
-
/^\/var\/folders\//i, // macOS temp
|
|
122
|
-
/^\/private\/var\/folders\//i, // macOS real temp path (symlink resolved)
|
|
123
|
-
/^C:\\Temp\\/i, // Windows temp
|
|
124
|
-
// CI workspace paths
|
|
125
|
-
/^\/home\/runner\/work\//i, // GitHub Actions
|
|
126
|
-
] as const;
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Validates that a file URI is safe and converts it to an absolute path
|
|
130
|
-
*
|
|
131
|
-
* @param uri - The file:// URI to validate
|
|
132
|
-
* @returns Validation result with resolved path or error
|
|
133
|
-
*/
|
|
134
|
-
function validateFileUri(uri: string): ValidationResult {
|
|
135
|
-
// Check for null bytes and other dangerous characters
|
|
136
|
-
if (uri.includes('\0') || uri.includes('\x00')) {
|
|
137
|
-
return { isValid: false, error: 'URI contains invalid characters' };
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// Verify it's a file:// URI
|
|
141
|
-
if (!uri.startsWith('file://')) {
|
|
142
|
-
return { isValid: false, error: 'Only file:// URIs are supported for workspace roots' };
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
try {
|
|
146
|
-
// Convert file URI to path securely
|
|
147
|
-
const path = fileURLToPath(uri);
|
|
148
|
-
return validatePath(path);
|
|
149
|
-
} catch (error) {
|
|
150
|
-
return {
|
|
151
|
-
isValid: false,
|
|
152
|
-
error: `Invalid file URI: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Validates that a file path is safe to use as a workspace root
|
|
159
|
-
*
|
|
160
|
-
* @param inputPath - The path to validate
|
|
161
|
-
* @returns Validation result with resolved path or error
|
|
162
|
-
*/
|
|
163
|
-
function validatePath(inputPath: string): ValidationResult {
|
|
164
|
-
// Check for null bytes
|
|
165
|
-
if (inputPath.includes('\0')) {
|
|
166
|
-
return { isValid: false, error: 'Path contains invalid characters' };
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
// Check for excessively long paths (DoS prevention)
|
|
170
|
-
if (inputPath.length > 4096) {
|
|
171
|
-
return { isValid: false, error: 'Path is too long' };
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// Normalize and resolve the path
|
|
175
|
-
let resolvedPath: string;
|
|
176
|
-
try {
|
|
177
|
-
resolvedPath = normalize(resolve(inputPath));
|
|
178
|
-
} catch {
|
|
179
|
-
return { isValid: false, error: 'Failed to resolve path' };
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Verify it's an absolute path
|
|
183
|
-
if (!isAbsolute(resolvedPath)) {
|
|
184
|
-
return { isValid: false, error: 'Path must be absolute' };
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// Check against blocked system paths
|
|
188
|
-
const lowerPath = resolvedPath.toLowerCase();
|
|
189
|
-
for (const blocked of BLOCKED_SYSTEM_PATHS) {
|
|
190
|
-
const blockedLower = blocked.toLowerCase();
|
|
191
|
-
if (lowerPath === blockedLower || lowerPath.startsWith(`${blockedLower }/`) || lowerPath.startsWith(`${blockedLower }\\`)) {
|
|
192
|
-
return { isValid: false, error: 'Access to system directories is not allowed' };
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// Check that path matches allowed patterns
|
|
197
|
-
const matchesAllowed = ALLOWED_PATH_PATTERNS.some(pattern => pattern.test(resolvedPath));
|
|
198
|
-
if (!matchesAllowed) {
|
|
199
|
-
return {
|
|
200
|
-
isValid: false,
|
|
201
|
-
error: 'Path is outside of allowed workspace directories',
|
|
202
|
-
};
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
// Verify the path exists and is a directory
|
|
206
|
-
try {
|
|
207
|
-
if (!existsSync(resolvedPath)) {
|
|
208
|
-
return { isValid: false, error: 'Path does not exist' };
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
const stats = statSync(resolvedPath);
|
|
212
|
-
if (!stats.isDirectory()) {
|
|
213
|
-
return { isValid: false, error: 'Path is not a directory' };
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// Resolve symlinks to verify the real path is also safe
|
|
217
|
-
const realPath = realpathSync(resolvedPath);
|
|
218
|
-
if (realPath !== resolvedPath) {
|
|
219
|
-
// Re-validate the resolved symlink path
|
|
220
|
-
const symlinkValidation = validatePath(realPath);
|
|
221
|
-
if (!symlinkValidation.isValid) {
|
|
222
|
-
return {
|
|
223
|
-
isValid: false,
|
|
224
|
-
error: `Symlink target is not allowed: ${symlinkValidation.error}`,
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
resolvedPath = realPath;
|
|
228
|
-
}
|
|
229
|
-
} catch (error) {
|
|
230
|
-
return {
|
|
231
|
-
isValid: false,
|
|
232
|
-
error: `Cannot access path: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
return { isValid: true, resolvedPath };
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* Service for managing workspace roots from MCP clients
|
|
241
|
-
*
|
|
242
|
-
* This class provides secure handling of workspace roots, enabling
|
|
243
|
-
* automatic discovery of configuration files (like dw.json) in the
|
|
244
|
-
* agent's working directories.
|
|
245
|
-
*/
|
|
246
|
-
export class WorkspaceRootsService {
|
|
247
|
-
private roots: ValidatedWorkspaceRoot[] = [];
|
|
248
|
-
private logger: Logger;
|
|
249
|
-
|
|
250
|
-
constructor(logger?: Logger) {
|
|
251
|
-
this.logger = logger ?? Logger.getInstance();
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Update workspace roots from MCP client response
|
|
256
|
-
*
|
|
257
|
-
* @param clientRoots - Array of roots from the MCP client (roots/list response)
|
|
258
|
-
* @returns Array of successfully validated roots
|
|
259
|
-
*/
|
|
260
|
-
updateRoots(clientRoots: Array<{ uri: string; name?: string }>): ValidatedWorkspaceRoot[] {
|
|
261
|
-
this.roots = [];
|
|
262
|
-
|
|
263
|
-
for (const root of clientRoots) {
|
|
264
|
-
const validation = validateFileUri(root.uri);
|
|
265
|
-
|
|
266
|
-
if (validation.isValid && validation.resolvedPath) {
|
|
267
|
-
this.roots.push({
|
|
268
|
-
uri: root.uri,
|
|
269
|
-
path: validation.resolvedPath,
|
|
270
|
-
name: root.name,
|
|
271
|
-
});
|
|
272
|
-
this.logger.debug(`Validated workspace root: ${root.name ?? root.uri} -> ${validation.resolvedPath}`);
|
|
273
|
-
} else {
|
|
274
|
-
this.logger.debug(`Rejected workspace root: ${root.uri} - ${validation.error}`);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
this.logger.log(`Workspace roots updated: ${this.roots.length} valid root(s)`);
|
|
279
|
-
return [...this.roots];
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* Get all validated workspace roots
|
|
284
|
-
*/
|
|
285
|
-
getRoots(): ValidatedWorkspaceRoot[] {
|
|
286
|
-
return [...this.roots];
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Search for a file in all workspace roots
|
|
291
|
-
*
|
|
292
|
-
* @param filename - The filename to search for (e.g., 'dw.json')
|
|
293
|
-
* @param maxDepth - Maximum directory depth to search (default: 2)
|
|
294
|
-
* @returns The first matching file path, or undefined if not found
|
|
295
|
-
*/
|
|
296
|
-
findFile(filename: string, maxDepth: number = 2): string | undefined {
|
|
297
|
-
// Validate filename to prevent path traversal
|
|
298
|
-
if (filename.includes('/') || filename.includes('\\') || filename.includes('..')) {
|
|
299
|
-
this.logger.debug(`Invalid filename rejected: ${filename}`);
|
|
300
|
-
return undefined;
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
for (const root of this.roots) {
|
|
304
|
-
const found = this.searchInDirectory(root.path, filename, 0, maxDepth);
|
|
305
|
-
if (found) {
|
|
306
|
-
this.logger.debug(`Found ${filename} in workspace root: ${found}`);
|
|
307
|
-
return found;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
return undefined;
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
/**
|
|
315
|
-
* Recursively search for a file in a directory
|
|
316
|
-
*
|
|
317
|
-
* @param directory - Directory to search
|
|
318
|
-
* @param filename - Filename to find
|
|
319
|
-
* @param currentDepth - Current recursion depth
|
|
320
|
-
* @param maxDepth - Maximum depth to search
|
|
321
|
-
* @returns File path if found, undefined otherwise
|
|
322
|
-
*/
|
|
323
|
-
private searchInDirectory(
|
|
324
|
-
directory: string,
|
|
325
|
-
filename: string,
|
|
326
|
-
currentDepth: number,
|
|
327
|
-
maxDepth: number,
|
|
328
|
-
): string | undefined {
|
|
329
|
-
// Check immediate file
|
|
330
|
-
const filePath = join(directory, filename);
|
|
331
|
-
if (existsSync(filePath)) {
|
|
332
|
-
try {
|
|
333
|
-
const stats = statSync(filePath);
|
|
334
|
-
if (stats.isFile()) {
|
|
335
|
-
return filePath;
|
|
336
|
-
}
|
|
337
|
-
} catch {
|
|
338
|
-
// Ignore access errors
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
// Don't recurse deeper if at max depth
|
|
343
|
-
if (currentDepth >= maxDepth) {
|
|
344
|
-
return undefined;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// Search subdirectories (limited set to avoid excessive scanning)
|
|
348
|
-
const allowedSubdirs = ['cartridges', 'config', '.vscode', 'sfcc'];
|
|
349
|
-
for (const subdir of allowedSubdirs) {
|
|
350
|
-
const subdirPath = join(directory, subdir);
|
|
351
|
-
try {
|
|
352
|
-
if (existsSync(subdirPath) && statSync(subdirPath).isDirectory()) {
|
|
353
|
-
const found = this.searchInDirectory(subdirPath, filename, currentDepth + 1, maxDepth);
|
|
354
|
-
if (found) {
|
|
355
|
-
return found;
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
} catch {
|
|
359
|
-
// Ignore access errors
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
return undefined;
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
/**
|
|
367
|
-
* Check if a given path is within any of the validated workspace roots
|
|
368
|
-
*
|
|
369
|
-
* This is useful for validating that file operations stay within
|
|
370
|
-
* the allowed workspace boundaries.
|
|
371
|
-
*
|
|
372
|
-
* @param filePath - The path to check
|
|
373
|
-
* @returns true if the path is within a workspace root
|
|
374
|
-
*/
|
|
375
|
-
isPathWithinRoots(filePath: string): boolean {
|
|
376
|
-
try {
|
|
377
|
-
// Normalize and resolve the path
|
|
378
|
-
const normalizedPath = normalize(resolve(filePath));
|
|
379
|
-
|
|
380
|
-
// For existing paths, resolve symlinks to get the real path
|
|
381
|
-
// For non-existing paths (like potential new files), use the normalized path
|
|
382
|
-
let checkPath = normalizedPath;
|
|
383
|
-
if (existsSync(normalizedPath)) {
|
|
384
|
-
checkPath = realpathSync(normalizedPath);
|
|
385
|
-
} else {
|
|
386
|
-
// For non-existing paths, try to resolve symlinks in the parent directory chain
|
|
387
|
-
// This handles cases like /var/folders on macOS which is a symlink to /private/var/folders
|
|
388
|
-
let parentPath = normalizedPath;
|
|
389
|
-
while (parentPath !== '/') {
|
|
390
|
-
const parent = resolve(parentPath, '..');
|
|
391
|
-
if (parent === parentPath) {break;}
|
|
392
|
-
parentPath = parent;
|
|
393
|
-
if (existsSync(parentPath)) {
|
|
394
|
-
// Found an existing parent, resolve its realpath and reconstruct
|
|
395
|
-
const realParent = realpathSync(parentPath);
|
|
396
|
-
const relativePart = normalizedPath.substring(parentPath.length);
|
|
397
|
-
checkPath = realParent + relativePart;
|
|
398
|
-
break;
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
return this.roots.some(root => {
|
|
404
|
-
return checkPath.startsWith(`${root.path }/`) || checkPath.startsWith(`${root.path }\\`) || checkPath === root.path;
|
|
405
|
-
});
|
|
406
|
-
} catch {
|
|
407
|
-
return false;
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
/**
|
|
412
|
-
* Clear all workspace roots
|
|
413
|
-
*/
|
|
414
|
-
clear(): void {
|
|
415
|
-
this.roots = [];
|
|
416
|
-
this.logger.debug('Workspace roots cleared');
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
/**
|
|
420
|
-
* Discover dw.json from MCP client workspace roots
|
|
421
|
-
*
|
|
422
|
-
* This is the main entry point for workspace-based config discovery.
|
|
423
|
-
* It takes raw roots from the MCP client, validates them, searches for
|
|
424
|
-
* dw.json, and loads the configuration.
|
|
425
|
-
*
|
|
426
|
-
* @param clientRoots - Raw roots array from server.listRoots() response
|
|
427
|
-
* @returns Discovery result with config if found
|
|
428
|
-
*/
|
|
429
|
-
discoverDwJson(clientRoots: MCPClientRoot[] | undefined): WorkspaceDiscoveryResult {
|
|
430
|
-
this.logger.log('[WorkspaceRoots] Starting dw.json discovery from client roots');
|
|
431
|
-
|
|
432
|
-
// Log what we received from the client
|
|
433
|
-
if (!clientRoots) {
|
|
434
|
-
this.logger.log('[WorkspaceRoots] No roots array received from client (undefined)');
|
|
435
|
-
return { success: false, reason: 'No roots array received from client' };
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
this.logger.log(`[WorkspaceRoots] Received ${clientRoots.length} root(s) from client`);
|
|
439
|
-
|
|
440
|
-
if (clientRoots.length === 0) {
|
|
441
|
-
this.logger.log('[WorkspaceRoots] Client returned empty roots array');
|
|
442
|
-
return { success: false, reason: 'Client returned empty roots array', rootsReceived: 0 };
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
// Log each root we received
|
|
446
|
-
clientRoots.forEach((root, index) => {
|
|
447
|
-
this.logger.log(`[WorkspaceRoots] Root ${index + 1}: uri="${root.uri}", name="${root.name ?? '(none)'}"`);
|
|
448
|
-
});
|
|
449
|
-
|
|
450
|
-
// Validate and store the workspace roots
|
|
451
|
-
const validRoots = this.updateRoots(clientRoots);
|
|
452
|
-
this.logger.log(`[WorkspaceRoots] After validation: ${validRoots.length} valid root(s)`);
|
|
453
|
-
|
|
454
|
-
if (validRoots.length === 0) {
|
|
455
|
-
this.logger.log('[WorkspaceRoots] No valid roots after security validation');
|
|
456
|
-
return {
|
|
457
|
-
success: false,
|
|
458
|
-
reason: 'No valid workspace roots after security validation',
|
|
459
|
-
rootsReceived: clientRoots.length,
|
|
460
|
-
validRoots: 0,
|
|
461
|
-
};
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
// Log validated roots
|
|
465
|
-
validRoots.forEach((root, index) => {
|
|
466
|
-
this.logger.log(`[WorkspaceRoots] Valid root ${index + 1}: path="${root.path}"`);
|
|
467
|
-
});
|
|
468
|
-
|
|
469
|
-
// Search for dw.json in workspace roots
|
|
470
|
-
this.logger.log('[WorkspaceRoots] Searching for dw.json in workspace roots...');
|
|
471
|
-
const dwJsonPath = this.findFile('dw.json');
|
|
472
|
-
|
|
473
|
-
if (!dwJsonPath) {
|
|
474
|
-
this.logger.log('[WorkspaceRoots] No dw.json found in any workspace root');
|
|
475
|
-
return {
|
|
476
|
-
success: false,
|
|
477
|
-
reason: 'No dw.json found in workspace roots',
|
|
478
|
-
rootsReceived: clientRoots.length,
|
|
479
|
-
validRoots: validRoots.length,
|
|
480
|
-
};
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
this.logger.log(`[WorkspaceRoots] Found dw.json at: ${dwJsonPath}`);
|
|
484
|
-
|
|
485
|
-
// Load and validate the dw.json
|
|
486
|
-
try {
|
|
487
|
-
const config = loadSecureDwJson(dwJsonPath);
|
|
488
|
-
this.logger.log('[WorkspaceRoots] Successfully loaded dw.json');
|
|
489
|
-
this.logger.log(`[WorkspaceRoots] hostname: ${config.hostname}`);
|
|
490
|
-
this.logger.log(`[WorkspaceRoots] username: ${config.username ? '(set)' : '(not set)'}`);
|
|
491
|
-
this.logger.log(`[WorkspaceRoots] password: ${config.password ? '(set)' : '(not set)'}`);
|
|
492
|
-
this.logger.log(`[WorkspaceRoots] client-id: ${config['client-id'] ? '(set)' : '(not set)'}`);
|
|
493
|
-
this.logger.log(`[WorkspaceRoots] client-secret: ${config['client-secret'] ? '(set)' : '(not set)'}`);
|
|
494
|
-
|
|
495
|
-
return {
|
|
496
|
-
success: true,
|
|
497
|
-
config,
|
|
498
|
-
dwJsonPath,
|
|
499
|
-
rootsReceived: clientRoots.length,
|
|
500
|
-
validRoots: validRoots.length,
|
|
501
|
-
};
|
|
502
|
-
} catch (error) {
|
|
503
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
504
|
-
this.logger.error(`[WorkspaceRoots] Failed to load dw.json: ${errorMessage}`);
|
|
505
|
-
return {
|
|
506
|
-
success: false,
|
|
507
|
-
reason: `Failed to load dw.json: ${errorMessage}`,
|
|
508
|
-
dwJsonPath,
|
|
509
|
-
rootsReceived: clientRoots.length,
|
|
510
|
-
validRoots: validRoots.length,
|
|
511
|
-
};
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
/**
|
|
517
|
-
* Validate a path for dw.json access
|
|
518
|
-
*
|
|
519
|
-
* This is a standalone function that can be used by the dw-json-loader
|
|
520
|
-
* to validate paths before attempting to read them.
|
|
521
|
-
*
|
|
522
|
-
* @param filePath - The path to validate
|
|
523
|
-
* @returns Object with isValid flag and optional error message
|
|
524
|
-
*/
|
|
525
|
-
export function validateDwJsonPath(filePath: string): { isValid: boolean; error?: string } {
|
|
526
|
-
// First validate the directory containing the file
|
|
527
|
-
const directory = resolve(filePath, '..');
|
|
528
|
-
const validation = validatePath(directory);
|
|
529
|
-
|
|
530
|
-
if (!validation.isValid) {
|
|
531
|
-
return validation;
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
// Additional validation: ensure it's a .json file
|
|
535
|
-
if (!filePath.toLowerCase().endsWith('.json')) {
|
|
536
|
-
return { isValid: false, error: 'Only .json files are allowed' };
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
return { isValid: true };
|
|
540
|
-
}
|
package/src/constants/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
// Constants module currently has no re-exports; reserved for future shared constants.
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { BaseToolHandler, ToolExecutionContext, GenericToolSpec, HandlerContext, ToolArguments } from './base-handler.js';
|
|
2
|
-
import { ClientFactory } from './client-factory.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Abstract base class for handlers that need a client with factory-based creation.
|
|
6
|
-
* This provides a simpler alternative to SimpleClientHandler when you need
|
|
7
|
-
* access to ClientFactory for more complex client creation scenarios.
|
|
8
|
-
*
|
|
9
|
-
* Use this when:
|
|
10
|
-
* - Your client needs ClientFactory for creation (e.g., requires config/credentials)
|
|
11
|
-
* - You need a simple single-client handler pattern
|
|
12
|
-
*
|
|
13
|
-
* Use SimpleClientHandler when:
|
|
14
|
-
* - Your client has a simple constructor with no dependencies
|
|
15
|
-
* - You want the most minimal boilerplate
|
|
16
|
-
*/
|
|
17
|
-
export abstract class AbstractClientHandler<TToolName extends string, TClient> extends BaseToolHandler<TToolName> {
|
|
18
|
-
protected client: TClient | null = null;
|
|
19
|
-
protected clientFactory: ClientFactory;
|
|
20
|
-
|
|
21
|
-
constructor(context: HandlerContext, subLoggerName: string) {
|
|
22
|
-
super(context, subLoggerName);
|
|
23
|
-
this.clientFactory = new ClientFactory(context, this.logger);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Create the client for this handler.
|
|
28
|
-
* Returns null if the client cannot be created (e.g., missing credentials).
|
|
29
|
-
*/
|
|
30
|
-
protected abstract createClient(): TClient | null;
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Get the context key used to expose the client in the execution context.
|
|
34
|
-
*/
|
|
35
|
-
protected abstract getClientContextKey(): string;
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Get a descriptive name for the client (used in logging and error messages).
|
|
39
|
-
*/
|
|
40
|
-
protected abstract getClientDisplayName(): string;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Get the error message when the client is not available.
|
|
44
|
-
* Override this for custom error messages.
|
|
45
|
-
*/
|
|
46
|
-
protected getClientRequiredError(): string {
|
|
47
|
-
return `${this.getClientDisplayName()} client not initialized`;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
protected async onInitialize(): Promise<void> {
|
|
51
|
-
this.client = this.createClient();
|
|
52
|
-
if (this.client) {
|
|
53
|
-
this.logger.debug(`${this.getClientDisplayName()} client initialized`);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
protected async onDispose(): Promise<void> {
|
|
58
|
-
this.client = null;
|
|
59
|
-
this.logger.debug(`${this.getClientDisplayName()} client disposed`);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
protected async createExecutionContext(): Promise<ToolExecutionContext> {
|
|
63
|
-
if (!this.client) {
|
|
64
|
-
throw new Error(this.getClientRequiredError());
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
return {
|
|
68
|
-
handlerContext: this.context,
|
|
69
|
-
logger: this.logger,
|
|
70
|
-
[this.getClientContextKey()]: this.client,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Abstract method to get tool configuration.
|
|
76
|
-
* Each concrete handler implements this with their specific config.
|
|
77
|
-
*/
|
|
78
|
-
protected abstract getToolConfig(): Record<TToolName, GenericToolSpec<ToolArguments, any>>;
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* Abstract method to get tool name set for O(1) lookup.
|
|
82
|
-
* Each concrete handler implements this with their specific tool set.
|
|
83
|
-
*/
|
|
84
|
-
protected abstract getToolNameSet(): Set<TToolName>;
|
|
85
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { HandlerContext, ToolExecutionContext } from './base-handler.js';
|
|
2
|
-
import { SimpleClientHandler } from './simple-client-handler.js';
|
|
3
|
-
import { AgentInstructionsClient } from '../../clients/agent-instructions-client.js';
|
|
4
|
-
import { InstructionAdvisor } from '../instruction-advisor.js';
|
|
5
|
-
import {
|
|
6
|
-
AGENT_INSTRUCTION_TOOL_CONFIG,
|
|
7
|
-
AgentInstructionToolName,
|
|
8
|
-
AGENT_INSTRUCTION_TOOL_NAMES_SET,
|
|
9
|
-
} from '../../tool-configs/agent-instructions-tool-config.js';
|
|
10
|
-
import { WorkspaceRootsService } from '../../config/workspace-roots.js';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Handler for installing/merging AGENTS.md and skills into the user's project
|
|
14
|
-
*/
|
|
15
|
-
export class AgentInstructionsToolHandler extends SimpleClientHandler<
|
|
16
|
-
AgentInstructionToolName,
|
|
17
|
-
AgentInstructionsClient
|
|
18
|
-
> {
|
|
19
|
-
private readonly instructionAdvisor: InstructionAdvisor;
|
|
20
|
-
private agentInstructionsClient: AgentInstructionsClient | null = null;
|
|
21
|
-
|
|
22
|
-
constructor(context: HandlerContext) {
|
|
23
|
-
const rootsService = context.workspaceRootsService ?? new WorkspaceRootsService(context.logger);
|
|
24
|
-
const client = new AgentInstructionsClient(rootsService);
|
|
25
|
-
super(context, 'AgentInstructions', {
|
|
26
|
-
toolConfig: AGENT_INSTRUCTION_TOOL_CONFIG,
|
|
27
|
-
toolNameSet: AGENT_INSTRUCTION_TOOL_NAMES_SET,
|
|
28
|
-
clientContextKey: 'agentInstructionsClient',
|
|
29
|
-
clientDisplayName: 'Agent instructions',
|
|
30
|
-
createClient: () => {
|
|
31
|
-
this.agentInstructionsClient = client;
|
|
32
|
-
return client;
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
|
-
this.instructionAdvisor = new InstructionAdvisor(client, context.logger);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Override to add instructionAdvisor to execution context
|
|
40
|
-
*/
|
|
41
|
-
protected override async createExecutionContext(): Promise<ToolExecutionContext> {
|
|
42
|
-
const baseContext = await super.createExecutionContext();
|
|
43
|
-
return {
|
|
44
|
-
...baseContext,
|
|
45
|
-
instructionAdvisor: this.instructionAdvisor,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
}
|