@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.
- 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/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/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-test/CREDITS.md +2 -27
- 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-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/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/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
|
@@ -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,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
|
+
---
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# generating-lwc-components
|
|
2
|
+
|
|
3
|
+
Lightning Web Components development skill with PICKLES architecture methodology, 165-point scoring, SLDS 2 compliance, and dark mode support. Build modern Salesforce UIs.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Component Scaffolding**: Generate complete LWC bundles (JS, HTML, CSS, meta.xml)
|
|
8
|
+
- **PICKLES Architecture**: Structured methodology for robust components
|
|
9
|
+
- **165-Point Scoring**: Validation across 8 categories (SLDS 2 + Dark Mode)
|
|
10
|
+
- **Wire Service Patterns**: @wire decorators for Apex & GraphQL
|
|
11
|
+
- **Jest Testing**: Comprehensive unit test generation
|
|
12
|
+
- **Spring '26 Features**: TypeScript, lwc:on, Complex Expressions
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
### 1. Invoke the skill
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
Skill: generating-lwc-components
|
|
20
|
+
Request: "Create a data table component for Account records"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 2. Answer requirements questions
|
|
24
|
+
|
|
25
|
+
The skill will ask about:
|
|
26
|
+
- Component purpose
|
|
27
|
+
- Data source (LDS, Apex, GraphQL)
|
|
28
|
+
- Target (App Page, Record Page, Flow Screen)
|
|
29
|
+
- Accessibility requirements
|
|
30
|
+
|
|
31
|
+
### 3. Review generated component
|
|
32
|
+
|
|
33
|
+
The skill generates:
|
|
34
|
+
- JavaScript controller with decorators
|
|
35
|
+
- HTML template with SLDS styling
|
|
36
|
+
- CSS with styling hooks (dark mode ready)
|
|
37
|
+
- meta.xml configuration
|
|
38
|
+
- Jest test file
|
|
39
|
+
|
|
40
|
+
## PICKLES Framework
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
P → Prototype │ Validate ideas with wireframes & mock data
|
|
44
|
+
I → Integrate │ Choose data source (LDS, Apex, GraphQL, API)
|
|
45
|
+
C → Composition │ Structure component hierarchy & communication
|
|
46
|
+
K → Kinetics │ Handle user interactions & event flow
|
|
47
|
+
L → Libraries │ Leverage platform APIs & base components
|
|
48
|
+
E → Execution │ Optimize performance & lifecycle hooks
|
|
49
|
+
S → Security │ Enforce permissions, FLS, and data protection
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Scoring System (165 Points)
|
|
53
|
+
|
|
54
|
+
| Category | Points | Focus |
|
|
55
|
+
|----------|--------|-------|
|
|
56
|
+
| Component Structure | 25 | File organization, naming |
|
|
57
|
+
| Data Layer | 25 | Wire service, error handling |
|
|
58
|
+
| UI/UX | 25 | SLDS 2, responsiveness, dark mode |
|
|
59
|
+
| Accessibility | 20 | WCAG, ARIA, keyboard navigation |
|
|
60
|
+
| Testing | 20 | Jest coverage, async patterns |
|
|
61
|
+
| Performance | 20 | Lazy loading, debouncing |
|
|
62
|
+
| Events | 15 | Component communication |
|
|
63
|
+
| Security | 15 | FLS, permissions |
|
|
64
|
+
|
|
65
|
+
## Templates
|
|
66
|
+
|
|
67
|
+
| Template | Use Case |
|
|
68
|
+
|----------|----------|
|
|
69
|
+
| `basic-component/` | Simple component starter |
|
|
70
|
+
| `graphql-component/` | GraphQL data binding |
|
|
71
|
+
| `flow-screen-component/` | Flow screen integration |
|
|
72
|
+
| `typescript-component/` | TypeScript support (Spring '26) |
|
|
73
|
+
|
|
74
|
+
## Cross-Skill Integration
|
|
75
|
+
|
|
76
|
+
| Related Skill | When to Use |
|
|
77
|
+
|---------------|-------------|
|
|
78
|
+
| generating-apex | Create @AuraEnabled controllers |
|
|
79
|
+
| generating-flow | Embed in Flow screens |
|
|
80
|
+
| generating-metadata | Create Lightning Message Channels |
|
|
81
|
+
| deploying-metadata | Deploy component to org |
|
|
82
|
+
|
|
83
|
+
## Spring '26 Features (API 66.0)
|
|
84
|
+
|
|
85
|
+
- **lwc:on directive**: Dynamic event binding from JavaScript
|
|
86
|
+
- **GraphQL Mutations**: executeMutation for create/update/delete
|
|
87
|
+
- **Complex Expressions**: JS expressions in templates (Beta)
|
|
88
|
+
- **TypeScript Support**: @salesforce/lightning-types package
|
|
89
|
+
- **Agentforce Discovery**: lightning__agentforce capability
|
|
90
|
+
|
|
91
|
+
## Documentation
|
|
92
|
+
|
|
93
|
+
- [Best Practices](references/lwc-best-practices.md)
|
|
94
|
+
- [Flow Integration](references/flow-integration-guide.md)
|
|
95
|
+
- [Accessibility Guide](references/accessibility-guide.md)
|
|
96
|
+
- [Jest Testing](references/jest-testing.md)
|
|
97
|
+
|
|
98
|
+
## Jest Configuration for SFDX Projects
|
|
99
|
+
|
|
100
|
+
If your project uses Jest, scope discovery to your Salesforce source so example assets in agent folders are not picked up during `npm test`.
|
|
101
|
+
|
|
102
|
+
```javascript
|
|
103
|
+
const { jestConfig } = require('@salesforce/sfdx-lwc-jest/config');
|
|
104
|
+
|
|
105
|
+
module.exports = {
|
|
106
|
+
...jestConfig,
|
|
107
|
+
roots: ['<rootDir>/force-app'],
|
|
108
|
+
testPathIgnorePatterns: [
|
|
109
|
+
'<rootDir>/node_modules/',
|
|
110
|
+
'<rootDir>/.sfdx/',
|
|
111
|
+
'<rootDir>/.agents/',
|
|
112
|
+
'<rootDir>/.cursor/',
|
|
113
|
+
'<rootDir>/.claude/',
|
|
114
|
+
'<rootDir>/.pi/'
|
|
115
|
+
]
|
|
116
|
+
};
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Example test assets in this skill now ship with a `.example` suffix. Copy them into your project and rename them before running Jest.
|
|
120
|
+
|
|
121
|
+
## Requirements
|
|
122
|
+
|
|
123
|
+
- sf CLI v2
|
|
124
|
+
- Node.js 18+ (for Jest tests)
|
|
125
|
+
- Target Salesforce org
|
|
126
|
+
- API Version 66.0+ (Spring '26)
|