@salesforce/afv-skills 1.7.5 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. package/package.json +1 -1
  2. package/skills/activating-datacloud/CREDITS.md +5 -0
  3. package/skills/activating-datacloud/README.md +39 -0
  4. package/skills/activating-datacloud/SKILL.md +118 -0
  5. package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
  6. package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
  7. package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
  8. package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
  9. package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
  10. package/skills/building-omnistudio-callable-apex/README.md +80 -0
  11. package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
  12. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
  13. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
  14. package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
  15. package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
  16. package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
  17. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
  18. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
  19. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
  20. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
  21. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
  22. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
  23. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
  24. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
  25. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
  26. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
  27. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
  28. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
  29. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
  30. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
  31. package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
  32. package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
  33. package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
  34. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
  35. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
  36. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
  37. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
  38. package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
  39. package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
  40. package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
  41. package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
  42. package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
  43. package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
  44. package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
  45. package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
  46. package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
  47. package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
  48. package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
  49. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
  50. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
  51. package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
  52. package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
  53. package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
  54. package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
  55. package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
  56. package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
  57. package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
  58. package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
  59. package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
  60. package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
  61. package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
  62. package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
  63. package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
  64. package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
  65. package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
  66. package/skills/building-sf-integrations/CREDITS.md +5 -0
  67. package/skills/building-sf-integrations/README.md +95 -0
  68. package/skills/building-sf-integrations/SKILL.md +192 -0
  69. package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
  70. package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
  71. package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
  72. package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
  73. package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
  74. package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
  75. package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
  76. package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
  77. package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
  78. package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
  79. package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
  80. package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
  81. package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
  82. package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
  83. package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
  84. package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
  85. package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
  86. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
  87. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
  88. package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
  89. package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
  90. package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
  91. package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
  92. package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
  93. package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
  94. package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
  95. package/skills/building-sf-integrations/references/cli-reference.md +94 -0
  96. package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
  97. package/skills/building-sf-integrations/references/event-patterns.md +838 -0
  98. package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
  99. package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
  100. package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
  101. package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
  102. package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
  103. package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
  104. package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
  105. package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
  106. package/skills/building-sf-integrations/scripts/README.md +100 -0
  107. package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
  108. package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
  109. package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
  110. package/skills/building-ui-bundle-frontend/SKILL.md +2 -0
  111. package/skills/configuring-connected-apps/CREDITS.md +3 -0
  112. package/skills/configuring-connected-apps/README.md +99 -0
  113. package/skills/configuring-connected-apps/SKILL.md +224 -0
  114. package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
  115. package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
  116. package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
  117. package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
  118. package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
  119. package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
  120. package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
  121. package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
  122. package/skills/configuring-connected-apps/references/example-usage.md +256 -0
  123. package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
  124. package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
  125. package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
  126. package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
  127. package/skills/connecting-datacloud/CREDITS.md +5 -0
  128. package/skills/connecting-datacloud/README.md +59 -0
  129. package/skills/connecting-datacloud/SKILL.md +155 -0
  130. package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
  131. package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
  132. package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
  133. package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
  134. package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
  135. package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
  136. package/skills/debugging-apex-logs/CREDITS.md +22 -0
  137. package/skills/debugging-apex-logs/README.md +74 -0
  138. package/skills/debugging-apex-logs/SKILL.md +172 -0
  139. package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
  140. package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
  141. package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
  142. package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
  143. package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
  144. package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
  145. package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
  146. package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
  147. package/skills/debugging-apex-logs/references/common-issues.md +68 -0
  148. package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
  149. package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
  150. package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
  151. package/skills/deploying-metadata/CREDITS.md +25 -0
  152. package/skills/deploying-metadata/README.md +104 -0
  153. package/skills/deploying-metadata/SKILL.md +214 -0
  154. package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
  155. package/skills/deploying-metadata/assets/package.xml +121 -0
  156. package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
  157. package/skills/deploying-metadata/references/deploy.sh +73 -0
  158. package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
  159. package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
  160. package/skills/deploying-metadata/references/orchestration.md +183 -0
  161. package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
  162. package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
  163. package/skills/deploying-omnistudio-datapacks/README.md +88 -0
  164. package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
  165. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
  166. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
  167. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
  168. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
  169. package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
  170. package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
  171. package/skills/deploying-ui-bundle/SKILL.md +2 -0
  172. package/skills/developing-agentforce/SKILL.md +1 -1
  173. package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
  174. package/skills/developing-agentforce/references/actions-reference.md +8 -8
  175. package/skills/fetching-salesforce-docs/README.md +66 -0
  176. package/skills/fetching-salesforce-docs/SKILL.md +209 -0
  177. package/skills/fetching-salesforce-docs/requirements.txt +2 -0
  178. package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
  179. package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
  180. package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
  181. package/skills/generating-apex/CREDITS.md +1 -26
  182. package/skills/generating-apex/SKILL.md +4 -2
  183. package/skills/generating-apex-test/CREDITS.md +2 -27
  184. package/skills/generating-apex-test/SKILL.md +3 -1
  185. package/skills/generating-custom-application/SKILL.md +2 -0
  186. package/skills/generating-custom-field/SKILL.md +3 -1
  187. package/skills/generating-custom-lightning-type/SKILL.md +2 -0
  188. package/skills/generating-custom-object/SKILL.md +3 -1
  189. package/skills/generating-custom-tab/SKILL.md +3 -1
  190. package/skills/generating-flexipage/SKILL.md +2 -0
  191. package/skills/generating-flow/SKILL.md +2 -0
  192. package/skills/generating-lightning-app/SKILL.md +1 -1
  193. package/skills/generating-list-view/SKILL.md +2 -0
  194. package/skills/generating-lwc-components/CREDITS.md +5 -0
  195. package/skills/generating-lwc-components/README.md +126 -0
  196. package/skills/generating-lwc-components/SKILL.md +191 -0
  197. package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
  198. package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
  199. package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
  200. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
  201. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
  202. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
  203. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
  204. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
  205. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
  206. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
  207. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
  208. package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
  209. package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
  210. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
  211. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
  212. package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
  213. package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
  214. package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
  215. package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
  216. package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
  217. package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
  218. package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
  219. package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
  220. package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
  221. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
  222. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
  223. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
  224. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
  225. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
  226. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
  227. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
  228. package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
  229. package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
  230. package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
  231. package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
  232. package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
  233. package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
  234. package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
  235. package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
  236. package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
  237. package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
  238. package/skills/generating-lwc-components/references/advanced-features.md +108 -0
  239. package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
  240. package/skills/generating-lwc-components/references/cli-commands.md +545 -0
  241. package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
  242. package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
  243. package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
  244. package/skills/generating-lwc-components/references/lms-guide.md +860 -0
  245. package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
  246. package/skills/generating-lwc-components/references/performance-guide.md +861 -0
  247. package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
  248. package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
  249. package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
  250. package/skills/generating-lwc-components/references/state-management.md +642 -0
  251. package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
  252. package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
  253. package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
  254. package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
  255. package/skills/generating-mermaid-diagrams/README.md +114 -0
  256. package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
  257. package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
  258. package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
  259. package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
  260. package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
  261. package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
  262. package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
  263. package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
  264. package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
  265. package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
  266. package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
  267. package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
  268. package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
  269. package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
  270. package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
  271. package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
  272. package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
  273. package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
  274. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
  275. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
  276. package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
  277. package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
  278. package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
  279. package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
  280. package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
  281. package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
  282. package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
  283. package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
  284. package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
  285. package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
  286. package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
  287. package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
  288. package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
  289. package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
  290. package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
  291. package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
  292. package/skills/generating-ui-bundle-features/SKILL.md +2 -0
  293. package/skills/generating-ui-bundle-metadata/SKILL.md +2 -0
  294. package/skills/generating-ui-bundle-site/SKILL.md +2 -0
  295. package/skills/generating-validation-rule/SKILL.md +2 -0
  296. package/skills/generating-visual-diagrams/CREDITS.md +80 -0
  297. package/skills/generating-visual-diagrams/README.md +83 -0
  298. package/skills/generating-visual-diagrams/SKILL.md +208 -0
  299. package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
  300. package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
  301. package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
  302. package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
  303. package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
  304. package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
  305. package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
  306. package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
  307. package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
  308. package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
  309. package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
  310. package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
  311. package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
  312. package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
  313. package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
  314. package/skills/handling-sf-data/CREDITS.md +5 -0
  315. package/skills/handling-sf-data/README.md +112 -0
  316. package/skills/handling-sf-data/SKILL.md +235 -0
  317. package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
  318. package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
  319. package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
  320. package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
  321. package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
  322. package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
  323. package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
  324. package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
  325. package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
  326. package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
  327. package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
  328. package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
  329. package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
  330. package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
  331. package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
  332. package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
  333. package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
  334. package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
  335. package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
  336. package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
  337. package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
  338. package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
  339. package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
  340. package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
  341. package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
  342. package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
  343. package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
  344. package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
  345. package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
  346. package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
  347. package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
  348. package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
  349. package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
  350. package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
  351. package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
  352. package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
  353. package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
  354. package/skills/handling-sf-data/references/orchestration.md +174 -0
  355. package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
  356. package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
  357. package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
  358. package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
  359. package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
  360. package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
  361. package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
  362. package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
  363. package/skills/harmonizing-datacloud/CREDITS.md +3 -0
  364. package/skills/harmonizing-datacloud/README.md +31 -0
  365. package/skills/harmonizing-datacloud/SKILL.md +117 -0
  366. package/skills/implementing-ui-bundle-agentforce-conversation-client/SKILL.md +1 -1
  367. package/skills/implementing-ui-bundle-file-upload/SKILL.md +2 -0
  368. package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
  369. package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
  370. package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
  371. package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
  372. package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
  373. package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
  374. package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
  375. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
  376. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
  377. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
  378. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
  379. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
  380. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
  381. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
  382. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
  383. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
  384. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
  385. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
  386. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
  387. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
  388. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
  389. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
  390. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
  391. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
  392. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
  393. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
  394. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
  395. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
  396. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
  397. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
  398. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
  399. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
  400. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
  401. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
  402. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
  403. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
  404. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
  405. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
  406. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
  407. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
  408. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
  409. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
  410. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
  411. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
  412. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
  413. package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
  414. package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
  415. package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
  416. package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
  417. package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
  418. package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
  419. package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
  420. package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
  421. package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
  422. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
  423. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
  424. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
  425. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
  426. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
  427. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
  428. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
  429. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
  430. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
  431. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
  432. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
  433. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
  434. package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
  435. package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
  436. package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
  437. package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
  438. package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
  439. package/skills/observing-agentforce/SKILL.md +1 -1
  440. package/skills/orchestrating-datacloud/CREDITS.md +15 -0
  441. package/skills/orchestrating-datacloud/README.md +129 -0
  442. package/skills/orchestrating-datacloud/SKILL.md +236 -0
  443. package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
  444. package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
  445. package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
  446. package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
  447. package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
  448. package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
  449. package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
  450. package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
  451. package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
  452. package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
  453. package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
  454. package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
  455. package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
  456. package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
  457. package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
  458. package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
  459. package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
  460. package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
  461. package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
  462. package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
  463. package/skills/preparing-datacloud/CREDITS.md +7 -0
  464. package/skills/preparing-datacloud/README.md +51 -0
  465. package/skills/preparing-datacloud/SKILL.md +191 -0
  466. package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
  467. package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
  468. package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
  469. package/skills/querying-soql/CREDITS.md +21 -0
  470. package/skills/querying-soql/README.md +41 -0
  471. package/skills/querying-soql/SKILL.md +143 -0
  472. package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
  473. package/skills/querying-soql/assets/basic-queries.soql +188 -0
  474. package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
  475. package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
  476. package/skills/querying-soql/assets/relationship-queries.soql +203 -0
  477. package/skills/querying-soql/assets/selector-class.cls +219 -0
  478. package/skills/querying-soql/references/anti-patterns.md +348 -0
  479. package/skills/querying-soql/references/cli-commands.md +358 -0
  480. package/skills/querying-soql/references/field-coverage-rules.md +514 -0
  481. package/skills/querying-soql/references/query-optimization.md +142 -0
  482. package/skills/querying-soql/references/selector-patterns.md +479 -0
  483. package/skills/querying-soql/references/soql-reference.md +227 -0
  484. package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
  485. package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
  486. package/skills/retrieving-datacloud/CREDITS.md +7 -0
  487. package/skills/retrieving-datacloud/README.md +44 -0
  488. package/skills/retrieving-datacloud/SKILL.md +120 -0
  489. package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
  490. package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
  491. package/skills/running-apex-tests/CREDITS.md +22 -0
  492. package/skills/running-apex-tests/README.md +94 -0
  493. package/skills/running-apex-tests/SKILL.md +158 -0
  494. package/skills/running-apex-tests/assets/basic-test.cls +169 -0
  495. package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
  496. package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
  497. package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
  498. package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
  499. package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
  500. package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
  501. package/skills/running-apex-tests/references/cli-commands.md +289 -0
  502. package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
  503. package/skills/running-apex-tests/references/performance-optimization.md +283 -0
  504. package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
  505. package/skills/running-apex-tests/references/test-patterns.md +154 -0
  506. package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
  507. package/skills/segmenting-datacloud/CREDITS.md +3 -0
  508. package/skills/segmenting-datacloud/README.md +36 -0
  509. package/skills/segmenting-datacloud/SKILL.md +115 -0
  510. package/skills/switching-org/SKILL.md +1 -1
  511. package/skills/testing-agentforce/SKILL.md +1 -1
  512. package/skills/uplifting-components-to-slds2/SKILL.md +3 -1
  513. package/skills/using-ui-bundle-salesforce-data/SKILL.md +2 -0
@@ -0,0 +1,511 @@
1
+ #!/usr/bin/env node
2
+ import { spawnSync } from 'node:child_process';
3
+
4
+ const HELP = `Data Cloud org readiness classifier
5
+
6
+ Usage:
7
+ node diagnose-org.mjs -o <orgAlias> [--json] [--phase <phase>] [--describe-table <table>] [--timeout <seconds>]
8
+
9
+ Options:
10
+ -o, --target-org Salesforce org alias or username (required)
11
+ --json Print machine-readable JSON
12
+ --phase Optional phase focus: all | connect | prepare | harmonize | segment | act | retrieve
13
+ --describe-table Optional DMO/DLO table name for a retrieve-plane probe
14
+ --timeout Per-command timeout in seconds (default: 45)
15
+ -h, --help Show this help text
16
+ `;
17
+
18
+ const FEATURE_GUIDANCE = {
19
+ CdpDataStreams: 'Data Streams are unavailable for this org/user. Review Data Cloud Setup provisioning, ingestion-related feature availability, and source connector permissions before using preparing-datacloud.',
20
+ CdpIdentityResolution: 'Identity Resolution is unavailable for this org/user. Review Data Cloud harmonization/identity-resolution entitlements and the user\'s Data Cloud permissions before using harmonizing-datacloud for IR work.',
21
+ CdpActivationTarget: 'Activation Targets are unavailable for this org/user. Review activation permissions, destination setup, and any org-specific activation enablement before using activating-datacloud.',
22
+ CdpActivationExternalPlatform: 'Activation destination platforms are unavailable for this org/user. Review Activation Targets setup, destination auth/configuration, and any feature toggles exposed in Data Cloud Setup → Feature Manager.',
23
+ CdpDataSpace: 'Data Spaces are unavailable for this org/user. Review core Data Cloud provisioning and user permissions in Data Cloud Setup before assuming downstream phases can work.',
24
+ };
25
+
26
+ const CAVEATS = [
27
+ 'sf data360 doctor is advisory only: the current upstream command checks the search-index endpoint, not every Data Cloud module.',
28
+ 'Do not use query describe as a universal tenant probe. Run it only after confirming broader readiness and only against a known DMO or DLO table.',
29
+ 'Core Data Cloud provisioning, tenant creation, and license assignment are not reliably exposed as a full CLI enablement flow. Use CLI detection plus Setup guidance instead of promising fully programmatic enablement.',
30
+ ];
31
+
32
+ function parseArgs(argv) {
33
+ const args = { phase: 'all', timeout: 45, json: false, describeTable: null };
34
+ for (let i = 0; i < argv.length; i += 1) {
35
+ const arg = argv[i];
36
+ switch (arg) {
37
+ case '-o':
38
+ case '--target-org':
39
+ args.targetOrg = argv[++i];
40
+ break;
41
+ case '--phase':
42
+ args.phase = argv[++i] ?? 'all';
43
+ break;
44
+ case '--describe-table':
45
+ args.describeTable = argv[++i] ?? null;
46
+ break;
47
+ case '--timeout':
48
+ args.timeout = Number(argv[++i] ?? '45');
49
+ break;
50
+ case '--json':
51
+ args.json = true;
52
+ break;
53
+ case '-h':
54
+ case '--help':
55
+ args.help = true;
56
+ break;
57
+ default:
58
+ throw new Error(`Unknown argument: ${arg}`);
59
+ }
60
+ }
61
+ return args;
62
+ }
63
+
64
+ function trimText(text) {
65
+ return (text || '').replace(/\u001b\[[0-?]*[ -/]*[@-~]/g, '').trim();
66
+ }
67
+
68
+ function runCommand(command, args, { json = false, timeoutSeconds = 45 } = {}) {
69
+ const finalArgs = [...args];
70
+ if (json && !finalArgs.includes('--json')) finalArgs.push('--json');
71
+ const result = spawnSync(command, finalArgs, {
72
+ encoding: 'utf8',
73
+ timeout: timeoutSeconds * 1000,
74
+ });
75
+
76
+ const stdout = result.stdout || '';
77
+ const stderr = result.stderr || '';
78
+ let parsed = null;
79
+ if (stdout.trim()) {
80
+ try {
81
+ parsed = JSON.parse(stdout);
82
+ } catch {
83
+ parsed = null;
84
+ }
85
+ }
86
+
87
+ let errorMessage = null;
88
+ if (result.error) {
89
+ if (result.error.code === 'ENOENT') {
90
+ errorMessage = `${command} is not installed or not on PATH.`;
91
+ } else if (result.error.code === 'ETIMEDOUT') {
92
+ errorMessage = `Timed out after ${timeoutSeconds}s`;
93
+ } else {
94
+ errorMessage = result.error.message;
95
+ }
96
+ }
97
+
98
+ return {
99
+ command: [command, ...finalArgs].join(' '),
100
+ exitCode: typeof result.status === 'number' ? result.status : 1,
101
+ stdout: trimText(stdout),
102
+ stderr: trimText(stderr),
103
+ parsed,
104
+ errorMessage,
105
+ };
106
+ }
107
+
108
+ function extractSuccessSample(parsed) {
109
+ const result = parsed?.result ?? {};
110
+
111
+ if (Array.isArray(result?.data)) {
112
+ return result.data[0] ?? null;
113
+ }
114
+ if (Array.isArray(result?.data?.platforms)) {
115
+ return result.data.platforms[0] ?? null;
116
+ }
117
+ if (Array.isArray(result?.semanticSearchDefinitionDetails)) {
118
+ return result.semanticSearchDefinitionDetails[0] ?? null;
119
+ }
120
+ return null;
121
+ }
122
+
123
+ function extractDetails(parsed) {
124
+ const result = parsed?.result ?? {};
125
+ if (result && typeof result === 'object' && !Array.isArray(result)) {
126
+ const details = { ...result };
127
+ delete details.data;
128
+ if (details.status || details.indexCount !== undefined || details.apiVersion || details.instanceUrl) {
129
+ return details;
130
+ }
131
+ }
132
+ return undefined;
133
+ }
134
+
135
+ function extractCount(parsed) {
136
+ const result = parsed?.result ?? {};
137
+ if (Array.isArray(result?.data)) return result.data.length;
138
+ if (typeof result?.totalSize === 'number') return result.totalSize;
139
+ if (Array.isArray(result?.data?.platforms)) return result.data.platforms.length;
140
+ if (typeof result?.indexCount === 'number') return result.indexCount;
141
+ return null;
142
+ }
143
+
144
+ function classifyError(message) {
145
+ const text = message || '';
146
+ const gateMatch = text.match(/\[([A-Za-z0-9]+)\]/);
147
+
148
+ if (text.includes("Couldn't find CDP tenant ID")) {
149
+ return {
150
+ state: 'query_service_unavailable',
151
+ code: 'QUERY_SERVICE_TENANT_LOOKUP_FAILED',
152
+ reason: 'The query service could not resolve a CDP tenant for this org context. Confirm broader readiness with data-space, DMO, or doctor probes before declaring Data Cloud fully disabled.',
153
+ };
154
+ }
155
+ if (text.includes('This feature is not currently enabled for this user type or org')) {
156
+ const featureCode = gateMatch?.[1] ?? 'UNKNOWN_FEATURE_GATE';
157
+ return {
158
+ state: 'feature_gated',
159
+ code: featureCode,
160
+ reason: FEATURE_GUIDANCE[featureCode] ?? 'This capability is gated for the current org or user. Review provisioning, permissions, and any relevant setup toggles before proceeding.',
161
+ };
162
+ }
163
+ if (text.includes('NOT_FOUND: DataModelEntity')) {
164
+ return {
165
+ state: 'table_not_found',
166
+ code: 'DATA_MODEL_ENTITY_NOT_FOUND',
167
+ reason: 'The specified DMO or DLO table name is not queryable in this org. Pick a real table from dmo list / dlo list or use dmo get first.',
168
+ };
169
+ }
170
+ if (text.includes('Request failed')) {
171
+ return {
172
+ state: 'request_failed',
173
+ code: 'REQUEST_FAILED',
174
+ reason: 'The endpoint returned a generic request failure. Treat this as inconclusive and confirm readiness with adjacent read-only probes.',
175
+ };
176
+ }
177
+ if (text.includes('is not a sf command') || text.includes('not installed or not on PATH')) {
178
+ return {
179
+ state: 'runtime_missing',
180
+ code: 'RUNTIME_MISSING',
181
+ reason: 'The sf data360 runtime is not available. Install or relink the community plugin first.',
182
+ };
183
+ }
184
+ if (text.includes('Timed out after')) {
185
+ return {
186
+ state: 'timeout',
187
+ code: 'TIMEOUT',
188
+ reason: 'The probe timed out. Retry, reduce the scope, or fall back to a smaller read-only command family.',
189
+ };
190
+ }
191
+ return {
192
+ state: 'unknown_error',
193
+ code: 'UNKNOWN_ERROR',
194
+ reason: 'The probe failed for an unclassified reason. Inspect the raw message and confirm readiness with neighboring probes.',
195
+ };
196
+ }
197
+
198
+ function normalizeProbe(name, raw, meta = {}) {
199
+ const base = {
200
+ name,
201
+ command: raw.command,
202
+ exitCode: raw.exitCode,
203
+ stderr: raw.stderr || undefined,
204
+ ...meta,
205
+ };
206
+
207
+ if (raw.errorMessage) {
208
+ const error = classifyError(raw.errorMessage);
209
+ return { ...base, ...error, message: raw.errorMessage };
210
+ }
211
+
212
+ if (raw.parsed && (raw.parsed.status === 0 || raw.exitCode === 0)) {
213
+ const count = extractCount(raw.parsed);
214
+ const sample = extractSuccessSample(raw.parsed);
215
+ const details = extractDetails(raw.parsed);
216
+ let state = 'ok';
217
+ if (count !== null) {
218
+ state = count > 0 ? 'enabled_populated' : 'enabled_empty';
219
+ }
220
+ if (raw.parsed?.result?.status === 'ok') {
221
+ state = 'ok';
222
+ }
223
+ return {
224
+ ...base,
225
+ state,
226
+ count,
227
+ sample: sample ?? undefined,
228
+ details,
229
+ };
230
+ }
231
+
232
+ const message = raw.parsed?.message || raw.stdout || raw.stderr || `Command failed with exit code ${raw.exitCode}`;
233
+ const error = classifyError(message);
234
+ return { ...base, ...error, message };
235
+ }
236
+
237
+ function summarizePhase(checks) {
238
+ const states = Object.values(checks).map((check) => check.state);
239
+ if (states.length === 0) return 'skipped';
240
+ if (states.every((state) => state === 'skipped')) return 'skipped';
241
+ const hasSuccess = states.some((state) => ['ok', 'enabled_empty', 'enabled_populated'].includes(state));
242
+ const hasPopulated = states.includes('enabled_populated');
243
+ const hasBlocking = states.some((state) => ['feature_gated', 'query_service_unavailable', 'request_failed', 'table_not_found', 'timeout', 'unknown_error'].includes(state));
244
+ if (hasSuccess && hasBlocking) return 'partial';
245
+ if (hasPopulated) return 'ready';
246
+ if (hasSuccess) return 'ready_empty';
247
+ if (states.every((state) => state === 'feature_gated')) return 'feature_gated';
248
+ if (states.every((state) => state === 'query_service_unavailable')) return 'query_unavailable';
249
+ if (states.every((state) => ['request_failed', 'timeout', 'unknown_error'].includes(state))) return 'blocked';
250
+ return 'unknown';
251
+ }
252
+
253
+ function guidanceFromProbe(scope, probe) {
254
+ if (!probe) return [];
255
+ if (['ok', 'enabled_empty', 'enabled_populated', 'skipped'].includes(probe.state)) return [];
256
+
257
+ if (probe.state === 'runtime_missing') {
258
+ return [
259
+ 'Install or relink the community sf data360 runtime before attempting Data Cloud work.',
260
+ 'Use python3 ~/.claude/sf-skills-install.py --with-datacloud-runtime or bash ~/.claude/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh.',
261
+ ];
262
+ }
263
+
264
+ if (probe.state === 'query_service_unavailable') {
265
+ return [
266
+ `${scope}: query-specific tenant lookup failed. Do not treat this as a global Data Cloud outage by itself. Re-check core probes such as data-space list, dmo list, and doctor, then use a known table name if you retry query describe.`,
267
+ ];
268
+ }
269
+
270
+ if (probe.state === 'feature_gated') {
271
+ return [`${scope}: ${probe.reason}`];
272
+ }
273
+
274
+ if (probe.state === 'table_not_found') {
275
+ return [`${scope}: ${probe.reason}`];
276
+ }
277
+
278
+ if (probe.state === 'request_failed') {
279
+ return [
280
+ `${scope}: ${probe.reason}`,
281
+ 'If doctor is the failing probe, remember that it only checks search indexes; use adjacent read-only probes before deciding the whole org is blocked.',
282
+ ];
283
+ }
284
+
285
+ if (probe.state === 'timeout') {
286
+ return [`${scope}: ${probe.reason}`];
287
+ }
288
+
289
+ return [`${scope}: ${probe.reason}`];
290
+ }
291
+
292
+ function parseOrgDisplay(raw, targetOrg) {
293
+ const base = {
294
+ alias: targetOrg,
295
+ state: 'ok',
296
+ };
297
+
298
+ if (raw.errorMessage) {
299
+ return { ...base, state: 'org_not_authenticated', message: raw.errorMessage };
300
+ }
301
+
302
+ if (raw.parsed && raw.parsed.status === 0) {
303
+ const result = raw.parsed.result || {};
304
+ return {
305
+ ...base,
306
+ alias: result.alias || targetOrg,
307
+ username: result.username,
308
+ instanceUrl: result.instanceUrl,
309
+ apiVersion: result.apiVersion,
310
+ connectedStatus: result.connectedStatus,
311
+ };
312
+ }
313
+
314
+ const message = raw.parsed?.message || raw.stdout || raw.stderr || `Failed to resolve org ${targetOrg}`;
315
+ return {
316
+ ...base,
317
+ state: 'org_not_authenticated',
318
+ message,
319
+ };
320
+ }
321
+
322
+ function buildProbeMatrix(orgAlias, describeTable) {
323
+ return {
324
+ core: {
325
+ doctor: ['data360', 'doctor', '-o', orgAlias],
326
+ dataSpaces: ['data360', 'data-space', 'list', '-o', orgAlias],
327
+ dmos: ['data360', 'dmo', 'list', '-o', orgAlias],
328
+ },
329
+ phases: {
330
+ connect: {
331
+ connectorCatalog: ['data360', 'connection', 'connector-list', '-o', orgAlias],
332
+ connectionsSalesforceCRM: ['data360', 'connection', 'list', '-o', orgAlias, '--connector-type', 'SalesforceCRM'],
333
+ },
334
+ prepare: {
335
+ dataStreams: ['data360', 'data-stream', 'list', '-o', orgAlias],
336
+ dlos: ['data360', 'dlo', 'list', '-o', orgAlias],
337
+ },
338
+ harmonize: {
339
+ dmos: ['data360', 'dmo', 'list', '-o', orgAlias],
340
+ identityResolution: ['data360', 'identity-resolution', 'list', '-o', orgAlias],
341
+ },
342
+ segment: {
343
+ segments: ['data360', 'segment', 'list', '-o', orgAlias],
344
+ calculatedInsights: ['data360', 'calculated-insight', 'list', '-o', orgAlias],
345
+ },
346
+ act: {
347
+ activationPlatforms: ['data360', 'activation', 'platforms', '-o', orgAlias],
348
+ activationTargets: ['data360', 'activation-target', 'list', '-o', orgAlias],
349
+ dataActionTargets: ['data360', 'data-action-target', 'list', '-o', orgAlias],
350
+ },
351
+ retrieve: {
352
+ searchIndexes: ['data360', 'search-index', 'list', '-o', orgAlias],
353
+ queryDescribe: describeTable
354
+ ? ['data360', 'query', 'describe', '-o', orgAlias, '--table', describeTable]
355
+ : null,
356
+ },
357
+ },
358
+ };
359
+ }
360
+
361
+ function printTextReport(report) {
362
+ const lines = [];
363
+ lines.push(`Data Cloud readiness for ${report.org.alias}`);
364
+ lines.push(`Runtime: ${report.runtime.state}`);
365
+ if (report.runtime.message) lines.push(` ${report.runtime.message}`);
366
+ lines.push(`Org auth: ${report.org.state}`);
367
+ if (report.org.username) lines.push(` User: ${report.org.username}`);
368
+ if (report.org.instanceUrl) lines.push(` Instance: ${report.org.instanceUrl}`);
369
+ lines.push('');
370
+ lines.push('Core probes:');
371
+ for (const [name, probe] of Object.entries(report.core)) {
372
+ lines.push(` - ${name}: ${probe.state}${probe.count !== null && probe.count !== undefined ? ` (${probe.count})` : ''}`);
373
+ if (probe.code) lines.push(` code: ${probe.code}`);
374
+ if (probe.message) lines.push(` ${probe.message}`);
375
+ }
376
+ lines.push('');
377
+ lines.push('Phase readiness:');
378
+ for (const [phase, entry] of Object.entries(report.phases)) {
379
+ lines.push(` ${phase}: ${entry.summary}`);
380
+ for (const [name, probe] of Object.entries(entry.checks)) {
381
+ lines.push(` - ${name}: ${probe.state}${probe.count !== null && probe.count !== undefined ? ` (${probe.count})` : ''}`);
382
+ if (probe.code) lines.push(` code: ${probe.code}`);
383
+ if (probe.message) lines.push(` ${probe.message}`);
384
+ }
385
+ }
386
+ lines.push('');
387
+ lines.push('Caveats:');
388
+ for (const caveat of report.caveats) {
389
+ lines.push(` - ${caveat}`);
390
+ }
391
+ lines.push('');
392
+ lines.push('Guidance:');
393
+ if (report.guidance.length === 0) {
394
+ lines.push(' - No blocking issues detected from the chosen probes. Continue with read-only inspection, then mutate intentionally.');
395
+ } else {
396
+ for (const item of report.guidance) {
397
+ lines.push(` - ${item}`);
398
+ }
399
+ }
400
+ console.log(lines.join('\n'));
401
+ }
402
+
403
+ function main() {
404
+ let args;
405
+ try {
406
+ args = parseArgs(process.argv.slice(2));
407
+ } catch (error) {
408
+ console.error(error.message);
409
+ console.error('');
410
+ console.error(HELP);
411
+ process.exit(1);
412
+ }
413
+
414
+ if (args.help) {
415
+ console.log(HELP);
416
+ process.exit(0);
417
+ }
418
+
419
+ if (!args.targetOrg) {
420
+ console.error('Missing required --target-org / -o argument.');
421
+ console.error('');
422
+ console.error(HELP);
423
+ process.exit(1);
424
+ }
425
+
426
+ const runtimeCheck = runCommand('sf', ['data360', 'man'], { json: false, timeoutSeconds: args.timeout });
427
+ const runtime = runtimeCheck.exitCode === 0
428
+ ? { state: 'ok', command: runtimeCheck.command }
429
+ : { ...classifyError(runtimeCheck.stderr || runtimeCheck.stdout || runtimeCheck.errorMessage || 'sf data360 runtime is unavailable'), command: runtimeCheck.command };
430
+
431
+ const orgDisplay = parseOrgDisplay(
432
+ runCommand('sf', ['org', 'display', '-o', args.targetOrg], { json: true, timeoutSeconds: args.timeout }),
433
+ args.targetOrg
434
+ );
435
+
436
+ const matrix = buildProbeMatrix(args.targetOrg, args.describeTable);
437
+ const report = {
438
+ runtime,
439
+ org: orgDisplay,
440
+ core: {},
441
+ phases: {},
442
+ caveats: [...CAVEATS],
443
+ guidance: [],
444
+ };
445
+
446
+ if (runtime.state !== 'ok' || orgDisplay.state !== 'ok') {
447
+ report.guidance.push(...guidanceFromProbe('runtime', runtime));
448
+ if (orgDisplay.state !== 'ok') {
449
+ report.guidance.push(`Authenticate the target org first: sf org login web -a ${args.targetOrg}`);
450
+ }
451
+ if (args.json) {
452
+ console.log(JSON.stringify(report, null, 2));
453
+ } else {
454
+ printTextReport(report);
455
+ }
456
+ process.exit(runtime.state === 'ok' && orgDisplay.state === 'ok' ? 0 : 1);
457
+ }
458
+
459
+ for (const [name, commandArgs] of Object.entries(matrix.core)) {
460
+ report.core[name] = normalizeProbe(name, runCommand('sf', commandArgs, { json: true, timeoutSeconds: args.timeout }));
461
+ }
462
+
463
+ const selectedPhases = args.phase === 'all'
464
+ ? Object.keys(matrix.phases)
465
+ : [args.phase];
466
+
467
+ for (const phase of selectedPhases) {
468
+ const checks = {};
469
+ const phaseMatrix = matrix.phases[phase] || {};
470
+ for (const [name, commandArgs] of Object.entries(phaseMatrix)) {
471
+ if (!commandArgs) {
472
+ checks[name] = { name, state: 'skipped', reason: 'No describe table was supplied for the query probe.' };
473
+ continue;
474
+ }
475
+ checks[name] = normalizeProbe(name, runCommand('sf', commandArgs, { json: true, timeoutSeconds: args.timeout }));
476
+ }
477
+ report.phases[phase] = {
478
+ summary: summarizePhase(checks),
479
+ checks,
480
+ };
481
+ }
482
+
483
+ const uniqueGuidance = new Set();
484
+ for (const [name, probe] of Object.entries(report.core)) {
485
+ for (const item of guidanceFromProbe(`core.${name}`, probe)) uniqueGuidance.add(item);
486
+ }
487
+ for (const [phase, entry] of Object.entries(report.phases)) {
488
+ for (const [name, probe] of Object.entries(entry.checks)) {
489
+ for (const item of guidanceFromProbe(`${phase}.${name}`, probe)) uniqueGuidance.add(item);
490
+ }
491
+ }
492
+
493
+ const coreSignals = Object.values(report.core).map((probe) => probe.state);
494
+ if (coreSignals.some((state) => ['ok', 'enabled_empty', 'enabled_populated'].includes(state))) {
495
+ uniqueGuidance.add('At least one core Data Cloud probe succeeded. Treat individual query or feature-gate failures as scoped issues, not automatic proof that the whole product is disabled.');
496
+ }
497
+ uniqueGuidance.add('For core provisioning, tenant creation, or license assignment gaps, use Setup → Data Cloud Setup and the current standard Data Cloud permission sets. Feature Manager can expose some org-specific toggles, but it is not the source of truth for every missing capability.');
498
+ uniqueGuidance.add('Reference: skills/orchestrating-datacloud/references/feature-readiness.md');
499
+
500
+ report.guidance = [...uniqueGuidance];
501
+
502
+ if (args.json) {
503
+ console.log(JSON.stringify(report, null, 2));
504
+ } else {
505
+ printTextReport(report);
506
+ }
507
+
508
+ process.exit(0);
509
+ }
510
+
511
+ main();
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Generate oclif.manifest.json for the sf-cli-plugin-data360 community plugin.
4
+ *
5
+ * Why this exists:
6
+ * `npx oclif manifest` imports every command class, which triggers the
7
+ * @oclif/core class hierarchy. When the plugin's pinned @oclif/core is
8
+ * older than what the current Node.js version expects, the import fails
9
+ * with "Cannot read properties of undefined (reading 'prototype')".
10
+ *
11
+ * This script avoids importing commands entirely. It walks the compiled
12
+ * lib/commands/ directory and extracts static metadata from source text
13
+ * via regex, producing a valid manifest that tells oclif to skip
14
+ * auto-discovery and auto-transpilation.
15
+ *
16
+ * Usage:
17
+ * node generate-manifest.mjs # uses cwd
18
+ * node generate-manifest.mjs /path/to # uses explicit plugin root
19
+ */
20
+
21
+ import { readFileSync, readdirSync, statSync, writeFileSync } from 'node:fs';
22
+ import { join, relative, sep } from 'node:path';
23
+
24
+ const pluginRoot = process.argv[2] || process.cwd();
25
+ const pkg = JSON.parse(readFileSync(join(pluginRoot, 'package.json'), 'utf8'));
26
+ const commandsDir = join(pluginRoot, (pkg.oclif?.commands || './lib/commands').replace('./', ''));
27
+
28
+ function walk(dir) {
29
+ const files = [];
30
+ for (const entry of readdirSync(dir)) {
31
+ const full = join(dir, entry);
32
+ if (statSync(full).isDirectory()) files.push(...walk(full));
33
+ else if (entry.endsWith('.js') && !entry.endsWith('.test.js')) files.push(full);
34
+ }
35
+ return files;
36
+ }
37
+
38
+ function parseCommandSource(source, id) {
39
+ const cmd = { id, pluginName: pkg.name, pluginType: 'link', aliases: [] };
40
+
41
+ const summaryMatch = source.match(/static\s+summary\s*=\s*['"`]([^'"`]+)/);
42
+ if (summaryMatch) cmd.summary = summaryMatch[1];
43
+
44
+ const descMatch = source.match(/static\s+description\s*=\s*['"`]([^'"`]+)/);
45
+ if (descMatch) cmd.description = descMatch[1];
46
+
47
+ if (/static\s+hidden\s*=\s*true/.test(source)) cmd.hidden = true;
48
+ if (/static\s+strict\s*=\s*false/.test(source)) cmd.strict = false;
49
+ if (/static\s+enableJsonFlag\s*=\s*true/.test(source)) cmd.enableJsonFlag = true;
50
+
51
+ return cmd;
52
+ }
53
+
54
+ const commands = {};
55
+ for (const file of walk(commandsDir)) {
56
+ const rel = relative(commandsDir, file).replace(/\.js$/, '');
57
+ const id = rel.split(sep).join(':');
58
+ try {
59
+ commands[id] = parseCommandSource(readFileSync(file, 'utf8'), id);
60
+ } catch {
61
+ commands[id] = { id, pluginName: pkg.name, pluginType: 'link', aliases: [] };
62
+ }
63
+ }
64
+
65
+ const manifest = { version: pkg.version, commands };
66
+ const outPath = join(pluginRoot, 'oclif.manifest.json');
67
+ writeFileSync(outPath, JSON.stringify(manifest, null, 2));
68
+ console.log(`Generated oclif.manifest.json: ${Object.keys(commands).length} commands (v${pkg.version})`);
@@ -0,0 +1,58 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ ORG="${1:-}"
5
+
6
+ if ! command -v sf >/dev/null 2>&1; then
7
+ echo "Salesforce CLI (sf) is not installed or not on PATH." >&2
8
+ exit 1
9
+ fi
10
+
11
+ if ! sf data360 man >/dev/null 2>&1; then
12
+ echo "The community 'sf data360' runtime is not available." >&2
13
+ echo "Run bash ~/.claude/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh first." >&2
14
+ exit 1
15
+ fi
16
+
17
+ echo "✓ sf data360 runtime detected"
18
+
19
+ if [[ -n "${ORG}" ]]; then
20
+ if sf org display -o "${ORG}" >/dev/null 2>&1; then
21
+ echo "✓ org alias '${ORG}' is authenticated"
22
+ else
23
+ echo "Org alias '${ORG}' is not authenticated." >&2
24
+ exit 1
25
+ fi
26
+
27
+ if sf data360 doctor -o "${ORG}" >/dev/null 2>&1; then
28
+ echo "✓ sf data360 doctor completed for '${ORG}'"
29
+ else
30
+ echo "! sf data360 doctor did not complete cleanly for '${ORG}'. Falling back to read-only smoke checks." >&2
31
+
32
+ smoke_passed=0
33
+ while IFS='|' read -r label command; do
34
+ [[ -z "${label}" ]] && continue
35
+ if bash -lc "${command}" >/dev/null 2>&1; then
36
+ echo "✓ ${label} smoke check passed for '${ORG}'"
37
+ smoke_passed=1
38
+ fi
39
+ done <<EOF
40
+ connectors|sf data360 connection connector-list -o "${ORG}"
41
+ dmos|sf data360 dmo list --all -o "${ORG}"
42
+ segments|sf data360 segment list -o "${ORG}"
43
+ data-action-targets|sf data360 data-action-target list -o "${ORG}"
44
+ EOF
45
+
46
+ if [[ "${smoke_passed}" -ne 1 ]]; then
47
+ echo "No fallback Data Cloud smoke checks succeeded for '${ORG}'. Check org access and Data Cloud provisioning." >&2
48
+ exit 1
49
+ fi
50
+
51
+ echo "! Doctor remains advisory for partially provisioned orgs; at least one read-only Data Cloud command succeeded." >&2
52
+ fi
53
+ fi
54
+
55
+ echo "Verification complete."
56
+ if [[ -n "${ORG}" ]]; then
57
+ echo "Next: node ~/.claude/skills/orchestrating-datacloud/scripts/diagnose-org.mjs -o '${ORG}' --json"
58
+ fi
@@ -0,0 +1,7 @@
1
+ # Credits & Acknowledgments
2
+
3
+ Primary contributor: **Gnanasekaran Thoppae**
4
+
5
+ This skill is part of the `*-datacloud` family. Shared attribution, upstream source mapping, and maintenance notes live in:
6
+ - [../orchestrating-datacloud/CREDITS.md](../orchestrating-datacloud/CREDITS.md)
7
+ - [../orchestrating-datacloud/UPSTREAM.md](../orchestrating-datacloud/UPSTREAM.md)