@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.
- package/package.json +1 -1
- package/skills/activating-datacloud/CREDITS.md +5 -0
- package/skills/activating-datacloud/README.md +39 -0
- package/skills/activating-datacloud/SKILL.md +118 -0
- package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
- package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
- package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
- package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
- package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
- package/skills/building-omnistudio-callable-apex/README.md +80 -0
- package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
- package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
- package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
- package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
- package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
- package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
- package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
- package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
- package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
- package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
- package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
- package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
- package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
- package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
- package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
- package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
- package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
- package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
- package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
- package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
- package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
- package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
- package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
- package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
- package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
- package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
- package/skills/building-sf-integrations/CREDITS.md +5 -0
- package/skills/building-sf-integrations/README.md +95 -0
- package/skills/building-sf-integrations/SKILL.md +192 -0
- package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
- package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
- package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
- package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
- package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
- package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
- package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
- package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
- package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
- package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
- package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
- package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
- package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
- package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
- package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
- package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
- package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
- package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
- package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
- package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
- package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
- package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
- package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
- package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
- package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
- package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
- package/skills/building-sf-integrations/references/cli-reference.md +94 -0
- package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
- package/skills/building-sf-integrations/references/event-patterns.md +838 -0
- package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
- package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
- package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
- package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
- package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
- package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
- package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
- package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
- package/skills/building-sf-integrations/scripts/README.md +100 -0
- package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
- package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
- package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
- package/skills/building-ui-bundle-frontend/SKILL.md +2 -0
- package/skills/configuring-connected-apps/CREDITS.md +3 -0
- package/skills/configuring-connected-apps/README.md +99 -0
- package/skills/configuring-connected-apps/SKILL.md +224 -0
- package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
- package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
- package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
- package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
- package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
- package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
- package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
- package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
- package/skills/configuring-connected-apps/references/example-usage.md +256 -0
- package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
- package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
- package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
- package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
- package/skills/connecting-datacloud/CREDITS.md +5 -0
- package/skills/connecting-datacloud/README.md +59 -0
- package/skills/connecting-datacloud/SKILL.md +155 -0
- package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
- package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
- package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
- package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
- package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
- package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
- package/skills/debugging-apex-logs/CREDITS.md +22 -0
- package/skills/debugging-apex-logs/README.md +74 -0
- package/skills/debugging-apex-logs/SKILL.md +172 -0
- package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
- package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
- package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
- package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
- package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
- package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
- package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
- package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
- package/skills/debugging-apex-logs/references/common-issues.md +68 -0
- package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
- package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
- package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
- package/skills/deploying-metadata/CREDITS.md +25 -0
- package/skills/deploying-metadata/README.md +104 -0
- package/skills/deploying-metadata/SKILL.md +214 -0
- package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
- package/skills/deploying-metadata/assets/package.xml +121 -0
- package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
- package/skills/deploying-metadata/references/deploy.sh +73 -0
- package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
- package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
- package/skills/deploying-metadata/references/orchestration.md +183 -0
- package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
- package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
- package/skills/deploying-omnistudio-datapacks/README.md +88 -0
- package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
- package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
- package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
- package/skills/deploying-ui-bundle/SKILL.md +2 -0
- package/skills/developing-agentforce/SKILL.md +1 -1
- package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
- package/skills/developing-agentforce/references/actions-reference.md +8 -8
- package/skills/fetching-salesforce-docs/README.md +66 -0
- package/skills/fetching-salesforce-docs/SKILL.md +209 -0
- package/skills/fetching-salesforce-docs/requirements.txt +2 -0
- package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
- package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
- package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
- package/skills/generating-apex/CREDITS.md +1 -26
- package/skills/generating-apex/SKILL.md +4 -2
- package/skills/generating-apex-test/CREDITS.md +2 -27
- package/skills/generating-apex-test/SKILL.md +3 -1
- package/skills/generating-custom-application/SKILL.md +2 -0
- package/skills/generating-custom-field/SKILL.md +3 -1
- package/skills/generating-custom-lightning-type/SKILL.md +2 -0
- package/skills/generating-custom-object/SKILL.md +3 -1
- package/skills/generating-custom-tab/SKILL.md +3 -1
- package/skills/generating-flexipage/SKILL.md +2 -0
- package/skills/generating-flow/SKILL.md +2 -0
- package/skills/generating-lightning-app/SKILL.md +1 -1
- package/skills/generating-list-view/SKILL.md +2 -0
- package/skills/generating-lwc-components/CREDITS.md +5 -0
- package/skills/generating-lwc-components/README.md +126 -0
- package/skills/generating-lwc-components/SKILL.md +191 -0
- package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
- package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
- package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
- package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
- package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
- package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
- package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
- package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
- package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
- package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
- package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
- package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
- package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
- package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
- package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
- package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
- package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
- package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
- package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
- package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
- package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
- package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
- package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
- package/skills/generating-lwc-components/references/advanced-features.md +108 -0
- package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
- package/skills/generating-lwc-components/references/cli-commands.md +545 -0
- package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
- package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
- package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
- package/skills/generating-lwc-components/references/lms-guide.md +860 -0
- package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
- package/skills/generating-lwc-components/references/performance-guide.md +861 -0
- package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
- package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
- package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
- package/skills/generating-lwc-components/references/state-management.md +642 -0
- package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
- package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
- package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
- package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
- package/skills/generating-mermaid-diagrams/README.md +114 -0
- package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
- package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
- package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
- package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
- package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
- package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
- package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
- package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
- package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
- package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
- package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
- package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
- package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
- package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
- package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
- package/skills/generating-ui-bundle-features/SKILL.md +2 -0
- package/skills/generating-ui-bundle-metadata/SKILL.md +2 -0
- package/skills/generating-ui-bundle-site/SKILL.md +2 -0
- package/skills/generating-validation-rule/SKILL.md +2 -0
- package/skills/generating-visual-diagrams/CREDITS.md +80 -0
- package/skills/generating-visual-diagrams/README.md +83 -0
- package/skills/generating-visual-diagrams/SKILL.md +208 -0
- package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
- package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
- package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
- package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
- package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
- package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
- package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
- package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
- package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
- package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
- package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
- package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
- package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
- package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
- package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
- package/skills/handling-sf-data/CREDITS.md +5 -0
- package/skills/handling-sf-data/README.md +112 -0
- package/skills/handling-sf-data/SKILL.md +235 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
- package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
- package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
- package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
- package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
- package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
- package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
- package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
- package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
- package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
- package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
- package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
- package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
- package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
- package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
- package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
- package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
- package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
- package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
- package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
- package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
- package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
- package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
- package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
- package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
- package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
- package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
- package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
- package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
- package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
- package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
- package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
- package/skills/handling-sf-data/references/orchestration.md +174 -0
- package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
- package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
- package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
- package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
- package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
- package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
- package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
- package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
- package/skills/harmonizing-datacloud/CREDITS.md +3 -0
- package/skills/harmonizing-datacloud/README.md +31 -0
- package/skills/harmonizing-datacloud/SKILL.md +117 -0
- package/skills/implementing-ui-bundle-agentforce-conversation-client/SKILL.md +1 -1
- package/skills/implementing-ui-bundle-file-upload/SKILL.md +2 -0
- package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
- package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
- package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
- package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
- package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
- package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
- package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
- package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
- package/skills/observing-agentforce/SKILL.md +1 -1
- package/skills/orchestrating-datacloud/CREDITS.md +15 -0
- package/skills/orchestrating-datacloud/README.md +129 -0
- package/skills/orchestrating-datacloud/SKILL.md +236 -0
- package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
- package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
- package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
- package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
- package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
- package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
- package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
- package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
- package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
- package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
- package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
- package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
- package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
- package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
- package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
- package/skills/preparing-datacloud/CREDITS.md +7 -0
- package/skills/preparing-datacloud/README.md +51 -0
- package/skills/preparing-datacloud/SKILL.md +191 -0
- package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
- package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
- package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
- package/skills/querying-soql/CREDITS.md +21 -0
- package/skills/querying-soql/README.md +41 -0
- package/skills/querying-soql/SKILL.md +143 -0
- package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
- package/skills/querying-soql/assets/basic-queries.soql +188 -0
- package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
- package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
- package/skills/querying-soql/assets/relationship-queries.soql +203 -0
- package/skills/querying-soql/assets/selector-class.cls +219 -0
- package/skills/querying-soql/references/anti-patterns.md +348 -0
- package/skills/querying-soql/references/cli-commands.md +358 -0
- package/skills/querying-soql/references/field-coverage-rules.md +514 -0
- package/skills/querying-soql/references/query-optimization.md +142 -0
- package/skills/querying-soql/references/selector-patterns.md +479 -0
- package/skills/querying-soql/references/soql-reference.md +227 -0
- package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
- package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
- package/skills/retrieving-datacloud/CREDITS.md +7 -0
- package/skills/retrieving-datacloud/README.md +44 -0
- package/skills/retrieving-datacloud/SKILL.md +120 -0
- package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
- package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
- package/skills/running-apex-tests/CREDITS.md +22 -0
- package/skills/running-apex-tests/README.md +94 -0
- package/skills/running-apex-tests/SKILL.md +158 -0
- package/skills/running-apex-tests/assets/basic-test.cls +169 -0
- package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
- package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
- package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
- package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
- package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
- package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
- package/skills/running-apex-tests/references/cli-commands.md +289 -0
- package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
- package/skills/running-apex-tests/references/performance-optimization.md +283 -0
- package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
- package/skills/running-apex-tests/references/test-patterns.md +154 -0
- package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
- package/skills/segmenting-datacloud/CREDITS.md +3 -0
- package/skills/segmenting-datacloud/README.md +36 -0
- package/skills/segmenting-datacloud/SKILL.md +115 -0
- package/skills/switching-org/SKILL.md +1 -1
- package/skills/testing-agentforce/SKILL.md +1 -1
- package/skills/uplifting-components-to-slds2/SKILL.md +3 -1
- package/skills/using-ui-bundle-salesforce-data/SKILL.md +2 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Tiny wrapper for Salesforce documentation extraction.
|
|
4
|
+
|
|
5
|
+
Behavior:
|
|
6
|
+
- If the URL is on help.salesforce.com, automatically route to the dedicated
|
|
7
|
+
Help extractor with shadow DOM heuristics.
|
|
8
|
+
- Otherwise, use a lightweight browser-rendered extractor for official
|
|
9
|
+
Salesforce-owned documentation sites such as developer.salesforce.com,
|
|
10
|
+
architect.salesforce.com, admin.salesforce.com, lightningdesignsystem.com,
|
|
11
|
+
and other supported official documentation hosts.
|
|
12
|
+
|
|
13
|
+
Examples:
|
|
14
|
+
python3 skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py \
|
|
15
|
+
--url "https://help.salesforce.com/s/articleView?id=service.miaw_security.htm&type=5" \
|
|
16
|
+
--pretty
|
|
17
|
+
|
|
18
|
+
python3 skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py \
|
|
19
|
+
--url "https://developer.salesforce.com/docs/platform/lwc/guide/use-message-channel-intro.html" \
|
|
20
|
+
--pretty
|
|
21
|
+
|
|
22
|
+
python3 skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py \
|
|
23
|
+
--url "https://architect.salesforce.com/well-architected/overview" \
|
|
24
|
+
--stealth --pretty
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
from __future__ import annotations
|
|
28
|
+
|
|
29
|
+
import argparse
|
|
30
|
+
import json
|
|
31
|
+
import re
|
|
32
|
+
from typing import Any, Dict
|
|
33
|
+
from urllib.parse import urlparse
|
|
34
|
+
|
|
35
|
+
from runtime_bootstrap import maybe_reexec_in_sf_docs_runtime
|
|
36
|
+
|
|
37
|
+
maybe_reexec_in_sf_docs_runtime(__file__)
|
|
38
|
+
|
|
39
|
+
from playwright.sync_api import TimeoutError as PlaywrightTimeoutError
|
|
40
|
+
from playwright.sync_api import sync_playwright
|
|
41
|
+
|
|
42
|
+
try:
|
|
43
|
+
from playwright_stealth import Stealth
|
|
44
|
+
except ImportError:
|
|
45
|
+
Stealth = None
|
|
46
|
+
|
|
47
|
+
try:
|
|
48
|
+
from playwright_stealth import stealth_sync
|
|
49
|
+
except ImportError:
|
|
50
|
+
stealth_sync = None
|
|
51
|
+
|
|
52
|
+
from extract_help_salesforce import extract as extract_help_salesforce
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
USER_AGENT = (
|
|
56
|
+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
|
|
57
|
+
"AppleWebKit/537.36 (KHTML, like Gecko) "
|
|
58
|
+
"Chrome/122.0.0.0 Safari/537.36"
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
STRONG_SHELL_TOKENS = [
|
|
62
|
+
"loading",
|
|
63
|
+
"sorry to interrupt",
|
|
64
|
+
"css error",
|
|
65
|
+
"enable javascript",
|
|
66
|
+
"we looked high and low",
|
|
67
|
+
"couldn't find that page",
|
|
68
|
+
"404 error",
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
WEAK_SHELL_TOKENS = [
|
|
72
|
+
"sign in",
|
|
73
|
+
"cookie preferences",
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
OFFICIAL_DOC_EXACT_HOSTS = {
|
|
77
|
+
"salesforce.com",
|
|
78
|
+
"lightningdesignsystem.com",
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
OFFICIAL_DOC_SUFFIXES = (
|
|
82
|
+
".salesforce.com",
|
|
83
|
+
".lightningdesignsystem.com",
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def normalize_text(text: str) -> str:
|
|
88
|
+
text = text.replace("\u00a0", " ").replace("\r", "")
|
|
89
|
+
text = re.sub(r"\n{3,}", "\n\n", text)
|
|
90
|
+
text = re.sub(r"[ \t]+", " ", text)
|
|
91
|
+
return text.strip()
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def looks_like_shell(title: str, text: str) -> bool:
|
|
95
|
+
haystack = f"{title}\n{text}".lower()
|
|
96
|
+
if any(token in haystack for token in STRONG_SHELL_TOKENS):
|
|
97
|
+
return True
|
|
98
|
+
if any(token in haystack for token in WEAK_SHELL_TOKENS):
|
|
99
|
+
return len(text.strip()) < 600
|
|
100
|
+
return False
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def apply_stealth(page) -> bool:
|
|
104
|
+
if stealth_sync is not None:
|
|
105
|
+
try:
|
|
106
|
+
stealth_sync(page)
|
|
107
|
+
return True
|
|
108
|
+
except Exception:
|
|
109
|
+
pass
|
|
110
|
+
if Stealth is not None:
|
|
111
|
+
try:
|
|
112
|
+
Stealth().apply_stealth_sync(page)
|
|
113
|
+
return True
|
|
114
|
+
except Exception:
|
|
115
|
+
return False
|
|
116
|
+
return False
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def parse_args() -> argparse.Namespace:
|
|
120
|
+
parser = argparse.ArgumentParser(description="Extract official Salesforce documentation from a URL")
|
|
121
|
+
parser.add_argument("--url", required=True, help="Official Salesforce doc URL")
|
|
122
|
+
parser.add_argument("--timeout", type=int, default=60, help="Timeout in seconds (default: 60)")
|
|
123
|
+
parser.add_argument("--stealth", action="store_true", help="Best-effort stealth mode for bot-sensitive pages")
|
|
124
|
+
parser.add_argument("--pretty", action="store_true", help="Pretty-print JSON")
|
|
125
|
+
return parser.parse_args()
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def is_official_salesforce_host(host: str) -> bool:
|
|
129
|
+
host = (host or "").lower()
|
|
130
|
+
return host in OFFICIAL_DOC_EXACT_HOSTS or any(host.endswith(suffix) for suffix in OFFICIAL_DOC_SUFFIXES)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def route_kind(url: str) -> str:
|
|
134
|
+
host = (urlparse(url).hostname or "").lower()
|
|
135
|
+
if host.endswith("help.salesforce.com"):
|
|
136
|
+
return "help"
|
|
137
|
+
if is_official_salesforce_host(host):
|
|
138
|
+
return "official"
|
|
139
|
+
raise SystemExit(f"Unsupported host for fetching-salesforce-docs extractor: {host or url}")
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def extract_official_salesforce_doc(url: str, timeout_seconds: int, use_stealth: bool = False) -> Dict[str, Any]:
|
|
143
|
+
timeout_ms = timeout_seconds * 1000
|
|
144
|
+
host = (urlparse(url).hostname or "").lower()
|
|
145
|
+
|
|
146
|
+
with sync_playwright() as p:
|
|
147
|
+
browser = p.chromium.launch(headless=True)
|
|
148
|
+
page = browser.new_page(user_agent=USER_AGENT, viewport={"width": 1440, "height": 1400})
|
|
149
|
+
stealth_used = apply_stealth(page) if use_stealth else False
|
|
150
|
+
|
|
151
|
+
try:
|
|
152
|
+
response = page.goto(url, wait_until="domcontentloaded", timeout=timeout_ms)
|
|
153
|
+
http_status = response.status if response else None
|
|
154
|
+
page.wait_for_timeout(1500)
|
|
155
|
+
try:
|
|
156
|
+
page.wait_for_function(
|
|
157
|
+
r"""
|
|
158
|
+
() => {
|
|
159
|
+
const el = document.querySelector('main, article, [role="main"]');
|
|
160
|
+
const text = (el?.innerText || el?.textContent || '').trim();
|
|
161
|
+
return text.length > 200;
|
|
162
|
+
}
|
|
163
|
+
""",
|
|
164
|
+
timeout=min(timeout_ms, 15000),
|
|
165
|
+
)
|
|
166
|
+
except PlaywrightTimeoutError:
|
|
167
|
+
pass
|
|
168
|
+
try:
|
|
169
|
+
page.wait_for_load_state("networkidle", timeout=min(timeout_ms, 15000))
|
|
170
|
+
except PlaywrightTimeoutError:
|
|
171
|
+
pass
|
|
172
|
+
page.wait_for_timeout(500)
|
|
173
|
+
|
|
174
|
+
payload = page.evaluate(
|
|
175
|
+
r"""
|
|
176
|
+
() => {
|
|
177
|
+
function normalize(text) {
|
|
178
|
+
return String(text || '')
|
|
179
|
+
.replace(/\u00a0/g, ' ')
|
|
180
|
+
.replace(/\r/g, '')
|
|
181
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
182
|
+
.trim();
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function isVisible(el) {
|
|
186
|
+
if (!el || !el.getBoundingClientRect) return false;
|
|
187
|
+
const rect = el.getBoundingClientRect();
|
|
188
|
+
const style = window.getComputedStyle(el);
|
|
189
|
+
return rect.width > 0 && rect.height > 0 && style.visibility !== 'hidden' && style.display !== 'none';
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
function allRoots() {
|
|
193
|
+
const roots = [document];
|
|
194
|
+
const queue = [document];
|
|
195
|
+
while (queue.length) {
|
|
196
|
+
const current = queue.shift();
|
|
197
|
+
if (!current || !current.querySelectorAll) continue;
|
|
198
|
+
const elements = current.querySelectorAll('*');
|
|
199
|
+
for (const el of elements) {
|
|
200
|
+
if (el.shadowRoot) {
|
|
201
|
+
roots.push(el.shadowRoot);
|
|
202
|
+
queue.push(el.shadowRoot);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return roots;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
function deepQueryAll(selector) {
|
|
210
|
+
const results = [];
|
|
211
|
+
const seen = new Set();
|
|
212
|
+
for (const root of allRoots()) {
|
|
213
|
+
if (!root.querySelectorAll) continue;
|
|
214
|
+
for (const el of root.querySelectorAll(selector)) {
|
|
215
|
+
if (!seen.has(el)) {
|
|
216
|
+
seen.add(el);
|
|
217
|
+
results.push(el);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return results;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
function collectLinks(scope) {
|
|
225
|
+
const urls = new Set();
|
|
226
|
+
const nodes = scope && scope.querySelectorAll ? scope.querySelectorAll('a[href]') : [];
|
|
227
|
+
for (const a of nodes) {
|
|
228
|
+
const href = a.href || a.getAttribute('href') || '';
|
|
229
|
+
if (!href) continue;
|
|
230
|
+
if (href.startsWith('javascript:') || href.startsWith('mailto:')) continue;
|
|
231
|
+
urls.add(href);
|
|
232
|
+
}
|
|
233
|
+
return Array.from(urls);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
const title = document.title || normalize(document.querySelector('title')?.innerText || 'Untitled');
|
|
237
|
+
const childLinks = new Set();
|
|
238
|
+
for (const root of allRoots()) {
|
|
239
|
+
for (const link of collectLinks(root)) childLinks.add(link);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
const selectorConfigs = [
|
|
243
|
+
{ selector: 'article', strategy: 'article', base: 260 },
|
|
244
|
+
{ selector: 'main', strategy: 'main', base: 220 },
|
|
245
|
+
{ selector: '[role="main"]', strategy: 'role-main', base: 220 },
|
|
246
|
+
{ selector: '.slds-text-longform', strategy: 'longform', base: 200 },
|
|
247
|
+
{ selector: '.markdown-content', strategy: 'markdown-content', base: 190 },
|
|
248
|
+
{ selector: '.content-body', strategy: 'content-body', base: 180 },
|
|
249
|
+
{ selector: '.article-body', strategy: 'article-body', base: 180 },
|
|
250
|
+
{ selector: '.article-content', strategy: 'article-content', base: 180 },
|
|
251
|
+
{ selector: '.post-content', strategy: 'post-content', base: 170 },
|
|
252
|
+
{ selector: '.main-content', strategy: 'main-content', base: 170 },
|
|
253
|
+
{ selector: '.tds-content', strategy: 'tds-content', base: 165 },
|
|
254
|
+
{ selector: '.siteforceContentArea .content', strategy: 'siteforce-content', base: 160 },
|
|
255
|
+
{ selector: 'doc-content-layout', strategy: 'legacy-doc-layout', base: 150 },
|
|
256
|
+
{ selector: 'doc-xml-content', strategy: 'legacy-doc-xml', base: 145 },
|
|
257
|
+
{ selector: 'doc-amf-reference .markdown-content', strategy: 'legacy-amf-markdown', base: 150 },
|
|
258
|
+
{ selector: 'main .content, article .content', strategy: 'nested-content', base: 140 },
|
|
259
|
+
];
|
|
260
|
+
|
|
261
|
+
const candidates = [];
|
|
262
|
+
for (const cfg of selectorConfigs) {
|
|
263
|
+
const nodes = deepQueryAll(cfg.selector);
|
|
264
|
+
for (const node of nodes) {
|
|
265
|
+
if (!isVisible(node)) continue;
|
|
266
|
+
const text = normalize(node.innerText || node.textContent || '');
|
|
267
|
+
if (text.length < 200) continue;
|
|
268
|
+
let score = cfg.base + Math.min(text.length, 5000) / 30;
|
|
269
|
+
const lowered = text.toLowerCase();
|
|
270
|
+
if (lowered.includes(title.toLowerCase())) score += 50;
|
|
271
|
+
if (lowered.includes('table of contents')) score -= 80;
|
|
272
|
+
if (lowered.includes('cookie preferences')) score -= 120;
|
|
273
|
+
if (lowered.includes('sign in')) score -= 120;
|
|
274
|
+
candidates.push({
|
|
275
|
+
strategy: cfg.strategy,
|
|
276
|
+
selector: cfg.selector,
|
|
277
|
+
score,
|
|
278
|
+
text,
|
|
279
|
+
links: collectLinks(node).slice(0, 200),
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
const bodyText = normalize(document.body?.innerText || '');
|
|
285
|
+
if (bodyText.length >= 200) {
|
|
286
|
+
candidates.push({
|
|
287
|
+
strategy: 'body',
|
|
288
|
+
selector: 'body',
|
|
289
|
+
score: Math.min(bodyText.length, 5000) / 50,
|
|
290
|
+
text: bodyText,
|
|
291
|
+
links: Array.from(childLinks).slice(0, 200),
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
candidates.sort((a, b) => b.score - a.score);
|
|
296
|
+
const best = candidates[0] || null;
|
|
297
|
+
|
|
298
|
+
return {
|
|
299
|
+
url: window.location.href,
|
|
300
|
+
title,
|
|
301
|
+
strategy: best ? best.strategy : 'none',
|
|
302
|
+
selector: best ? best.selector : null,
|
|
303
|
+
text: best ? best.text : '',
|
|
304
|
+
contentLinks: best ? best.links : [],
|
|
305
|
+
childLinks: Array.from(childLinks).slice(0, 200),
|
|
306
|
+
candidateCount: candidates.length,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
"""
|
|
310
|
+
)
|
|
311
|
+
|
|
312
|
+
text = normalize_text(payload.get("text", ""))
|
|
313
|
+
likely_shell = looks_like_shell(payload.get("title", ""), text)
|
|
314
|
+
ok = bool(text) and len(text) >= 300 and not likely_shell
|
|
315
|
+
|
|
316
|
+
return {
|
|
317
|
+
"ok": ok,
|
|
318
|
+
"url": payload.get("url", url),
|
|
319
|
+
"httpStatus": http_status,
|
|
320
|
+
"title": payload.get("title") or "Untitled",
|
|
321
|
+
"host": host,
|
|
322
|
+
"hostKind": "official-salesforce",
|
|
323
|
+
"strategy": payload.get("strategy"),
|
|
324
|
+
"selector": payload.get("selector"),
|
|
325
|
+
"likelyShell": likely_shell,
|
|
326
|
+
"stealthRequested": use_stealth,
|
|
327
|
+
"stealthAvailable": stealth_sync is not None or Stealth is not None,
|
|
328
|
+
"stealthUsed": stealth_used,
|
|
329
|
+
"text": text,
|
|
330
|
+
"contentLinks": payload.get("contentLinks", []),
|
|
331
|
+
"childLinks": payload.get("childLinks", []),
|
|
332
|
+
"candidateCount": payload.get("candidateCount", 0),
|
|
333
|
+
}
|
|
334
|
+
finally:
|
|
335
|
+
page.close()
|
|
336
|
+
browser.close()
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
def main() -> int:
|
|
340
|
+
args = parse_args()
|
|
341
|
+
kind = route_kind(args.url)
|
|
342
|
+
|
|
343
|
+
if kind == "help":
|
|
344
|
+
result = extract_help_salesforce(args.url, args.timeout, use_stealth=args.stealth)
|
|
345
|
+
result["routedVia"] = "extract_help_salesforce"
|
|
346
|
+
result.setdefault("hostKind", "help")
|
|
347
|
+
else:
|
|
348
|
+
result = extract_official_salesforce_doc(args.url, args.timeout, use_stealth=args.stealth)
|
|
349
|
+
result["routedVia"] = "generic_official_salesforce_extractor"
|
|
350
|
+
|
|
351
|
+
dump = json.dumps(result, indent=2 if args.pretty else None)
|
|
352
|
+
print(dump)
|
|
353
|
+
return 0 if result.get("ok") else 1
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
if __name__ == "__main__":
|
|
357
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
import sys
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def sf_docs_runtime_root() -> Path:
|
|
9
|
+
return Path.home() / ".claude" / ".fetching-salesforce-docs-runtime"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def sf_docs_runtime_python() -> Path:
|
|
13
|
+
root = sf_docs_runtime_root() / "venv"
|
|
14
|
+
candidates = [
|
|
15
|
+
root / "bin" / "python",
|
|
16
|
+
root / "bin" / "python3",
|
|
17
|
+
root / "Scripts" / "python.exe",
|
|
18
|
+
]
|
|
19
|
+
for candidate in candidates:
|
|
20
|
+
if candidate.exists():
|
|
21
|
+
return candidate
|
|
22
|
+
return candidates[0] if os.name != "nt" else candidates[-1]
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def prepare_sf_docs_runtime_env(env: dict[str, str] | None = None) -> dict[str, str]:
|
|
26
|
+
runtime_root = sf_docs_runtime_root()
|
|
27
|
+
target = dict(env or os.environ)
|
|
28
|
+
target.setdefault("PLAYWRIGHT_BROWSERS_PATH", str(runtime_root / "ms-playwright"))
|
|
29
|
+
target.setdefault("SF_DOCS_RUNTIME_ROOT", str(runtime_root))
|
|
30
|
+
return target
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def maybe_reexec_in_sf_docs_runtime(script_path: str) -> bool:
|
|
34
|
+
runtime_python = sf_docs_runtime_python()
|
|
35
|
+
os.environ.update(prepare_sf_docs_runtime_env())
|
|
36
|
+
|
|
37
|
+
if os.environ.get("SF_DOCS_RUNTIME_ACTIVE") == "1":
|
|
38
|
+
return False
|
|
39
|
+
if not runtime_python.exists():
|
|
40
|
+
return False
|
|
41
|
+
|
|
42
|
+
try:
|
|
43
|
+
current_python = Path(sys.executable).resolve()
|
|
44
|
+
target_python = runtime_python.resolve()
|
|
45
|
+
if current_python == target_python:
|
|
46
|
+
os.environ["SF_DOCS_RUNTIME_ACTIVE"] = "1"
|
|
47
|
+
return False
|
|
48
|
+
except OSError:
|
|
49
|
+
pass
|
|
50
|
+
|
|
51
|
+
env = prepare_sf_docs_runtime_env()
|
|
52
|
+
env["SF_DOCS_RUNTIME_ACTIVE"] = "1"
|
|
53
|
+
os.execve(
|
|
54
|
+
str(runtime_python),
|
|
55
|
+
[str(runtime_python), str(Path(script_path).resolve()), *sys.argv[1:]],
|
|
56
|
+
env,
|
|
57
|
+
)
|
|
58
|
+
return True
|
|
@@ -1,30 +1,5 @@
|
|
|
1
1
|
# Credits & Acknowledgments
|
|
2
2
|
|
|
3
|
-
This skill
|
|
3
|
+
This skill is built on established Salesforce Apex development patterns and the collective knowledge of the Salesforce developer community.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
|
-
|
|
7
|
-
## Authors & Contributors
|
|
8
|
-
|
|
9
|
-
### Jag Valaiyapathy (**[Jaganpro)](https://github.com/Jaganpro)**
|
|
10
|
-
|
|
11
|
-
**[sf-skills](https://github.com/Jaganpro/sf-skills)**
|
|
12
|
-
|
|
13
|
-
Key contributions influencing this skill:
|
|
14
|
-
|
|
15
|
-
- Pioneering open-source Salesforce skills for agentic coding tools
|
|
16
|
-
- Apex code generation and review patterns
|
|
17
|
-
- Best practices, anti-patterns, and design patterns reference material
|
|
18
|
-
- Template library for common Apex class types
|
|
19
|
-
|
|
20
|
-
This skill was influenced by the [sf-skills](https://github.com/Jaganpro/sf-skills) repository.
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Special Thanks
|
|
25
|
-
|
|
26
|
-
To the entire Salesforce developer community for sharing knowledge, writing blogs, creating open-source tools, and helping each other build better solutions.
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
*If we've missed anyone whose work influenced these skills, please let us know so we can add proper attribution.*
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: generating-apex
|
|
3
|
-
description: Primary Apex authoring skill for class generation, refactoring, and review. ALWAYS ACTIVATE when the user mentions Apex, .cls, triggers, or asks to create/refactor a class (service, selector, domain, batch, queueable, schedulable, invocable, DTO, utility, interface, abstract, exception, REST resource). Use this skill for requests involving SObject CRUD, mapping collections, fetching related records, scheduled jobs, batch jobs, trigger design, @AuraEnabled controllers, @RestResource endpoints, custom REST APIs, or code review of existing Apex.
|
|
3
|
+
description: "Primary Apex authoring skill for class generation, refactoring, and review. ALWAYS ACTIVATE when the user mentions Apex, .cls, triggers, or asks to create/refactor a class (service, selector, domain, batch, queueable, schedulable, invocable, DTO, utility, interface, abstract, exception, REST resource). Use this skill for requests involving SObject CRUD, mapping collections, fetching related records, scheduled jobs, batch jobs, trigger design, @AuraEnabled controllers, @RestResource endpoints, custom REST APIs, or code review of existing Apex."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Generating Apex
|
|
@@ -403,4 +405,4 @@ Deploy: <dry-run or next step>
|
|
|
403
405
|
|
|
404
406
|
## Troubleshooting Boundary
|
|
405
407
|
|
|
406
|
-
This skill handles production `.cls`/`.trigger`/`.apex` issues only: compile/parse failures, deployment dependency errors, runtime governor-limit failures. For test execution, assertions, coverage, or `sf apex run test` failures, delegate to `generating-apex-test`.
|
|
408
|
+
This skill handles production `.cls`/`.trigger`/`.apex` issues only: compile/parse failures, deployment dependency errors, runtime governor-limit failures. For test execution, assertions, coverage, or `sf apex run test` failures, delegate to `generating-apex-test`.
|
|
@@ -1,30 +1,5 @@
|
|
|
1
1
|
# Credits & Acknowledgments
|
|
2
2
|
|
|
3
|
-
This skill
|
|
3
|
+
This skill is built on established Salesforce Apex development patterns and the collective knowledge of the Salesforce developer community.
|
|
4
4
|
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Authors & Contributors
|
|
8
|
-
|
|
9
|
-
### Jag Valaiyapathy (**[Jaganpro)](https://github.com/Jaganpro)**
|
|
10
|
-
|
|
11
|
-
**[sf-skills](https://github.com/Jaganpro/sf-skills)**
|
|
12
|
-
|
|
13
|
-
Key contributions influencing this skill:
|
|
14
|
-
|
|
15
|
-
- Pioneering open-source Salesforce skills for agentic coding tools
|
|
16
|
-
- Apex code generation and review patterns
|
|
17
|
-
- Best practices, anti-patterns, and design patterns reference material
|
|
18
|
-
- Template library for common Apex class types
|
|
19
|
-
|
|
20
|
-
This skill was influenced by the [sf-skills](https://github.com/Jaganpro/sf-skills) repository.
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Special Thanks
|
|
25
|
-
|
|
26
|
-
To the entire Salesforce developer community for sharing knowledge, writing blogs, creating open-source tools, and helping each other build better solutions.
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
*If we've missed anyone whose work influenced these skills, please let us know so we can add proper attribution.*
|
|
5
|
+
---
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: generating-apex-test
|
|
3
|
-
description: Generate and validate Apex test classes with TestDataFactory patterns, bulk testing (251+ records), mocking strategies, assertion best practices, and disciplined test-fix loops. Use this skill when creating new Apex test classes, improving test coverage, debugging and fixing failing Apex tests, running test execution and coverage analysis, or implementing testing patterns for triggers, services, controllers, batch jobs, queueables, and integrations. Triggers on *Test.cls, *_Test.cls files, sf apex run test workflows, coverage reports, test-fix loops. Do NOT trigger for production Apex code (use generating-apex) or Jest/LWC tests.
|
|
3
|
+
description: "Generate and validate Apex test classes with TestDataFactory patterns, bulk testing (251+ records), mocking strategies, assertion best practices, and disciplined test-fix loops. Use this skill when creating new Apex test classes, improving test coverage, debugging and fixing failing Apex tests, running test execution and coverage analysis, or implementing testing patterns for triggers, services, controllers, batch jobs, queueables, and integrations. Triggers on *Test.cls, *_Test.cls files, sf apex run test workflows, coverage reports, test-fix loops. Do NOT trigger for production Apex code (use generating-apex) or Jest/LWC tests."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
# Generating Apex Tests
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: generating-custom-application
|
|
3
3
|
description: "Use this skill when users need to create or configure Salesforce Custom Applications. Trigger when users mention custom apps, application metadata, app navigation, or organizing tabs into applications. Use when users want to create app containers for tabs and pages. Always use this skill for custom application work."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
## When to Use This Skill
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: generating-custom-field
|
|
3
3
|
description: "Use this skill when users need to create, generate, or validate Salesforce Custom Field metadata. Trigger when users mention custom fields, field types, Roll-up Summary fields, Master-Detail relationships, Lookup relationships, formula fields, picklists, or field metadata. Also use when users encounter field deployment errors, especially around Roll-up Summary format, Master-Detail constraints, or formula issues. Always use this skill for any custom field metadata work, field generation, or field troubleshooting."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
## When to Use This Skill
|
|
@@ -498,4 +500,4 @@ Before generating CustomField XML, verify:
|
|
|
498
500
|
|
|
499
501
|
### Naming Checks
|
|
500
502
|
- [ ] Is the API name free of reserved words (`Order`, `Group`, `Select`, etc.)?
|
|
501
|
-
- [ ] Is the API name unique on this object?
|
|
503
|
+
- [ ] Is the API name unique on this object?
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: generating-custom-lightning-type
|
|
3
3
|
description: "Use this skill when users need to create Custom Lightning Types (CLTs) for Einstein Agent actions or structured input/output schemas. Trigger when users mention CLT, Custom Lightning Types, JSON schemas for agents, type definitions, lightning__objectType, or editor/renderer configurations. This is complex - always use this skill for CLT work."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
## When to Use This Skill
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: generating-custom-object
|
|
3
3
|
description: "Use this skill when users need to create, generate, or validate Salesforce Custom Object metadata. Trigger when users mention custom objects, creating objects, object metadata, .object files, sharing models, name fields, or validation rules on objects. Also use when users say things like \"create a custom object\", \"generate object metadata\", \"set up an object for...\", or when they're troubleshooting object deployment errors especially around sharing models and Master-Detail relationships. Always use this skill for any custom object metadata work."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
## When to Use This Skill
|
|
@@ -235,4 +237,4 @@ Before generating the Custom Object XML, verify:
|
|
|
235
237
|
### Architectural Checks
|
|
236
238
|
- [ ] Is `<description>` present with a meaningful summary?
|
|
237
239
|
- [ ] Are `<enableSearch>` and `<enableReports>` set to `true` if user-facing?
|
|
238
|
-
- [ ] Does the filename match the intended API name?
|
|
240
|
+
- [ ] Does the filename match the intended API name?
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: generating-custom-tab
|
|
3
3
|
description: "Use this skill when users need to create or configure Salesforce Custom Tabs. Trigger when users mention tabs, navigation tabs, object tabs, web tabs, Visualforce tabs, Lightning component tabs, app page tabs, or tab configuration. Also use when users want to add navigation to custom objects, create tabs for external content, or set up Lightning page tabs. Always use this skill for any custom tab work."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
## When to Use This Skill
|
|
@@ -151,4 +153,4 @@ Also forbidden:
|
|
|
151
153
|
- Follow consistent naming conventions
|
|
152
154
|
- Object tab files MUST only contain `<customObject>true</customObject>` and `<motif>` — nothing else
|
|
153
155
|
- Web tab files MUST only contain: `<customObject>false</customObject>`, `<label>`, `<motif>`, `<url>`, `<urlEncodingKey>`, and optionally `<description>`, `<frameHeight>` — nothing else
|
|
154
|
-
- Never include `<isHidden>`, `<tabVisibility>`, `<type>`, `<mobileReady>`, or empty elements
|
|
156
|
+
- Never include `<isHidden>`, `<tabVisibility>`, `<type>`, `<mobileReady>`, or empty elements
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: generating-flexipage
|
|
3
3
|
description: "Use this skill when users need to create, generate, modify, or validate Salesforce Lightning pages (FlexiPages). Trigger when users mention RecordPage, AppPage, HomePage, Lightning pages, page layouts, adding components to pages, or page customization. Also use when users say things like 'create a Lightning page', 'add a component to a page', 'customize the record page', 'generate a FlexiPage', or when they're working with FlexiPage XML files and need help with components, regions, or deployment errors. Always use this skill for any FlexiPage-related work, even if they just mention 'page' in the context of Salesforce."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
## When to Use This Skill
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: generating-flow
|
|
3
3
|
description: "Generate Salesforce Flows using the MCP tool execute_metadata_action. Use when the user asks to create, build, or generate a flow — including Screen, Autolaunched, Record-Triggered (before/after-save), Scheduled. Also trigger for flow-like requests such as \"when a record is created\", \"trigger daily at\", \"send an email when\", \"update the field when\", \"automate\", \"workflow\", or \"flow XML/metadata\". This is the only skill for Salesforce Flow generation."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
## Goal
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: generating-lightning-app
|
|
3
|
-
description: Build complete Salesforce Lightning Experience applications from natural language descriptions. Use this skill when a user requests a "complete app", "Lightning app", "business solution", "management system", or describes a scenario requiring multiple interconnected Salesforce components (objects, fields, pages, tabs, security). Orchestrates all required metadata types in proper dependency order to produce a deployable application.
|
|
3
|
+
description: "Build complete Salesforce Lightning Experience applications from natural language descriptions. Use this skill when a user requests a \"complete app\", \"Lightning app\", \"business solution\", \"management system\", or describes a scenario requiring multiple interconnected Salesforce components (objects, fields, pages, tabs, security). Orchestrates all required metadata types in proper dependency order to produce a deployable application."
|
|
4
4
|
metadata:
|
|
5
5
|
version: "1.0"
|
|
6
6
|
related-skills: generating-custom-object, generating-custom-field, generating-custom-tab, generating-flexipage, generating-custom-application, generating-flow, generating-validation-rule, generating-list-view, generating-permission-set
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: generating-list-view
|
|
3
3
|
description: "Use this skill when users need to create, generate, or validate Salesforce List View metadata. Trigger when users mention list views, filtered record lists, creating views, setting up record columns, filtering records by criteria, or ask about list view visibility. Also use when users say things like \"I need a view that shows...\", \"filter records by...\", \"create a list view for...\", or when they're working with ListView XML files and need validation or troubleshooting."
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0"
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
## When to Use This Skill
|