@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,364 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Parse Apex test results and format for Claude auto-fix loop.
4
+
5
+ This hook parses the JSON output from `sf apex run test` and provides
6
+ structured feedback that enables Claude to automatically fix failing tests.
7
+
8
+ Environment Variables:
9
+ TOOL_OUTPUT: The stdout from the Bash command
10
+ TOOL_INPUT: The command that was executed
11
+
12
+ Output:
13
+ Formatted test results with failure analysis and fix suggestions
14
+ """
15
+
16
+ import json
17
+ import os
18
+ import sys
19
+ import re
20
+ from pathlib import Path
21
+ from datetime import datetime
22
+
23
+ # Only process sf apex run test commands
24
+ def should_process():
25
+ """Check if this is an apex test command we should process."""
26
+ tool_input = os.environ.get('TOOL_INPUT', '')
27
+ return 'sf apex run test' in tool_input or 'sf apex get test' in tool_input
28
+
29
+ def parse_test_results(output: str) -> dict:
30
+ """
31
+ Parse test results from sf CLI JSON output.
32
+
33
+ Returns:
34
+ dict with summary, failures, and coverage data
35
+ """
36
+ try:
37
+ # Try to parse as JSON (if --result-format json was used)
38
+ data = json.loads(output)
39
+ return parse_json_results(data)
40
+ except json.JSONDecodeError:
41
+ # Parse human-readable output
42
+ return parse_text_results(output)
43
+
44
+ def parse_json_results(data: dict) -> dict:
45
+ """Parse JSON format test results."""
46
+ result = data.get('result', data)
47
+
48
+ summary = {
49
+ 'passed': 0,
50
+ 'failed': 0,
51
+ 'skipped': 0,
52
+ 'total': 0,
53
+ 'duration_ms': 0,
54
+ 'coverage_percent': 0
55
+ }
56
+
57
+ failures = []
58
+ coverage = []
59
+
60
+ # Parse test results
61
+ tests = result.get('tests', [])
62
+ for test in tests:
63
+ outcome = test.get('Outcome', test.get('outcome', '')).lower()
64
+ if outcome == 'pass':
65
+ summary['passed'] += 1
66
+ elif outcome == 'fail':
67
+ summary['failed'] += 1
68
+ failures.append({
69
+ 'class': test.get('ApexClass', {}).get('Name', test.get('className', 'Unknown')),
70
+ 'method': test.get('MethodName', test.get('methodName', 'Unknown')),
71
+ 'message': test.get('Message', test.get('message', '')),
72
+ 'stack_trace': test.get('StackTrace', test.get('stackTrace', '')),
73
+ 'run_time': test.get('RunTime', test.get('runTime', 0))
74
+ })
75
+ elif outcome == 'skip':
76
+ summary['skipped'] += 1
77
+
78
+ summary['total'] = summary['passed'] + summary['failed'] + summary['skipped']
79
+
80
+ # Parse coverage
81
+ coverage_data = result.get('coverage', {}).get('coverage', [])
82
+ if not coverage_data:
83
+ coverage_data = result.get('codecoverage', [])
84
+
85
+ total_lines = 0
86
+ covered_lines = 0
87
+
88
+ for cov in coverage_data:
89
+ class_name = cov.get('name', cov.get('apexClassOrTriggerName', 'Unknown'))
90
+ num_lines = cov.get('totalLines', cov.get('numLinesCovered', 0) + cov.get('numLinesUncovered', 0))
91
+ num_covered = cov.get('coveredLines', cov.get('numLinesCovered', 0))
92
+ if isinstance(num_covered, list):
93
+ num_covered = len(num_covered)
94
+
95
+ uncovered = cov.get('uncoveredLines', [])
96
+ if isinstance(uncovered, int):
97
+ uncovered = []
98
+
99
+ pct = (num_covered / num_lines * 100) if num_lines > 0 else 0
100
+
101
+ coverage.append({
102
+ 'class': class_name,
103
+ 'total_lines': num_lines,
104
+ 'covered_lines': num_covered,
105
+ 'uncovered_lines': uncovered[:10] if uncovered else [], # Limit to first 10
106
+ 'percent': round(pct, 1)
107
+ })
108
+
109
+ total_lines += num_lines
110
+ covered_lines += num_covered if isinstance(num_covered, int) else 0
111
+
112
+ summary['coverage_percent'] = round(covered_lines / total_lines * 100, 1) if total_lines > 0 else 0
113
+
114
+ return {
115
+ 'summary': summary,
116
+ 'failures': failures,
117
+ 'coverage': coverage
118
+ }
119
+
120
+ def parse_text_results(output: str) -> dict:
121
+ """Parse human-readable test output."""
122
+ summary = {
123
+ 'passed': 0,
124
+ 'failed': 0,
125
+ 'skipped': 0,
126
+ 'total': 0,
127
+ 'duration_ms': 0,
128
+ 'coverage_percent': 0
129
+ }
130
+
131
+ failures = []
132
+
133
+ # Look for pass/fail patterns
134
+ pass_match = re.search(r'(\d+)\s+(?:test[s]?\s+)?pass(?:ed|ing)?', output, re.IGNORECASE)
135
+ fail_match = re.search(r'(\d+)\s+(?:test[s]?\s+)?fail(?:ed|ing|ure)?', output, re.IGNORECASE)
136
+
137
+ if pass_match:
138
+ summary['passed'] = int(pass_match.group(1))
139
+ if fail_match:
140
+ summary['failed'] = int(fail_match.group(1))
141
+
142
+ summary['total'] = summary['passed'] + summary['failed']
143
+
144
+ # Look for failure details
145
+ failure_pattern = re.compile(
146
+ r'([\w]+)\.([\w]+)\s*[-:]\s*(.*?)(?=\n\n|\n[A-Z]|$)',
147
+ re.MULTILINE | re.DOTALL
148
+ )
149
+
150
+ for match in failure_pattern.finditer(output):
151
+ if 'fail' in match.group(3).lower() or 'error' in match.group(3).lower():
152
+ failures.append({
153
+ 'class': match.group(1),
154
+ 'method': match.group(2),
155
+ 'message': match.group(3).strip(),
156
+ 'stack_trace': ''
157
+ })
158
+
159
+ return {
160
+ 'summary': summary,
161
+ 'failures': failures,
162
+ 'coverage': []
163
+ }
164
+
165
+ def analyze_failure(failure: dict) -> dict:
166
+ """
167
+ Analyze a test failure and suggest fix strategy.
168
+
169
+ Returns:
170
+ dict with error_type, root_cause, and suggested_fix
171
+ """
172
+ message = failure.get('message', '')
173
+ stack_trace = failure.get('stack_trace', '')
174
+
175
+ analysis = {
176
+ 'error_type': 'Unknown',
177
+ 'root_cause': 'Unable to determine root cause',
178
+ 'suggested_fix': 'Review the test and code under test',
179
+ 'auto_fixable': False
180
+ }
181
+
182
+ # Assertion failures
183
+ if 'AssertException' in message or 'Assertion Failed' in message:
184
+ analysis['error_type'] = 'Assertion Failure'
185
+
186
+ # Extract expected vs actual
187
+ expected_match = re.search(r'[Ee]xpected[:\s]+(\S+)', message)
188
+ actual_match = re.search(r'[Aa]ctual[:\s]+(\S+)', message)
189
+
190
+ if expected_match and actual_match:
191
+ analysis['root_cause'] = f"Expected {expected_match.group(1)} but got {actual_match.group(1)}"
192
+ analysis['suggested_fix'] = "Check if the test expectation is correct, or if the code logic needs fixing"
193
+ else:
194
+ analysis['root_cause'] = "Test assertion did not match expected outcome"
195
+ analysis['suggested_fix'] = "Review the assertion and verify expected vs actual values"
196
+
197
+ analysis['auto_fixable'] = True
198
+
199
+ # Null pointer
200
+ elif 'NullPointerException' in message:
201
+ analysis['error_type'] = 'Null Pointer Exception'
202
+
203
+ # Try to extract line number
204
+ line_match = re.search(r'[Ll]ine[:\s]+(\d+)', stack_trace or message)
205
+ if line_match:
206
+ analysis['root_cause'] = f"Null reference at line {line_match.group(1)}"
207
+ else:
208
+ analysis['root_cause'] = "Attempting to access a property or method on a null reference"
209
+
210
+ analysis['suggested_fix'] = "Add null check before accessing the object, or ensure test data setup creates required records"
211
+ analysis['auto_fixable'] = True
212
+
213
+ # DML exceptions
214
+ elif 'DmlException' in message:
215
+ analysis['error_type'] = 'DML Exception'
216
+
217
+ if 'REQUIRED_FIELD_MISSING' in message:
218
+ analysis['root_cause'] = "Required field not populated in test data"
219
+ analysis['suggested_fix'] = "Add the missing required field to TestDataFactory or test setup"
220
+ elif 'FIELD_CUSTOM_VALIDATION_EXCEPTION' in message:
221
+ analysis['root_cause'] = "Record fails validation rule"
222
+ analysis['suggested_fix'] = "Modify test data to meet validation rule requirements"
223
+ elif 'DUPLICATE_VALUE' in message:
224
+ analysis['root_cause'] = "Unique field constraint violation"
225
+ analysis['suggested_fix'] = "Use unique values in test data (e.g., add timestamp or random suffix)"
226
+ else:
227
+ analysis['root_cause'] = "DML operation failed"
228
+ analysis['suggested_fix'] = "Review the DML error message and adjust test data accordingly"
229
+
230
+ analysis['auto_fixable'] = True
231
+
232
+ # Query exceptions
233
+ elif 'QueryException' in message:
234
+ analysis['error_type'] = 'Query Exception'
235
+ analysis['root_cause'] = "SOQL query returned no results or too many results"
236
+ analysis['suggested_fix'] = "Ensure test data exists before querying, or handle empty results"
237
+ analysis['auto_fixable'] = True
238
+
239
+ # Limit exceptions
240
+ elif 'LimitException' in message:
241
+ analysis['error_type'] = 'Governor Limit Exception'
242
+
243
+ if 'Too many SOQL' in message:
244
+ analysis['root_cause'] = "SOQL query limit exceeded (100 queries)"
245
+ analysis['suggested_fix'] = "Bulkify queries - query before loops, use maps for lookups"
246
+ elif 'Too many DML' in message:
247
+ analysis['root_cause'] = "DML statement limit exceeded (150 statements)"
248
+ analysis['suggested_fix'] = "Bulkify DML - collect records in list, single DML after loop"
249
+ else:
250
+ analysis['root_cause'] = "Governor limit exceeded"
251
+ analysis['suggested_fix'] = "Review code for bulkification issues"
252
+
253
+ analysis['auto_fixable'] = True
254
+
255
+ # Mixed DML
256
+ elif 'MIXED_DML_OPERATION' in message:
257
+ analysis['error_type'] = 'Mixed DML Exception'
258
+ analysis['root_cause'] = "Setup and non-setup objects modified in same transaction"
259
+ analysis['suggested_fix'] = "Use System.runAs() to separate User operations from data operations"
260
+ analysis['auto_fixable'] = True
261
+
262
+ return analysis
263
+
264
+ def format_output(results: dict) -> str:
265
+ """Format test results for Claude consumption."""
266
+ summary = results['summary']
267
+ failures = results['failures']
268
+ coverage = results['coverage']
269
+
270
+ lines = []
271
+ lines.append("=" * 60)
272
+ lines.append("📊 APEX TEST RESULTS")
273
+ lines.append("=" * 60)
274
+ lines.append("")
275
+
276
+ # Summary
277
+ status_icon = "✅" if summary['failed'] == 0 else "❌"
278
+ lines.append(f"{status_icon} SUMMARY")
279
+ lines.append("-" * 60)
280
+ lines.append(f" Passed: {summary['passed']}")
281
+ lines.append(f" Failed: {summary['failed']}")
282
+ lines.append(f" Skipped: {summary['skipped']}")
283
+ lines.append(f" Total: {summary['total']}")
284
+
285
+ if summary['coverage_percent'] > 0:
286
+ cov_icon = "✅" if summary['coverage_percent'] >= 75 else "⚠️"
287
+ lines.append(f" Coverage: {summary['coverage_percent']}% {cov_icon}")
288
+
289
+ lines.append("")
290
+
291
+ # Failures with analysis
292
+ if failures:
293
+ lines.append("❌ FAILED TESTS")
294
+ lines.append("-" * 60)
295
+
296
+ for i, failure in enumerate(failures, 1):
297
+ analysis = analyze_failure(failure)
298
+
299
+ lines.append(f"\n{i}. {failure['class']}.{failure['method']}")
300
+ lines.append(f" Error Type: {analysis['error_type']}")
301
+ lines.append(f" Message: {failure['message'][:200]}...")
302
+ lines.append(f" Root Cause: {analysis['root_cause']}")
303
+ lines.append(f" Suggested Fix: {analysis['suggested_fix']}")
304
+
305
+ if analysis['auto_fixable']:
306
+ lines.append(" 🤖 AUTO-FIXABLE: Yes - Claude can attempt automatic fix")
307
+
308
+ lines.append("")
309
+ lines.append("=" * 60)
310
+ lines.append("🤖 AGENTIC FIX INSTRUCTIONS")
311
+ lines.append("=" * 60)
312
+ lines.append("")
313
+ lines.append("To automatically fix these failures:")
314
+ lines.append("1. Read the failing test class")
315
+ lines.append("2. Read the class under test")
316
+ lines.append("3. Apply the suggested fix")
317
+ lines.append("4. Re-run: sf apex run test --tests [ClassName].[methodName]")
318
+ lines.append("")
319
+
320
+ # Coverage details (if below threshold)
321
+ low_coverage = [c for c in coverage if c['percent'] < 75]
322
+ if low_coverage:
323
+ lines.append("⚠️ LOW COVERAGE CLASSES (<75%)")
324
+ lines.append("-" * 60)
325
+
326
+ for cov in sorted(low_coverage, key=lambda x: x['percent']):
327
+ lines.append(f" {cov['class']}: {cov['percent']}%")
328
+ if cov.get('uncovered_lines'):
329
+ lines.append(f" Uncovered lines: {cov['uncovered_lines']}")
330
+
331
+ lines.append("")
332
+
333
+ lines.append("=" * 60)
334
+
335
+ return "\n".join(lines)
336
+
337
+ def main():
338
+ """Main entry point."""
339
+ if not should_process():
340
+ # Not an apex test command, exit silently
341
+ sys.exit(0)
342
+
343
+ output = os.environ.get('TOOL_OUTPUT', '')
344
+
345
+ if not output:
346
+ sys.exit(0)
347
+
348
+ # Check if this looks like test output
349
+ if 'test' not in output.lower() and 'coverage' not in output.lower():
350
+ sys.exit(0)
351
+
352
+ try:
353
+ results = parse_test_results(output)
354
+
355
+ # Only output if there were tests or failures
356
+ if results['summary']['total'] > 0 or results['failures']:
357
+ formatted = format_output(results)
358
+ print(formatted)
359
+ except Exception as e:
360
+ # Silently fail - don't block on parsing errors
361
+ sys.exit(0)
362
+
363
+ if __name__ == "__main__":
364
+ main()
@@ -0,0 +1,289 @@
1
+ <!-- Parent: running-apex-tests/SKILL.md -->
2
+ # Salesforce CLI Test Commands Reference
3
+
4
+ ## Quick Reference
5
+
6
+ | Task | Command |
7
+ |------|---------|
8
+ | Run single test class | `sf apex run test --class-names MyTest` |
9
+ | Run all local tests | `sf apex run test --test-level RunLocalTests` |
10
+ | Run with coverage | `sf apex run test --class-names MyTest --code-coverage` |
11
+ | Get JSON output | `sf apex run test --class-names MyTest --result-format json` |
12
+ | Run specific methods | `sf apex run test --tests MyTest.method1 --tests MyTest.method2` |
13
+
14
+ ## Test Execution
15
+
16
+ ### Run Single Test Class
17
+
18
+ ```bash
19
+ sf apex run test \
20
+ --class-names AccountServiceTest \
21
+ --target-org my-sandbox \
22
+ --code-coverage \
23
+ --result-format human
24
+ ```
25
+
26
+ ### Run Multiple Test Classes
27
+
28
+ ```bash
29
+ sf apex run test \
30
+ --class-names AccountServiceTest \
31
+ --class-names ContactServiceTest \
32
+ --class-names LeadServiceTest \
33
+ --target-org my-sandbox \
34
+ --code-coverage
35
+ ```
36
+
37
+ ### Run Specific Test Methods
38
+
39
+ ```bash
40
+ sf apex run test \
41
+ --tests AccountServiceTest.testCreate \
42
+ --tests AccountServiceTest.testUpdate \
43
+ --target-org my-sandbox
44
+ ```
45
+
46
+ ### Run All Local Tests
47
+
48
+ ```bash
49
+ sf apex run test \
50
+ --test-level RunLocalTests \
51
+ --target-org my-sandbox \
52
+ --code-coverage \
53
+ --output-dir test-results
54
+ ```
55
+
56
+ ### Run Test Suite
57
+
58
+ ```bash
59
+ sf apex run test \
60
+ --suite-names RegressionSuite \
61
+ --target-org my-sandbox \
62
+ --code-coverage
63
+ ```
64
+
65
+ ## Test Levels
66
+
67
+ | Level | Description |
68
+ |-------|-------------|
69
+ | `RunSpecifiedTests` | Only specified tests (default when using --class-names) |
70
+ | `RunLocalTests` | All tests except managed packages |
71
+ | `RunAllTestsInOrg` | All tests including managed packages |
72
+
73
+ ## Output Formats
74
+
75
+ ### Human Readable (Default)
76
+
77
+ ```bash
78
+ sf apex run test --class-names MyTest --result-format human
79
+ ```
80
+
81
+ ### JSON (For Parsing)
82
+
83
+ ```bash
84
+ sf apex run test --class-names MyTest --result-format json
85
+ ```
86
+
87
+ ### JUnit XML (For CI/CD)
88
+
89
+ ```bash
90
+ sf apex run test --class-names MyTest --result-format junit
91
+ ```
92
+
93
+ ### TAP (Test Anything Protocol)
94
+
95
+ ```bash
96
+ sf apex run test --class-names MyTest --result-format tap
97
+ ```
98
+
99
+ ## Code Coverage
100
+
101
+ ### Basic Coverage
102
+
103
+ ```bash
104
+ sf apex run test \
105
+ --class-names MyTest \
106
+ --code-coverage \
107
+ --target-org my-sandbox
108
+ ```
109
+
110
+ ### Detailed Line-by-Line Coverage
111
+
112
+ ```bash
113
+ sf apex run test \
114
+ --class-names MyTest \
115
+ --code-coverage \
116
+ --detailed-coverage \
117
+ --target-org my-sandbox
118
+ ```
119
+
120
+ ### Save Results to Directory
121
+
122
+ ```bash
123
+ sf apex run test \
124
+ --class-names MyTest \
125
+ --code-coverage \
126
+ --output-dir ./test-results \
127
+ --target-org my-sandbox
128
+ ```
129
+
130
+ Output files:
131
+ - `test-run-id.json` - Test results
132
+ - `test-run-id-codecoverage.json` - Coverage data
133
+
134
+ ## Async Test Execution
135
+
136
+ ### Run Tests Asynchronously
137
+
138
+ ```bash
139
+ sf apex run test \
140
+ --test-level RunLocalTests \
141
+ --target-org my-sandbox \
142
+ --async
143
+ ```
144
+
145
+ Returns a test run ID for checking status later.
146
+
147
+ ### Check Async Test Status
148
+
149
+ ```bash
150
+ sf apex get test \
151
+ --test-run-id 707xx0000000000AAA \
152
+ --target-org my-sandbox
153
+ ```
154
+
155
+ ### Wait for Test Completion
156
+
157
+ ```bash
158
+ sf apex run test \
159
+ --test-level RunLocalTests \
160
+ --target-org my-sandbox \
161
+ --wait 10 # Wait up to 10 minutes
162
+ ```
163
+
164
+ ## Debug Logs During Tests
165
+
166
+ ### Enable Debug Logs
167
+
168
+ ```bash
169
+ # List current log levels
170
+ sf apex list log --target-org my-sandbox
171
+
172
+ # Tail logs in real-time
173
+ sf apex tail log --target-org my-sandbox --color
174
+ ```
175
+
176
+ ### Get Specific Log
177
+
178
+ ```bash
179
+ sf apex get log \
180
+ --log-id 07Lxx0000000000AAA \
181
+ --target-org my-sandbox
182
+ ```
183
+
184
+ ## Useful Flags
185
+
186
+ | Flag | Description |
187
+ |------|-------------|
188
+ | `--code-coverage` | Include coverage in results |
189
+ | `--detailed-coverage` | Line-by-line coverage (slower) |
190
+ | `--result-format` | Output format (human, json, junit, tap) |
191
+ | `--output-dir` | Save results to directory |
192
+ | `--synchronous` | Wait for completion (default) |
193
+ | `--wait` | Max minutes to wait |
194
+ | `--async` | Return immediately with run ID |
195
+ | `--verbose` | Show additional details |
196
+ | `--concise` | Suppress passing test details (show only failures) |
197
+ | `--poll-interval <seconds>` | Customize polling interval (v2.116.6+) |
198
+
199
+ ## Common Patterns
200
+
201
+ ### Full Test Run with Coverage Report
202
+
203
+ ```bash
204
+ sf apex run test \
205
+ --test-level RunLocalTests \
206
+ --code-coverage \
207
+ --result-format json \
208
+ --output-dir ./test-results \
209
+ --target-org my-sandbox \
210
+ --wait 30
211
+ ```
212
+
213
+ ### Quick Validation (Single Test)
214
+
215
+ ```bash
216
+ sf apex run test \
217
+ --tests AccountServiceTest.testCreate \
218
+ --target-org my-sandbox
219
+ ```
220
+
221
+ ### CI/CD Pipeline Pattern
222
+
223
+ ```bash
224
+ # Run tests with JUnit output for CI tools
225
+ sf apex run test \
226
+ --test-level RunLocalTests \
227
+ --result-format junit \
228
+ --output-dir ./test-results \
229
+ --code-coverage \
230
+ --target-org ci-sandbox \
231
+ --wait 60
232
+
233
+ # Check exit code
234
+ if [ $? -ne 0 ]; then
235
+ echo "Tests failed!"
236
+ exit 1
237
+ fi
238
+ ```
239
+
240
+ ### Coverage Validation
241
+
242
+ ```bash
243
+ # Run tests and check minimum coverage
244
+ sf apex run test \
245
+ --test-level RunLocalTests \
246
+ --code-coverage \
247
+ --result-format json \
248
+ --output-dir ./test-results \
249
+ --target-org my-sandbox
250
+
251
+ # Parse coverage from JSON (requires jq)
252
+ coverage=$(jq '.result.summary.orgWideCoverage' ./test-results/*.json | tr -d '"' | tr -d '%')
253
+ if [ "$coverage" -lt 75 ]; then
254
+ echo "Coverage $coverage% is below 75% threshold!"
255
+ exit 1
256
+ fi
257
+ ```
258
+
259
+ ## Troubleshooting
260
+
261
+ ### Test Timeout
262
+
263
+ ```bash
264
+ # Increase wait time for long-running tests
265
+ sf apex run test \
266
+ --test-level RunAllTestsInOrg \
267
+ --wait 120 \
268
+ --target-org my-sandbox
269
+ ```
270
+
271
+ ### No Test Results
272
+
273
+ Check if tests exist:
274
+ ```bash
275
+ sf data query --query "SELECT Id, Name FROM ApexClass WHERE Name LIKE '%Test%'" --target-org my-sandbox
276
+ ```
277
+
278
+ ### Permission Errors
279
+
280
+ Ensure user has "Author Apex" permission and API access.
281
+
282
+ ### Async Test Not Completing
283
+
284
+ Check system status:
285
+ ```bash
286
+ sf apex get test \
287
+ --test-run-id 707xx0000000000AAA \
288
+ --target-org my-sandbox
289
+ ```