@salesforce/afv-skills 1.8.0 → 1.9.0

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.
Files changed (488) hide show
  1. package/package.json +1 -1
  2. package/skills/activating-datacloud/CREDITS.md +5 -0
  3. package/skills/activating-datacloud/README.md +39 -0
  4. package/skills/activating-datacloud/SKILL.md +118 -0
  5. package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
  6. package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
  7. package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
  8. package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
  9. package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
  10. package/skills/building-omnistudio-callable-apex/README.md +80 -0
  11. package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
  12. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
  13. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
  14. package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
  15. package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
  16. package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
  17. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
  18. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
  19. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
  20. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
  21. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
  22. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
  23. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
  24. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
  25. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
  26. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
  27. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
  28. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
  29. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
  30. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
  31. package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
  32. package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
  33. package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
  34. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
  35. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
  36. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
  37. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
  38. package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
  39. package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
  40. package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
  41. package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
  42. package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
  43. package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
  44. package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
  45. package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
  46. package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
  47. package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
  48. package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
  49. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
  50. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
  51. package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
  52. package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
  53. package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
  54. package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
  55. package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
  56. package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
  57. package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
  58. package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
  59. package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
  60. package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
  61. package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
  62. package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
  63. package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
  64. package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
  65. package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
  66. package/skills/building-sf-integrations/CREDITS.md +5 -0
  67. package/skills/building-sf-integrations/README.md +95 -0
  68. package/skills/building-sf-integrations/SKILL.md +192 -0
  69. package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
  70. package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
  71. package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
  72. package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
  73. package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
  74. package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
  75. package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
  76. package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
  77. package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
  78. package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
  79. package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
  80. package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
  81. package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
  82. package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
  83. package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
  84. package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
  85. package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
  86. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
  87. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
  88. package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
  89. package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
  90. package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
  91. package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
  92. package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
  93. package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
  94. package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
  95. package/skills/building-sf-integrations/references/cli-reference.md +94 -0
  96. package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
  97. package/skills/building-sf-integrations/references/event-patterns.md +838 -0
  98. package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
  99. package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
  100. package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
  101. package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
  102. package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
  103. package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
  104. package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
  105. package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
  106. package/skills/building-sf-integrations/scripts/README.md +100 -0
  107. package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
  108. package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
  109. package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
  110. package/skills/configuring-connected-apps/CREDITS.md +3 -0
  111. package/skills/configuring-connected-apps/README.md +99 -0
  112. package/skills/configuring-connected-apps/SKILL.md +224 -0
  113. package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
  114. package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
  115. package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
  116. package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
  117. package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
  118. package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
  119. package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
  120. package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
  121. package/skills/configuring-connected-apps/references/example-usage.md +256 -0
  122. package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
  123. package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
  124. package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
  125. package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
  126. package/skills/connecting-datacloud/CREDITS.md +5 -0
  127. package/skills/connecting-datacloud/README.md +59 -0
  128. package/skills/connecting-datacloud/SKILL.md +155 -0
  129. package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
  130. package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
  131. package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
  132. package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
  133. package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
  134. package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
  135. package/skills/debugging-apex-logs/CREDITS.md +22 -0
  136. package/skills/debugging-apex-logs/README.md +74 -0
  137. package/skills/debugging-apex-logs/SKILL.md +172 -0
  138. package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
  139. package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
  140. package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
  141. package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
  142. package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
  143. package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
  144. package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
  145. package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
  146. package/skills/debugging-apex-logs/references/common-issues.md +68 -0
  147. package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
  148. package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
  149. package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
  150. package/skills/deploying-metadata/CREDITS.md +25 -0
  151. package/skills/deploying-metadata/README.md +104 -0
  152. package/skills/deploying-metadata/SKILL.md +214 -0
  153. package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
  154. package/skills/deploying-metadata/assets/package.xml +121 -0
  155. package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
  156. package/skills/deploying-metadata/references/deploy.sh +73 -0
  157. package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
  158. package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
  159. package/skills/deploying-metadata/references/orchestration.md +183 -0
  160. package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
  161. package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
  162. package/skills/deploying-omnistudio-datapacks/README.md +88 -0
  163. package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
  164. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
  165. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
  166. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
  167. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
  168. package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
  169. package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
  170. package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
  171. package/skills/developing-agentforce/references/actions-reference.md +8 -8
  172. package/skills/fetching-salesforce-docs/README.md +66 -0
  173. package/skills/fetching-salesforce-docs/SKILL.md +209 -0
  174. package/skills/fetching-salesforce-docs/requirements.txt +2 -0
  175. package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
  176. package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
  177. package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
  178. package/skills/generating-apex/CREDITS.md +1 -26
  179. package/skills/generating-apex-test/CREDITS.md +2 -27
  180. package/skills/generating-lwc-components/CREDITS.md +5 -0
  181. package/skills/generating-lwc-components/README.md +126 -0
  182. package/skills/generating-lwc-components/SKILL.md +191 -0
  183. package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
  184. package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
  185. package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
  186. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
  187. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
  188. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
  189. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
  190. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
  191. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
  192. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
  193. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
  194. package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
  195. package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
  196. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
  197. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
  198. package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
  199. package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
  200. package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
  201. package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
  202. package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
  203. package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
  204. package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
  205. package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
  206. package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
  207. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
  208. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
  209. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
  210. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
  211. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
  212. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
  213. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
  214. package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
  215. package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
  216. package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
  217. package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
  218. package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
  219. package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
  220. package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
  221. package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
  222. package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
  223. package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
  224. package/skills/generating-lwc-components/references/advanced-features.md +108 -0
  225. package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
  226. package/skills/generating-lwc-components/references/cli-commands.md +545 -0
  227. package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
  228. package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
  229. package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
  230. package/skills/generating-lwc-components/references/lms-guide.md +860 -0
  231. package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
  232. package/skills/generating-lwc-components/references/performance-guide.md +861 -0
  233. package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
  234. package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
  235. package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
  236. package/skills/generating-lwc-components/references/state-management.md +642 -0
  237. package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
  238. package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
  239. package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
  240. package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
  241. package/skills/generating-mermaid-diagrams/README.md +114 -0
  242. package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
  243. package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
  244. package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
  245. package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
  246. package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
  247. package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
  248. package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
  249. package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
  250. package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
  251. package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
  252. package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
  253. package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
  254. package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
  255. package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
  256. package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
  257. package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
  258. package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
  259. package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
  260. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
  261. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
  262. package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
  263. package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
  264. package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
  265. package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
  266. package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
  267. package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
  268. package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
  269. package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
  270. package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
  271. package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
  272. package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
  273. package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
  274. package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
  275. package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
  276. package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
  277. package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
  278. package/skills/generating-visual-diagrams/CREDITS.md +80 -0
  279. package/skills/generating-visual-diagrams/README.md +83 -0
  280. package/skills/generating-visual-diagrams/SKILL.md +208 -0
  281. package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
  282. package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
  283. package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
  284. package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
  285. package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
  286. package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
  287. package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
  288. package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
  289. package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
  290. package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
  291. package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
  292. package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
  293. package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
  294. package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
  295. package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
  296. package/skills/handling-sf-data/CREDITS.md +5 -0
  297. package/skills/handling-sf-data/README.md +112 -0
  298. package/skills/handling-sf-data/SKILL.md +235 -0
  299. package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
  300. package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
  301. package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
  302. package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
  303. package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
  304. package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
  305. package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
  306. package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
  307. package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
  308. package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
  309. package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
  310. package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
  311. package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
  312. package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
  313. package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
  314. package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
  315. package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
  316. package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
  317. package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
  318. package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
  319. package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
  320. package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
  321. package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
  322. package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
  323. package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
  324. package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
  325. package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
  326. package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
  327. package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
  328. package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
  329. package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
  330. package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
  331. package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
  332. package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
  333. package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
  334. package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
  335. package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
  336. package/skills/handling-sf-data/references/orchestration.md +174 -0
  337. package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
  338. package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
  339. package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
  340. package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
  341. package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
  342. package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
  343. package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
  344. package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
  345. package/skills/harmonizing-datacloud/CREDITS.md +3 -0
  346. package/skills/harmonizing-datacloud/README.md +31 -0
  347. package/skills/harmonizing-datacloud/SKILL.md +117 -0
  348. package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
  349. package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
  350. package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
  351. package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
  352. package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
  353. package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
  354. package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
  355. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
  356. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
  357. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
  358. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
  359. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
  360. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
  361. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
  362. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
  363. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
  364. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
  365. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
  366. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
  367. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
  368. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
  369. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
  370. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
  371. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
  372. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
  373. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
  374. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
  375. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
  376. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
  377. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
  378. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
  379. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
  380. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
  381. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
  382. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
  383. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
  384. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
  385. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
  386. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
  387. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
  388. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
  389. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
  390. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
  391. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
  392. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
  393. package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
  394. package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
  395. package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
  396. package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
  397. package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
  398. package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
  399. package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
  400. package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
  401. package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
  402. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
  403. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
  404. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
  405. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
  406. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
  407. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
  408. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
  409. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
  410. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
  411. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
  412. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
  413. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
  414. package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
  415. package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
  416. package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
  417. package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
  418. package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
  419. package/skills/orchestrating-datacloud/CREDITS.md +15 -0
  420. package/skills/orchestrating-datacloud/README.md +129 -0
  421. package/skills/orchestrating-datacloud/SKILL.md +236 -0
  422. package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
  423. package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
  424. package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
  425. package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
  426. package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
  427. package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
  428. package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
  429. package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
  430. package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
  431. package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
  432. package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
  433. package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
  434. package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
  435. package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
  436. package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
  437. package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
  438. package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
  439. package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
  440. package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
  441. package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
  442. package/skills/preparing-datacloud/CREDITS.md +7 -0
  443. package/skills/preparing-datacloud/README.md +51 -0
  444. package/skills/preparing-datacloud/SKILL.md +191 -0
  445. package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
  446. package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
  447. package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
  448. package/skills/querying-soql/CREDITS.md +21 -0
  449. package/skills/querying-soql/README.md +41 -0
  450. package/skills/querying-soql/SKILL.md +143 -0
  451. package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
  452. package/skills/querying-soql/assets/basic-queries.soql +188 -0
  453. package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
  454. package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
  455. package/skills/querying-soql/assets/relationship-queries.soql +203 -0
  456. package/skills/querying-soql/assets/selector-class.cls +219 -0
  457. package/skills/querying-soql/references/anti-patterns.md +348 -0
  458. package/skills/querying-soql/references/cli-commands.md +358 -0
  459. package/skills/querying-soql/references/field-coverage-rules.md +514 -0
  460. package/skills/querying-soql/references/query-optimization.md +142 -0
  461. package/skills/querying-soql/references/selector-patterns.md +479 -0
  462. package/skills/querying-soql/references/soql-reference.md +227 -0
  463. package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
  464. package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
  465. package/skills/retrieving-datacloud/CREDITS.md +7 -0
  466. package/skills/retrieving-datacloud/README.md +44 -0
  467. package/skills/retrieving-datacloud/SKILL.md +120 -0
  468. package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
  469. package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
  470. package/skills/running-apex-tests/CREDITS.md +22 -0
  471. package/skills/running-apex-tests/README.md +94 -0
  472. package/skills/running-apex-tests/SKILL.md +158 -0
  473. package/skills/running-apex-tests/assets/basic-test.cls +169 -0
  474. package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
  475. package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
  476. package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
  477. package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
  478. package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
  479. package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
  480. package/skills/running-apex-tests/references/cli-commands.md +289 -0
  481. package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
  482. package/skills/running-apex-tests/references/performance-optimization.md +283 -0
  483. package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
  484. package/skills/running-apex-tests/references/test-patterns.md +154 -0
  485. package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
  486. package/skills/segmenting-datacloud/CREDITS.md +3 -0
  487. package/skills/segmenting-datacloud/README.md +36 -0
  488. package/skills/segmenting-datacloud/SKILL.md +115 -0
@@ -0,0 +1,357 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Tiny wrapper for Salesforce documentation extraction.
4
+
5
+ Behavior:
6
+ - If the URL is on help.salesforce.com, automatically route to the dedicated
7
+ Help extractor with shadow DOM heuristics.
8
+ - Otherwise, use a lightweight browser-rendered extractor for official
9
+ Salesforce-owned documentation sites such as developer.salesforce.com,
10
+ architect.salesforce.com, admin.salesforce.com, lightningdesignsystem.com,
11
+ and other supported official documentation hosts.
12
+
13
+ Examples:
14
+ python3 skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py \
15
+ --url "https://help.salesforce.com/s/articleView?id=service.miaw_security.htm&type=5" \
16
+ --pretty
17
+
18
+ python3 skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py \
19
+ --url "https://developer.salesforce.com/docs/platform/lwc/guide/use-message-channel-intro.html" \
20
+ --pretty
21
+
22
+ python3 skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py \
23
+ --url "https://architect.salesforce.com/well-architected/overview" \
24
+ --stealth --pretty
25
+ """
26
+
27
+ from __future__ import annotations
28
+
29
+ import argparse
30
+ import json
31
+ import re
32
+ from typing import Any, Dict
33
+ from urllib.parse import urlparse
34
+
35
+ from runtime_bootstrap import maybe_reexec_in_sf_docs_runtime
36
+
37
+ maybe_reexec_in_sf_docs_runtime(__file__)
38
+
39
+ from playwright.sync_api import TimeoutError as PlaywrightTimeoutError
40
+ from playwright.sync_api import sync_playwright
41
+
42
+ try:
43
+ from playwright_stealth import Stealth
44
+ except ImportError:
45
+ Stealth = None
46
+
47
+ try:
48
+ from playwright_stealth import stealth_sync
49
+ except ImportError:
50
+ stealth_sync = None
51
+
52
+ from extract_help_salesforce import extract as extract_help_salesforce
53
+
54
+
55
+ USER_AGENT = (
56
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
57
+ "AppleWebKit/537.36 (KHTML, like Gecko) "
58
+ "Chrome/122.0.0.0 Safari/537.36"
59
+ )
60
+
61
+ STRONG_SHELL_TOKENS = [
62
+ "loading",
63
+ "sorry to interrupt",
64
+ "css error",
65
+ "enable javascript",
66
+ "we looked high and low",
67
+ "couldn't find that page",
68
+ "404 error",
69
+ ]
70
+
71
+ WEAK_SHELL_TOKENS = [
72
+ "sign in",
73
+ "cookie preferences",
74
+ ]
75
+
76
+ OFFICIAL_DOC_EXACT_HOSTS = {
77
+ "salesforce.com",
78
+ "lightningdesignsystem.com",
79
+ }
80
+
81
+ OFFICIAL_DOC_SUFFIXES = (
82
+ ".salesforce.com",
83
+ ".lightningdesignsystem.com",
84
+ )
85
+
86
+
87
+ def normalize_text(text: str) -> str:
88
+ text = text.replace("\u00a0", " ").replace("\r", "")
89
+ text = re.sub(r"\n{3,}", "\n\n", text)
90
+ text = re.sub(r"[ \t]+", " ", text)
91
+ return text.strip()
92
+
93
+
94
+ def looks_like_shell(title: str, text: str) -> bool:
95
+ haystack = f"{title}\n{text}".lower()
96
+ if any(token in haystack for token in STRONG_SHELL_TOKENS):
97
+ return True
98
+ if any(token in haystack for token in WEAK_SHELL_TOKENS):
99
+ return len(text.strip()) < 600
100
+ return False
101
+
102
+
103
+ def apply_stealth(page) -> bool:
104
+ if stealth_sync is not None:
105
+ try:
106
+ stealth_sync(page)
107
+ return True
108
+ except Exception:
109
+ pass
110
+ if Stealth is not None:
111
+ try:
112
+ Stealth().apply_stealth_sync(page)
113
+ return True
114
+ except Exception:
115
+ return False
116
+ return False
117
+
118
+
119
+ def parse_args() -> argparse.Namespace:
120
+ parser = argparse.ArgumentParser(description="Extract official Salesforce documentation from a URL")
121
+ parser.add_argument("--url", required=True, help="Official Salesforce doc URL")
122
+ parser.add_argument("--timeout", type=int, default=60, help="Timeout in seconds (default: 60)")
123
+ parser.add_argument("--stealth", action="store_true", help="Best-effort stealth mode for bot-sensitive pages")
124
+ parser.add_argument("--pretty", action="store_true", help="Pretty-print JSON")
125
+ return parser.parse_args()
126
+
127
+
128
+ def is_official_salesforce_host(host: str) -> bool:
129
+ host = (host or "").lower()
130
+ return host in OFFICIAL_DOC_EXACT_HOSTS or any(host.endswith(suffix) for suffix in OFFICIAL_DOC_SUFFIXES)
131
+
132
+
133
+ def route_kind(url: str) -> str:
134
+ host = (urlparse(url).hostname or "").lower()
135
+ if host.endswith("help.salesforce.com"):
136
+ return "help"
137
+ if is_official_salesforce_host(host):
138
+ return "official"
139
+ raise SystemExit(f"Unsupported host for fetching-salesforce-docs extractor: {host or url}")
140
+
141
+
142
+ def extract_official_salesforce_doc(url: str, timeout_seconds: int, use_stealth: bool = False) -> Dict[str, Any]:
143
+ timeout_ms = timeout_seconds * 1000
144
+ host = (urlparse(url).hostname or "").lower()
145
+
146
+ with sync_playwright() as p:
147
+ browser = p.chromium.launch(headless=True)
148
+ page = browser.new_page(user_agent=USER_AGENT, viewport={"width": 1440, "height": 1400})
149
+ stealth_used = apply_stealth(page) if use_stealth else False
150
+
151
+ try:
152
+ response = page.goto(url, wait_until="domcontentloaded", timeout=timeout_ms)
153
+ http_status = response.status if response else None
154
+ page.wait_for_timeout(1500)
155
+ try:
156
+ page.wait_for_function(
157
+ r"""
158
+ () => {
159
+ const el = document.querySelector('main, article, [role="main"]');
160
+ const text = (el?.innerText || el?.textContent || '').trim();
161
+ return text.length > 200;
162
+ }
163
+ """,
164
+ timeout=min(timeout_ms, 15000),
165
+ )
166
+ except PlaywrightTimeoutError:
167
+ pass
168
+ try:
169
+ page.wait_for_load_state("networkidle", timeout=min(timeout_ms, 15000))
170
+ except PlaywrightTimeoutError:
171
+ pass
172
+ page.wait_for_timeout(500)
173
+
174
+ payload = page.evaluate(
175
+ r"""
176
+ () => {
177
+ function normalize(text) {
178
+ return String(text || '')
179
+ .replace(/\u00a0/g, ' ')
180
+ .replace(/\r/g, '')
181
+ .replace(/\n{3,}/g, '\n\n')
182
+ .trim();
183
+ }
184
+
185
+ function isVisible(el) {
186
+ if (!el || !el.getBoundingClientRect) return false;
187
+ const rect = el.getBoundingClientRect();
188
+ const style = window.getComputedStyle(el);
189
+ return rect.width > 0 && rect.height > 0 && style.visibility !== 'hidden' && style.display !== 'none';
190
+ }
191
+
192
+ function allRoots() {
193
+ const roots = [document];
194
+ const queue = [document];
195
+ while (queue.length) {
196
+ const current = queue.shift();
197
+ if (!current || !current.querySelectorAll) continue;
198
+ const elements = current.querySelectorAll('*');
199
+ for (const el of elements) {
200
+ if (el.shadowRoot) {
201
+ roots.push(el.shadowRoot);
202
+ queue.push(el.shadowRoot);
203
+ }
204
+ }
205
+ }
206
+ return roots;
207
+ }
208
+
209
+ function deepQueryAll(selector) {
210
+ const results = [];
211
+ const seen = new Set();
212
+ for (const root of allRoots()) {
213
+ if (!root.querySelectorAll) continue;
214
+ for (const el of root.querySelectorAll(selector)) {
215
+ if (!seen.has(el)) {
216
+ seen.add(el);
217
+ results.push(el);
218
+ }
219
+ }
220
+ }
221
+ return results;
222
+ }
223
+
224
+ function collectLinks(scope) {
225
+ const urls = new Set();
226
+ const nodes = scope && scope.querySelectorAll ? scope.querySelectorAll('a[href]') : [];
227
+ for (const a of nodes) {
228
+ const href = a.href || a.getAttribute('href') || '';
229
+ if (!href) continue;
230
+ if (href.startsWith('javascript:') || href.startsWith('mailto:')) continue;
231
+ urls.add(href);
232
+ }
233
+ return Array.from(urls);
234
+ }
235
+
236
+ const title = document.title || normalize(document.querySelector('title')?.innerText || 'Untitled');
237
+ const childLinks = new Set();
238
+ for (const root of allRoots()) {
239
+ for (const link of collectLinks(root)) childLinks.add(link);
240
+ }
241
+
242
+ const selectorConfigs = [
243
+ { selector: 'article', strategy: 'article', base: 260 },
244
+ { selector: 'main', strategy: 'main', base: 220 },
245
+ { selector: '[role="main"]', strategy: 'role-main', base: 220 },
246
+ { selector: '.slds-text-longform', strategy: 'longform', base: 200 },
247
+ { selector: '.markdown-content', strategy: 'markdown-content', base: 190 },
248
+ { selector: '.content-body', strategy: 'content-body', base: 180 },
249
+ { selector: '.article-body', strategy: 'article-body', base: 180 },
250
+ { selector: '.article-content', strategy: 'article-content', base: 180 },
251
+ { selector: '.post-content', strategy: 'post-content', base: 170 },
252
+ { selector: '.main-content', strategy: 'main-content', base: 170 },
253
+ { selector: '.tds-content', strategy: 'tds-content', base: 165 },
254
+ { selector: '.siteforceContentArea .content', strategy: 'siteforce-content', base: 160 },
255
+ { selector: 'doc-content-layout', strategy: 'legacy-doc-layout', base: 150 },
256
+ { selector: 'doc-xml-content', strategy: 'legacy-doc-xml', base: 145 },
257
+ { selector: 'doc-amf-reference .markdown-content', strategy: 'legacy-amf-markdown', base: 150 },
258
+ { selector: 'main .content, article .content', strategy: 'nested-content', base: 140 },
259
+ ];
260
+
261
+ const candidates = [];
262
+ for (const cfg of selectorConfigs) {
263
+ const nodes = deepQueryAll(cfg.selector);
264
+ for (const node of nodes) {
265
+ if (!isVisible(node)) continue;
266
+ const text = normalize(node.innerText || node.textContent || '');
267
+ if (text.length < 200) continue;
268
+ let score = cfg.base + Math.min(text.length, 5000) / 30;
269
+ const lowered = text.toLowerCase();
270
+ if (lowered.includes(title.toLowerCase())) score += 50;
271
+ if (lowered.includes('table of contents')) score -= 80;
272
+ if (lowered.includes('cookie preferences')) score -= 120;
273
+ if (lowered.includes('sign in')) score -= 120;
274
+ candidates.push({
275
+ strategy: cfg.strategy,
276
+ selector: cfg.selector,
277
+ score,
278
+ text,
279
+ links: collectLinks(node).slice(0, 200),
280
+ });
281
+ }
282
+ }
283
+
284
+ const bodyText = normalize(document.body?.innerText || '');
285
+ if (bodyText.length >= 200) {
286
+ candidates.push({
287
+ strategy: 'body',
288
+ selector: 'body',
289
+ score: Math.min(bodyText.length, 5000) / 50,
290
+ text: bodyText,
291
+ links: Array.from(childLinks).slice(0, 200),
292
+ });
293
+ }
294
+
295
+ candidates.sort((a, b) => b.score - a.score);
296
+ const best = candidates[0] || null;
297
+
298
+ return {
299
+ url: window.location.href,
300
+ title,
301
+ strategy: best ? best.strategy : 'none',
302
+ selector: best ? best.selector : null,
303
+ text: best ? best.text : '',
304
+ contentLinks: best ? best.links : [],
305
+ childLinks: Array.from(childLinks).slice(0, 200),
306
+ candidateCount: candidates.length,
307
+ };
308
+ }
309
+ """
310
+ )
311
+
312
+ text = normalize_text(payload.get("text", ""))
313
+ likely_shell = looks_like_shell(payload.get("title", ""), text)
314
+ ok = bool(text) and len(text) >= 300 and not likely_shell
315
+
316
+ return {
317
+ "ok": ok,
318
+ "url": payload.get("url", url),
319
+ "httpStatus": http_status,
320
+ "title": payload.get("title") or "Untitled",
321
+ "host": host,
322
+ "hostKind": "official-salesforce",
323
+ "strategy": payload.get("strategy"),
324
+ "selector": payload.get("selector"),
325
+ "likelyShell": likely_shell,
326
+ "stealthRequested": use_stealth,
327
+ "stealthAvailable": stealth_sync is not None or Stealth is not None,
328
+ "stealthUsed": stealth_used,
329
+ "text": text,
330
+ "contentLinks": payload.get("contentLinks", []),
331
+ "childLinks": payload.get("childLinks", []),
332
+ "candidateCount": payload.get("candidateCount", 0),
333
+ }
334
+ finally:
335
+ page.close()
336
+ browser.close()
337
+
338
+
339
+ def main() -> int:
340
+ args = parse_args()
341
+ kind = route_kind(args.url)
342
+
343
+ if kind == "help":
344
+ result = extract_help_salesforce(args.url, args.timeout, use_stealth=args.stealth)
345
+ result["routedVia"] = "extract_help_salesforce"
346
+ result.setdefault("hostKind", "help")
347
+ else:
348
+ result = extract_official_salesforce_doc(args.url, args.timeout, use_stealth=args.stealth)
349
+ result["routedVia"] = "generic_official_salesforce_extractor"
350
+
351
+ dump = json.dumps(result, indent=2 if args.pretty else None)
352
+ print(dump)
353
+ return 0 if result.get("ok") else 1
354
+
355
+
356
+ if __name__ == "__main__":
357
+ raise SystemExit(main())
@@ -0,0 +1,58 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ import sys
5
+ from pathlib import Path
6
+
7
+
8
+ def sf_docs_runtime_root() -> Path:
9
+ return Path.home() / ".claude" / ".fetching-salesforce-docs-runtime"
10
+
11
+
12
+ def sf_docs_runtime_python() -> Path:
13
+ root = sf_docs_runtime_root() / "venv"
14
+ candidates = [
15
+ root / "bin" / "python",
16
+ root / "bin" / "python3",
17
+ root / "Scripts" / "python.exe",
18
+ ]
19
+ for candidate in candidates:
20
+ if candidate.exists():
21
+ return candidate
22
+ return candidates[0] if os.name != "nt" else candidates[-1]
23
+
24
+
25
+ def prepare_sf_docs_runtime_env(env: dict[str, str] | None = None) -> dict[str, str]:
26
+ runtime_root = sf_docs_runtime_root()
27
+ target = dict(env or os.environ)
28
+ target.setdefault("PLAYWRIGHT_BROWSERS_PATH", str(runtime_root / "ms-playwright"))
29
+ target.setdefault("SF_DOCS_RUNTIME_ROOT", str(runtime_root))
30
+ return target
31
+
32
+
33
+ def maybe_reexec_in_sf_docs_runtime(script_path: str) -> bool:
34
+ runtime_python = sf_docs_runtime_python()
35
+ os.environ.update(prepare_sf_docs_runtime_env())
36
+
37
+ if os.environ.get("SF_DOCS_RUNTIME_ACTIVE") == "1":
38
+ return False
39
+ if not runtime_python.exists():
40
+ return False
41
+
42
+ try:
43
+ current_python = Path(sys.executable).resolve()
44
+ target_python = runtime_python.resolve()
45
+ if current_python == target_python:
46
+ os.environ["SF_DOCS_RUNTIME_ACTIVE"] = "1"
47
+ return False
48
+ except OSError:
49
+ pass
50
+
51
+ env = prepare_sf_docs_runtime_env()
52
+ env["SF_DOCS_RUNTIME_ACTIVE"] = "1"
53
+ os.execve(
54
+ str(runtime_python),
55
+ [str(runtime_python), str(Path(script_path).resolve()), *sys.argv[1:]],
56
+ env,
57
+ )
58
+ return True
@@ -1,30 +1,5 @@
1
1
  # Credits & Acknowledgments
2
2
 
3
- This skill was influenced by the [sf-skills](https://github.com/Jaganpro/sf-skills) repository and built upon the collective wisdom of the Salesforce developer community. We gratefully acknowledge the following authors and resources whose ideas, patterns, and best practices have shaped this skill.
3
+ This skill is built on established Salesforce Apex development patterns and the collective knowledge of the Salesforce developer community.
4
4
 
5
5
  ---
6
-
7
- ## Authors & Contributors
8
-
9
- ### Jag Valaiyapathy (**[Jaganpro)](https://github.com/Jaganpro)**
10
-
11
- **[sf-skills](https://github.com/Jaganpro/sf-skills)**
12
-
13
- Key contributions influencing this skill:
14
-
15
- - Pioneering open-source Salesforce skills for agentic coding tools
16
- - Apex code generation and review patterns
17
- - Best practices, anti-patterns, and design patterns reference material
18
- - Template library for common Apex class types
19
-
20
- This skill was influenced by the [sf-skills](https://github.com/Jaganpro/sf-skills) repository.
21
-
22
- ---
23
-
24
- ## Special Thanks
25
-
26
- To the entire Salesforce developer community for sharing knowledge, writing blogs, creating open-source tools, and helping each other build better solutions.
27
-
28
- ---
29
-
30
- *If we've missed anyone whose work influenced these skills, please let us know so we can add proper attribution.*
@@ -1,30 +1,5 @@
1
1
  # Credits & Acknowledgments
2
2
 
3
- This skill was influenced by the [sf-skills](https://github.com/Jaganpro/sf-skills) repository and built upon the collective wisdom of the Salesforce developer community. We gratefully acknowledge the following authors and resources whose ideas, patterns, and best practices have shaped this skill.
3
+ This skill is built on established Salesforce Apex development patterns and the collective knowledge of the Salesforce developer community.
4
4
 
5
- ---
6
-
7
- ## Authors & Contributors
8
-
9
- ### Jag Valaiyapathy (**[Jaganpro)](https://github.com/Jaganpro)**
10
-
11
- **[sf-skills](https://github.com/Jaganpro/sf-skills)**
12
-
13
- Key contributions influencing this skill:
14
-
15
- - Pioneering open-source Salesforce skills for agentic coding tools
16
- - Apex code generation and review patterns
17
- - Best practices, anti-patterns, and design patterns reference material
18
- - Template library for common Apex class types
19
-
20
- This skill was influenced by the [sf-skills](https://github.com/Jaganpro/sf-skills) repository.
21
-
22
- ---
23
-
24
- ## Special Thanks
25
-
26
- To the entire Salesforce developer community for sharing knowledge, writing blogs, creating open-source tools, and helping each other build better solutions.
27
-
28
- ---
29
-
30
- *If we've missed anyone whose work influenced these skills, please let us know so we can add proper attribution.*
5
+ ---
@@ -0,0 +1,5 @@
1
+ # Credits & Acknowledgments
2
+
3
+ This skill is built on official Salesforce LWC platform patterns and established component development practices.
4
+
5
+ ---
@@ -0,0 +1,126 @@
1
+ # generating-lwc-components
2
+
3
+ Lightning Web Components development skill with PICKLES architecture methodology, 165-point scoring, SLDS 2 compliance, and dark mode support. Build modern Salesforce UIs.
4
+
5
+ ## Features
6
+
7
+ - **Component Scaffolding**: Generate complete LWC bundles (JS, HTML, CSS, meta.xml)
8
+ - **PICKLES Architecture**: Structured methodology for robust components
9
+ - **165-Point Scoring**: Validation across 8 categories (SLDS 2 + Dark Mode)
10
+ - **Wire Service Patterns**: @wire decorators for Apex & GraphQL
11
+ - **Jest Testing**: Comprehensive unit test generation
12
+ - **Spring '26 Features**: TypeScript, lwc:on, Complex Expressions
13
+
14
+ ## Quick Start
15
+
16
+ ### 1. Invoke the skill
17
+
18
+ ```
19
+ Skill: generating-lwc-components
20
+ Request: "Create a data table component for Account records"
21
+ ```
22
+
23
+ ### 2. Answer requirements questions
24
+
25
+ The skill will ask about:
26
+ - Component purpose
27
+ - Data source (LDS, Apex, GraphQL)
28
+ - Target (App Page, Record Page, Flow Screen)
29
+ - Accessibility requirements
30
+
31
+ ### 3. Review generated component
32
+
33
+ The skill generates:
34
+ - JavaScript controller with decorators
35
+ - HTML template with SLDS styling
36
+ - CSS with styling hooks (dark mode ready)
37
+ - meta.xml configuration
38
+ - Jest test file
39
+
40
+ ## PICKLES Framework
41
+
42
+ ```
43
+ P → Prototype │ Validate ideas with wireframes & mock data
44
+ I → Integrate │ Choose data source (LDS, Apex, GraphQL, API)
45
+ C → Composition │ Structure component hierarchy & communication
46
+ K → Kinetics │ Handle user interactions & event flow
47
+ L → Libraries │ Leverage platform APIs & base components
48
+ E → Execution │ Optimize performance & lifecycle hooks
49
+ S → Security │ Enforce permissions, FLS, and data protection
50
+ ```
51
+
52
+ ## Scoring System (165 Points)
53
+
54
+ | Category | Points | Focus |
55
+ |----------|--------|-------|
56
+ | Component Structure | 25 | File organization, naming |
57
+ | Data Layer | 25 | Wire service, error handling |
58
+ | UI/UX | 25 | SLDS 2, responsiveness, dark mode |
59
+ | Accessibility | 20 | WCAG, ARIA, keyboard navigation |
60
+ | Testing | 20 | Jest coverage, async patterns |
61
+ | Performance | 20 | Lazy loading, debouncing |
62
+ | Events | 15 | Component communication |
63
+ | Security | 15 | FLS, permissions |
64
+
65
+ ## Templates
66
+
67
+ | Template | Use Case |
68
+ |----------|----------|
69
+ | `basic-component/` | Simple component starter |
70
+ | `graphql-component/` | GraphQL data binding |
71
+ | `flow-screen-component/` | Flow screen integration |
72
+ | `typescript-component/` | TypeScript support (Spring '26) |
73
+
74
+ ## Cross-Skill Integration
75
+
76
+ | Related Skill | When to Use |
77
+ |---------------|-------------|
78
+ | generating-apex | Create @AuraEnabled controllers |
79
+ | generating-flow | Embed in Flow screens |
80
+ | generating-metadata | Create Lightning Message Channels |
81
+ | deploying-metadata | Deploy component to org |
82
+
83
+ ## Spring '26 Features (API 66.0)
84
+
85
+ - **lwc:on directive**: Dynamic event binding from JavaScript
86
+ - **GraphQL Mutations**: executeMutation for create/update/delete
87
+ - **Complex Expressions**: JS expressions in templates (Beta)
88
+ - **TypeScript Support**: @salesforce/lightning-types package
89
+ - **Agentforce Discovery**: lightning__agentforce capability
90
+
91
+ ## Documentation
92
+
93
+ - [Best Practices](references/lwc-best-practices.md)
94
+ - [Flow Integration](references/flow-integration-guide.md)
95
+ - [Accessibility Guide](references/accessibility-guide.md)
96
+ - [Jest Testing](references/jest-testing.md)
97
+
98
+ ## Jest Configuration for SFDX Projects
99
+
100
+ If your project uses Jest, scope discovery to your Salesforce source so example assets in agent folders are not picked up during `npm test`.
101
+
102
+ ```javascript
103
+ const { jestConfig } = require('@salesforce/sfdx-lwc-jest/config');
104
+
105
+ module.exports = {
106
+ ...jestConfig,
107
+ roots: ['<rootDir>/force-app'],
108
+ testPathIgnorePatterns: [
109
+ '<rootDir>/node_modules/',
110
+ '<rootDir>/.sfdx/',
111
+ '<rootDir>/.agents/',
112
+ '<rootDir>/.cursor/',
113
+ '<rootDir>/.claude/',
114
+ '<rootDir>/.pi/'
115
+ ]
116
+ };
117
+ ```
118
+
119
+ Example test assets in this skill now ship with a `.example` suffix. Copy them into your project and rename them before running Jest.
120
+
121
+ ## Requirements
122
+
123
+ - sf CLI v2
124
+ - Node.js 18+ (for Jest tests)
125
+ - Target Salesforce org
126
+ - API Version 66.0+ (Spring '26)