@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,71 @@
1
+ <template>
2
+ <lightning-card title="Workspace Tab Manager" icon-name="utility:tabset">
3
+ <div class="slds-p-horizontal_medium">
4
+ <!-- Console Detection -->
5
+ <template lwc:if={isNotConsole}>
6
+ <div class="slds-notify slds-notify_alert slds-alert_warning" role="alert">
7
+ <span class="slds-assistive-text">Warning</span>
8
+ <lightning-icon icon-name="utility:warning" size="x-small" class="slds-m-right_x-small"></lightning-icon>
9
+ <h2>Not in Console App</h2>
10
+ <p class="slds-m-top_x-small">
11
+ This component requires a Console App (Service Console or Sales Console) to function.
12
+ Tab management APIs are not available in standard Lightning pages.
13
+ </p>
14
+ </div>
15
+ </template>
16
+
17
+ <!-- Console Context UI -->
18
+ <template lwc:if={isConsole}>
19
+ <!-- Current Tab Info -->
20
+ <div class="slds-box slds-m-bottom_medium">
21
+ <h3 class="slds-text-heading_small slds-m-bottom_small">Current Tab</h3>
22
+ <dl class="slds-list_horizontal">
23
+ <dt class="slds-item_label">Tab ID:</dt>
24
+ <dd class="slds-item_detail">{currentTabId}</dd>
25
+ <dt class="slds-item_label">Label:</dt>
26
+ <dd class="slds-item_detail">{currentTabLabel}</dd>
27
+ </dl>
28
+ </div>
29
+
30
+ <!-- Tab Actions -->
31
+ <div class="slds-button-group" role="group">
32
+ <lightning-button
33
+ label="Refresh Tab"
34
+ onclick={handleRefresh}
35
+ icon-name="utility:refresh">
36
+ </lightning-button>
37
+ <lightning-button
38
+ label="Get All Tabs"
39
+ onclick={handleGetAllTabs}
40
+ icon-name="utility:list">
41
+ </lightning-button>
42
+ </div>
43
+
44
+ <!-- All Tabs List -->
45
+ <template lwc:if={allTabs.length}>
46
+ <h3 class="slds-text-heading_small slds-m-top_medium slds-m-bottom_small">
47
+ Open Tabs ({allTabs.length})
48
+ </h3>
49
+ <ul class="slds-has-dividers_bottom-space">
50
+ <template for:each={allTabs} for:item="tab">
51
+ <li key={tab.tabId} class="slds-item">
52
+ <div class="slds-grid slds-grid_align-spread">
53
+ <span class="slds-truncate">{tab.title}</span>
54
+ <span class="slds-text-color_weak slds-text-body_small">{tab.tabId}</span>
55
+ </div>
56
+ </li>
57
+ </template>
58
+ </ul>
59
+ </template>
60
+
61
+ <!-- Error Display -->
62
+ <template lwc:if={error}>
63
+ <div class="slds-notify slds-notify_alert slds-alert_error slds-m-top_medium" role="alert">
64
+ <span class="slds-assistive-text">Error</span>
65
+ <h2>{error}</h2>
66
+ </div>
67
+ </template>
68
+ </template>
69
+ </div>
70
+ </lightning-card>
71
+ </template>
@@ -0,0 +1,316 @@
1
+ /**
2
+ * Workspace API Component Template
3
+ *
4
+ * Demonstrates tab management in Salesforce Console (Service/Sales Console) using:
5
+ * - IsConsoleNavigation wire to detect console context
6
+ * - Tab opening, closing, and focusing
7
+ * - Subtab management
8
+ * - Tab label and icon customization
9
+ * - Tab refresh
10
+ *
11
+ * @see https://developer.salesforce.com/docs/component-library/bundle/lightning-workspace-api
12
+ */
13
+ import { LightningElement, wire, api } from 'lwc';
14
+ import {
15
+ IsConsoleNavigation,
16
+ getFocusedTabInfo,
17
+ getTabInfo,
18
+ openTab,
19
+ closeTab,
20
+ focusTab,
21
+ refreshTab,
22
+ setTabLabel,
23
+ setTabIcon,
24
+ setTabHighlighted,
25
+ disableTabClose,
26
+ getAllTabInfo,
27
+ openSubtab,
28
+ MINIMUM_SUBTAB_SIZE
29
+ } from 'lightning/platformWorkspaceApi';
30
+
31
+ export default class WorkspaceComponent extends LightningElement {
32
+ // Wire to check if we're in a console app
33
+ @wire(IsConsoleNavigation) isConsoleNavigation;
34
+
35
+ // Current tab information
36
+ currentTabId;
37
+ currentTabLabel;
38
+ allTabs = [];
39
+
40
+ // Error tracking
41
+ error;
42
+
43
+ /**
44
+ * Check if the component is running in a console context
45
+ */
46
+ get isConsole() {
47
+ return this.isConsoleNavigation?.data === true;
48
+ }
49
+
50
+ get isNotConsole() {
51
+ return this.isConsoleNavigation?.data === false;
52
+ }
53
+
54
+ /**
55
+ * Connected callback - get current tab info
56
+ */
57
+ async connectedCallback() {
58
+ if (this.isConsole) {
59
+ await this._refreshCurrentTabInfo();
60
+ }
61
+ }
62
+
63
+ // ==================
64
+ // Public API Methods
65
+ // ==================
66
+
67
+ /**
68
+ * Open a record in a new tab
69
+ * @param {String} recordId - The record ID to open
70
+ * @param {String} objectApiName - The object API name (for icon)
71
+ * @param {Boolean} focus - Whether to focus the new tab
72
+ */
73
+ @api
74
+ async openRecordTab(recordId, objectApiName = 'Account', focus = true) {
75
+ if (!this.isConsole) {
76
+ console.warn('openRecordTab: Not in console context');
77
+ return null;
78
+ }
79
+
80
+ try {
81
+ const tabId = await openTab({
82
+ recordId,
83
+ focus,
84
+ icon: `standard:${objectApiName.toLowerCase()}`,
85
+ label: 'Loading...'
86
+ });
87
+ return tabId;
88
+ } catch (error) {
89
+ this._handleError('Error opening tab', error);
90
+ return null;
91
+ }
92
+ }
93
+
94
+ /**
95
+ * Open a URL in a new tab
96
+ * @param {String} url - The URL to open
97
+ * @param {String} label - The tab label
98
+ * @param {String} icon - The tab icon
99
+ */
100
+ @api
101
+ async openUrlTab(url, label = 'New Tab', icon = 'utility:new_window') {
102
+ if (!this.isConsole) return null;
103
+
104
+ try {
105
+ const tabId = await openTab({
106
+ url,
107
+ focus: true,
108
+ label,
109
+ icon
110
+ });
111
+ return tabId;
112
+ } catch (error) {
113
+ this._handleError('Error opening URL tab', error);
114
+ return null;
115
+ }
116
+ }
117
+
118
+ /**
119
+ * Open a subtab under the current (or specified) parent tab
120
+ * @param {String} recordId - The record ID for the subtab
121
+ * @param {String} parentTabId - Optional parent tab ID (defaults to current tab)
122
+ */
123
+ @api
124
+ async openRecordSubtab(recordId, parentTabId = null) {
125
+ if (!this.isConsole) return null;
126
+
127
+ try {
128
+ const parent = parentTabId || (await this._getCurrentTabId());
129
+ const subtabId = await openSubtab({
130
+ parentTabId: parent,
131
+ recordId,
132
+ focus: true
133
+ });
134
+ return subtabId;
135
+ } catch (error) {
136
+ this._handleError('Error opening subtab', error);
137
+ return null;
138
+ }
139
+ }
140
+
141
+ /**
142
+ * Close a specific tab
143
+ * @param {String} tabId - The tab ID to close
144
+ */
145
+ @api
146
+ async closeTabById(tabId) {
147
+ if (!this.isConsole) return;
148
+
149
+ try {
150
+ await closeTab(tabId);
151
+ } catch (error) {
152
+ this._handleError('Error closing tab', error);
153
+ }
154
+ }
155
+
156
+ /**
157
+ * Close the current tab
158
+ */
159
+ @api
160
+ async closeCurrentTab() {
161
+ if (!this.isConsole) return;
162
+
163
+ try {
164
+ const tabId = await this._getCurrentTabId();
165
+ await closeTab(tabId);
166
+ } catch (error) {
167
+ this._handleError('Error closing current tab', error);
168
+ }
169
+ }
170
+
171
+ /**
172
+ * Focus a specific tab
173
+ * @param {String} tabId - The tab ID to focus
174
+ */
175
+ @api
176
+ async focusTabById(tabId) {
177
+ if (!this.isConsole) return;
178
+
179
+ try {
180
+ await focusTab(tabId);
181
+ } catch (error) {
182
+ this._handleError('Error focusing tab', error);
183
+ }
184
+ }
185
+
186
+ /**
187
+ * Update the current tab's label
188
+ * @param {String} label - The new label
189
+ */
190
+ @api
191
+ async updateCurrentTabLabel(label) {
192
+ if (!this.isConsole) return;
193
+
194
+ try {
195
+ const tabId = await this._getCurrentTabId();
196
+ await setTabLabel(tabId, label);
197
+ this.currentTabLabel = label;
198
+ } catch (error) {
199
+ this._handleError('Error updating tab label', error);
200
+ }
201
+ }
202
+
203
+ /**
204
+ * Update the current tab's icon
205
+ * @param {String} iconName - The icon name (e.g., 'standard:account')
206
+ */
207
+ @api
208
+ async updateCurrentTabIcon(iconName) {
209
+ if (!this.isConsole) return;
210
+
211
+ try {
212
+ const tabId = await this._getCurrentTabId();
213
+ await setTabIcon(tabId, iconName);
214
+ } catch (error) {
215
+ this._handleError('Error updating tab icon', error);
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Highlight a tab (shows visual indicator)
221
+ * @param {String} tabId - The tab ID to highlight
222
+ * @param {Boolean} highlighted - Whether to highlight or remove highlight
223
+ */
224
+ @api
225
+ async highlightTab(tabId, highlighted = true) {
226
+ if (!this.isConsole) return;
227
+
228
+ try {
229
+ await setTabHighlighted(tabId, highlighted);
230
+ } catch (error) {
231
+ this._handleError('Error highlighting tab', error);
232
+ }
233
+ }
234
+
235
+ /**
236
+ * Prevent a tab from being closed
237
+ * @param {String} tabId - The tab ID
238
+ * @param {Boolean} disabled - Whether to disable close
239
+ */
240
+ @api
241
+ async preventTabClose(tabId, disabled = true) {
242
+ if (!this.isConsole) return;
243
+
244
+ try {
245
+ await disableTabClose(tabId, disabled);
246
+ } catch (error) {
247
+ this._handleError('Error disabling tab close', error);
248
+ }
249
+ }
250
+
251
+ /**
252
+ * Refresh the current tab
253
+ */
254
+ @api
255
+ async refreshCurrentTab() {
256
+ if (!this.isConsole) return;
257
+
258
+ try {
259
+ const tabId = await this._getCurrentTabId();
260
+ await refreshTab(tabId);
261
+ } catch (error) {
262
+ this._handleError('Error refreshing tab', error);
263
+ }
264
+ }
265
+
266
+ /**
267
+ * Get information about all open tabs
268
+ */
269
+ @api
270
+ async getAllTabs() {
271
+ if (!this.isConsole) return [];
272
+
273
+ try {
274
+ const tabInfo = await getAllTabInfo();
275
+ this.allTabs = tabInfo;
276
+ return tabInfo;
277
+ } catch (error) {
278
+ this._handleError('Error getting all tabs', error);
279
+ return [];
280
+ }
281
+ }
282
+
283
+ // =================
284
+ // Private Methods
285
+ // =================
286
+
287
+ async _getCurrentTabId() {
288
+ const tabInfo = await getFocusedTabInfo();
289
+ this.currentTabId = tabInfo.tabId;
290
+ return tabInfo.tabId;
291
+ }
292
+
293
+ async _refreshCurrentTabInfo() {
294
+ try {
295
+ const tabInfo = await getFocusedTabInfo();
296
+ this.currentTabId = tabInfo.tabId;
297
+ this.currentTabLabel = tabInfo.title;
298
+ } catch (error) {
299
+ this._handleError('Error getting tab info', error);
300
+ }
301
+ }
302
+
303
+ _handleError(message, error) {
304
+ console.error(message, error);
305
+ this.error = `${message}: ${error?.body?.message || error?.message || 'Unknown error'}`;
306
+ }
307
+
308
+ // Event handlers for UI (if template is used)
309
+ handleRefresh() {
310
+ this.refreshCurrentTab();
311
+ }
312
+
313
+ handleGetAllTabs() {
314
+ this.getAllTabs();
315
+ }
316
+ }
@@ -0,0 +1,295 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ LWC LSP Validation Hook
4
+ =======================
5
+
6
+ This PostToolUse hook validates LWC JavaScript files (.js) after Write/Edit
7
+ operations using the LWC Language Server (@salesforce/lwc-language-server).
8
+
9
+ Behavior (Auto-fix loop):
10
+ - Outputs errors to Claude so it can automatically fix them
11
+ - Repeats until valid or max attempts reached
12
+ - Complements existing 165-point SLDS 2 validation
13
+
14
+ Prerequisites:
15
+ - npm install -g @salesforce/lwc-language-server
16
+
17
+ Usage:
18
+ Triggered automatically by hooks.json configuration
19
+ Input: JSON from stdin with tool_name and tool_input
20
+ Output: Diagnostic messages to stdout (or empty if valid)
21
+ """
22
+
23
+ import json
24
+ import os
25
+ import sys
26
+ import tempfile
27
+ from pathlib import Path
28
+ from typing import Dict, List, Any, Optional
29
+
30
+ # Add shared lsp-engine to path
31
+ # The installer places lsp-engine at ~/.claude/lsp-engine/ but in a dev
32
+ # repo checkout it lives at <repo>/shared/lsp-engine/. Try both.
33
+ SCRIPT_DIR = Path(__file__).parent
34
+ PLUGIN_ROOT = SCRIPT_DIR.parent.parent
35
+ _LSP_CANDIDATES = [
36
+ Path.home() / ".claude" / "lsp-engine", # Installed path
37
+ PLUGIN_ROOT.parent.parent / "shared" / "lsp-engine", # Dev repo path
38
+ ]
39
+ LSP_ENGINE_PATH = next((p for p in _LSP_CANDIDATES if p.is_dir()), _LSP_CANDIDATES[0])
40
+ sys.path.insert(0, str(LSP_ENGINE_PATH))
41
+
42
+ # Track validation attempts to prevent infinite loops
43
+ ATTEMPT_FILE = Path(tempfile.gettempdir()) / "lwc_lsp_attempts.json"
44
+ MAX_ATTEMPTS = 3
45
+
46
+ # LWC file extensions
47
+ LWC_EXTENSIONS = {".js"}
48
+
49
+ # LSP Severity levels
50
+ SEVERITY_ERROR = 1
51
+ SEVERITY_WARNING = 2
52
+ SEVERITY_INFO = 3
53
+ SEVERITY_HINT = 4
54
+
55
+ SEVERITY_NAMES = {
56
+ SEVERITY_ERROR: "ERROR",
57
+ SEVERITY_WARNING: "WARNING",
58
+ SEVERITY_INFO: "INFO",
59
+ SEVERITY_HINT: "HINT",
60
+ }
61
+
62
+ SEVERITY_ICONS = {
63
+ SEVERITY_ERROR: "❌",
64
+ SEVERITY_WARNING: "⚠️",
65
+ SEVERITY_INFO: "ℹ️",
66
+ SEVERITY_HINT: "💡",
67
+ }
68
+
69
+
70
+ def get_attempt_count(file_path: str) -> int:
71
+ """Get the current attempt count for a file."""
72
+ try:
73
+ if ATTEMPT_FILE.exists():
74
+ with open(ATTEMPT_FILE, "r") as f:
75
+ attempts = json.load(f)
76
+ return attempts.get(file_path, 0)
77
+ except Exception:
78
+ pass
79
+ return 0
80
+
81
+
82
+ def increment_attempt_count(file_path: str) -> int:
83
+ """Increment and return the attempt count for a file."""
84
+ attempts = {}
85
+ try:
86
+ if ATTEMPT_FILE.exists():
87
+ with open(ATTEMPT_FILE, "r") as f:
88
+ attempts = json.load(f)
89
+ except Exception:
90
+ pass
91
+
92
+ attempts[file_path] = attempts.get(file_path, 0) + 1
93
+ count = attempts[file_path]
94
+
95
+ try:
96
+ with open(ATTEMPT_FILE, "w") as f:
97
+ json.dump(attempts, f)
98
+ except Exception:
99
+ pass
100
+
101
+ return count
102
+
103
+
104
+ def reset_attempt_count(file_path: str):
105
+ """Reset attempt count when validation succeeds."""
106
+ try:
107
+ if ATTEMPT_FILE.exists():
108
+ with open(ATTEMPT_FILE, "r") as f:
109
+ attempts = json.load(f)
110
+ if file_path in attempts:
111
+ del attempts[file_path]
112
+ with open(ATTEMPT_FILE, "w") as f:
113
+ json.dump(attempts, f)
114
+ except Exception:
115
+ pass
116
+
117
+
118
+ def format_lwc_diagnostics(
119
+ result: Dict[str, Any],
120
+ file_path: str,
121
+ max_attempts: int = 3,
122
+ current_attempt: int = 1,
123
+ ) -> str:
124
+ """
125
+ Format LSP validation result for Claude Code hooks.
126
+
127
+ This output is designed to be understood by Claude so it can
128
+ automatically fix any issues found.
129
+ """
130
+ # If LSP had an error
131
+ if "error" in result and result["error"]:
132
+ return f"⚠️ LWC LSP validation skipped: {result['error']}"
133
+
134
+ diagnostics = result.get("diagnostics", [])
135
+ success = result.get("success", False)
136
+
137
+ # No issues found - show success message
138
+ if success and not diagnostics:
139
+ file_name = Path(file_path).name
140
+ lines = []
141
+ lines.append(f"✅ LWC LSP Validation Passed: {file_name}")
142
+ lines.append(" • JavaScript syntax: OK")
143
+ lines.append(" • LWC decorators: OK")
144
+ lines.append(" • Import resolution: OK")
145
+ return "\n".join(lines)
146
+
147
+ # Count errors and warnings
148
+ error_count = sum(1 for d in diagnostics if d.get("severity", 1) == SEVERITY_ERROR)
149
+ warning_count = sum(1 for d in diagnostics if d.get("severity", 2) == SEVERITY_WARNING)
150
+
151
+ # Build output for Claude
152
+ lines = []
153
+
154
+ # Header
155
+ lines.append("=" * 60)
156
+ lines.append("⚡ LWC LSP VALIDATION RESULTS")
157
+ lines.append(f" File: {file_path}")
158
+ lines.append(f" Attempt: {current_attempt}/{max_attempts}")
159
+ lines.append("=" * 60)
160
+ lines.append("")
161
+
162
+ # Summary
163
+ if error_count > 0 or warning_count > 0:
164
+ lines.append(f"Found {error_count} error(s), {warning_count} warning(s)")
165
+ lines.append("")
166
+
167
+ # Diagnostics
168
+ if diagnostics:
169
+ lines.append("ISSUES TO FIX:")
170
+ lines.append("-" * 40)
171
+ for diag in diagnostics:
172
+ severity = diag.get("severity", SEVERITY_ERROR)
173
+ severity_name = SEVERITY_NAMES.get(severity, "UNKNOWN")
174
+ icon = SEVERITY_ICONS.get(severity, "❓")
175
+
176
+ message = diag.get("message", "Unknown error")
177
+
178
+ # Extract line info
179
+ range_info = diag.get("range", {})
180
+ start = range_info.get("start", {})
181
+ start_line = start.get("line", 0) + 1 # LSP is 0-indexed
182
+
183
+ source = diag.get("source", "lwc")
184
+
185
+ lines.append(f"{icon} [{severity_name}] line {start_line}: {message} (source: {source})")
186
+ lines.append("")
187
+
188
+ # Instructions for Claude
189
+ if error_count > 0:
190
+ lines.append("ACTION REQUIRED:")
191
+ lines.append("Please fix the LWC JavaScript errors above and try again.")
192
+ if current_attempt < max_attempts:
193
+ lines.append(f"(Attempt {current_attempt}/{max_attempts})")
194
+ else:
195
+ lines.append("⚠️ Maximum attempts reached. Manual review may be needed.")
196
+
197
+ lines.append("=" * 60)
198
+
199
+ return "\n".join(lines)
200
+
201
+
202
+ def is_lwc_js_file(file_path: str) -> bool:
203
+ """Check if file is an LWC JavaScript file."""
204
+ path = Path(file_path)
205
+ # Must be .js file in an lwc folder
206
+ if path.suffix.lower() not in LWC_EXTENSIONS:
207
+ return False
208
+ # Must be in /lwc/ folder structure
209
+ if "/lwc/" not in file_path:
210
+ return False
211
+ # Skip test files
212
+ if ".test.js" in file_path or "__tests__" in file_path:
213
+ return False
214
+ return True
215
+
216
+
217
+ def main():
218
+ """Main hook entry point."""
219
+ # Read hook input from stdin
220
+ try:
221
+ hook_input = json.load(sys.stdin)
222
+ except json.JSONDecodeError:
223
+ # No input or invalid JSON - skip validation
224
+ sys.exit(0)
225
+
226
+ # Extract file path
227
+ tool_input = hook_input.get("tool_input", {})
228
+ file_path = tool_input.get("file_path", "")
229
+
230
+ # Only validate LWC JavaScript files
231
+ if not is_lwc_js_file(file_path):
232
+ sys.exit(0)
233
+
234
+ # Check if file exists
235
+ if not os.path.exists(file_path):
236
+ sys.exit(0)
237
+
238
+ # Track attempts
239
+ current_attempt = increment_attempt_count(file_path)
240
+
241
+ # If max attempts exceeded, skip validation to avoid infinite loop
242
+ if current_attempt > MAX_ATTEMPTS:
243
+ print(f"⚠️ LWC LSP validation: Maximum attempts ({MAX_ATTEMPTS}) exceeded for {file_path}")
244
+ print(" Manual review may be required.")
245
+ reset_attempt_count(file_path) # Reset for next edit session
246
+ sys.exit(0)
247
+
248
+ # Try to import LSP engine
249
+ try:
250
+ from lsp_client import LSPClient
251
+ except ImportError as e:
252
+ # LSP engine not available - skip validation silently
253
+ # This allows the plugin to work even without LSP
254
+ sys.exit(0)
255
+
256
+ # Check if LWC LSP wrapper exists
257
+ lwc_wrapper = LSP_ENGINE_PATH / "lwc_wrapper.sh"
258
+ if not lwc_wrapper.exists():
259
+ # LWC LSP wrapper not available - skip silently
260
+ sys.exit(0)
261
+
262
+ # Create LSP client with LWC wrapper and language ID
263
+ try:
264
+ client = LSPClient(wrapper_path=str(lwc_wrapper), language_id="javascript")
265
+ except Exception as e:
266
+ # LSP initialization error - skip silently
267
+ sys.exit(0)
268
+
269
+ # Validate the file
270
+ try:
271
+ result = client.validate_file(file_path)
272
+ except Exception as e:
273
+ # Validation error - report but don't block
274
+ print(f"⚠️ LWC LSP validation error: {e}")
275
+ sys.exit(0)
276
+
277
+ # Format output
278
+ output = format_lwc_diagnostics(
279
+ result,
280
+ file_path,
281
+ max_attempts=MAX_ATTEMPTS,
282
+ current_attempt=current_attempt
283
+ )
284
+
285
+ # If no output (validation passed), reset attempt count
286
+ if not output:
287
+ reset_attempt_count(file_path)
288
+ sys.exit(0)
289
+
290
+ # Output diagnostics for Claude
291
+ print(output)
292
+
293
+
294
+ if __name__ == "__main__":
295
+ main()