@salesforce/afv-skills 1.7.5 → 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 (513) 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/building-ui-bundle-frontend/SKILL.md +2 -0
  111. package/skills/configuring-connected-apps/CREDITS.md +3 -0
  112. package/skills/configuring-connected-apps/README.md +99 -0
  113. package/skills/configuring-connected-apps/SKILL.md +224 -0
  114. package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
  115. package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
  116. package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
  117. package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
  118. package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
  119. package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
  120. package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
  121. package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
  122. package/skills/configuring-connected-apps/references/example-usage.md +256 -0
  123. package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
  124. package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
  125. package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
  126. package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
  127. package/skills/connecting-datacloud/CREDITS.md +5 -0
  128. package/skills/connecting-datacloud/README.md +59 -0
  129. package/skills/connecting-datacloud/SKILL.md +155 -0
  130. package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
  131. package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
  132. package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
  133. package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
  134. package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
  135. package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
  136. package/skills/debugging-apex-logs/CREDITS.md +22 -0
  137. package/skills/debugging-apex-logs/README.md +74 -0
  138. package/skills/debugging-apex-logs/SKILL.md +172 -0
  139. package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
  140. package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
  141. package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
  142. package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
  143. package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
  144. package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
  145. package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
  146. package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
  147. package/skills/debugging-apex-logs/references/common-issues.md +68 -0
  148. package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
  149. package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
  150. package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
  151. package/skills/deploying-metadata/CREDITS.md +25 -0
  152. package/skills/deploying-metadata/README.md +104 -0
  153. package/skills/deploying-metadata/SKILL.md +214 -0
  154. package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
  155. package/skills/deploying-metadata/assets/package.xml +121 -0
  156. package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
  157. package/skills/deploying-metadata/references/deploy.sh +73 -0
  158. package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
  159. package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
  160. package/skills/deploying-metadata/references/orchestration.md +183 -0
  161. package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
  162. package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
  163. package/skills/deploying-omnistudio-datapacks/README.md +88 -0
  164. package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
  165. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
  166. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
  167. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
  168. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
  169. package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
  170. package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
  171. package/skills/deploying-ui-bundle/SKILL.md +2 -0
  172. package/skills/developing-agentforce/SKILL.md +1 -1
  173. package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
  174. package/skills/developing-agentforce/references/actions-reference.md +8 -8
  175. package/skills/fetching-salesforce-docs/README.md +66 -0
  176. package/skills/fetching-salesforce-docs/SKILL.md +209 -0
  177. package/skills/fetching-salesforce-docs/requirements.txt +2 -0
  178. package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
  179. package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
  180. package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
  181. package/skills/generating-apex/CREDITS.md +1 -26
  182. package/skills/generating-apex/SKILL.md +4 -2
  183. package/skills/generating-apex-test/CREDITS.md +2 -27
  184. package/skills/generating-apex-test/SKILL.md +3 -1
  185. package/skills/generating-custom-application/SKILL.md +2 -0
  186. package/skills/generating-custom-field/SKILL.md +3 -1
  187. package/skills/generating-custom-lightning-type/SKILL.md +2 -0
  188. package/skills/generating-custom-object/SKILL.md +3 -1
  189. package/skills/generating-custom-tab/SKILL.md +3 -1
  190. package/skills/generating-flexipage/SKILL.md +2 -0
  191. package/skills/generating-flow/SKILL.md +2 -0
  192. package/skills/generating-lightning-app/SKILL.md +1 -1
  193. package/skills/generating-list-view/SKILL.md +2 -0
  194. package/skills/generating-lwc-components/CREDITS.md +5 -0
  195. package/skills/generating-lwc-components/README.md +126 -0
  196. package/skills/generating-lwc-components/SKILL.md +191 -0
  197. package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
  198. package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
  199. package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
  200. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
  201. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
  202. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
  203. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
  204. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
  205. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
  206. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
  207. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
  208. package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
  209. package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
  210. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
  211. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
  212. package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
  213. package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
  214. package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
  215. package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
  216. package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
  217. package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
  218. package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
  219. package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
  220. package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
  221. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
  222. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
  223. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
  224. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
  225. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
  226. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
  227. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
  228. package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
  229. package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
  230. package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
  231. package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
  232. package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
  233. package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
  234. package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
  235. package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
  236. package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
  237. package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
  238. package/skills/generating-lwc-components/references/advanced-features.md +108 -0
  239. package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
  240. package/skills/generating-lwc-components/references/cli-commands.md +545 -0
  241. package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
  242. package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
  243. package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
  244. package/skills/generating-lwc-components/references/lms-guide.md +860 -0
  245. package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
  246. package/skills/generating-lwc-components/references/performance-guide.md +861 -0
  247. package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
  248. package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
  249. package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
  250. package/skills/generating-lwc-components/references/state-management.md +642 -0
  251. package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
  252. package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
  253. package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
  254. package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
  255. package/skills/generating-mermaid-diagrams/README.md +114 -0
  256. package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
  257. package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
  258. package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
  259. package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
  260. package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
  261. package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
  262. package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
  263. package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
  264. package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
  265. package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
  266. package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
  267. package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
  268. package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
  269. package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
  270. package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
  271. package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
  272. package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
  273. package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
  274. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
  275. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
  276. package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
  277. package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
  278. package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
  279. package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
  280. package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
  281. package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
  282. package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
  283. package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
  284. package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
  285. package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
  286. package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
  287. package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
  288. package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
  289. package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
  290. package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
  291. package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
  292. package/skills/generating-ui-bundle-features/SKILL.md +2 -0
  293. package/skills/generating-ui-bundle-metadata/SKILL.md +2 -0
  294. package/skills/generating-ui-bundle-site/SKILL.md +2 -0
  295. package/skills/generating-validation-rule/SKILL.md +2 -0
  296. package/skills/generating-visual-diagrams/CREDITS.md +80 -0
  297. package/skills/generating-visual-diagrams/README.md +83 -0
  298. package/skills/generating-visual-diagrams/SKILL.md +208 -0
  299. package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
  300. package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
  301. package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
  302. package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
  303. package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
  304. package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
  305. package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
  306. package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
  307. package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
  308. package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
  309. package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
  310. package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
  311. package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
  312. package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
  313. package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
  314. package/skills/handling-sf-data/CREDITS.md +5 -0
  315. package/skills/handling-sf-data/README.md +112 -0
  316. package/skills/handling-sf-data/SKILL.md +235 -0
  317. package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
  318. package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
  319. package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
  320. package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
  321. package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
  322. package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
  323. package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
  324. package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
  325. package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
  326. package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
  327. package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
  328. package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
  329. package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
  330. package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
  331. package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
  332. package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
  333. package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
  334. package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
  335. package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
  336. package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
  337. package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
  338. package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
  339. package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
  340. package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
  341. package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
  342. package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
  343. package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
  344. package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
  345. package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
  346. package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
  347. package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
  348. package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
  349. package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
  350. package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
  351. package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
  352. package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
  353. package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
  354. package/skills/handling-sf-data/references/orchestration.md +174 -0
  355. package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
  356. package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
  357. package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
  358. package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
  359. package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
  360. package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
  361. package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
  362. package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
  363. package/skills/harmonizing-datacloud/CREDITS.md +3 -0
  364. package/skills/harmonizing-datacloud/README.md +31 -0
  365. package/skills/harmonizing-datacloud/SKILL.md +117 -0
  366. package/skills/implementing-ui-bundle-agentforce-conversation-client/SKILL.md +1 -1
  367. package/skills/implementing-ui-bundle-file-upload/SKILL.md +2 -0
  368. package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
  369. package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
  370. package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
  371. package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
  372. package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
  373. package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
  374. package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
  375. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
  376. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
  377. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
  378. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
  379. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
  380. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
  381. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
  382. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
  383. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
  384. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
  385. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
  386. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
  387. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
  388. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
  389. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
  390. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
  391. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
  392. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
  393. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
  394. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
  395. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
  396. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
  397. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
  398. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
  399. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
  400. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
  401. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
  402. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
  403. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
  404. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
  405. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
  406. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
  407. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
  408. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
  409. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
  410. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
  411. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
  412. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
  413. package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
  414. package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
  415. package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
  416. package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
  417. package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
  418. package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
  419. package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
  420. package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
  421. package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
  422. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
  423. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
  424. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
  425. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
  426. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
  427. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
  428. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
  429. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
  430. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
  431. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
  432. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
  433. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
  434. package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
  435. package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
  436. package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
  437. package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
  438. package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
  439. package/skills/observing-agentforce/SKILL.md +1 -1
  440. package/skills/orchestrating-datacloud/CREDITS.md +15 -0
  441. package/skills/orchestrating-datacloud/README.md +129 -0
  442. package/skills/orchestrating-datacloud/SKILL.md +236 -0
  443. package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
  444. package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
  445. package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
  446. package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
  447. package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
  448. package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
  449. package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
  450. package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
  451. package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
  452. package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
  453. package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
  454. package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
  455. package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
  456. package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
  457. package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
  458. package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
  459. package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
  460. package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
  461. package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
  462. package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
  463. package/skills/preparing-datacloud/CREDITS.md +7 -0
  464. package/skills/preparing-datacloud/README.md +51 -0
  465. package/skills/preparing-datacloud/SKILL.md +191 -0
  466. package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
  467. package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
  468. package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
  469. package/skills/querying-soql/CREDITS.md +21 -0
  470. package/skills/querying-soql/README.md +41 -0
  471. package/skills/querying-soql/SKILL.md +143 -0
  472. package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
  473. package/skills/querying-soql/assets/basic-queries.soql +188 -0
  474. package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
  475. package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
  476. package/skills/querying-soql/assets/relationship-queries.soql +203 -0
  477. package/skills/querying-soql/assets/selector-class.cls +219 -0
  478. package/skills/querying-soql/references/anti-patterns.md +348 -0
  479. package/skills/querying-soql/references/cli-commands.md +358 -0
  480. package/skills/querying-soql/references/field-coverage-rules.md +514 -0
  481. package/skills/querying-soql/references/query-optimization.md +142 -0
  482. package/skills/querying-soql/references/selector-patterns.md +479 -0
  483. package/skills/querying-soql/references/soql-reference.md +227 -0
  484. package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
  485. package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
  486. package/skills/retrieving-datacloud/CREDITS.md +7 -0
  487. package/skills/retrieving-datacloud/README.md +44 -0
  488. package/skills/retrieving-datacloud/SKILL.md +120 -0
  489. package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
  490. package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
  491. package/skills/running-apex-tests/CREDITS.md +22 -0
  492. package/skills/running-apex-tests/README.md +94 -0
  493. package/skills/running-apex-tests/SKILL.md +158 -0
  494. package/skills/running-apex-tests/assets/basic-test.cls +169 -0
  495. package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
  496. package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
  497. package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
  498. package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
  499. package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
  500. package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
  501. package/skills/running-apex-tests/references/cli-commands.md +289 -0
  502. package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
  503. package/skills/running-apex-tests/references/performance-optimization.md +283 -0
  504. package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
  505. package/skills/running-apex-tests/references/test-patterns.md +154 -0
  506. package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
  507. package/skills/segmenting-datacloud/CREDITS.md +3 -0
  508. package/skills/segmenting-datacloud/README.md +36 -0
  509. package/skills/segmenting-datacloud/SKILL.md +115 -0
  510. package/skills/switching-org/SKILL.md +1 -1
  511. package/skills/testing-agentforce/SKILL.md +1 -1
  512. package/skills/uplifting-components-to-slds2/SKILL.md +3 -1
  513. package/skills/using-ui-bundle-salesforce-data/SKILL.md +2 -0
@@ -0,0 +1,327 @@
1
+ /**
2
+ * Apex Benchmarking Template
3
+ *
4
+ * Reliable performance testing using established Apex benchmarking techniques.
5
+ * Run in Anonymous Apex for consistent results.
6
+ *
7
+ * Features:
8
+ * - Warm-up phase to normalize JIT compilation
9
+ * - Multiple iterations for statistical accuracy
10
+ * - Side-by-side comparison of two approaches
11
+ * - Automatic winner determination
12
+ *
13
+ * See: references/benchmarking-guide.md for methodology and benchmark data
14
+ */
15
+
16
+ // ═══════════════════════════════════════════════════════════════════════════
17
+ // SIMPLE BENCHMARK (Copy into Anonymous Apex)
18
+ // ═══════════════════════════════════════════════════════════════════════════
19
+
20
+ // Quick single-operation benchmark
21
+ Long startTime = System.currentTimeMillis();
22
+
23
+ for (Integer i = 0; i < 10000; i++) {
24
+ // Your operation here
25
+ String s = 'test'.toUpperCase();
26
+ }
27
+
28
+ Long duration = System.currentTimeMillis() - startTime;
29
+ System.debug('Duration: ' + duration + 'ms');
30
+ System.debug('Per iteration: ' + (duration / 10000.0) + 'ms');
31
+
32
+
33
+ // ═══════════════════════════════════════════════════════════════════════════
34
+ // COMPARISON BENCHMARK CLASS
35
+ // ═══════════════════════════════════════════════════════════════════════════
36
+
37
+ /**
38
+ * Compare two implementations side-by-side
39
+ *
40
+ * Usage in Anonymous Apex:
41
+ * BenchmarkComparison.run();
42
+ */
43
+ public class BenchmarkComparison {
44
+
45
+ private static final Integer ITERATIONS = 10000;
46
+ private static final Integer WARMUP_ITERATIONS = 100;
47
+
48
+ public static void run() {
49
+ System.debug('═══════════════════════════════════════════════════════');
50
+ System.debug('BENCHMARK: [Description Here]');
51
+ System.debug('Iterations: ' + ITERATIONS);
52
+ System.debug('═══════════════════════════════════════════════════════');
53
+
54
+ // Warm-up phase (normalizes JIT compilation effects)
55
+ System.debug('\n🔥 Warm-up phase...');
56
+ for (Integer i = 0; i < WARMUP_ITERATIONS; i++) {
57
+ methodA();
58
+ methodB();
59
+ }
60
+ System.debug(' Warm-up complete');
61
+
62
+ // Benchmark Method A
63
+ System.debug('\n📊 Running Method A...');
64
+ Long startA = System.currentTimeMillis();
65
+ for (Integer i = 0; i < ITERATIONS; i++) {
66
+ methodA();
67
+ }
68
+ Long durationA = System.currentTimeMillis() - startA;
69
+
70
+ // Benchmark Method B
71
+ System.debug('📊 Running Method B...');
72
+ Long startB = System.currentTimeMillis();
73
+ for (Integer i = 0; i < ITERATIONS; i++) {
74
+ methodB();
75
+ }
76
+ Long durationB = System.currentTimeMillis() - startB;
77
+
78
+ // Results
79
+ System.debug('\n═══════════════════════════════════════════════════════');
80
+ System.debug('RESULTS');
81
+ System.debug('═══════════════════════════════════════════════════════');
82
+ System.debug('Method A: ' + durationA + 'ms (' + (durationA / (Decimal)ITERATIONS) + 'ms per iteration)');
83
+ System.debug('Method B: ' + durationB + 'ms (' + (durationB / (Decimal)ITERATIONS) + 'ms per iteration)');
84
+ System.debug('───────────────────────────────────────────────────────');
85
+
86
+ Long difference = Math.abs(durationA - durationB);
87
+ String winner = durationA < durationB ? 'Method A' : 'Method B';
88
+ Decimal improvement = durationA < durationB
89
+ ? (durationB / (Decimal)durationA)
90
+ : (durationA / (Decimal)durationB);
91
+
92
+ System.debug('🏆 Winner: ' + winner);
93
+ System.debug(' Difference: ' + difference + 'ms');
94
+ System.debug(' Improvement: ' + improvement.setScale(1) + 'x faster');
95
+
96
+ // Governor limits status
97
+ System.debug('\n📈 Governor Limits Used:');
98
+ System.debug(' CPU Time: ' + Limits.getCpuTime() + '/' + Limits.getLimitCpuTime() + 'ms');
99
+ System.debug(' Heap Size: ' + Limits.getHeapSize() + '/' + Limits.getLimitHeapSize() + ' bytes');
100
+ }
101
+
102
+ // ═══════════════════════════════════════════════════════════════════
103
+ // METHODS TO COMPARE (Replace with your implementations)
104
+ // ═══════════════════════════════════════════════════════════════════
105
+
106
+ private static void methodA() {
107
+ // Implementation A - e.g., String concatenation
108
+ String result = '';
109
+ for (Integer i = 0; i < 10; i++) {
110
+ result += 'item' + i + ',';
111
+ }
112
+ }
113
+
114
+ private static void methodB() {
115
+ // Implementation B - e.g., String.join()
116
+ List<String> items = new List<String>();
117
+ for (Integer i = 0; i < 10; i++) {
118
+ items.add('item' + i);
119
+ }
120
+ String result = String.join(items, ',');
121
+ }
122
+ }
123
+
124
+
125
+ // ═══════════════════════════════════════════════════════════════════════════
126
+ // DATA STRUCTURE BENCHMARK
127
+ // ═══════════════════════════════════════════════════════════════════════════
128
+
129
+ /**
130
+ * Compare List vs Set vs Map lookup performance
131
+ *
132
+ * Expected Results:
133
+ * List.contains(): O(n) - slow
134
+ * Set.contains(): O(1) - fast
135
+ * Map.containsKey(): O(1) - fast
136
+ */
137
+ public class DataStructureBenchmark {
138
+
139
+ private static final Integer DATA_SIZE = 1000;
140
+ private static final Integer LOOKUPS = 5000;
141
+
142
+ public static void run() {
143
+ // Setup test data
144
+ List<String> testList = new List<String>();
145
+ Set<String> testSet = new Set<String>();
146
+ Map<String, Boolean> testMap = new Map<String, Boolean>();
147
+
148
+ for (Integer i = 0; i < DATA_SIZE; i++) {
149
+ String key = 'key_' + i;
150
+ testList.add(key);
151
+ testSet.add(key);
152
+ testMap.put(key, true);
153
+ }
154
+
155
+ // Random lookup keys (mix of existing and non-existing)
156
+ List<String> lookupKeys = new List<String>();
157
+ for (Integer i = 0; i < LOOKUPS; i++) {
158
+ lookupKeys.add('key_' + Math.mod(i * 7, DATA_SIZE * 2));
159
+ }
160
+
161
+ System.debug('═══════════════════════════════════════════════════════');
162
+ System.debug('DATA STRUCTURE LOOKUP BENCHMARK');
163
+ System.debug('Data Size: ' + DATA_SIZE + ' | Lookups: ' + LOOKUPS);
164
+ System.debug('═══════════════════════════════════════════════════════');
165
+
166
+ // List.contains()
167
+ Long startList = System.currentTimeMillis();
168
+ for (String key : lookupKeys) {
169
+ Boolean found = testList.contains(key);
170
+ }
171
+ Long durationList = System.currentTimeMillis() - startList;
172
+
173
+ // Set.contains()
174
+ Long startSet = System.currentTimeMillis();
175
+ for (String key : lookupKeys) {
176
+ Boolean found = testSet.contains(key);
177
+ }
178
+ Long durationSet = System.currentTimeMillis() - startSet;
179
+
180
+ // Map.containsKey()
181
+ Long startMap = System.currentTimeMillis();
182
+ for (String key : lookupKeys) {
183
+ Boolean found = testMap.containsKey(key);
184
+ }
185
+ Long durationMap = System.currentTimeMillis() - startMap;
186
+
187
+ // Results
188
+ System.debug('\nRESULTS:');
189
+ System.debug('List.contains(): ' + durationList + 'ms');
190
+ System.debug('Set.contains(): ' + durationSet + 'ms');
191
+ System.debug('Map.containsKey(): ' + durationMap + 'ms');
192
+
193
+ if (durationList > 0) {
194
+ System.debug('\nSet is ' + (durationList / Math.max(1, durationSet)) + 'x faster than List');
195
+ }
196
+ }
197
+ }
198
+
199
+
200
+ // ═══════════════════════════════════════════════════════════════════════════
201
+ // LOOP STYLE BENCHMARK
202
+ // ═══════════════════════════════════════════════════════════════════════════
203
+
204
+ /**
205
+ * Compare different loop constructs
206
+ *
207
+ * Expected Results (from documented Apex loop benchmarks):
208
+ * While loop: ~0.4s (fastest)
209
+ * Cached iterator: ~0.8s
210
+ * For loop (index): ~1.4s
211
+ * Enhanced for-each: ~2.4s
212
+ */
213
+ public class LoopBenchmark {
214
+
215
+ private static final Integer ITERATIONS = 10000;
216
+
217
+ public static void run() {
218
+ // Create test data
219
+ List<Integer> numbers = new List<Integer>();
220
+ for (Integer i = 0; i < 1000; i++) {
221
+ numbers.add(i);
222
+ }
223
+
224
+ System.debug('═══════════════════════════════════════════════════════');
225
+ System.debug('LOOP STYLE BENCHMARK');
226
+ System.debug('Outer Iterations: ' + ITERATIONS + ' | List Size: ' + numbers.size());
227
+ System.debug('═══════════════════════════════════════════════════════');
228
+
229
+ // While loop with iterator
230
+ Long startWhile = System.currentTimeMillis();
231
+ for (Integer outer = 0; outer < ITERATIONS; outer++) {
232
+ Iterator<Integer> iter = numbers.iterator();
233
+ while (iter.hasNext()) {
234
+ Integer num = iter.next();
235
+ }
236
+ }
237
+ Long durationWhile = System.currentTimeMillis() - startWhile;
238
+
239
+ // Traditional for loop
240
+ Long startFor = System.currentTimeMillis();
241
+ for (Integer outer = 0; outer < ITERATIONS; outer++) {
242
+ for (Integer i = 0; i < numbers.size(); i++) {
243
+ Integer num = numbers[i];
244
+ }
245
+ }
246
+ Long durationFor = System.currentTimeMillis() - startFor;
247
+
248
+ // Enhanced for-each
249
+ Long startEnhanced = System.currentTimeMillis();
250
+ for (Integer outer = 0; outer < ITERATIONS; outer++) {
251
+ for (Integer num : numbers) {
252
+ // Just iterate
253
+ }
254
+ }
255
+ Long durationEnhanced = System.currentTimeMillis() - startEnhanced;
256
+
257
+ // Results
258
+ System.debug('\nRESULTS:');
259
+ System.debug('While loop: ' + durationWhile + 'ms');
260
+ System.debug('For loop: ' + durationFor + 'ms');
261
+ System.debug('Enhanced for: ' + durationEnhanced + 'ms');
262
+
263
+ System.debug('\n📊 Analysis:');
264
+ Long fastest = Math.min(durationWhile, Math.min(durationFor, durationEnhanced));
265
+ if (durationWhile == fastest) {
266
+ System.debug('🏆 While loop is fastest');
267
+ } else if (durationFor == fastest) {
268
+ System.debug('🏆 For loop is fastest');
269
+ } else {
270
+ System.debug('🏆 Enhanced for is fastest');
271
+ }
272
+ }
273
+ }
274
+
275
+
276
+ // ═══════════════════════════════════════════════════════════════════════════
277
+ // STRING BENCHMARK (demonstrates 22x improvement)
278
+ // ═══════════════════════════════════════════════════════════════════════════
279
+
280
+ /**
281
+ * String concatenation vs String.join()
282
+ *
283
+ * Expected Results (from documented Apex benchmarks):
284
+ * Concatenation: 11,767ms for 1,750 items (CPU LIMIT)
285
+ * String.join(): 539ms for 7,500 items (still running)
286
+ * Improvement: ~22x faster
287
+ */
288
+ public class StringBenchmark {
289
+
290
+ public static void run() {
291
+ System.debug('═══════════════════════════════════════════════════════');
292
+ System.debug('STRING BUILDING BENCHMARK');
293
+ System.debug('═══════════════════════════════════════════════════════');
294
+
295
+ // Test with safe number of items
296
+ Integer itemCount = 500;
297
+
298
+ // Method 1: String concatenation (BAD)
299
+ Long startConcat = System.currentTimeMillis();
300
+ String resultConcat = '';
301
+ for (Integer i = 0; i < itemCount; i++) {
302
+ resultConcat += 'Item_' + i + '_Name\n';
303
+ }
304
+ Long durationConcat = System.currentTimeMillis() - startConcat;
305
+
306
+ // Method 2: String.join() (GOOD)
307
+ Long startJoin = System.currentTimeMillis();
308
+ List<String> items = new List<String>();
309
+ for (Integer i = 0; i < itemCount; i++) {
310
+ items.add('Item_' + i + '_Name');
311
+ }
312
+ String resultJoin = String.join(items, '\n');
313
+ Long durationJoin = System.currentTimeMillis() - startJoin;
314
+
315
+ // Results
316
+ System.debug('\nRESULTS (' + itemCount + ' items):');
317
+ System.debug('String +=: ' + durationConcat + 'ms');
318
+ System.debug('String.join(): ' + durationJoin + 'ms');
319
+
320
+ if (durationJoin > 0 && durationConcat > durationJoin) {
321
+ System.debug('\n🏆 String.join() is ' + (durationConcat / durationJoin) + 'x faster!');
322
+ }
323
+
324
+ System.debug('\n⚠️ WARNING: With larger datasets, concatenation hits CPU limit!');
325
+ System.debug(' Documented benchmark: 11,767ms for 1,750 items (concat) vs 539ms for 7,500 items (join)');
326
+ }
327
+ }
@@ -0,0 +1,307 @@
1
+ /**
2
+ * CPU TIME AND HEAP SIZE OPTIMIZATION PATTERNS
3
+ *
4
+ * CPU Limits:
5
+ * - Synchronous: 10,000 ms
6
+ * - Asynchronous: 60,000 ms
7
+ *
8
+ * Heap Limits:
9
+ * - Synchronous: 6 MB
10
+ * - Asynchronous: 12 MB
11
+ *
12
+ * This template demonstrates optimization patterns for CPU and heap limits.
13
+ */
14
+
15
+ // ═══════════════════════════════════════════════════════════════════════════
16
+ // CPU OPTIMIZATION: ALGORITHM COMPLEXITY
17
+ // ═══════════════════════════════════════════════════════════════════════════
18
+
19
+ public class CPUOptimization {
20
+
21
+ // BEFORE: O(n²) - Nested loops are expensive
22
+ public void findDuplicatesBAD(List<Contact> contacts) {
23
+ List<Contact> duplicates = new List<Contact>();
24
+
25
+ for (Integer i = 0; i < contacts.size(); i++) {
26
+ for (Integer j = i + 1; j < contacts.size(); j++) {
27
+ if (contacts[i].Email == contacts[j].Email) {
28
+ duplicates.add(contacts[j]);
29
+ }
30
+ }
31
+ }
32
+ }
33
+
34
+ // AFTER: O(n) - Use Map for lookups
35
+ public List<Contact> findDuplicatesGOOD(List<Contact> contacts) {
36
+ Map<String, Contact> emailToContact = new Map<String, Contact>();
37
+ List<Contact> duplicates = new List<Contact>();
38
+
39
+ for (Contact c : contacts) {
40
+ if (c.Email == null) continue;
41
+
42
+ String normalizedEmail = c.Email.toLowerCase();
43
+ if (emailToContact.containsKey(normalizedEmail)) {
44
+ duplicates.add(c);
45
+ } else {
46
+ emailToContact.put(normalizedEmail, c);
47
+ }
48
+ }
49
+
50
+ return duplicates;
51
+ }
52
+
53
+ // BEFORE: Expensive string concatenation in loop
54
+ public String buildReportBAD(List<Account> accounts) {
55
+ String report = '';
56
+ for (Account acc : accounts) {
57
+ report += acc.Name + '\n'; // Creates new string each iteration!
58
+ }
59
+ return report;
60
+ }
61
+
62
+ // AFTER: Use List and join
63
+ public String buildReportGOOD(List<Account> accounts) {
64
+ List<String> lines = new List<String>();
65
+ for (Account acc : accounts) {
66
+ lines.add(acc.Name);
67
+ }
68
+ return String.join(lines, '\n');
69
+ }
70
+ }
71
+
72
+ // ═══════════════════════════════════════════════════════════════════════════
73
+ // CPU OPTIMIZATION: CACHING
74
+ // ═══════════════════════════════════════════════════════════════════════════
75
+
76
+ public class CachingPatterns {
77
+
78
+ // Cache expensive calculations
79
+ private static Map<String, Decimal> calculationCache = new Map<String, Decimal>();
80
+
81
+ public static Decimal getDiscountRate(String productCode, String region) {
82
+ String cacheKey = productCode + ':' + region;
83
+
84
+ if (calculationCache.containsKey(cacheKey)) {
85
+ return calculationCache.get(cacheKey); // Cache hit - no CPU cost
86
+ }
87
+
88
+ // Expensive calculation only happens once per unique key
89
+ Decimal rate = performExpensiveCalculation(productCode, region);
90
+ calculationCache.put(cacheKey, rate);
91
+
92
+ return rate;
93
+ }
94
+
95
+ private static Decimal performExpensiveCalculation(String productCode, String region) {
96
+ // Simulate complex calculation
97
+ return 0.15;
98
+ }
99
+
100
+ // Platform Cache for cross-transaction caching
101
+ public static Decimal getDiscountRateWithPlatformCache(String productCode, String region) {
102
+ String cacheKey = 'discount_' + productCode + '_' + region;
103
+
104
+ // Try to get from Platform Cache (Org partition)
105
+ Cache.OrgPartition orgPart = Cache.Org.getPartition('local.DiscountCache');
106
+ Decimal cachedRate = (Decimal)orgPart.get(cacheKey);
107
+
108
+ if (cachedRate != null) {
109
+ return cachedRate;
110
+ }
111
+
112
+ // Calculate and cache
113
+ Decimal rate = performExpensiveCalculation(productCode, region);
114
+ orgPart.put(cacheKey, rate, 3600); // Cache for 1 hour
115
+
116
+ return rate;
117
+ }
118
+ }
119
+
120
+ // ═══════════════════════════════════════════════════════════════════════════
121
+ // HEAP OPTIMIZATION: LARGE DATA PROCESSING
122
+ // ═══════════════════════════════════════════════════════════════════════════
123
+
124
+ public class HeapOptimization {
125
+
126
+ // BEFORE: Loads all records into heap at once
127
+ public void processAllAccountsBAD() {
128
+ List<Account> allAccounts = [SELECT Id, Name FROM Account]; // Could be millions!
129
+
130
+ for (Account acc : allAccounts) {
131
+ // Process each account
132
+ }
133
+ }
134
+
135
+ // AFTER: SOQL FOR loop - streams records, doesn't load all into heap
136
+ public void processAllAccountsGOOD() {
137
+ for (Account acc : [SELECT Id, Name FROM Account]) {
138
+ // Each record is loaded individually
139
+ // Previous record can be garbage collected
140
+ processAccount(acc);
141
+ }
142
+ }
143
+
144
+ private void processAccount(Account acc) {
145
+ // Process single account
146
+ }
147
+
148
+ // AFTER: Batch processing for very large datasets
149
+ public void processAllAccountsBATCH() {
150
+ // Use Database.executeBatch for millions of records
151
+ Database.executeBatch(new AccountProcessorBatch(), 200);
152
+ }
153
+ }
154
+
155
+ // Batch class for large datasets
156
+ public class AccountProcessorBatch implements Database.Batchable<SObject> {
157
+
158
+ public Database.QueryLocator start(Database.BatchableContext bc) {
159
+ return Database.getQueryLocator('SELECT Id, Name FROM Account');
160
+ }
161
+
162
+ public void execute(Database.BatchableContext bc, List<Account> scope) {
163
+ // Process 200 records at a time (controlled heap usage)
164
+ for (Account acc : scope) {
165
+ // Process each account
166
+ }
167
+ }
168
+
169
+ public void finish(Database.BatchableContext bc) {
170
+ // Optional: Send completion notification
171
+ }
172
+ }
173
+
174
+ // ═══════════════════════════════════════════════════════════════════════════
175
+ // HEAP OPTIMIZATION: CLEARING REFERENCES
176
+ // ═══════════════════════════════════════════════════════════════════════════
177
+
178
+ public class HeapClearingPatterns {
179
+
180
+ // Clear large collections when no longer needed
181
+ public void processWithClearing() {
182
+ // Phase 1: Query and process
183
+ List<Account> accounts = [SELECT Id, Name FROM Account LIMIT 10000];
184
+ Map<Id, String> accountNames = new Map<Id, String>();
185
+
186
+ for (Account acc : accounts) {
187
+ accountNames.put(acc.Id, acc.Name);
188
+ }
189
+
190
+ // Clear the original list - no longer needed
191
+ accounts.clear();
192
+ accounts = null;
193
+
194
+ // Phase 2: Use the map
195
+ for (Id accId : accountNames.keySet()) {
196
+ // Process using map
197
+ }
198
+
199
+ // Clear the map when done
200
+ accountNames.clear();
201
+ accountNames = null;
202
+ }
203
+
204
+ // Use transient for Visualforce controllers
205
+ public class LargeDataController {
206
+ // transient = not stored in view state, reduces heap in page transitions
207
+ transient public List<Account> largeAccountList { get; set; }
208
+
209
+ public LargeDataController() {
210
+ largeAccountList = [SELECT Id, Name FROM Account LIMIT 5000];
211
+ }
212
+ }
213
+ }
214
+
215
+ // ═══════════════════════════════════════════════════════════════════════════
216
+ // CPU OPTIMIZATION: ASYNC PROCESSING
217
+ // ═══════════════════════════════════════════════════════════════════════════
218
+
219
+ public class AsyncProcessingPatterns {
220
+
221
+ // Move expensive operations to @future
222
+ @future
223
+ public static void processExpensiveOperation(Set<Id> recordIds) {
224
+ // Has 60 second CPU limit instead of 10 seconds
225
+ for (Id recordId : recordIds) {
226
+ // Expensive processing
227
+ }
228
+ }
229
+
230
+ // Use Queueable for chained processing
231
+ public class ExpensiveQueueable implements Queueable {
232
+ private List<Id> recordIds;
233
+
234
+ public ExpensiveQueueable(List<Id> recordIds) {
235
+ this.recordIds = recordIds;
236
+ }
237
+
238
+ public void execute(QueueableContext context) {
239
+ // Process first batch
240
+ List<Id> batch = new List<Id>();
241
+ List<Id> remaining = new List<Id>();
242
+
243
+ for (Integer i = 0; i < recordIds.size(); i++) {
244
+ if (i < 100) {
245
+ batch.add(recordIds[i]);
246
+ } else {
247
+ remaining.add(recordIds[i]);
248
+ }
249
+ }
250
+
251
+ // Process this batch
252
+ processBatch(batch);
253
+
254
+ // Chain next batch if needed
255
+ if (!remaining.isEmpty()) {
256
+ System.enqueueJob(new ExpensiveQueueable(remaining));
257
+ }
258
+ }
259
+
260
+ private void processBatch(List<Id> batch) {
261
+ // Process 100 records
262
+ }
263
+ }
264
+ }
265
+
266
+ // ═══════════════════════════════════════════════════════════════════════════
267
+ // PATTERN: LIMITS MONITORING
268
+ // ═══════════════════════════════════════════════════════════════════════════
269
+
270
+ public class LimitsMonitoring {
271
+
272
+ // Check limits during execution
273
+ public void processWithLimitChecking(List<Account> accounts) {
274
+ Integer cpuWarning = 8000; // 80% of 10,000ms limit
275
+ Integer heapWarning = 4800000; // 80% of 6MB limit
276
+
277
+ for (Account acc : accounts) {
278
+ // Check CPU limit
279
+ if (Limits.getCpuTime() > cpuWarning) {
280
+ System.debug(LoggingLevel.WARN,
281
+ 'CPU limit approaching: ' + Limits.getCpuTime() + 'ms');
282
+ // Consider switching to async
283
+ break;
284
+ }
285
+
286
+ // Check heap limit
287
+ if (Limits.getHeapSize() > heapWarning) {
288
+ System.debug(LoggingLevel.WARN,
289
+ 'Heap limit approaching: ' + Limits.getHeapSize() + ' bytes');
290
+ break;
291
+ }
292
+
293
+ processAccount(acc);
294
+ }
295
+ }
296
+
297
+ // Debug helper: Print all limits
298
+ public static void debugLimits() {
299
+ System.debug('=== GOVERNOR LIMITS ===');
300
+ System.debug('SOQL Queries: ' + Limits.getQueries() + '/' + Limits.getLimitQueries());
301
+ System.debug('DML Statements: ' + Limits.getDmlStatements() + '/' + Limits.getLimitDmlStatements());
302
+ System.debug('DML Rows: ' + Limits.getDmlRows() + '/' + Limits.getLimitDmlRows());
303
+ System.debug('CPU Time: ' + Limits.getCpuTime() + '/' + Limits.getLimitCpuTime());
304
+ System.debug('Heap Size: ' + Limits.getHeapSize() + '/' + Limits.getLimitHeapSize());
305
+ System.debug('Callouts: ' + Limits.getCallouts() + '/' + Limits.getLimitCallouts());
306
+ }
307
+ }