@salesforce/afv-skills 1.22.0 → 1.24.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 (1675) hide show
  1. package/package.json +1 -1
  2. package/skills/{developing-datacloud-code-extension → data360-code-extension-generate}/SKILL.md +7 -7
  3. package/skills/{developing-datacloud-code-extension → data360-code-extension-generate}/references/README.md +7 -7
  4. package/skills/{developing-datacloud-code-extension → data360-code-extension-generate}/references/quick-reference.md +2 -2
  5. package/skills/{getting-datacloud-schema → data360-schema-get}/SKILL.md +26 -26
  6. package/skills/{getting-datacloud-schema → data360-schema-get}/references/README.md +9 -9
  7. package/skills/activating-datacloud/README.md +0 -39
  8. package/skills/activating-datacloud/SKILL.md +0 -117
  9. package/skills/analyzing-omnistudio-dependencies/CREDITS.md +0 -5
  10. package/skills/analyzing-omnistudio-dependencies/SKILL.md +0 -476
  11. package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +0 -508
  12. package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +0 -300
  13. package/skills/applying-cms-brand/SKILL.md +0 -170
  14. package/skills/applying-slds/SKILL.md +0 -322
  15. package/skills/applying-slds/checklists.md +0 -83
  16. package/skills/applying-slds/examples.md +0 -283
  17. package/skills/applying-slds/guidance/README.md +0 -83
  18. package/skills/applying-slds/guidance/blueprints-index.md +0 -213
  19. package/skills/applying-slds/guidance/icons-guidance.md +0 -186
  20. package/skills/applying-slds/guidance/overviews/borders.md +0 -236
  21. package/skills/applying-slds/guidance/overviews/color.md +0 -266
  22. package/skills/applying-slds/guidance/overviews/display-density.md +0 -366
  23. package/skills/applying-slds/guidance/overviews/icons.md +0 -240
  24. package/skills/applying-slds/guidance/overviews/illustrations.md +0 -235
  25. package/skills/applying-slds/guidance/overviews/shadows.md +0 -176
  26. package/skills/applying-slds/guidance/overviews/spacing.md +0 -216
  27. package/skills/applying-slds/guidance/overviews/typography.md +0 -323
  28. package/skills/applying-slds/guidance/overviews/utilities.md +0 -542
  29. package/skills/applying-slds/guidance/slds-development-guide.md +0 -288
  30. package/skills/applying-slds/guidance/styling-hooks/borders.md +0 -202
  31. package/skills/applying-slds/guidance/styling-hooks/color/expressive-palette-hooks.md +0 -153
  32. package/skills/applying-slds/guidance/styling-hooks/color/index.md +0 -171
  33. package/skills/applying-slds/guidance/styling-hooks/color/semantic/accent-hooks.md +0 -204
  34. package/skills/applying-slds/guidance/styling-hooks/color/semantic/feedback-hooks.md +0 -768
  35. package/skills/applying-slds/guidance/styling-hooks/color/semantic/surface-hooks.md +0 -337
  36. package/skills/applying-slds/guidance/styling-hooks/color/system-hooks.md +0 -132
  37. package/skills/applying-slds/guidance/styling-hooks/index.md +0 -327
  38. package/skills/applying-slds/guidance/styling-hooks/shadows.md +0 -238
  39. package/skills/applying-slds/guidance/styling-hooks/spacing.md +0 -254
  40. package/skills/applying-slds/guidance/styling-hooks/typography.md +0 -448
  41. package/skills/applying-slds/guidance/utilities/alignment.md +0 -119
  42. package/skills/applying-slds/guidance/utilities/borders.md +0 -131
  43. package/skills/applying-slds/guidance/utilities/box.md +0 -125
  44. package/skills/applying-slds/guidance/utilities/color.md +0 -165
  45. package/skills/applying-slds/guidance/utilities/dark-mode.md +0 -111
  46. package/skills/applying-slds/guidance/utilities/description-list.md +0 -168
  47. package/skills/applying-slds/guidance/utilities/floats.md +0 -117
  48. package/skills/applying-slds/guidance/utilities/grid.md +0 -264
  49. package/skills/applying-slds/guidance/utilities/horizontal-list.md +0 -110
  50. package/skills/applying-slds/guidance/utilities/hyphenation.md +0 -84
  51. package/skills/applying-slds/guidance/utilities/index.md +0 -205
  52. package/skills/applying-slds/guidance/utilities/interactions.md +0 -89
  53. package/skills/applying-slds/guidance/utilities/layout.md +0 -109
  54. package/skills/applying-slds/guidance/utilities/line-clamp.md +0 -131
  55. package/skills/applying-slds/guidance/utilities/margin.md +0 -155
  56. package/skills/applying-slds/guidance/utilities/media-object.md +0 -161
  57. package/skills/applying-slds/guidance/utilities/name-value-list.md +0 -152
  58. package/skills/applying-slds/guidance/utilities/padding.md +0 -155
  59. package/skills/applying-slds/guidance/utilities/position.md +0 -177
  60. package/skills/applying-slds/guidance/utilities/print.md +0 -114
  61. package/skills/applying-slds/guidance/utilities/scrollable.md +0 -126
  62. package/skills/applying-slds/guidance/utilities/sizing.md +0 -190
  63. package/skills/applying-slds/guidance/utilities/themes.md +0 -121
  64. package/skills/applying-slds/guidance/utilities/truncate.md +0 -127
  65. package/skills/applying-slds/guidance/utilities/typography.md +0 -166
  66. package/skills/applying-slds/guidance/utilities/vertical-list.md +0 -166
  67. package/skills/applying-slds/guidance/utilities/visibility.md +0 -228
  68. package/skills/applying-slds/metadata/README.md +0 -84
  69. package/skills/applying-slds/metadata/blueprints/components/accordion.yaml +0 -304
  70. package/skills/applying-slds/metadata/blueprints/components/activity-timeline.yaml +0 -92
  71. package/skills/applying-slds/metadata/blueprints/components/alert.yaml +0 -103
  72. package/skills/applying-slds/metadata/blueprints/components/app-launcher.yaml +0 -94
  73. package/skills/applying-slds/metadata/blueprints/components/avatar-group.yaml +0 -81
  74. package/skills/applying-slds/metadata/blueprints/components/avatar.yaml +0 -97
  75. package/skills/applying-slds/metadata/blueprints/components/badges.yaml +0 -102
  76. package/skills/applying-slds/metadata/blueprints/components/brand-band.yaml +0 -198
  77. package/skills/applying-slds/metadata/blueprints/components/breadcrumbs.yaml +0 -95
  78. package/skills/applying-slds/metadata/blueprints/components/builder-header.yaml +0 -192
  79. package/skills/applying-slds/metadata/blueprints/components/button-groups.yaml +0 -82
  80. package/skills/applying-slds/metadata/blueprints/components/button-icons.yaml +0 -295
  81. package/skills/applying-slds/metadata/blueprints/components/buttons.yaml +0 -230
  82. package/skills/applying-slds/metadata/blueprints/components/cards.yaml +0 -124
  83. package/skills/applying-slds/metadata/blueprints/components/carousel.yaml +0 -140
  84. package/skills/applying-slds/metadata/blueprints/components/chat.yaml +0 -179
  85. package/skills/applying-slds/metadata/blueprints/components/checkbox-button-group.yaml +0 -192
  86. package/skills/applying-slds/metadata/blueprints/components/checkbox-button.yaml +0 -204
  87. package/skills/applying-slds/metadata/blueprints/components/checkbox-toggle.yaml +0 -177
  88. package/skills/applying-slds/metadata/blueprints/components/checkbox.yaml +0 -108
  89. package/skills/applying-slds/metadata/blueprints/components/color-picker.yaml +0 -172
  90. package/skills/applying-slds/metadata/blueprints/components/combobox.yaml +0 -136
  91. package/skills/applying-slds/metadata/blueprints/components/counter.yaml +0 -147
  92. package/skills/applying-slds/metadata/blueprints/components/data-tables.yaml +0 -157
  93. package/skills/applying-slds/metadata/blueprints/components/datepickers.yaml +0 -130
  94. package/skills/applying-slds/metadata/blueprints/components/datetime-picker.yaml +0 -155
  95. package/skills/applying-slds/metadata/blueprints/components/docked-composer.yaml +0 -201
  96. package/skills/applying-slds/metadata/blueprints/components/docked-form-footer.yaml +0 -161
  97. package/skills/applying-slds/metadata/blueprints/components/docked-utility-bar.yaml +0 -175
  98. package/skills/applying-slds/metadata/blueprints/components/drop-zone.yaml +0 -115
  99. package/skills/applying-slds/metadata/blueprints/components/dueling-picklist.yaml +0 -196
  100. package/skills/applying-slds/metadata/blueprints/components/dynamic-icons.yaml +0 -128
  101. package/skills/applying-slds/metadata/blueprints/components/dynamic-menu.yaml +0 -141
  102. package/skills/applying-slds/metadata/blueprints/components/expandable-section.yaml +0 -115
  103. package/skills/applying-slds/metadata/blueprints/components/expression.yaml +0 -143
  104. package/skills/applying-slds/metadata/blueprints/components/feeds.yaml +0 -125
  105. package/skills/applying-slds/metadata/blueprints/components/file-selector.yaml +0 -154
  106. package/skills/applying-slds/metadata/blueprints/components/files.yaml +0 -119
  107. package/skills/applying-slds/metadata/blueprints/components/form-element.yaml +0 -145
  108. package/skills/applying-slds/metadata/blueprints/components/global-header.yaml +0 -120
  109. package/skills/applying-slds/metadata/blueprints/components/global-navigation.yaml +0 -100
  110. package/skills/applying-slds/metadata/blueprints/components/icons.yaml +0 -138
  111. package/skills/applying-slds/metadata/blueprints/components/illustration.yaml +0 -205
  112. package/skills/applying-slds/metadata/blueprints/components/input.yaml +0 -151
  113. package/skills/applying-slds/metadata/blueprints/components/list-builder.yaml +0 -127
  114. package/skills/applying-slds/metadata/blueprints/components/lookups.yaml +0 -132
  115. package/skills/applying-slds/metadata/blueprints/components/map.yaml +0 -118
  116. package/skills/applying-slds/metadata/blueprints/components/menus.yaml +0 -134
  117. package/skills/applying-slds/metadata/blueprints/components/modals.yaml +0 -152
  118. package/skills/applying-slds/metadata/blueprints/components/notifications.yaml +0 -88
  119. package/skills/applying-slds/metadata/blueprints/components/page-headers.yaml +0 -135
  120. package/skills/applying-slds/metadata/blueprints/components/panels.yaml +0 -149
  121. package/skills/applying-slds/metadata/blueprints/components/path.yaml +0 -154
  122. package/skills/applying-slds/metadata/blueprints/components/picklist.yaml +0 -125
  123. package/skills/applying-slds/metadata/blueprints/components/pills.yaml +0 -154
  124. package/skills/applying-slds/metadata/blueprints/components/popovers.yaml +0 -120
  125. package/skills/applying-slds/metadata/blueprints/components/progress-bar.yaml +0 -110
  126. package/skills/applying-slds/metadata/blueprints/components/progress-indicator.yaml +0 -133
  127. package/skills/applying-slds/metadata/blueprints/components/progress-ring.yaml +0 -102
  128. package/skills/applying-slds/metadata/blueprints/components/prompt.yaml +0 -126
  129. package/skills/applying-slds/metadata/blueprints/components/publishers.yaml +0 -178
  130. package/skills/applying-slds/metadata/blueprints/components/radio-button-group.yaml +0 -172
  131. package/skills/applying-slds/metadata/blueprints/components/radio-group.yaml +0 -112
  132. package/skills/applying-slds/metadata/blueprints/components/rich-text-editor.yaml +0 -135
  133. package/skills/applying-slds/metadata/blueprints/components/scoped-notifications.yaml +0 -188
  134. package/skills/applying-slds/metadata/blueprints/components/scoped-tabs.yaml +0 -97
  135. package/skills/applying-slds/metadata/blueprints/components/select.yaml +0 -127
  136. package/skills/applying-slds/metadata/blueprints/components/setup-assistant.yaml +0 -152
  137. package/skills/applying-slds/metadata/blueprints/components/slider.yaml +0 -111
  138. package/skills/applying-slds/metadata/blueprints/components/spinners.yaml +0 -135
  139. package/skills/applying-slds/metadata/blueprints/components/split-view.yaml +0 -112
  140. package/skills/applying-slds/metadata/blueprints/components/summary-detail.yaml +0 -103
  141. package/skills/applying-slds/metadata/blueprints/components/tabs.yaml +0 -138
  142. package/skills/applying-slds/metadata/blueprints/components/textarea.yaml +0 -116
  143. package/skills/applying-slds/metadata/blueprints/components/tiles.yaml +0 -108
  144. package/skills/applying-slds/metadata/blueprints/components/timepicker.yaml +0 -111
  145. package/skills/applying-slds/metadata/blueprints/components/toast.yaml +0 -154
  146. package/skills/applying-slds/metadata/blueprints/components/tooltips.yaml +0 -107
  147. package/skills/applying-slds/metadata/blueprints/components/tree-grid.yaml +0 -116
  148. package/skills/applying-slds/metadata/blueprints/components/trees.yaml +0 -116
  149. package/skills/applying-slds/metadata/blueprints/components/trial-bar.yaml +0 -112
  150. package/skills/applying-slds/metadata/blueprints/components/vertical-navigation.yaml +0 -130
  151. package/skills/applying-slds/metadata/blueprints/components/vertical-tabs.yaml +0 -140
  152. package/skills/applying-slds/metadata/blueprints/components/visual-picker.yaml +0 -150
  153. package/skills/applying-slds/metadata/blueprints/components/welcome-mat.yaml +0 -136
  154. package/skills/applying-slds/metadata/hooks-index.json +0 -6272
  155. package/skills/applying-slds/metadata/icon-metadata.json +0 -38466
  156. package/skills/applying-slds/metadata/utilities-index.json +0 -21912
  157. package/skills/applying-slds/references/component-selection.md +0 -112
  158. package/skills/applying-slds/references/icons-decision-guide.md +0 -124
  159. package/skills/applying-slds/references/styling-decision-guide.md +0 -228
  160. package/skills/applying-slds/references/utilities-quick-ref.md +0 -125
  161. package/skills/applying-slds/scripts/search-blueprints.cjs +0 -117
  162. package/skills/applying-slds/scripts/search-hooks.cjs +0 -139
  163. package/skills/applying-slds/scripts/search-icons.cjs +0 -174
  164. package/skills/applying-slds/scripts/search-utilities.cjs +0 -161
  165. package/skills/building-mobile-apps/SKILL.md +0 -69
  166. package/skills/building-omnistudio-callable-apex/CREDITS.md +0 -9
  167. package/skills/building-omnistudio-callable-apex/README.md +0 -80
  168. package/skills/building-omnistudio-callable-apex/SKILL.md +0 -275
  169. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +0 -40
  170. package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +0 -32
  171. package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +0 -54
  172. package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +0 -45
  173. package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +0 -65
  174. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +0 -7
  175. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +0 -115
  176. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +0 -189
  177. package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +0 -115
  178. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +0 -7
  179. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +0 -74
  180. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +0 -146
  181. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +0 -16
  182. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +0 -120
  183. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +0 -7
  184. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +0 -73
  185. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +0 -128
  186. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +0 -23
  187. package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +0 -75
  188. package/skills/building-omnistudio-datamapper/CREDITS.md +0 -5
  189. package/skills/building-omnistudio-datamapper/SKILL.md +0 -269
  190. package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +0 -28
  191. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +0 -6
  192. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +0 -12
  193. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +0 -6
  194. package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +0 -6
  195. package/skills/building-omnistudio-datamapper/references/best-practices.md +0 -277
  196. package/skills/building-omnistudio-datamapper/references/naming-conventions.md +0 -145
  197. package/skills/building-omnistudio-flexcard/CREDITS.md +0 -5
  198. package/skills/building-omnistudio-flexcard/SKILL.md +0 -324
  199. package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +0 -10
  200. package/skills/building-omnistudio-flexcard/references/best-practices.md +0 -291
  201. package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +0 -311
  202. package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +0 -66
  203. package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +0 -24
  204. package/skills/building-omnistudio-integration-procedure/CREDITS.md +0 -5
  205. package/skills/building-omnistudio-integration-procedure/SKILL.md +0 -274
  206. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +0 -10
  207. package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +0 -10
  208. package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +0 -12
  209. package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +0 -14
  210. package/skills/building-omnistudio-integration-procedure/references/best-practices.md +0 -388
  211. package/skills/building-omnistudio-integration-procedure/references/element-types.md +0 -588
  212. package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +0 -18
  213. package/skills/building-omnistudio-omniscript/CREDITS.md +0 -5
  214. package/skills/building-omnistudio-omniscript/SKILL.md +0 -366
  215. package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +0 -10
  216. package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +0 -11
  217. package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +0 -12
  218. package/skills/building-omnistudio-omniscript/references/best-practices.md +0 -480
  219. package/skills/building-omnistudio-omniscript/references/element-types.md +0 -1172
  220. package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +0 -13
  221. package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +0 -21
  222. package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +0 -29
  223. package/skills/building-sf-integrations/CREDITS.md +0 -5
  224. package/skills/building-sf-integrations/README.md +0 -95
  225. package/skills/building-sf-integrations/SKILL.md +0 -191
  226. package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +0 -167
  227. package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +0 -257
  228. package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +0 -262
  229. package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +0 -211
  230. package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +0 -246
  231. package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +0 -139
  232. package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +0 -58
  233. package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +0 -39
  234. package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +0 -90
  235. package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +0 -87
  236. package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +0 -221
  237. package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +0 -193
  238. package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +0 -62
  239. package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +0 -71
  240. package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +0 -51
  241. package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +0 -67
  242. package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +0 -191
  243. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +0 -295
  244. package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +0 -108
  245. package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +0 -124
  246. package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +0 -186
  247. package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +0 -213
  248. package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +0 -271
  249. package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +0 -363
  250. package/skills/building-sf-integrations/references/callout-patterns.md +0 -719
  251. package/skills/building-sf-integrations/references/cdc-guide.md +0 -288
  252. package/skills/building-sf-integrations/references/cli-reference.md +0 -94
  253. package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +0 -266
  254. package/skills/building-sf-integrations/references/event-patterns.md +0 -838
  255. package/skills/building-sf-integrations/references/external-services-guide.md +0 -303
  256. package/skills/building-sf-integrations/references/messaging-api-v2.md +0 -609
  257. package/skills/building-sf-integrations/references/named-credentials-automation.md +0 -201
  258. package/skills/building-sf-integrations/references/named-credentials-guide.md +0 -173
  259. package/skills/building-sf-integrations/references/platform-events-guide.md +0 -288
  260. package/skills/building-sf-integrations/references/rest-callout-patterns.md +0 -288
  261. package/skills/building-sf-integrations/references/scoring-rubric.md +0 -59
  262. package/skills/building-sf-integrations/references/security-best-practices.md +0 -248
  263. package/skills/building-sf-integrations/scripts/README.md +0 -100
  264. package/skills/building-sf-integrations/scripts/configure-named-credential.sh +0 -236
  265. package/skills/building-sf-integrations/scripts/set-api-credential.sh +0 -146
  266. package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +0 -158
  267. package/skills/building-ui-bundle-app/SKILL.md +0 -350
  268. package/skills/building-ui-bundle-frontend/SKILL.md +0 -135
  269. package/skills/building-ui-bundle-frontend/implementation/component.md +0 -78
  270. package/skills/building-ui-bundle-frontend/implementation/header-footer.md +0 -132
  271. package/skills/building-ui-bundle-frontend/implementation/page.md +0 -93
  272. package/skills/configuring-code-analyzer/SKILL.md +0 -482
  273. package/skills/configuring-code-analyzer/examples/apex-project-config.yml +0 -41
  274. package/skills/configuring-code-analyzer/examples/ci-github-actions.yml +0 -96
  275. package/skills/configuring-code-analyzer/examples/fullstack-project-config.yml +0 -46
  276. package/skills/configuring-code-analyzer/examples/lwc-project-config.yml +0 -26
  277. package/skills/configuring-code-analyzer/references/ci-cd-templates.md +0 -648
  278. package/skills/configuring-code-analyzer/references/config-schema.md +0 -257
  279. package/skills/configuring-code-analyzer/references/diagnostic-flow.md +0 -70
  280. package/skills/configuring-code-analyzer/references/engine-prerequisites.md +0 -276
  281. package/skills/configuring-code-analyzer/references/rule-name-resolution.md +0 -67
  282. package/skills/configuring-code-analyzer/references/troubleshooting.md +0 -298
  283. package/skills/configuring-code-analyzer/scripts/check-prerequisites.sh +0 -189
  284. package/skills/configuring-code-analyzer/scripts/generate-config.sh +0 -143
  285. package/skills/configuring-code-analyzer/scripts/validate-config.sh +0 -153
  286. package/skills/configuring-connected-apps/CREDITS.md +0 -3
  287. package/skills/configuring-connected-apps/README.md +0 -99
  288. package/skills/configuring-connected-apps/SKILL.md +0 -223
  289. package/skills/configuring-connected-apps/assets/connected-app-basic.xml +0 -29
  290. package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +0 -62
  291. package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +0 -49
  292. package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +0 -65
  293. package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +0 -36
  294. package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +0 -36
  295. package/skills/configuring-connected-apps/assets/eca-policies.xml +0 -36
  296. package/skills/configuring-connected-apps/assets/external-client-app.xml +0 -35
  297. package/skills/configuring-connected-apps/references/example-usage.md +0 -256
  298. package/skills/configuring-connected-apps/references/migration-guide.md +0 -328
  299. package/skills/configuring-connected-apps/references/oauth-flows-reference.md +0 -660
  300. package/skills/configuring-connected-apps/references/security-checklist.md +0 -209
  301. package/skills/configuring-connected-apps/references/testing-validation-guide.md +0 -275
  302. package/skills/connecting-datacloud/CREDITS.md +0 -5
  303. package/skills/connecting-datacloud/README.md +0 -59
  304. package/skills/connecting-datacloud/SKILL.md +0 -154
  305. package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +0 -15
  306. package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +0 -5
  307. package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +0 -31
  308. package/skills/connecting-datacloud/examples/connections/redshift.json +0 -16
  309. package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +0 -20
  310. package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +0 -42
  311. package/skills/creating-b2b-commerce-store/SKILL.md +0 -167
  312. package/skills/creating-b2b-commerce-store/references/store-vs-storefront.md +0 -169
  313. package/skills/debugging-apex-logs/CREDITS.md +0 -22
  314. package/skills/debugging-apex-logs/README.md +0 -74
  315. package/skills/debugging-apex-logs/SKILL.md +0 -171
  316. package/skills/debugging-apex-logs/assets/benchmarking-template.cls +0 -327
  317. package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +0 -307
  318. package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +0 -219
  319. package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +0 -252
  320. package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +0 -157
  321. package/skills/debugging-apex-logs/references/analysis-playbook.md +0 -53
  322. package/skills/debugging-apex-logs/references/benchmarking-guide.md +0 -287
  323. package/skills/debugging-apex-logs/references/cli-commands.md +0 -368
  324. package/skills/debugging-apex-logs/references/common-issues.md +0 -68
  325. package/skills/debugging-apex-logs/references/debug-log-reference.md +0 -328
  326. package/skills/debugging-apex-logs/references/log-analysis-tools.md +0 -248
  327. package/skills/debugging-apex-logs/references/scoring-rubric.md +0 -21
  328. package/skills/deploying-metadata/CREDITS.md +0 -25
  329. package/skills/deploying-metadata/README.md +0 -104
  330. package/skills/deploying-metadata/SKILL.md +0 -213
  331. package/skills/deploying-metadata/assets/destructiveChanges.xml +0 -143
  332. package/skills/deploying-metadata/assets/package.xml +0 -121
  333. package/skills/deploying-metadata/references/agent-deployment-guide.md +0 -628
  334. package/skills/deploying-metadata/references/deploy.sh +0 -73
  335. package/skills/deploying-metadata/references/deployment-report-template.md +0 -89
  336. package/skills/deploying-metadata/references/deployment-workflows.md +0 -395
  337. package/skills/deploying-metadata/references/orchestration.md +0 -183
  338. package/skills/deploying-metadata/references/trigger-deployment-safety.md +0 -376
  339. package/skills/deploying-omnistudio-datapacks/CREDITS.md +0 -5
  340. package/skills/deploying-omnistudio-datapacks/README.md +0 -88
  341. package/skills/deploying-omnistudio-datapacks/SKILL.md +0 -173
  342. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +0 -124
  343. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +0 -11
  344. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +0 -142
  345. package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +0 -10
  346. package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +0 -42
  347. package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +0 -24
  348. package/skills/deploying-ui-bundle/SKILL.md +0 -79
  349. package/skills/developing-agentforce/README.md +0 -112
  350. package/skills/developing-agentforce/SKILL.md +0 -518
  351. package/skills/developing-agentforce/assets/README-legacy.md +0 -89
  352. package/skills/developing-agentforce/assets/agent-spec-template.md +0 -90
  353. package/skills/developing-agentforce/assets/agents/README.md +0 -45
  354. package/skills/developing-agentforce/assets/agents/hello-world.agent +0 -60
  355. package/skills/developing-agentforce/assets/agents/multi-subagent.agent +0 -105
  356. package/skills/developing-agentforce/assets/agents/order-service.agent +0 -272
  357. package/skills/developing-agentforce/assets/agents/production-faq.agent +0 -101
  358. package/skills/developing-agentforce/assets/agents/production-faq.bundle-meta.xml +0 -4
  359. package/skills/developing-agentforce/assets/agents/simple-qa.agent +0 -72
  360. package/skills/developing-agentforce/assets/agents/verification-gate.agent +0 -280
  361. package/skills/developing-agentforce/assets/apex/models-api-queueable.cls +0 -225
  362. package/skills/developing-agentforce/assets/bundle-meta.xml +0 -23
  363. package/skills/developing-agentforce/assets/components/apex-action.agent +0 -52
  364. package/skills/developing-agentforce/assets/components/error-handling.agent +0 -58
  365. package/skills/developing-agentforce/assets/components/escalation-setup.agent +0 -169
  366. package/skills/developing-agentforce/assets/components/flow-action.agent +0 -66
  367. package/skills/developing-agentforce/assets/components/n-ary-conditions.agent +0 -110
  368. package/skills/developing-agentforce/assets/components/subagent-with-actions.agent +0 -40
  369. package/skills/developing-agentforce/assets/deterministic-routing.agent +0 -166
  370. package/skills/developing-agentforce/assets/escalation-pattern.agent +0 -209
  371. package/skills/developing-agentforce/assets/flow-action-lookup.agent +0 -115
  372. package/skills/developing-agentforce/assets/hub-and-spoke.agent +0 -104
  373. package/skills/developing-agentforce/assets/invocable-apex-template.cls +0 -187
  374. package/skills/developing-agentforce/assets/local-info-agent-annotated.agent +0 -355
  375. package/skills/developing-agentforce/assets/metadata/basic-prompt-template.promptTemplate-meta.xml +0 -109
  376. package/skills/developing-agentforce/assets/metadata/genai-function-apex.xml +0 -92
  377. package/skills/developing-agentforce/assets/metadata/genai-function-flow.xml +0 -57
  378. package/skills/developing-agentforce/assets/metadata/genai-plugin.xml +0 -72
  379. package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +0 -348
  380. package/skills/developing-agentforce/assets/metadata/record-grounded-prompt.promptTemplate-meta.xml +0 -136
  381. package/skills/developing-agentforce/assets/minimal-starter.agent +0 -42
  382. package/skills/developing-agentforce/assets/patterns/README.md +0 -254
  383. package/skills/developing-agentforce/assets/patterns/action-callbacks.agent +0 -178
  384. package/skills/developing-agentforce/assets/patterns/advanced-input-bindings.agent +0 -141
  385. package/skills/developing-agentforce/assets/patterns/bidirectional-routing.agent +0 -156
  386. package/skills/developing-agentforce/assets/patterns/critical-input-collection.agent +0 -244
  387. package/skills/developing-agentforce/assets/patterns/delegation-routing.agent +0 -89
  388. package/skills/developing-agentforce/assets/patterns/lifecycle-events.agent +0 -127
  389. package/skills/developing-agentforce/assets/patterns/llm-controlled-actions.agent +0 -184
  390. package/skills/developing-agentforce/assets/patterns/multi-step-workflow.agent +0 -282
  391. package/skills/developing-agentforce/assets/patterns/open-gate-routing.agent +0 -287
  392. package/skills/developing-agentforce/assets/patterns/procedural-instructions.agent +0 -273
  393. package/skills/developing-agentforce/assets/patterns/prompt-template-action.agent +0 -188
  394. package/skills/developing-agentforce/assets/patterns/system-instruction-overrides.agent +0 -293
  395. package/skills/developing-agentforce/assets/prompt-rag-search.agent +0 -131
  396. package/skills/developing-agentforce/assets/template-multi-subagent.agent +0 -160
  397. package/skills/developing-agentforce/assets/template-single-subagent.agent +0 -81
  398. package/skills/developing-agentforce/assets/verification-gate.agent +0 -208
  399. package/skills/developing-agentforce/references/action-prompt-templates.md +0 -164
  400. package/skills/developing-agentforce/references/actions-reference.md +0 -612
  401. package/skills/developing-agentforce/references/agent-access-guide.md +0 -72
  402. package/skills/developing-agentforce/references/agent-design-and-spec-creation.md +0 -1010
  403. package/skills/developing-agentforce/references/agent-metadata-and-lifecycle.md +0 -575
  404. package/skills/developing-agentforce/references/agent-script-core-language.md +0 -1255
  405. package/skills/developing-agentforce/references/agent-subagent-map-diagrams.md +0 -323
  406. package/skills/developing-agentforce/references/agent-user-setup.md +0 -529
  407. package/skills/developing-agentforce/references/agent-validation-and-debugging.md +0 -805
  408. package/skills/developing-agentforce/references/architecture-patterns.md +0 -158
  409. package/skills/developing-agentforce/references/complex-data-types.md +0 -57
  410. package/skills/developing-agentforce/references/deploy-reference.md +0 -134
  411. package/skills/developing-agentforce/references/discover-reference.md +0 -102
  412. package/skills/developing-agentforce/references/examples.md +0 -350
  413. package/skills/developing-agentforce/references/feature-validity.md +0 -43
  414. package/skills/developing-agentforce/references/instruction-resolution.md +0 -545
  415. package/skills/developing-agentforce/references/known-issues.md +0 -353
  416. package/skills/developing-agentforce/references/minimal-examples.md +0 -67
  417. package/skills/developing-agentforce/references/production-gotchas.md +0 -300
  418. package/skills/developing-agentforce/references/safety-review-reference.md +0 -145
  419. package/skills/developing-agentforce/references/salesforce-cli-for-agents.md +0 -395
  420. package/skills/developing-agentforce/references/scaffold-reference.md +0 -153
  421. package/skills/developing-agentforce/references/scoring-rubric.md +0 -24
  422. package/skills/developing-agentforce/references/version-history.md +0 -23
  423. package/skills/dx-app-analytics-use/SKILL.md +0 -135
  424. package/skills/fetching-salesforce-docs/README.md +0 -66
  425. package/skills/fetching-salesforce-docs/SKILL.md +0 -208
  426. package/skills/fetching-salesforce-docs/requirements.txt +0 -2
  427. package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +0 -497
  428. package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +0 -357
  429. package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +0 -58
  430. package/skills/generating-apex/CREDITS.md +0 -5
  431. package/skills/generating-apex/SKILL.md +0 -409
  432. package/skills/generating-apex/assets/abstract.cls +0 -131
  433. package/skills/generating-apex/assets/batch.cls +0 -124
  434. package/skills/generating-apex/assets/domain.cls +0 -101
  435. package/skills/generating-apex/assets/dto.cls +0 -107
  436. package/skills/generating-apex/assets/exception.cls +0 -50
  437. package/skills/generating-apex/assets/interface.cls +0 -24
  438. package/skills/generating-apex/assets/invocable.cls +0 -114
  439. package/skills/generating-apex/assets/queueable.cls +0 -91
  440. package/skills/generating-apex/assets/rest-resource.cls +0 -300
  441. package/skills/generating-apex/assets/schedulable.cls +0 -74
  442. package/skills/generating-apex/assets/selector.cls +0 -91
  443. package/skills/generating-apex/assets/service.cls +0 -68
  444. package/skills/generating-apex/assets/trigger.cls +0 -45
  445. package/skills/generating-apex/assets/utility.cls +0 -96
  446. package/skills/generating-apex/references/AccountDeduplicationBatch.cls +0 -147
  447. package/skills/generating-apex/references/AccountSelector.cls +0 -192
  448. package/skills/generating-apex/references/AccountService.cls +0 -200
  449. package/skills/generating-apex-test/CREDITS.md +0 -5
  450. package/skills/generating-apex-test/SKILL.md +0 -201
  451. package/skills/generating-apex-test/assets/test-class-template.cls +0 -93
  452. package/skills/generating-apex-test/assets/test-data-factory-template.cls +0 -111
  453. package/skills/generating-apex-test/references/assertion-patterns.md +0 -108
  454. package/skills/generating-apex-test/references/async-testing.md +0 -193
  455. package/skills/generating-apex-test/references/mocking-patterns.md +0 -220
  456. package/skills/generating-apex-test/references/test-data-factory.md +0 -75
  457. package/skills/generating-custom-application/SKILL.md +0 -211
  458. package/skills/generating-custom-field/SKILL.md +0 -503
  459. package/skills/generating-custom-lightning-type/SKILL.md +0 -180
  460. package/skills/generating-custom-lightning-type/assets/primitive-types-and-constraints.md +0 -41
  461. package/skills/generating-custom-lightning-type/references/widget-rendition.md +0 -124
  462. package/skills/generating-custom-object/SKILL.md +0 -240
  463. package/skills/generating-custom-tab/SKILL.md +0 -156
  464. package/skills/generating-flexipage/SKILL.md +0 -522
  465. package/skills/generating-flow/SKILL.md +0 -372
  466. package/skills/generating-lightning-app/SKILL.md +0 -423
  467. package/skills/generating-list-view/SKILL.md +0 -218
  468. package/skills/generating-lwc-components/CREDITS.md +0 -5
  469. package/skills/generating-lwc-components/README.md +0 -126
  470. package/skills/generating-lwc-components/SKILL.md +0 -190
  471. package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +0 -327
  472. package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +0 -72
  473. package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +0 -111
  474. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +0 -163
  475. package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +0 -137
  476. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +0 -111
  477. package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +0 -367
  478. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +0 -63
  479. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +0 -154
  480. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +0 -348
  481. package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +0 -87
  482. package/skills/generating-lwc-components/assets/form-component/formComponent.html +0 -165
  483. package/skills/generating-lwc-components/assets/form-component/formComponent.js +0 -275
  484. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +0 -100
  485. package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +0 -336
  486. package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +0 -371
  487. package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +0 -71
  488. package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +0 -103
  489. package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +0 -181
  490. package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +0 -85
  491. package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +0 -199
  492. package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +0 -55
  493. package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +0 -199
  494. package/skills/generating-lwc-components/assets/state-store/store.js +0 -282
  495. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +0 -65
  496. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +0 -95
  497. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +0 -75
  498. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +0 -301
  499. package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +0 -295
  500. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +0 -71
  501. package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +0 -316
  502. package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +0 -295
  503. package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +0 -347
  504. package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +0 -74
  505. package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +0 -111
  506. package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +0 -127
  507. package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +0 -294
  508. package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +0 -22
  509. package/skills/generating-lwc-components/hooks/scripts/template_validator.py +0 -332
  510. package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +0 -595
  511. package/skills/generating-lwc-components/references/accessibility-guide.md +0 -843
  512. package/skills/generating-lwc-components/references/advanced-features.md +0 -108
  513. package/skills/generating-lwc-components/references/async-notification-patterns.md +0 -661
  514. package/skills/generating-lwc-components/references/cli-commands.md +0 -545
  515. package/skills/generating-lwc-components/references/component-patterns.md +0 -1476
  516. package/skills/generating-lwc-components/references/flow-integration-guide.md +0 -675
  517. package/skills/generating-lwc-components/references/jest-testing.md +0 -1011
  518. package/skills/generating-lwc-components/references/lms-guide.md +0 -860
  519. package/skills/generating-lwc-components/references/lwc-best-practices.md +0 -1310
  520. package/skills/generating-lwc-components/references/performance-guide.md +0 -861
  521. package/skills/generating-lwc-components/references/scoring-and-testing.md +0 -116
  522. package/skills/generating-lwc-components/references/slds-blueprints.json +0 -14389
  523. package/skills/generating-lwc-components/references/slds-design-guide.md +0 -166
  524. package/skills/generating-lwc-components/references/state-management.md +0 -642
  525. package/skills/generating-lwc-components/references/template-anti-patterns.md +0 -948
  526. package/skills/generating-lwc-components/references/triangle-pattern.md +0 -365
  527. package/skills/generating-lwc-components/scripts/local-dev-preview.sh +0 -34
  528. package/skills/generating-mermaid-diagrams/CREDITS.md +0 -46
  529. package/skills/generating-mermaid-diagrams/README.md +0 -114
  530. package/skills/generating-mermaid-diagrams/SKILL.md +0 -217
  531. package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +0 -313
  532. package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +0 -351
  533. package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +0 -317
  534. package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +0 -195
  535. package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +0 -262
  536. package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +0 -266
  537. package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +0 -261
  538. package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +0 -332
  539. package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +0 -237
  540. package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +0 -277
  541. package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +0 -343
  542. package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +0 -192
  543. package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +0 -209
  544. package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +0 -276
  545. package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +0 -217
  546. package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +0 -241
  547. package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +0 -387
  548. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +0 -197
  549. package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +0 -152
  550. package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +0 -233
  551. package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +0 -295
  552. package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +0 -256
  553. package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +0 -281
  554. package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +0 -281
  555. package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +0 -322
  556. package/skills/generating-mermaid-diagrams/references/color-palette.md +0 -464
  557. package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +0 -313
  558. package/skills/generating-mermaid-diagrams/references/erd-conventions.md +0 -320
  559. package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +0 -434
  560. package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +0 -81
  561. package/skills/generating-mermaid-diagrams/references/preview-guide.md +0 -46
  562. package/skills/generating-mermaid-diagrams/references/usage-examples.md +0 -340
  563. package/skills/generating-mermaid-diagrams/scripts/README.md +0 -160
  564. package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +0 -654
  565. package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +0 -293
  566. package/skills/generating-permission-set/SKILL.md +0 -189
  567. package/skills/generating-ui-bundle-custom-app/SKILL.md +0 -93
  568. package/skills/generating-ui-bundle-custom-app/docs/configure-metadata-custom-application.md +0 -70
  569. package/skills/generating-ui-bundle-features/SKILL.md +0 -47
  570. package/skills/generating-ui-bundle-metadata/SKILL.md +0 -153
  571. package/skills/generating-ui-bundle-metadata/implementation/csp-metadata-format.md +0 -281
  572. package/skills/generating-ui-bundle-site/SKILL.md +0 -92
  573. package/skills/generating-ui-bundle-site/docs/configure-metadata-custom-site.md +0 -41
  574. package/skills/generating-ui-bundle-site/docs/configure-metadata-digital-experience-bundle.md +0 -17
  575. package/skills/generating-ui-bundle-site/docs/configure-metadata-digital-experience-config.md +0 -21
  576. package/skills/generating-ui-bundle-site/docs/configure-metadata-digital-experience.md +0 -40
  577. package/skills/generating-ui-bundle-site/docs/configure-metadata-network.md +0 -72
  578. package/skills/generating-ui-bundle-site/docs/update-site-urls.md +0 -100
  579. package/skills/generating-validation-rule/SKILL.md +0 -74
  580. package/skills/generating-visual-diagrams/CREDITS.md +0 -80
  581. package/skills/generating-visual-diagrams/README.md +0 -83
  582. package/skills/generating-visual-diagrams/SKILL.md +0 -207
  583. package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +0 -55
  584. package/skills/generating-visual-diagrams/assets/erd/core-objects.md +0 -131
  585. package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +0 -60
  586. package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +0 -45
  587. package/skills/generating-visual-diagrams/assets/lwc/data-table.md +0 -57
  588. package/skills/generating-visual-diagrams/assets/lwc/record-form.md +0 -60
  589. package/skills/generating-visual-diagrams/assets/review/apex-review.md +0 -57
  590. package/skills/generating-visual-diagrams/assets/review/lwc-review.md +0 -48
  591. package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +0 -257
  592. package/skills/generating-visual-diagrams/references/examples-index.md +0 -35
  593. package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +0 -65
  594. package/skills/generating-visual-diagrams/references/interview-questions.md +0 -529
  595. package/skills/generating-visual-diagrams/references/iteration-workflow.md +0 -173
  596. package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +0 -101
  597. package/skills/generating-visual-diagrams/scripts/generate_image.py +0 -243
  598. package/skills/getting-metadata-api-context/README.md +0 -79
  599. package/skills/getting-metadata-api-context/SKILL.md +0 -466
  600. package/skills/getting-metadata-api-context/data/metadata_api/AIApplication.json +0 -37
  601. package/skills/getting-metadata-api-context/data/metadata_api/AIApplicationConfig.json +0 -53
  602. package/skills/getting-metadata-api-context/data/metadata_api/AIReplyRecommendationsSettings.json +0 -40
  603. package/skills/getting-metadata-api-context/data/metadata_api/AIScoringModelDefinition.json +0 -87
  604. package/skills/getting-metadata-api-context/data/metadata_api/AIUsecaseDefinition.json +0 -215
  605. package/skills/getting-metadata-api-context/data/metadata_api/AccountInsightsSettings.json +0 -30
  606. package/skills/getting-metadata-api-context/data/metadata_api/AccountIntelligenceSettings.json +0 -40
  607. package/skills/getting-metadata-api-context/data/metadata_api/AccountPlanObjMeasCalcDef.json +0 -86
  608. package/skills/getting-metadata-api-context/data/metadata_api/AccountPlanSettings.json +0 -32
  609. package/skills/getting-metadata-api-context/data/metadata_api/AccountRelationshipShareRule.json +0 -56
  610. package/skills/getting-metadata-api-context/data/metadata_api/AccountSettings.json +0 -64
  611. package/skills/getting-metadata-api-context/data/metadata_api/AccountingFieldMapping.json +0 -70
  612. package/skills/getting-metadata-api-context/data/metadata_api/AccountingModelConfig.json +0 -94
  613. package/skills/getting-metadata-api-context/data/metadata_api/AccountingSettings.json +0 -53
  614. package/skills/getting-metadata-api-context/data/metadata_api/ActionLinkGroupTemplate.json +0 -118
  615. package/skills/getting-metadata-api-context/data/metadata_api/ActionOverride.json +0 -70
  616. package/skills/getting-metadata-api-context/data/metadata_api/ActionPlanTemplate.json +0 -166
  617. package/skills/getting-metadata-api-context/data/metadata_api/ActionableListDefinition.json +0 -114
  618. package/skills/getting-metadata-api-context/data/metadata_api/ActionsSettings.json +0 -44
  619. package/skills/getting-metadata-api-context/data/metadata_api/ActivationPlatform.json +0 -95
  620. package/skills/getting-metadata-api-context/data/metadata_api/ActivationPlatformActvAttr.json +0 -8
  621. package/skills/getting-metadata-api-context/data/metadata_api/ActivationPlatformField.json +0 -55
  622. package/skills/getting-metadata-api-context/data/metadata_api/ActivitiesSettings.json +0 -136
  623. package/skills/getting-metadata-api-context/data/metadata_api/ActvPfrmDataConnectorS3.json +0 -41
  624. package/skills/getting-metadata-api-context/data/metadata_api/ActvPlatformAdncIdentifier.json +0 -46
  625. package/skills/getting-metadata-api-context/data/metadata_api/ActvPlatformFieldValue.json +0 -50
  626. package/skills/getting-metadata-api-context/data/metadata_api/AddressSettings.json +0 -90
  627. package/skills/getting-metadata-api-context/data/metadata_api/AdvAccountForecastSet.json +0 -261
  628. package/skills/getting-metadata-api-context/data/metadata_api/AffinityScoreDefinition.json +0 -74
  629. package/skills/getting-metadata-api-context/data/metadata_api/AgentPlatformSettings.json +0 -32
  630. package/skills/getting-metadata-api-context/data/metadata_api/AgentforceForDevelopersSettings.json +0 -32
  631. package/skills/getting-metadata-api-context/data/metadata_api/AiAuthoringBundle.json +0 -44
  632. package/skills/getting-metadata-api-context/data/metadata_api/AiEvaluationDefinition.json +0 -153
  633. package/skills/getting-metadata-api-context/data/metadata_api/AiPluginUtteranceDef.json +0 -40
  634. package/skills/getting-metadata-api-context/data/metadata_api/AllOrNoneHeader.json +0 -17
  635. package/skills/getting-metadata-api-context/data/metadata_api/AnalyticSnapshot.json +0 -80
  636. package/skills/getting-metadata-api-context/data/metadata_api/AnalyticsDashboard.json +0 -369
  637. package/skills/getting-metadata-api-context/data/metadata_api/AnalyticsSettings.json +0 -488
  638. package/skills/getting-metadata-api-context/data/metadata_api/AnalyticsVisualization.json +0 -180
  639. package/skills/getting-metadata-api-context/data/metadata_api/AnalyticsWorkspace.json +0 -71
  640. package/skills/getting-metadata-api-context/data/metadata_api/AnimationRule.json +0 -71
  641. package/skills/getting-metadata-api-context/data/metadata_api/ApexClass.json +0 -70
  642. package/skills/getting-metadata-api-context/data/metadata_api/ApexComponent.json +0 -44
  643. package/skills/getting-metadata-api-context/data/metadata_api/ApexEmailNotifications.json +0 -49
  644. package/skills/getting-metadata-api-context/data/metadata_api/ApexPage.json +0 -64
  645. package/skills/getting-metadata-api-context/data/metadata_api/ApexSettings.json +0 -96
  646. package/skills/getting-metadata-api-context/data/metadata_api/ApexTestSuite.json +0 -32
  647. package/skills/getting-metadata-api-context/data/metadata_api/ApexTrigger.json +0 -52
  648. package/skills/getting-metadata-api-context/data/metadata_api/AppAnalyticsSettings.json +0 -36
  649. package/skills/getting-metadata-api-context/data/metadata_api/AppExperienceSettings.json +0 -32
  650. package/skills/getting-metadata-api-context/data/metadata_api/AppFrameworkTemplateBundle.json +0 -52
  651. package/skills/getting-metadata-api-context/data/metadata_api/AppMenu.json +0 -10
  652. package/skills/getting-metadata-api-context/data/metadata_api/AppointmentAssignmentPolicy.json +0 -48
  653. package/skills/getting-metadata-api-context/data/metadata_api/AppointmentSchedulingPolicy.json +0 -102
  654. package/skills/getting-metadata-api-context/data/metadata_api/ApprovalProcess.json +0 -234
  655. package/skills/getting-metadata-api-context/data/metadata_api/ArticleType.json +0 -81
  656. package/skills/getting-metadata-api-context/data/metadata_api/ArticleType_CustomField.json +0 -88
  657. package/skills/getting-metadata-api-context/data/metadata_api/ArticleType_Layout.json +0 -63
  658. package/skills/getting-metadata-api-context/data/metadata_api/AssessmentQuestion.json +0 -117
  659. package/skills/getting-metadata-api-context/data/metadata_api/AssessmentQuestionSet.json +0 -41
  660. package/skills/getting-metadata-api-context/data/metadata_api/AssignmentRules.json +0 -87
  661. package/skills/getting-metadata-api-context/data/metadata_api/AssociationEngineSettings.json +0 -32
  662. package/skills/getting-metadata-api-context/data/metadata_api/AsyncResult.json +0 -89
  663. package/skills/getting-metadata-api-context/data/metadata_api/Audience.json +0 -172
  664. package/skills/getting-metadata-api-context/data/metadata_api/AuraDefinitionBundle.json +0 -94
  665. package/skills/getting-metadata-api-context/data/metadata_api/AuthProvider.json +0 -169
  666. package/skills/getting-metadata-api-context/data/metadata_api/AutoResponseRules.json +0 -79
  667. package/skills/getting-metadata-api-context/data/metadata_api/AutomatedContactsSettings.json +0 -44
  668. package/skills/getting-metadata-api-context/data/metadata_api/BaseSharingRule.json +0 -24
  669. package/skills/getting-metadata-api-context/data/metadata_api/BatchCalcJobDefinition.json +0 -849
  670. package/skills/getting-metadata-api-context/data/metadata_api/BatchProcessJobDefinition.json +0 -175
  671. package/skills/getting-metadata-api-context/data/metadata_api/BillingSettings.json +0 -152
  672. package/skills/getting-metadata-api-context/data/metadata_api/BlacklistedConsumer.json +0 -47
  673. package/skills/getting-metadata-api-context/data/metadata_api/Bot.json +0 -197
  674. package/skills/getting-metadata-api-context/data/metadata_api/BotBlock.json +0 -86
  675. package/skills/getting-metadata-api-context/data/metadata_api/BotSettings.json +0 -32
  676. package/skills/getting-metadata-api-context/data/metadata_api/BotTemplate.json +0 -96
  677. package/skills/getting-metadata-api-context/data/metadata_api/BotVersion.json +0 -667
  678. package/skills/getting-metadata-api-context/data/metadata_api/BranchManagementSettings.json +0 -32
  679. package/skills/getting-metadata-api-context/data/metadata_api/BrandingSet.json +0 -146
  680. package/skills/getting-metadata-api-context/data/metadata_api/BriefcaseDefinition.json +0 -127
  681. package/skills/getting-metadata-api-context/data/metadata_api/BusinessHoursSettings.json +0 -175
  682. package/skills/getting-metadata-api-context/data/metadata_api/BusinessProcess.json +0 -47
  683. package/skills/getting-metadata-api-context/data/metadata_api/BusinessProcessGroup.json +0 -91
  684. package/skills/getting-metadata-api-context/data/metadata_api/CMSConnectSource.json +0 -197
  685. package/skills/getting-metadata-api-context/data/metadata_api/CallCenter.json +0 -124
  686. package/skills/getting-metadata-api-context/data/metadata_api/CallCenterRoutingMap.json +0 -58
  687. package/skills/getting-metadata-api-context/data/metadata_api/CallCoachingMediaProvider.json +0 -40
  688. package/skills/getting-metadata-api-context/data/metadata_api/CallOptions.json +0 -17
  689. package/skills/getting-metadata-api-context/data/metadata_api/CampaignInfluenceModel.json +0 -59
  690. package/skills/getting-metadata-api-context/data/metadata_api/CampaignSettings.json +0 -71
  691. package/skills/getting-metadata-api-context/data/metadata_api/CancelDeployResult.json +0 -10
  692. package/skills/getting-metadata-api-context/data/metadata_api/CareBenefitVerifySettings.json +0 -70
  693. package/skills/getting-metadata-api-context/data/metadata_api/CareLimitType.json +0 -46
  694. package/skills/getting-metadata-api-context/data/metadata_api/CareProviderSearchConfig.json +0 -54
  695. package/skills/getting-metadata-api-context/data/metadata_api/CareRequestConfiguration.json +0 -57
  696. package/skills/getting-metadata-api-context/data/metadata_api/CareSystemFieldMapping.json +0 -58
  697. package/skills/getting-metadata-api-context/data/metadata_api/CaseSettings.json +0 -423
  698. package/skills/getting-metadata-api-context/data/metadata_api/CaseSubjectParticle.json +0 -35
  699. package/skills/getting-metadata-api-context/data/metadata_api/CatalogedApi.json +0 -97
  700. package/skills/getting-metadata-api-context/data/metadata_api/CatalogedApiArtifactVersionInfo.json +0 -46
  701. package/skills/getting-metadata-api-context/data/metadata_api/CatalogedApiVersion.json +0 -51
  702. package/skills/getting-metadata-api-context/data/metadata_api/Certificate.json +0 -54
  703. package/skills/getting-metadata-api-context/data/metadata_api/ChannelLayout.json +0 -63
  704. package/skills/getting-metadata-api-context/data/metadata_api/ChatterAnswersSettings.json +0 -76
  705. package/skills/getting-metadata-api-context/data/metadata_api/ChatterEmailsMDSettings.json +0 -68
  706. package/skills/getting-metadata-api-context/data/metadata_api/ChatterExtension.json +0 -64
  707. package/skills/getting-metadata-api-context/data/metadata_api/ChatterSettings.json +0 -92
  708. package/skills/getting-metadata-api-context/data/metadata_api/ChoiceList.json +0 -66
  709. package/skills/getting-metadata-api-context/data/metadata_api/ClaimFinancialSettings.json +0 -51
  710. package/skills/getting-metadata-api-context/data/metadata_api/ClauseCatgConfiguration.json +0 -45
  711. package/skills/getting-metadata-api-context/data/metadata_api/CleanDataService.json +0 -166
  712. package/skills/getting-metadata-api-context/data/metadata_api/CodeBuilderSettings.json +0 -32
  713. package/skills/getting-metadata-api-context/data/metadata_api/CollectionsDashboardSettings.json +0 -32
  714. package/skills/getting-metadata-api-context/data/metadata_api/CommerceSettings.json +0 -80
  715. package/skills/getting-metadata-api-context/data/metadata_api/CommunitiesSettings.json +0 -116
  716. package/skills/getting-metadata-api-context/data/metadata_api/Community.json +0 -121
  717. package/skills/getting-metadata-api-context/data/metadata_api/CommunityTemplateDefinition.json +0 -116
  718. package/skills/getting-metadata-api-context/data/metadata_api/CommunityThemeDefinition.json +0 -146
  719. package/skills/getting-metadata-api-context/data/metadata_api/CompactLayout.json +0 -32
  720. package/skills/getting-metadata-api-context/data/metadata_api/CompanySettings.json +0 -49
  721. package/skills/getting-metadata-api-context/data/metadata_api/ConnectedApp.json +0 -384
  722. package/skills/getting-metadata-api-context/data/metadata_api/ConnectedAppSettings.json +0 -40
  723. package/skills/getting-metadata-api-context/data/metadata_api/ContentAsset.json +0 -121
  724. package/skills/getting-metadata-api-context/data/metadata_api/ContentSettings.json +0 -116
  725. package/skills/getting-metadata-api-context/data/metadata_api/ContentTypeBundle.json +0 -64
  726. package/skills/getting-metadata-api-context/data/metadata_api/ContextDefinition.json +0 -340
  727. package/skills/getting-metadata-api-context/data/metadata_api/ContractSettings.json +0 -36
  728. package/skills/getting-metadata-api-context/data/metadata_api/ConvIntelligenceSignalRule.json +0 -106
  729. package/skills/getting-metadata-api-context/data/metadata_api/ConversationChannelDefinition.json +0 -140
  730. package/skills/getting-metadata-api-context/data/metadata_api/ConversationMessageDefinition.json +0 -380
  731. package/skills/getting-metadata-api-context/data/metadata_api/ConversationMessageDefinitionTranslation.json +0 -49
  732. package/skills/getting-metadata-api-context/data/metadata_api/ConversationVendorInfo.json +0 -148
  733. package/skills/getting-metadata-api-context/data/metadata_api/ConversationalIntelligenceSettings.json +0 -76
  734. package/skills/getting-metadata-api-context/data/metadata_api/CorsWhitelistOrigin.json +0 -32
  735. package/skills/getting-metadata-api-context/data/metadata_api/CriteriaBasedSharingRule.json +0 -206
  736. package/skills/getting-metadata-api-context/data/metadata_api/CspTrustedSite.json +0 -82
  737. package/skills/getting-metadata-api-context/data/metadata_api/CurrencySettings.json +0 -48
  738. package/skills/getting-metadata-api-context/data/metadata_api/CustomAddressFieldSettings.json +0 -32
  739. package/skills/getting-metadata-api-context/data/metadata_api/CustomApplication.json +0 -453
  740. package/skills/getting-metadata-api-context/data/metadata_api/CustomApplicationComponent.json +0 -72
  741. package/skills/getting-metadata-api-context/data/metadata_api/CustomFeedFilter.json +0 -63
  742. package/skills/getting-metadata-api-context/data/metadata_api/CustomField.json +0 -392
  743. package/skills/getting-metadata-api-context/data/metadata_api/CustomFieldDisplay.json +0 -45
  744. package/skills/getting-metadata-api-context/data/metadata_api/CustomHelpMenuSection.json +0 -57
  745. package/skills/getting-metadata-api-context/data/metadata_api/CustomIndex.json +0 -36
  746. package/skills/getting-metadata-api-context/data/metadata_api/CustomLabels.json +0 -69
  747. package/skills/getting-metadata-api-context/data/metadata_api/CustomMetadata.json +0 -90
  748. package/skills/getting-metadata-api-context/data/metadata_api/CustomNotificationType.json +0 -94
  749. package/skills/getting-metadata-api-context/data/metadata_api/CustomObject.json +0 -313
  750. package/skills/getting-metadata-api-context/data/metadata_api/CustomObjectTranslation.json +0 -319
  751. package/skills/getting-metadata-api-context/data/metadata_api/CustomPageWebLink.json +0 -121
  752. package/skills/getting-metadata-api-context/data/metadata_api/CustomPermission.json +0 -65
  753. package/skills/getting-metadata-api-context/data/metadata_api/CustomSite.json +0 -288
  754. package/skills/getting-metadata-api-context/data/metadata_api/CustomTab.json +0 -97
  755. package/skills/getting-metadata-api-context/data/metadata_api/CustomValue.json +0 -85
  756. package/skills/getting-metadata-api-context/data/metadata_api/CustomerDataPlatformSettings.json +0 -32
  757. package/skills/getting-metadata-api-context/data/metadata_api/Dashboard.json +0 -584
  758. package/skills/getting-metadata-api-context/data/metadata_api/DataCategoryGroup.json +0 -81
  759. package/skills/getting-metadata-api-context/data/metadata_api/DataConnector.json +0 -230
  760. package/skills/getting-metadata-api-context/data/metadata_api/DataConnectorIngestApi.json +0 -41
  761. package/skills/getting-metadata-api-context/data/metadata_api/DataConnectorS3.json +0 -44
  762. package/skills/getting-metadata-api-context/data/metadata_api/DataDotComSettings.json +0 -56
  763. package/skills/getting-metadata-api-context/data/metadata_api/DataImportManagementSettings.json +0 -32
  764. package/skills/getting-metadata-api-context/data/metadata_api/DataKitObjectDependency.json +0 -49
  765. package/skills/getting-metadata-api-context/data/metadata_api/DataKitObjectTemplate.json +0 -59
  766. package/skills/getting-metadata-api-context/data/metadata_api/DataObjectBuildOrgTemplate.json +0 -61
  767. package/skills/getting-metadata-api-context/data/metadata_api/DataObjectSearchIndexConf.json +0 -62
  768. package/skills/getting-metadata-api-context/data/metadata_api/DataPackageKitDefinition.json +0 -74
  769. package/skills/getting-metadata-api-context/data/metadata_api/DataPackageKitObject.json +0 -47
  770. package/skills/getting-metadata-api-context/data/metadata_api/DataSource.json +0 -29
  771. package/skills/getting-metadata-api-context/data/metadata_api/DataSourceBundleDefinition.json +0 -57
  772. package/skills/getting-metadata-api-context/data/metadata_api/DataSourceField.json +0 -115
  773. package/skills/getting-metadata-api-context/data/metadata_api/DataSourceObject.json +0 -93
  774. package/skills/getting-metadata-api-context/data/metadata_api/DataSourceTenant.json +0 -8
  775. package/skills/getting-metadata-api-context/data/metadata_api/DataSrcDataModelFieldMap.json +0 -69
  776. package/skills/getting-metadata-api-context/data/metadata_api/DataStreamDefinition.json +0 -105
  777. package/skills/getting-metadata-api-context/data/metadata_api/DataStreamTemplate.json +0 -99
  778. package/skills/getting-metadata-api-context/data/metadata_api/DataWeaveResource.json +0 -46
  779. package/skills/getting-metadata-api-context/data/metadata_api/DebuggingHeader.json +0 -20
  780. package/skills/getting-metadata-api-context/data/metadata_api/DecisionMatrixDefinition.json +0 -140
  781. package/skills/getting-metadata-api-context/data/metadata_api/DecisionTable.json +0 -211
  782. package/skills/getting-metadata-api-context/data/metadata_api/DecisionTableDatasetLink.json +0 -72
  783. package/skills/getting-metadata-api-context/data/metadata_api/DelegateGroup.json +0 -62
  784. package/skills/getting-metadata-api-context/data/metadata_api/DeleteResult.json +0 -22
  785. package/skills/getting-metadata-api-context/data/metadata_api/DeployResult.json +0 -253
  786. package/skills/getting-metadata-api-context/data/metadata_api/DeploymentSettings.json +0 -32
  787. package/skills/getting-metadata-api-context/data/metadata_api/DescribeMetadataResult.json +0 -31
  788. package/skills/getting-metadata-api-context/data/metadata_api/DescribeValueTypeResult.json +0 -56
  789. package/skills/getting-metadata-api-context/data/metadata_api/DevHubSettings.json +0 -60
  790. package/skills/getting-metadata-api-context/data/metadata_api/DgtAssetMgmtProvider.json +0 -43
  791. package/skills/getting-metadata-api-context/data/metadata_api/DgtAssetMgmtPrvdLghtCpnt.json +0 -48
  792. package/skills/getting-metadata-api-context/data/metadata_api/DigitalExperienceBundle.json +0 -102
  793. package/skills/getting-metadata-api-context/data/metadata_api/DigitalExperienceBundle_Marketing_Workspace_Bundle_and_Folders.json +0 -8
  794. package/skills/getting-metadata-api-context/data/metadata_api/DigitalExperienceBundle_Site_Workspace_Bundle_and_Folders.json +0 -541
  795. package/skills/getting-metadata-api-context/data/metadata_api/DigitalExperienceConfig.json +0 -51
  796. package/skills/getting-metadata-api-context/data/metadata_api/DisclosureDefinition.json +0 -45
  797. package/skills/getting-metadata-api-context/data/metadata_api/DisclosureDefinitionVersion.json +0 -78
  798. package/skills/getting-metadata-api-context/data/metadata_api/DisclosureType.json +0 -53
  799. package/skills/getting-metadata-api-context/data/metadata_api/DiscoveryAIModel.json +0 -263
  800. package/skills/getting-metadata-api-context/data/metadata_api/DiscoveryGoal.json +0 -361
  801. package/skills/getting-metadata-api-context/data/metadata_api/DiscoveryStory.json +0 -98
  802. package/skills/getting-metadata-api-context/data/metadata_api/Document.json +0 -54
  803. package/skills/getting-metadata-api-context/data/metadata_api/DocumentCategory.json +0 -42
  804. package/skills/getting-metadata-api-context/data/metadata_api/DocumentCategoryDocumentType.json +0 -48
  805. package/skills/getting-metadata-api-context/data/metadata_api/DocumentChecklistSettings.json +0 -36
  806. package/skills/getting-metadata-api-context/data/metadata_api/DocumentGenerationSetting.json +0 -60
  807. package/skills/getting-metadata-api-context/data/metadata_api/DocumentType.json +0 -43
  808. package/skills/getting-metadata-api-context/data/metadata_api/DuplicateRule.json +0 -160
  809. package/skills/getting-metadata-api-context/data/metadata_api/DynamicFormsSettings.json +0 -32
  810. package/skills/getting-metadata-api-context/data/metadata_api/EACSettings.json +0 -112
  811. package/skills/getting-metadata-api-context/data/metadata_api/EclairGeoData.json +0 -73
  812. package/skills/getting-metadata-api-context/data/metadata_api/EinsteinAISettings.json +0 -45
  813. package/skills/getting-metadata-api-context/data/metadata_api/EinsteinAgentSettings.json +0 -40
  814. package/skills/getting-metadata-api-context/data/metadata_api/EinsteinGptSettings.json +0 -64
  815. package/skills/getting-metadata-api-context/data/metadata_api/EmailAdministrationSettings.json +0 -104
  816. package/skills/getting-metadata-api-context/data/metadata_api/EmailAuthorizationSettings.json +0 -32
  817. package/skills/getting-metadata-api-context/data/metadata_api/EmailIntegrationSettings.json +0 -92
  818. package/skills/getting-metadata-api-context/data/metadata_api/EmailServicesFunction.json +0 -116
  819. package/skills/getting-metadata-api-context/data/metadata_api/EmailTemplate.json +0 -116
  820. package/skills/getting-metadata-api-context/data/metadata_api/EmailTemplateSettings.json +0 -32
  821. package/skills/getting-metadata-api-context/data/metadata_api/EmbeddedServiceBranding.json +0 -78
  822. package/skills/getting-metadata-api-context/data/metadata_api/EmbeddedServiceConfig.json +0 -318
  823. package/skills/getting-metadata-api-context/data/metadata_api/EmbeddedServiceFieldService.json +0 -73
  824. package/skills/getting-metadata-api-context/data/metadata_api/EmbeddedServiceFlowConfig.json +0 -32
  825. package/skills/getting-metadata-api-context/data/metadata_api/EmbeddedServiceLiveAgent.json +0 -141
  826. package/skills/getting-metadata-api-context/data/metadata_api/EmbeddedServiceMenuSettings.json +0 -165
  827. package/skills/getting-metadata-api-context/data/metadata_api/EmployeeUserSettings.json +0 -54
  828. package/skills/getting-metadata-api-context/data/metadata_api/EnablementMeasureDefinition.json +0 -139
  829. package/skills/getting-metadata-api-context/data/metadata_api/EnablementProgramDefinition.json +0 -241
  830. package/skills/getting-metadata-api-context/data/metadata_api/EnblProgramTaskSubCategory.json +0 -47
  831. package/skills/getting-metadata-api-context/data/metadata_api/EncryptionKeySettings.json +0 -51
  832. package/skills/getting-metadata-api-context/data/metadata_api/EnhancedNotesSettings.json +0 -36
  833. package/skills/getting-metadata-api-context/data/metadata_api/EntitlementProcess.json +0 -147
  834. package/skills/getting-metadata-api-context/data/metadata_api/EntitlementSettings.json +0 -80
  835. package/skills/getting-metadata-api-context/data/metadata_api/EntitlementTemplate.json +0 -52
  836. package/skills/getting-metadata-api-context/data/metadata_api/Error.json +0 -25
  837. package/skills/getting-metadata-api-context/data/metadata_api/EscalationRules.json +0 -117
  838. package/skills/getting-metadata-api-context/data/metadata_api/EventDelivery.json +0 -57
  839. package/skills/getting-metadata-api-context/data/metadata_api/EventRelayConfig.json +0 -55
  840. package/skills/getting-metadata-api-context/data/metadata_api/EventSettings.json +0 -76
  841. package/skills/getting-metadata-api-context/data/metadata_api/EventSubscription.json +0 -62
  842. package/skills/getting-metadata-api-context/data/metadata_api/ExperienceBundle.json +0 -387
  843. package/skills/getting-metadata-api-context/data/metadata_api/ExperienceBundleSettings.json +0 -25
  844. package/skills/getting-metadata-api-context/data/metadata_api/ExperiencePropertyTypeBundle.json +0 -68
  845. package/skills/getting-metadata-api-context/data/metadata_api/ExplainabilityMsgTemplate.json +0 -56
  846. package/skills/getting-metadata-api-context/data/metadata_api/ExpressionSetDefinition.json +0 -496
  847. package/skills/getting-metadata-api-context/data/metadata_api/ExpressionSetMessageToken.json +0 -42
  848. package/skills/getting-metadata-api-context/data/metadata_api/ExpressionSetObjectAlias.json +0 -61
  849. package/skills/getting-metadata-api-context/data/metadata_api/ExternalAIModel.json +0 -54
  850. package/skills/getting-metadata-api-context/data/metadata_api/ExternalAuthIdentityProvider.json +0 -79
  851. package/skills/getting-metadata-api-context/data/metadata_api/ExternalClientAppSettings.json +0 -40
  852. package/skills/getting-metadata-api-context/data/metadata_api/ExternalClientApplication.json +0 -72
  853. package/skills/getting-metadata-api-context/data/metadata_api/ExternalCredential.json +0 -94
  854. package/skills/getting-metadata-api-context/data/metadata_api/ExternalDataConnector.json +0 -51
  855. package/skills/getting-metadata-api-context/data/metadata_api/ExternalDataSource.json +0 -162
  856. package/skills/getting-metadata-api-context/data/metadata_api/ExternalDataTranObject.json +0 -191
  857. package/skills/getting-metadata-api-context/data/metadata_api/ExternalDataTransportFieldTemplate.json +0 -8
  858. package/skills/getting-metadata-api-context/data/metadata_api/ExternalDataTransportObjectTemplate.json +0 -8
  859. package/skills/getting-metadata-api-context/data/metadata_api/ExternalServiceRegistration.json +0 -121
  860. package/skills/getting-metadata-api-context/data/metadata_api/ExternalServicesSettings.json +0 -34
  861. package/skills/getting-metadata-api-context/data/metadata_api/ExtlClntAppCanvasSettings.json +0 -63
  862. package/skills/getting-metadata-api-context/data/metadata_api/ExtlClntAppConfigurablePolicies.json +0 -75
  863. package/skills/getting-metadata-api-context/data/metadata_api/ExtlClntAppGlobalOauthSettings.json +0 -135
  864. package/skills/getting-metadata-api-context/data/metadata_api/ExtlClntAppMobileConfigurablePolicies.json +0 -34
  865. package/skills/getting-metadata-api-context/data/metadata_api/ExtlClntAppMobileSettings.json +0 -35
  866. package/skills/getting-metadata-api-context/data/metadata_api/ExtlClntAppNotificationSettings.json +0 -49
  867. package/skills/getting-metadata-api-context/data/metadata_api/ExtlClntAppOauthConfigurablePolicies.json +0 -153
  868. package/skills/getting-metadata-api-context/data/metadata_api/ExtlClntAppOauthSettings.json +0 -120
  869. package/skills/getting-metadata-api-context/data/metadata_api/ExtlClntAppPushConfigurablePolicies.json +0 -35
  870. package/skills/getting-metadata-api-context/data/metadata_api/ExtlClntAppPushSettings.json +0 -93
  871. package/skills/getting-metadata-api-context/data/metadata_api/ExtlClntAppSamlConfigurablePolicies.json +0 -119
  872. package/skills/getting-metadata-api-context/data/metadata_api/FeatureParameterBoolean.json +0 -47
  873. package/skills/getting-metadata-api-context/data/metadata_api/FeatureParameterDate.json +0 -47
  874. package/skills/getting-metadata-api-context/data/metadata_api/FeatureParameterInteger.json +0 -47
  875. package/skills/getting-metadata-api-context/data/metadata_api/FieldMappingConfig.json +0 -43
  876. package/skills/getting-metadata-api-context/data/metadata_api/FieldRestrictionRule.json +0 -80
  877. package/skills/getting-metadata-api-context/data/metadata_api/FieldServiceSettings.json +0 -226
  878. package/skills/getting-metadata-api-context/data/metadata_api/FieldSet.json +0 -60
  879. package/skills/getting-metadata-api-context/data/metadata_api/FieldSrcTrgtRelationship.json +0 -56
  880. package/skills/getting-metadata-api-context/data/metadata_api/FileUploadAndDownloadSecuritySettings.json +0 -53
  881. package/skills/getting-metadata-api-context/data/metadata_api/FilesConnectSettings.json +0 -40
  882. package/skills/getting-metadata-api-context/data/metadata_api/FlexiPage.json +0 -355
  883. package/skills/getting-metadata-api-context/data/metadata_api/Flow.json +0 -2377
  884. package/skills/getting-metadata-api-context/data/metadata_api/FlowCategory.json +0 -51
  885. package/skills/getting-metadata-api-context/data/metadata_api/FlowDefinition.json +0 -37
  886. package/skills/getting-metadata-api-context/data/metadata_api/FlowSettings.json +0 -124
  887. package/skills/getting-metadata-api-context/data/metadata_api/FlowTest.json +0 -205
  888. package/skills/getting-metadata-api-context/data/metadata_api/FlowValueMap.json +0 -68
  889. package/skills/getting-metadata-api-context/data/metadata_api/Folder.json +0 -50
  890. package/skills/getting-metadata-api-context/data/metadata_api/FolderShare.json +0 -45
  891. package/skills/getting-metadata-api-context/data/metadata_api/ForecastingFilter.json +0 -48
  892. package/skills/getting-metadata-api-context/data/metadata_api/ForecastingFilterCondition.json +0 -62
  893. package/skills/getting-metadata-api-context/data/metadata_api/ForecastingObjectListSettings.json +0 -77
  894. package/skills/getting-metadata-api-context/data/metadata_api/ForecastingSettings.json +0 -303
  895. package/skills/getting-metadata-api-context/data/metadata_api/ForecastingSourceDefinition.json +0 -62
  896. package/skills/getting-metadata-api-context/data/metadata_api/ForecastingType.json +0 -100
  897. package/skills/getting-metadata-api-context/data/metadata_api/ForecastingTypeSource.json +0 -60
  898. package/skills/getting-metadata-api-context/data/metadata_api/FuelType.json +0 -52
  899. package/skills/getting-metadata-api-context/data/metadata_api/FuelTypeSustnUom.json +0 -45
  900. package/skills/getting-metadata-api-context/data/metadata_api/FunctionReference.json +0 -31
  901. package/skills/getting-metadata-api-context/data/metadata_api/FundraisingConfig.json +0 -86
  902. package/skills/getting-metadata-api-context/data/metadata_api/GatewayProviderPaymentMethodType.json +0 -50
  903. package/skills/getting-metadata-api-context/data/metadata_api/GenAiFunction.json +0 -171
  904. package/skills/getting-metadata-api-context/data/metadata_api/GenAiPlanner.json +0 -215
  905. package/skills/getting-metadata-api-context/data/metadata_api/GenAiPlannerBundle.json +0 -220
  906. package/skills/getting-metadata-api-context/data/metadata_api/GenAiPlugin.json +0 -87
  907. package/skills/getting-metadata-api-context/data/metadata_api/GenAiPluginInstructionDef.json +0 -42
  908. package/skills/getting-metadata-api-context/data/metadata_api/GenAiPromptTemplate.json +0 -183
  909. package/skills/getting-metadata-api-context/data/metadata_api/GenAiPromptTemplateActv.json +0 -42
  910. package/skills/getting-metadata-api-context/data/metadata_api/GiftEntryGridTemplate.json +0 -42
  911. package/skills/getting-metadata-api-context/data/metadata_api/GlobalPicklist.json +0 -43
  912. package/skills/getting-metadata-api-context/data/metadata_api/GlobalPicklistValue.json +0 -81
  913. package/skills/getting-metadata-api-context/data/metadata_api/GlobalValueSet.json +0 -46
  914. package/skills/getting-metadata-api-context/data/metadata_api/GlobalValueSetTranslation.json +0 -44
  915. package/skills/getting-metadata-api-context/data/metadata_api/GoogleAppsSettings.json +0 -56
  916. package/skills/getting-metadata-api-context/data/metadata_api/Group.json +0 -46
  917. package/skills/getting-metadata-api-context/data/metadata_api/HighVelocitySalesSettings.json +0 -96
  918. package/skills/getting-metadata-api-context/data/metadata_api/HistoryRetentionPolicy.json +0 -41
  919. package/skills/getting-metadata-api-context/data/metadata_api/HomePageComponent.json +0 -66
  920. package/skills/getting-metadata-api-context/data/metadata_api/HomePageLayout.json +0 -40
  921. package/skills/getting-metadata-api-context/data/metadata_api/IPAddressRange.json +0 -60
  922. package/skills/getting-metadata-api-context/data/metadata_api/IdeasSettings.json +0 -52
  923. package/skills/getting-metadata-api-context/data/metadata_api/IdentityProviderSettings.json +0 -39
  924. package/skills/getting-metadata-api-context/data/metadata_api/IdentityVerificationProcDef.json +0 -173
  925. package/skills/getting-metadata-api-context/data/metadata_api/IdentityVerificationProcDtl.json +0 -136
  926. package/skills/getting-metadata-api-context/data/metadata_api/IdentityVerificationProcFld.json +0 -76
  927. package/skills/getting-metadata-api-context/data/metadata_api/IframeWhiteListUrlSettings.json +0 -46
  928. package/skills/getting-metadata-api-context/data/metadata_api/InboundCertificate.json +0 -48
  929. package/skills/getting-metadata-api-context/data/metadata_api/InboundNetworkConnection.json +0 -72
  930. package/skills/getting-metadata-api-context/data/metadata_api/IncidentMgmtSettings.json +0 -140
  931. package/skills/getting-metadata-api-context/data/metadata_api/Index.json +0 -48
  932. package/skills/getting-metadata-api-context/data/metadata_api/IndustriesEinsteinFeatureSettings.json +0 -34
  933. package/skills/getting-metadata-api-context/data/metadata_api/IndustriesLoyaltySettings.json +0 -108
  934. package/skills/getting-metadata-api-context/data/metadata_api/IndustriesPricingSettings.json +0 -61
  935. package/skills/getting-metadata-api-context/data/metadata_api/IndustriesRatingSettings.json +0 -40
  936. package/skills/getting-metadata-api-context/data/metadata_api/IndustriesSettings.json +0 -731
  937. package/skills/getting-metadata-api-context/data/metadata_api/IndustriesUnifiedInventorySettings.json +0 -40
  938. package/skills/getting-metadata-api-context/data/metadata_api/InsPlcyLimitConsumptionRule.json +0 -46
  939. package/skills/getting-metadata-api-context/data/metadata_api/InstalledPackage.json +0 -46
  940. package/skills/getting-metadata-api-context/data/metadata_api/IntegArtifactDef.json +0 -10
  941. package/skills/getting-metadata-api-context/data/metadata_api/IntegrationProviderDef.json +0 -155
  942. package/skills/getting-metadata-api-context/data/metadata_api/InterestTaggingSettings.json +0 -32
  943. package/skills/getting-metadata-api-context/data/metadata_api/InternalDataConnector.json +0 -8
  944. package/skills/getting-metadata-api-context/data/metadata_api/InvLatePymntRiskCalcSettings.json +0 -32
  945. package/skills/getting-metadata-api-context/data/metadata_api/InventorySettings.json +0 -36
  946. package/skills/getting-metadata-api-context/data/metadata_api/InvocableActionExtension.json +0 -84
  947. package/skills/getting-metadata-api-context/data/metadata_api/InvocableActionSettings.json +0 -28
  948. package/skills/getting-metadata-api-context/data/metadata_api/KeywordList.json +0 -51
  949. package/skills/getting-metadata-api-context/data/metadata_api/KnowledgeSettings.json +0 -280
  950. package/skills/getting-metadata-api-context/data/metadata_api/LanguageSettings.json +0 -68
  951. package/skills/getting-metadata-api-context/data/metadata_api/Layout.json +0 -659
  952. package/skills/getting-metadata-api-context/data/metadata_api/LeadConfigSettings.json +0 -64
  953. package/skills/getting-metadata-api-context/data/metadata_api/LeadConvertSettings.json +0 -71
  954. package/skills/getting-metadata-api-context/data/metadata_api/LearningItemType.json +0 -65
  955. package/skills/getting-metadata-api-context/data/metadata_api/Letterhead.json +0 -119
  956. package/skills/getting-metadata-api-context/data/metadata_api/LightningBolt.json +0 -103
  957. package/skills/getting-metadata-api-context/data/metadata_api/LightningComponentBundle.json +0 -109
  958. package/skills/getting-metadata-api-context/data/metadata_api/LightningExperienceSettings.json +0 -191
  959. package/skills/getting-metadata-api-context/data/metadata_api/LightningExperienceTheme.json +0 -54
  960. package/skills/getting-metadata-api-context/data/metadata_api/LightningMessageChannel.json +0 -63
  961. package/skills/getting-metadata-api-context/data/metadata_api/LightningOnboardingConfig.json +0 -62
  962. package/skills/getting-metadata-api-context/data/metadata_api/LightningTypeBundle.json +0 -88
  963. package/skills/getting-metadata-api-context/data/metadata_api/ListMetadataQuery.json +0 -10
  964. package/skills/getting-metadata-api-context/data/metadata_api/ListView.json +0 -86
  965. package/skills/getting-metadata-api-context/data/metadata_api/LiveAgentSettings.json +0 -44
  966. package/skills/getting-metadata-api-context/data/metadata_api/LiveChatAgentConfig.json +0 -188
  967. package/skills/getting-metadata-api-context/data/metadata_api/LiveChatButton.json +0 -188
  968. package/skills/getting-metadata-api-context/data/metadata_api/LiveChatDeployment.json +0 -81
  969. package/skills/getting-metadata-api-context/data/metadata_api/LiveChatSensitiveDataRule.json +0 -56
  970. package/skills/getting-metadata-api-context/data/metadata_api/LiveMessageSettings.json +0 -36
  971. package/skills/getting-metadata-api-context/data/metadata_api/LoyaltyProgramSetup.json +0 -297
  972. package/skills/getting-metadata-api-context/data/metadata_api/MLDataDefinition.json +0 -146
  973. package/skills/getting-metadata-api-context/data/metadata_api/MLPredictionDefinition.json +0 -67
  974. package/skills/getting-metadata-api-context/data/metadata_api/MacroSettings.json +0 -36
  975. package/skills/getting-metadata-api-context/data/metadata_api/MailMergeSettings.json +0 -36
  976. package/skills/getting-metadata-api-context/data/metadata_api/ManagedContentType.json +0 -86
  977. package/skills/getting-metadata-api-context/data/metadata_api/ManagedEventSubscription.json +0 -52
  978. package/skills/getting-metadata-api-context/data/metadata_api/ManagedTopics.json +0 -57
  979. package/skills/getting-metadata-api-context/data/metadata_api/MapAndLocationSettings.json +0 -34
  980. package/skills/getting-metadata-api-context/data/metadata_api/MarketSegmentDefinition.json +0 -58
  981. package/skills/getting-metadata-api-context/data/metadata_api/MarketingAppExtension.json +0 -139
  982. package/skills/getting-metadata-api-context/data/metadata_api/MatchingRule.json +0 -69
  983. package/skills/getting-metadata-api-context/data/metadata_api/MeetingsSettings.json +0 -36
  984. package/skills/getting-metadata-api-context/data/metadata_api/MessagingChannel.json +0 -278
  985. package/skills/getting-metadata-api-context/data/metadata_api/MetadataWithContent.json +0 -24
  986. package/skills/getting-metadata-api-context/data/metadata_api/Metadata_Type_Limits.json +0 -8
  987. package/skills/getting-metadata-api-context/data/metadata_api/MfgProgramTemplate.json +0 -88
  988. package/skills/getting-metadata-api-context/data/metadata_api/MfgServiceConsoleSettings.json +0 -32
  989. package/skills/getting-metadata-api-context/data/metadata_api/MilestoneType.json +0 -36
  990. package/skills/getting-metadata-api-context/data/metadata_api/MktCalcInsightObjectDef.json +0 -54
  991. package/skills/getting-metadata-api-context/data/metadata_api/MktDataTranObject.json +0 -99
  992. package/skills/getting-metadata-api-context/data/metadata_api/MlDomain.json +0 -136
  993. package/skills/getting-metadata-api-context/data/metadata_api/MobSecurityCertPinConfig.json +0 -76
  994. package/skills/getting-metadata-api-context/data/metadata_api/MobileApplicationDetail.json +0 -71
  995. package/skills/getting-metadata-api-context/data/metadata_api/MobileSecurityAssignment.json +0 -44
  996. package/skills/getting-metadata-api-context/data/metadata_api/MobileSecurityPolicy.json +0 -75
  997. package/skills/getting-metadata-api-context/data/metadata_api/MobileSettings.json +0 -121
  998. package/skills/getting-metadata-api-context/data/metadata_api/ModerationRule.json +0 -99
  999. package/skills/getting-metadata-api-context/data/metadata_api/MutingPermissionSet.json +0 -33
  1000. package/skills/getting-metadata-api-context/data/metadata_api/MyDomainDiscoverableLogin.json +0 -41
  1001. package/skills/getting-metadata-api-context/data/metadata_api/MyDomainSettings.json +0 -140
  1002. package/skills/getting-metadata-api-context/data/metadata_api/NameSettings.json +0 -40
  1003. package/skills/getting-metadata-api-context/data/metadata_api/NamedCredential.json +0 -205
  1004. package/skills/getting-metadata-api-context/data/metadata_api/NamedFilter.json +0 -89
  1005. package/skills/getting-metadata-api-context/data/metadata_api/NavigationMenu.json +0 -101
  1006. package/skills/getting-metadata-api-context/data/metadata_api/Network.json +0 -606
  1007. package/skills/getting-metadata-api-context/data/metadata_api/NetworkBranding.json +0 -117
  1008. package/skills/getting-metadata-api-context/data/metadata_api/NotificationTypeConfig.json +0 -75
  1009. package/skills/getting-metadata-api-context/data/metadata_api/NotificationsSettings.json +0 -40
  1010. package/skills/getting-metadata-api-context/data/metadata_api/OauthCustomScope.json +0 -56
  1011. package/skills/getting-metadata-api-context/data/metadata_api/OauthOidcSettings.json +0 -52
  1012. package/skills/getting-metadata-api-context/data/metadata_api/OauthTokenExchangeHandler.json +0 -119
  1013. package/skills/getting-metadata-api-context/data/metadata_api/ObjectHierarchyRelationship.json +0 -108
  1014. package/skills/getting-metadata-api-context/data/metadata_api/ObjectLinkingSettings.json +0 -32
  1015. package/skills/getting-metadata-api-context/data/metadata_api/ObjectSourceTargetMap.json +0 -85
  1016. package/skills/getting-metadata-api-context/data/metadata_api/OcrSampleDocument.json +0 -158
  1017. package/skills/getting-metadata-api-context/data/metadata_api/OcrTemplate.json +0 -180
  1018. package/skills/getting-metadata-api-context/data/metadata_api/OmniChannelSettings.json +0 -48
  1019. package/skills/getting-metadata-api-context/data/metadata_api/OmniExtTrackingDef.json +0 -66
  1020. package/skills/getting-metadata-api-context/data/metadata_api/OmniInteractionAccessConfig.json +0 -90
  1021. package/skills/getting-metadata-api-context/data/metadata_api/OmniInteractionConfig.json +0 -37
  1022. package/skills/getting-metadata-api-context/data/metadata_api/OmniScript.json +0 -204
  1023. package/skills/getting-metadata-api-context/data/metadata_api/OmniSupervisorConfig.json +0 -156
  1024. package/skills/getting-metadata-api-context/data/metadata_api/OmniTrackingGroup.json +0 -77
  1025. package/skills/getting-metadata-api-context/data/metadata_api/OnboardingDataObjectGroup.json +0 -131
  1026. package/skills/getting-metadata-api-context/data/metadata_api/OpportunityInsightsSettings.json +0 -30
  1027. package/skills/getting-metadata-api-context/data/metadata_api/OpportunityScoreSettings.json +0 -32
  1028. package/skills/getting-metadata-api-context/data/metadata_api/OpportunitySettings.json +0 -132
  1029. package/skills/getting-metadata-api-context/data/metadata_api/OrchestrationPlanCtxMapping.json +0 -63
  1030. package/skills/getting-metadata-api-context/data/metadata_api/OrderManagementSettings.json +0 -52
  1031. package/skills/getting-metadata-api-context/data/metadata_api/OrderSettings.json +0 -60
  1032. package/skills/getting-metadata-api-context/data/metadata_api/OrgPreferenceSettings.json +0 -43
  1033. package/skills/getting-metadata-api-context/data/metadata_api/OrgSettings.json +0 -40
  1034. package/skills/getting-metadata-api-context/data/metadata_api/OutboundNetworkConnection.json +0 -71
  1035. package/skills/getting-metadata-api-context/data/metadata_api/OwnerSharingRule.json +0 -206
  1036. package/skills/getting-metadata-api-context/data/metadata_api/Package.json +0 -19
  1037. package/skills/getting-metadata-api-context/data/metadata_api/PardotEinsteinSettings.json +0 -36
  1038. package/skills/getting-metadata-api-context/data/metadata_api/PardotSettings.json +0 -72
  1039. package/skills/getting-metadata-api-context/data/metadata_api/ParticipantRole.json +0 -48
  1040. package/skills/getting-metadata-api-context/data/metadata_api/PartyDataModelSettings.json +0 -40
  1041. package/skills/getting-metadata-api-context/data/metadata_api/PathAssistant.json +0 -74
  1042. package/skills/getting-metadata-api-context/data/metadata_api/PathAssistantSettings.json +0 -40
  1043. package/skills/getting-metadata-api-context/data/metadata_api/PaymentGatewayProvider.json +0 -50
  1044. package/skills/getting-metadata-api-context/data/metadata_api/PaymentsSettings.json +0 -32
  1045. package/skills/getting-metadata-api-context/data/metadata_api/PermissionSet.json +0 -372
  1046. package/skills/getting-metadata-api-context/data/metadata_api/PermissionSetGroup.json +0 -57
  1047. package/skills/getting-metadata-api-context/data/metadata_api/PermissionSetLicenseDefinition.json +0 -58
  1048. package/skills/getting-metadata-api-context/data/metadata_api/PersonAccountOwnerPowerUser.json +0 -38
  1049. package/skills/getting-metadata-api-context/data/metadata_api/Picklist.json +0 -43
  1050. package/skills/getting-metadata-api-context/data/metadata_api/PicklistSettings.json +0 -32
  1051. package/skills/getting-metadata-api-context/data/metadata_api/PipelineInspMetricConfig.json +0 -48
  1052. package/skills/getting-metadata-api-context/data/metadata_api/PlatformCachePartition.json +0 -79
  1053. package/skills/getting-metadata-api-context/data/metadata_api/PlatformEncryptionSettings.json +0 -51
  1054. package/skills/getting-metadata-api-context/data/metadata_api/PlatformEventChannel.json +0 -56
  1055. package/skills/getting-metadata-api-context/data/metadata_api/PlatformEventChannelMember.json +0 -71
  1056. package/skills/getting-metadata-api-context/data/metadata_api/PlatformEventMigration.json +0 -39
  1057. package/skills/getting-metadata-api-context/data/metadata_api/PlatformEventSettings.json +0 -32
  1058. package/skills/getting-metadata-api-context/data/metadata_api/PlatformEventSubscriberConfig.json +0 -58
  1059. package/skills/getting-metadata-api-context/data/metadata_api/Portal.json +0 -137
  1060. package/skills/getting-metadata-api-context/data/metadata_api/PortalDelegablePermissionSet.json +0 -48
  1061. package/skills/getting-metadata-api-context/data/metadata_api/PostTemplate.json +0 -47
  1062. package/skills/getting-metadata-api-context/data/metadata_api/PredictionBuilderSettings.json +0 -36
  1063. package/skills/getting-metadata-api-context/data/metadata_api/PresenceDeclineReason.json +0 -32
  1064. package/skills/getting-metadata-api-context/data/metadata_api/PresenceUserConfig.json +0 -122
  1065. package/skills/getting-metadata-api-context/data/metadata_api/PricingActionParameters.json +0 -64
  1066. package/skills/getting-metadata-api-context/data/metadata_api/PricingRecipe.json +0 -117
  1067. package/skills/getting-metadata-api-context/data/metadata_api/PrivacySettings.json +0 -80
  1068. package/skills/getting-metadata-api-context/data/metadata_api/ProcessFlowMigration.json +0 -58
  1069. package/skills/getting-metadata-api-context/data/metadata_api/ProductAttributeSet.json +0 -33
  1070. package/skills/getting-metadata-api-context/data/metadata_api/ProductSettings.json +0 -44
  1071. package/skills/getting-metadata-api-context/data/metadata_api/Profile.json +0 -492
  1072. package/skills/getting-metadata-api-context/data/metadata_api/ProfileActionOverride.json +0 -48
  1073. package/skills/getting-metadata-api-context/data/metadata_api/ProfilePasswordPolicy.json +0 -80
  1074. package/skills/getting-metadata-api-context/data/metadata_api/ProfileSearchLayouts.json +0 -32
  1075. package/skills/getting-metadata-api-context/data/metadata_api/ProfileSessionSetting.json +0 -55
  1076. package/skills/getting-metadata-api-context/data/metadata_api/Prompt.json +0 -255
  1077. package/skills/getting-metadata-api-context/data/metadata_api/PublicKeyCertificate.json +0 -50
  1078. package/skills/getting-metadata-api-context/data/metadata_api/PublicKeyCertificateSet.json +0 -65
  1079. package/skills/getting-metadata-api-context/data/metadata_api/Queue.json +0 -123
  1080. package/skills/getting-metadata-api-context/data/metadata_api/QueueRoutingConfig.json +0 -96
  1081. package/skills/getting-metadata-api-context/data/metadata_api/QuickAction.json +0 -175
  1082. package/skills/getting-metadata-api-context/data/metadata_api/QuoteSettings.json +0 -36
  1083. package/skills/getting-metadata-api-context/data/metadata_api/ReadResult.json +0 -16
  1084. package/skills/getting-metadata-api-context/data/metadata_api/RealTimeEventSettings.json +0 -45
  1085. package/skills/getting-metadata-api-context/data/metadata_api/RecommendationStrategy.json +0 -327
  1086. package/skills/getting-metadata-api-context/data/metadata_api/RecordActionDeployment.json +0 -184
  1087. package/skills/getting-metadata-api-context/data/metadata_api/RecordAggregationDefinition.json +0 -148
  1088. package/skills/getting-metadata-api-context/data/metadata_api/RecordAlertCategory.json +0 -42
  1089. package/skills/getting-metadata-api-context/data/metadata_api/RecordPageSettings.json +0 -40
  1090. package/skills/getting-metadata-api-context/data/metadata_api/RecordType.json +0 -68
  1091. package/skills/getting-metadata-api-context/data/metadata_api/RedirectWhitelistUrl.json +0 -26
  1092. package/skills/getting-metadata-api-context/data/metadata_api/ReferencedDashboard.json +0 -55
  1093. package/skills/getting-metadata-api-context/data/metadata_api/RegisteredExternalService.json +0 -72
  1094. package/skills/getting-metadata-api-context/data/metadata_api/RelatedRecordAssocCriteria.json +0 -75
  1095. package/skills/getting-metadata-api-context/data/metadata_api/RelationshipGraphDefinition.json +0 -63
  1096. package/skills/getting-metadata-api-context/data/metadata_api/RemoteSiteSetting.json +0 -51
  1097. package/skills/getting-metadata-api-context/data/metadata_api/Report.json +0 -715
  1098. package/skills/getting-metadata-api-context/data/metadata_api/ReportType.json +0 -118
  1099. package/skills/getting-metadata-api-context/data/metadata_api/RestrictionRule.json +0 -71
  1100. package/skills/getting-metadata-api-context/data/metadata_api/RetailExecutionSettings.json +0 -40
  1101. package/skills/getting-metadata-api-context/data/metadata_api/RetrievalSummaryDefinition.json +0 -76
  1102. package/skills/getting-metadata-api-context/data/metadata_api/RetrieveRequest.json +0 -35
  1103. package/skills/getting-metadata-api-context/data/metadata_api/RetrieveResult.json +0 -103
  1104. package/skills/getting-metadata-api-context/data/metadata_api/Role.json +0 -35
  1105. package/skills/getting-metadata-api-context/data/metadata_api/RoleOrTerritory.json +0 -57
  1106. package/skills/getting-metadata-api-context/data/metadata_api/SalesAgreementSettings.json +0 -180
  1107. package/skills/getting-metadata-api-context/data/metadata_api/SalesWorkQueueSettings.json +0 -40
  1108. package/skills/getting-metadata-api-context/data/metadata_api/SamlSsoConfig.json +0 -128
  1109. package/skills/getting-metadata-api-context/data/metadata_api/SandboxSettings.json +0 -32
  1110. package/skills/getting-metadata-api-context/data/metadata_api/SaveResult.json +0 -22
  1111. package/skills/getting-metadata-api-context/data/metadata_api/SchedulingObjective.json +0 -66
  1112. package/skills/getting-metadata-api-context/data/metadata_api/SchedulingRule.json +0 -66
  1113. package/skills/getting-metadata-api-context/data/metadata_api/SchemaSettings.json +0 -44
  1114. package/skills/getting-metadata-api-context/data/metadata_api/Scontrol.json +0 -72
  1115. package/skills/getting-metadata-api-context/data/metadata_api/SearchCustomization.json +0 -120
  1116. package/skills/getting-metadata-api-context/data/metadata_api/SearchLayouts.json +0 -64
  1117. package/skills/getting-metadata-api-context/data/metadata_api/SearchOrgWideObjectConfig.json +0 -61
  1118. package/skills/getting-metadata-api-context/data/metadata_api/SearchSettings.json +0 -155
  1119. package/skills/getting-metadata-api-context/data/metadata_api/SecuritySettings.json +0 -437
  1120. package/skills/getting-metadata-api-context/data/metadata_api/ServiceAISetupDefinition.json +0 -48
  1121. package/skills/getting-metadata-api-context/data/metadata_api/ServiceAISetupField.json +0 -58
  1122. package/skills/getting-metadata-api-context/data/metadata_api/ServiceChannel.json +0 -123
  1123. package/skills/getting-metadata-api-context/data/metadata_api/ServiceCloudVoiceSettings.json +0 -83
  1124. package/skills/getting-metadata-api-context/data/metadata_api/ServicePresenceStatus.json +0 -45
  1125. package/skills/getting-metadata-api-context/data/metadata_api/ServiceProcess.json +0 -141
  1126. package/skills/getting-metadata-api-context/data/metadata_api/ServiceSetupAssistantSettings.json +0 -32
  1127. package/skills/getting-metadata-api-context/data/metadata_api/SessionHeader.json +0 -17
  1128. package/skills/getting-metadata-api-context/data/metadata_api/SharedTo.json +0 -105
  1129. package/skills/getting-metadata-api-context/data/metadata_api/SharingBaseRule.json +0 -60
  1130. package/skills/getting-metadata-api-context/data/metadata_api/SharingReason.json +0 -34
  1131. package/skills/getting-metadata-api-context/data/metadata_api/SharingRecalculation.json +0 -29
  1132. package/skills/getting-metadata-api-context/data/metadata_api/SharingRules.json +0 -186
  1133. package/skills/getting-metadata-api-context/data/metadata_api/SharingSet.json +0 -78
  1134. package/skills/getting-metadata-api-context/data/metadata_api/SharingSettings.json +0 -92
  1135. package/skills/getting-metadata-api-context/data/metadata_api/SiteDotCom.json +0 -37
  1136. package/skills/getting-metadata-api-context/data/metadata_api/SiteSettings.json +0 -60
  1137. package/skills/getting-metadata-api-context/data/metadata_api/Skill.json +0 -69
  1138. package/skills/getting-metadata-api-context/data/metadata_api/SocialCustomerServiceSettings.json +0 -61
  1139. package/skills/getting-metadata-api-context/data/metadata_api/SocialProfileSettings.json +0 -35
  1140. package/skills/getting-metadata-api-context/data/metadata_api/SourceTrackingSettings.json +0 -32
  1141. package/skills/getting-metadata-api-context/data/metadata_api/StageAssignment.json +0 -113
  1142. package/skills/getting-metadata-api-context/data/metadata_api/StageDefinition.json +0 -237
  1143. package/skills/getting-metadata-api-context/data/metadata_api/StandardValueSet.json +0 -41
  1144. package/skills/getting-metadata-api-context/data/metadata_api/StandardValueSetTranslation.json +0 -32
  1145. package/skills/getting-metadata-api-context/data/metadata_api/StaticResource.json +0 -49
  1146. package/skills/getting-metadata-api-context/data/metadata_api/StreamingAppDataConnector.json +0 -51
  1147. package/skills/getting-metadata-api-context/data/metadata_api/SubscriptionManagementSettings.json +0 -56
  1148. package/skills/getting-metadata-api-context/data/metadata_api/SurveySettings.json +0 -44
  1149. package/skills/getting-metadata-api-context/data/metadata_api/SustainabilityUom.json +0 -61
  1150. package/skills/getting-metadata-api-context/data/metadata_api/SustnUomConversion.json +0 -58
  1151. package/skills/getting-metadata-api-context/data/metadata_api/SvcCatalogCategory.json +0 -54
  1152. package/skills/getting-metadata-api-context/data/metadata_api/SvcCatalogFulfillmentFlow.json +0 -99
  1153. package/skills/getting-metadata-api-context/data/metadata_api/SvcCatalogItemDef.json +0 -202
  1154. package/skills/getting-metadata-api-context/data/metadata_api/SynonymDictionary.json +0 -56
  1155. package/skills/getting-metadata-api-context/data/metadata_api/Tag.json +0 -70
  1156. package/skills/getting-metadata-api-context/data/metadata_api/TagSet.json +0 -47
  1157. package/skills/getting-metadata-api-context/data/metadata_api/Territory.json +0 -39
  1158. package/skills/getting-metadata-api-context/data/metadata_api/Territory2.json +0 -112
  1159. package/skills/getting-metadata-api-context/data/metadata_api/Territory2Model.json +0 -41
  1160. package/skills/getting-metadata-api-context/data/metadata_api/Territory2Rule.json +0 -68
  1161. package/skills/getting-metadata-api-context/data/metadata_api/Territory2Settings.json +0 -111
  1162. package/skills/getting-metadata-api-context/data/metadata_api/Territory2Type.json +0 -42
  1163. package/skills/getting-metadata-api-context/data/metadata_api/TimeSheetTemplate.json +0 -75
  1164. package/skills/getting-metadata-api-context/data/metadata_api/TimelineObjectDefinition.json +0 -48
  1165. package/skills/getting-metadata-api-context/data/metadata_api/TopicsForObjects.json +0 -38
  1166. package/skills/getting-metadata-api-context/data/metadata_api/TrailheadSettings.json +0 -40
  1167. package/skills/getting-metadata-api-context/data/metadata_api/TransactionSecurityPolicy.json +0 -127
  1168. package/skills/getting-metadata-api-context/data/metadata_api/Translations.json +0 -976
  1169. package/skills/getting-metadata-api-context/data/metadata_api/TrialOrgSettings.json +0 -32
  1170. package/skills/getting-metadata-api-context/data/metadata_api/UIBundle.json +0 -54
  1171. package/skills/getting-metadata-api-context/data/metadata_api/UIObjectRelationConfig.json +0 -101
  1172. package/skills/getting-metadata-api-context/data/metadata_api/UiFormatSpecificationSet.json +0 -103
  1173. package/skills/getting-metadata-api-context/data/metadata_api/UiPreviewMessageTabDef.json +0 -70
  1174. package/skills/getting-metadata-api-context/data/metadata_api/UpsertResult.json +0 -25
  1175. package/skills/getting-metadata-api-context/data/metadata_api/UserAccessPolicy.json +0 -120
  1176. package/skills/getting-metadata-api-context/data/metadata_api/UserAuthCertificate.json +0 -57
  1177. package/skills/getting-metadata-api-context/data/metadata_api/UserCriteria.json +0 -48
  1178. package/skills/getting-metadata-api-context/data/metadata_api/UserEngagementSettings.json +0 -136
  1179. package/skills/getting-metadata-api-context/data/metadata_api/UserInterfaceSettings.json +0 -96
  1180. package/skills/getting-metadata-api-context/data/metadata_api/UserManagementSettings.json +0 -108
  1181. package/skills/getting-metadata-api-context/data/metadata_api/UserProfileSearchScope.json +0 -8
  1182. package/skills/getting-metadata-api-context/data/metadata_api/UserProvisioningConfig.json +0 -72
  1183. package/skills/getting-metadata-api-context/data/metadata_api/ValidationRule.json +0 -51
  1184. package/skills/getting-metadata-api-context/data/metadata_api/VirtualVisitConfig.json +0 -97
  1185. package/skills/getting-metadata-api-context/data/metadata_api/VoiceSettings.json +0 -68
  1186. package/skills/getting-metadata-api-context/data/metadata_api/WarrantyLifeCycleMgmtSettings.json +0 -32
  1187. package/skills/getting-metadata-api-context/data/metadata_api/WaveAnalyticAssetCollection.json +0 -73
  1188. package/skills/getting-metadata-api-context/data/metadata_api/WaveApplication.json +0 -56
  1189. package/skills/getting-metadata-api-context/data/metadata_api/WaveComponent.json +0 -46
  1190. package/skills/getting-metadata-api-context/data/metadata_api/WaveDashboard.json +0 -50
  1191. package/skills/getting-metadata-api-context/data/metadata_api/WaveDataflow.json +0 -45
  1192. package/skills/getting-metadata-api-context/data/metadata_api/WaveDataset.json +0 -50
  1193. package/skills/getting-metadata-api-context/data/metadata_api/WaveLens.json +0 -59
  1194. package/skills/getting-metadata-api-context/data/metadata_api/WaveRecipe.json +0 -58
  1195. package/skills/getting-metadata-api-context/data/metadata_api/WaveTemplateBundle.json +0 -37
  1196. package/skills/getting-metadata-api-context/data/metadata_api/WaveXmd.json +0 -567
  1197. package/skills/getting-metadata-api-context/data/metadata_api/WebLink.json +0 -117
  1198. package/skills/getting-metadata-api-context/data/metadata_api/WebStoreBundle.json +0 -10
  1199. package/skills/getting-metadata-api-context/data/metadata_api/WebStoreTemplate.json +0 -166
  1200. package/skills/getting-metadata-api-context/data/metadata_api/WorkDotComSettings.json +0 -76
  1201. package/skills/getting-metadata-api-context/data/metadata_api/WorkSkillRouting.json +0 -76
  1202. package/skills/getting-metadata-api-context/data/metadata_api/Workflow.json +0 -415
  1203. package/skills/getting-metadata-api-context/data/metadata_api/WorkforceEngagementSettings.json +0 -56
  1204. package/skills/getting-metadata-api-context/examples/README.md +0 -169
  1205. package/skills/getting-metadata-api-context/examples/bash_section_loading.sh +0 -142
  1206. package/skills/getting-metadata-api-context/examples/javascript_section_loading.js +0 -162
  1207. package/skills/getting-metadata-api-context/examples/python_section_loading.py +0 -112
  1208. package/skills/getting-metadata-api-context/references/metadata_index_table.md +0 -654
  1209. package/skills/getting-metadata-api-context/references/usage_guide.md +0 -420
  1210. package/skills/handling-sf-data/CREDITS.md +0 -5
  1211. package/skills/handling-sf-data/README.md +0 -112
  1212. package/skills/handling-sf-data/SKILL.md +0 -234
  1213. package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +0 -293
  1214. package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +0 -208
  1215. package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +0 -219
  1216. package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +0 -324
  1217. package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +0 -319
  1218. package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +0 -240
  1219. package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +0 -311
  1220. package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +0 -266
  1221. package/skills/handling-sf-data/assets/csv/account-import.csv +0 -11
  1222. package/skills/handling-sf-data/assets/csv/contact-import.csv +0 -11
  1223. package/skills/handling-sf-data/assets/csv/custom-object-import.csv +0 -11
  1224. package/skills/handling-sf-data/assets/csv/opportunity-import.csv +0 -11
  1225. package/skills/handling-sf-data/assets/factories/account-factory.apex +0 -165
  1226. package/skills/handling-sf-data/assets/factories/case-factory.apex +0 -237
  1227. package/skills/handling-sf-data/assets/factories/contact-factory.apex +0 -168
  1228. package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +0 -260
  1229. package/skills/handling-sf-data/assets/factories/event-factory.apex +0 -275
  1230. package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +0 -372
  1231. package/skills/handling-sf-data/assets/factories/lead-factory.apex +0 -190
  1232. package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +0 -206
  1233. package/skills/handling-sf-data/assets/factories/task-factory.apex +0 -246
  1234. package/skills/handling-sf-data/assets/factories/user-factory.apex +0 -278
  1235. package/skills/handling-sf-data/assets/json/account-contact-tree.json +0 -130
  1236. package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +0 -110
  1237. package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +0 -188
  1238. package/skills/handling-sf-data/assets/soql/aggregate.soql +0 -226
  1239. package/skills/handling-sf-data/assets/soql/child-to-parent.soql +0 -162
  1240. package/skills/handling-sf-data/assets/soql/parent-to-child.soql +0 -153
  1241. package/skills/handling-sf-data/assets/soql/polymorphic.soql +0 -198
  1242. package/skills/handling-sf-data/assets/soql/subquery.soql +0 -287
  1243. package/skills/handling-sf-data/references/anonymous-apex-guide.md +0 -98
  1244. package/skills/handling-sf-data/references/bulk-operations-guide.md +0 -94
  1245. package/skills/handling-sf-data/references/bulk-testing-example.md +0 -194
  1246. package/skills/handling-sf-data/references/cleanup-rollback-example.md +0 -322
  1247. package/skills/handling-sf-data/references/cleanup-rollback-guide.md +0 -84
  1248. package/skills/handling-sf-data/references/crud-workflow-example.md +0 -183
  1249. package/skills/handling-sf-data/references/governor-limits-reference.md +0 -74
  1250. package/skills/handling-sf-data/references/orchestration.md +0 -174
  1251. package/skills/handling-sf-data/references/relationship-query-examples.md +0 -249
  1252. package/skills/handling-sf-data/references/sf-cli-data-commands.md +0 -158
  1253. package/skills/handling-sf-data/references/soql-relationship-guide.md +0 -84
  1254. package/skills/handling-sf-data/references/test-data-best-practices.md +0 -104
  1255. package/skills/handling-sf-data/references/test-data-factory-usage.md +0 -290
  1256. package/skills/handling-sf-data/references/test-data-patterns.md +0 -98
  1257. package/skills/handling-sf-data/scripts/soql_validator.py +0 -292
  1258. package/skills/handling-sf-data/scripts/validate_data_operation.py +0 -379
  1259. package/skills/harmonizing-datacloud/CREDITS.md +0 -3
  1260. package/skills/harmonizing-datacloud/README.md +0 -31
  1261. package/skills/harmonizing-datacloud/SKILL.md +0 -116
  1262. package/skills/implementing-ui-bundle-agentforce-conversation-client/SKILL.md +0 -280
  1263. package/skills/implementing-ui-bundle-agentforce-conversation-client/references/agent-id-resolution.md +0 -46
  1264. package/skills/implementing-ui-bundle-agentforce-conversation-client/references/constraints.md +0 -134
  1265. package/skills/implementing-ui-bundle-agentforce-conversation-client/references/examples.md +0 -132
  1266. package/skills/implementing-ui-bundle-agentforce-conversation-client/references/style-tokens.md +0 -260
  1267. package/skills/implementing-ui-bundle-agentforce-conversation-client/references/troubleshooting.md +0 -57
  1268. package/skills/implementing-ui-bundle-file-upload/SKILL.md +0 -398
  1269. package/skills/integrating-b2b-commerce-open-code-components/SKILL.md +0 -165
  1270. package/skills/investigating-agentforce-architecture/README.md +0 -156
  1271. package/skills/investigating-agentforce-architecture/SKILL.md +0 -230
  1272. package/skills/investigating-agentforce-architecture/assets/cli/describe_sobject.yaml +0 -16
  1273. package/skills/investigating-agentforce-architecture/assets/cli/describe_tooling_sobject.yaml +0 -17
  1274. package/skills/investigating-agentforce-architecture/assets/cli/list_metadata_genaiprompttemplate.yaml +0 -17
  1275. package/skills/investigating-agentforce-architecture/assets/cli/org_display.yaml +0 -15
  1276. package/skills/investigating-agentforce-architecture/assets/cli/retrieve_genai_plugin.yaml +0 -18
  1277. package/skills/investigating-agentforce-architecture/assets/cli/show_access_token.yaml +0 -27
  1278. package/skills/investigating-agentforce-architecture/assets/mermaid/action_tree.mmd +0 -20
  1279. package/skills/investigating-agentforce-architecture/assets/mermaid/data_flow.mmd +0 -19
  1280. package/skills/investigating-agentforce-architecture/assets/mermaid/dependency_graph.mmd +0 -19
  1281. package/skills/investigating-agentforce-architecture/assets/mermaid/invocation_sequence.mmd +0 -20
  1282. package/skills/investigating-agentforce-architecture/assets/mermaid/planner_state.mmd +0 -18
  1283. package/skills/investigating-agentforce-architecture/assets/soql/apex_class_bodies_by_ids.soql +0 -3
  1284. package/skills/investigating-agentforce-architecture/assets/soql/apex_class_bodies_by_names.soql +0 -3
  1285. package/skills/investigating-agentforce-architecture/assets/soql/bot_definition_details.soql +0 -3
  1286. package/skills/investigating-agentforce-architecture/assets/soql/bot_version_lookup.soql +0 -4
  1287. package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_by_ids.soql +0 -3
  1288. package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_ids_by_names.soql +0 -3
  1289. package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_view_by_durable_ids.soql +0 -4
  1290. package/skills/investigating-agentforce-architecture/assets/soql/flow_metadata_by_id.soql +0 -3
  1291. package/skills/investigating-agentforce-architecture/assets/soql/functions_by_plugins.soql +0 -5
  1292. package/skills/investigating-agentforce-architecture/assets/soql/planner_attrs_by_parent_ids.soql +0 -3
  1293. package/skills/investigating-agentforce-architecture/assets/soql/planner_bundle_functions.soql +0 -3
  1294. package/skills/investigating-agentforce-architecture/assets/soql/planner_definition_by_agent_chain.soql +0 -3
  1295. package/skills/investigating-agentforce-architecture/assets/soql/plugin_functions_by_plugin_ids.soql +0 -3
  1296. package/skills/investigating-agentforce-architecture/assets/soql/plugin_instructions_by_plugin_ids.soql +0 -3
  1297. package/skills/investigating-agentforce-architecture/assets/soql/plugins_by_planner.soql +0 -4
  1298. package/skills/investigating-agentforce-architecture/references/architecture_sections.md +0 -243
  1299. package/skills/investigating-agentforce-architecture/references/contract.json +0 -244
  1300. package/skills/investigating-agentforce-architecture/references/soql_fields.md +0 -512
  1301. package/skills/investigating-agentforce-architecture/scripts/_shared/__init__.py +0 -1
  1302. package/skills/investigating-agentforce-architecture/scripts/_shared/fs_guard.py +0 -329
  1303. package/skills/investigating-agentforce-architecture/scripts/_shared/paths.py +0 -110
  1304. package/skills/investigating-agentforce-architecture/scripts/_shared/runtime.py +0 -59
  1305. package/skills/investigating-agentforce-architecture/scripts/_shared/sql.py +0 -10
  1306. package/skills/investigating-agentforce-architecture/scripts/cache_check.py +0 -234
  1307. package/skills/investigating-agentforce-architecture/scripts/config.py +0 -131
  1308. package/skills/investigating-agentforce-architecture/scripts/fetch_soql.py +0 -689
  1309. package/skills/investigating-agentforce-architecture/scripts/finalize.py +0 -295
  1310. package/skills/investigating-agentforce-architecture/scripts/main.py +0 -2835
  1311. package/skills/investigating-agentforce-architecture/scripts/metadata_listing.py +0 -265
  1312. package/skills/investigating-agentforce-architecture/scripts/parallel_retrieve.py +0 -69
  1313. package/skills/investigating-agentforce-architecture/scripts/parse_bundle.py +0 -215
  1314. package/skills/investigating-agentforce-architecture/scripts/parse_wave.py +0 -845
  1315. package/skills/investigating-agentforce-architecture/scripts/probe_channels.py +0 -302
  1316. package/skills/investigating-agentforce-architecture/scripts/render_architecture.py +0 -1043
  1317. package/skills/investigating-agentforce-architecture/scripts/resolve_bot.py +0 -255
  1318. package/skills/investigating-agentforce-architecture/scripts/resolve_invocation_target.py +0 -130
  1319. package/skills/investigating-agentforce-architecture/scripts/rest_client.py +0 -763
  1320. package/skills/investigating-agentforce-architecture/scripts/retrieve_planner.py +0 -13
  1321. package/skills/investigating-agentforce-architecture/scripts/sf_cli.py +0 -242
  1322. package/skills/investigating-agentforce-architecture/scripts/soql_loader.py +0 -253
  1323. package/skills/investigating-agentforce-architecture/scripts/summarize_tree.py +0 -143
  1324. package/skills/investigating-agentforce-architecture/scripts/tests/__init__.py +0 -0
  1325. package/skills/investigating-agentforce-architecture/scripts/tests/_bootstrap.py +0 -23
  1326. package/skills/investigating-agentforce-architecture/scripts/tests/fixtures/__init__.py +0 -0
  1327. package/skills/investigating-agentforce-architecture/scripts/tests/fixtures/genai_payloads.py +0 -400
  1328. package/skills/investigating-agentforce-architecture/scripts/tests/test_cache_check.py +0 -307
  1329. package/skills/investigating-agentforce-architecture/scripts/tests/test_cache_check_main.py +0 -283
  1330. package/skills/investigating-agentforce-architecture/scripts/tests/test_config.py +0 -115
  1331. package/skills/investigating-agentforce-architecture/scripts/tests/test_end_to_end_fixture.py +0 -651
  1332. package/skills/investigating-agentforce-architecture/scripts/tests/test_finalize.py +0 -278
  1333. package/skills/investigating-agentforce-architecture/scripts/tests/test_flow_children_inflation.py +0 -582
  1334. package/skills/investigating-agentforce-architecture/scripts/tests/test_fs_guard.py +0 -113
  1335. package/skills/investigating-agentforce-architecture/scripts/tests/test_iterative_wave_b.py +0 -478
  1336. package/skills/investigating-agentforce-architecture/scripts/tests/test_main_pipeline.py +0 -3359
  1337. package/skills/investigating-agentforce-architecture/scripts/tests/test_parallel_retrieve.py +0 -131
  1338. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_bundle.py +0 -400
  1339. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave.py +0 -644
  1340. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_classifiers.py +0 -224
  1341. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_helpers.py +0 -380
  1342. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_main.py +0 -397
  1343. package/skills/investigating-agentforce-architecture/scripts/tests/test_per_branch_visited.py +0 -244
  1344. package/skills/investigating-agentforce-architecture/scripts/tests/test_probe_channels.py +0 -359
  1345. package/skills/investigating-agentforce-architecture/scripts/tests/test_probe_cli_recipes.py +0 -185
  1346. package/skills/investigating-agentforce-architecture/scripts/tests/test_render_architecture.py +0 -810
  1347. package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_bot.py +0 -203
  1348. package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_creds.py +0 -157
  1349. package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_invocation_target.py +0 -145
  1350. package/skills/investigating-agentforce-architecture/scripts/tests/test_rest_client.py +0 -1253
  1351. package/skills/investigating-agentforce-architecture/scripts/tests/test_runtime_override.py +0 -100
  1352. package/skills/investigating-agentforce-architecture/scripts/tests/test_sf_cli.py +0 -261
  1353. package/skills/investigating-agentforce-architecture/scripts/tests/test_signature_stamping.py +0 -466
  1354. package/skills/investigating-agentforce-architecture/scripts/tests/test_soql_loader.py +0 -501
  1355. package/skills/investigating-agentforce-architecture/scripts/tests/test_summarize_tree.py +0 -241
  1356. package/skills/investigating-agentforce-architecture/scripts/tests/test_write_emit_ctx.py +0 -480
  1357. package/skills/investigating-agentforce-architecture/tools/emit_env.py +0 -157
  1358. package/skills/investigating-agentforce-architecture/tools/emit_result.py +0 -262
  1359. package/skills/investigating-agentforce-architecture/tools/sanitize.py +0 -33
  1360. package/skills/investigating-agentforce-architecture/tools/write_emit_ctx.py +0 -332
  1361. package/skills/investigating-agentforce-d360/README.md +0 -123
  1362. package/skills/investigating-agentforce-d360/SKILL.md +0 -163
  1363. package/skills/investigating-agentforce-d360/assets/dc/app_generation.sql +0 -51
  1364. package/skills/investigating-agentforce-d360/assets/dc/content_category.sql +0 -44
  1365. package/skills/investigating-agentforce-d360/assets/dc/content_quality.sql +0 -41
  1366. package/skills/investigating-agentforce-d360/assets/dc/discover_sessions.sql +0 -36
  1367. package/skills/investigating-agentforce-d360/assets/dc/feedback.sql +0 -47
  1368. package/skills/investigating-agentforce-d360/assets/dc/feedback_details.sql +0 -38
  1369. package/skills/investigating-agentforce-d360/assets/dc/gateway_records.sql +0 -45
  1370. package/skills/investigating-agentforce-d360/assets/dc/gateway_request_llm.sql +0 -50
  1371. package/skills/investigating-agentforce-d360/assets/dc/gateway_request_metadata.sql +0 -44
  1372. package/skills/investigating-agentforce-d360/assets/dc/gateway_request_tags.sql +0 -42
  1373. package/skills/investigating-agentforce-d360/assets/dc/gateway_requests.sql +0 -89
  1374. package/skills/investigating-agentforce-d360/assets/dc/gateway_responses.sql +0 -43
  1375. package/skills/investigating-agentforce-d360/assets/dc/generations.sql +0 -52
  1376. package/skills/investigating-agentforce-d360/assets/dc/interactions.sql +0 -53
  1377. package/skills/investigating-agentforce-d360/assets/dc/messages.sql +0 -53
  1378. package/skills/investigating-agentforce-d360/assets/dc/messaging_session.sql +0 -37
  1379. package/skills/investigating-agentforce-d360/assets/dc/moment_interactions.sql +0 -34
  1380. package/skills/investigating-agentforce-d360/assets/dc/moments.sql +0 -39
  1381. package/skills/investigating-agentforce-d360/assets/dc/participants.sql +0 -48
  1382. package/skills/investigating-agentforce-d360/assets/dc/sessions.sql +0 -78
  1383. package/skills/investigating-agentforce-d360/assets/dc/steps.sql +0 -64
  1384. package/skills/investigating-agentforce-d360/assets/dc/tag_associations.sql +0 -46
  1385. package/skills/investigating-agentforce-d360/assets/dc/tag_definition_associations.sql +0 -37
  1386. package/skills/investigating-agentforce-d360/assets/dc/tag_definitions.sql +0 -50
  1387. package/skills/investigating-agentforce-d360/assets/dc/tags.sql +0 -37
  1388. package/skills/investigating-agentforce-d360/assets/dc/telemetry_spans.sql +0 -55
  1389. package/skills/investigating-agentforce-d360/references/artifacts.md +0 -50
  1390. package/skills/investigating-agentforce-d360/references/dc_dmo_fields.md +0 -823
  1391. package/skills/investigating-agentforce-d360/references/dc_pipeline_contract.md +0 -608
  1392. package/skills/investigating-agentforce-d360/scripts/_shared/__init__.py +0 -2
  1393. package/skills/investigating-agentforce-d360/scripts/_shared/cli_override.py +0 -98
  1394. package/skills/investigating-agentforce-d360/scripts/_shared/fs_guard.py +0 -334
  1395. package/skills/investigating-agentforce-d360/scripts/_shared/paths.py +0 -155
  1396. package/skills/investigating-agentforce-d360/scripts/_shared/runtime.py +0 -59
  1397. package/skills/investigating-agentforce-d360/scripts/_shared/sql.py +0 -14
  1398. package/skills/investigating-agentforce-d360/scripts/assemble_dc.py +0 -1624
  1399. package/skills/investigating-agentforce-d360/scripts/config.py +0 -45
  1400. package/skills/investigating-agentforce-d360/scripts/dc.py +0 -188
  1401. package/skills/investigating-agentforce-d360/scripts/discover_sessions.py +0 -556
  1402. package/skills/investigating-agentforce-d360/scripts/fetch_dc.py +0 -1045
  1403. package/skills/investigating-agentforce-d360/scripts/render_dc.py +0 -1750
  1404. package/skills/investigating-agentforce-d360/scripts/resolve_session.py +0 -264
  1405. package/skills/investigating-agentforce-d360/scripts/storage.py +0 -92
  1406. package/skills/investigating-agentforce-d360/scripts/tests/__init__.py +0 -0
  1407. package/skills/investigating-agentforce-d360/scripts/tests/_bootstrap.py +0 -15
  1408. package/skills/investigating-agentforce-d360/scripts/tests/fixtures/__init__.py +0 -0
  1409. package/skills/investigating-agentforce-d360/scripts/tests/fixtures/synthetic_session.py +0 -424
  1410. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_bootstrap_and_mode.py +0 -115
  1411. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_gateway_direct.py +0 -220
  1412. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_gateway_direct_integration.py +0 -158
  1413. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_helpers.py +0 -287
  1414. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_integration.py +0 -247
  1415. package/skills/investigating-agentforce-d360/scripts/tests/test_dc_and_resolve_session.py +0 -433
  1416. package/skills/investigating-agentforce-d360/scripts/tests/test_discover_sessions.py +0 -458
  1417. package/skills/investigating-agentforce-d360/scripts/tests/test_discover_sessions_grep_ci.py +0 -193
  1418. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_helpers.py +0 -266
  1419. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_identity.py +0 -528
  1420. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_main.py +0 -251
  1421. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_waterfall.py +0 -229
  1422. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_waterfall_full.py +0 -283
  1423. package/skills/investigating-agentforce-d360/scripts/tests/test_identity_coherence.py +0 -327
  1424. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_branches.py +0 -256
  1425. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_gateway_direct.py +0 -130
  1426. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_helpers.py +0 -291
  1427. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_integration.py +0 -220
  1428. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_planner_llm_calls.py +0 -284
  1429. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_show_prompts_gating.py +0 -215
  1430. package/skills/investigating-agentforce-d360/scripts/tests/test_resolve_from_disk.py +0 -100
  1431. package/skills/investigating-agentforce-d360/scripts/tests/test_resolve_session_main.py +0 -149
  1432. package/skills/investigating-agentforce-d360/scripts/tests/test_runtime_override.py +0 -104
  1433. package/skills/investigating-agentforce-d360/scripts/tests/test_session_shape.py +0 -95
  1434. package/skills/investigating-agentforce-d360/scripts/tests/test_session_shape_dropped_by_stdm.py +0 -85
  1435. package/skills/managing-cdc-enablement/SKILL.md +0 -164
  1436. package/skills/managing-cdc-enablement/assets/PlatformEventChannel-template.xml +0 -5
  1437. package/skills/managing-cdc-enablement/assets/PlatformEventChannelMember-template.xml +0 -11
  1438. package/skills/managing-cdc-enablement/references/deploy-troubleshooting.md +0 -73
  1439. package/skills/managing-cdc-enablement/references/filter-expressions.md +0 -93
  1440. package/skills/managing-managed-event-subscription/SKILL.md +0 -152
  1441. package/skills/managing-managed-event-subscription/assets/managed-event-subscription-template.xml +0 -20
  1442. package/skills/managing-managed-event-subscription/references/delete-guide.md +0 -57
  1443. package/skills/managing-managed-event-subscription/references/topic-name-formats.md +0 -26
  1444. package/skills/managing-managed-event-subscription/references/update-constraints.md +0 -30
  1445. package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +0 -14
  1446. package/skills/modeling-omnistudio-epc-catalog/README.md +0 -89
  1447. package/skills/modeling-omnistudio-epc-catalog/SKILL.md +0 -394
  1448. package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +0 -402
  1449. package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +0 -43
  1450. package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +0 -8
  1451. package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +0 -233
  1452. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +0 -514
  1453. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +0 -21
  1454. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +0 -649
  1455. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +0 -200
  1456. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +0 -138
  1457. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +0 -54
  1458. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +0 -266
  1459. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +0 -23
  1460. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +0 -54
  1461. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +0 -35
  1462. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +0 -34
  1463. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +0 -21
  1464. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +0 -410
  1465. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +0 -535
  1466. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +0 -35
  1467. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +0 -138
  1468. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +0 -28
  1469. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +0 -23
  1470. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +0 -220
  1471. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +0 -35
  1472. package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +0 -414
  1473. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +0 -382
  1474. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +0 -565
  1475. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +0 -35
  1476. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +0 -104
  1477. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +0 -28
  1478. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +0 -13
  1479. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +0 -106
  1480. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +0 -35
  1481. package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +0 -72
  1482. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +0 -142
  1483. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +0 -377
  1484. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +0 -35
  1485. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +0 -36
  1486. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +0 -8
  1487. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +0 -54
  1488. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +0 -35
  1489. package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +0 -34
  1490. package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +0 -138
  1491. package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +0 -54
  1492. package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +0 -134
  1493. package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +0 -29
  1494. package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +0 -158
  1495. package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +0 -35
  1496. package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +0 -338
  1497. package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +0 -527
  1498. package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +0 -1
  1499. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +0 -95
  1500. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +0 -1
  1501. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +0 -214
  1502. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +0 -28
  1503. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +0 -98
  1504. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +0 -22
  1505. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +0 -1
  1506. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +0 -13
  1507. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +0 -35
  1508. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +0 -28
  1509. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +0 -110
  1510. package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +0 -58
  1511. package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +0 -90
  1512. package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +0 -80
  1513. package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +0 -57
  1514. package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +0 -19
  1515. package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +0 -18
  1516. package/skills/observing-agentforce/SKILL.md +0 -366
  1517. package/skills/observing-agentforce/apex/AgentforceOptimizeService.cls +0 -1262
  1518. package/skills/observing-agentforce/apex/AgentforceOptimizeService.cls-meta.xml +0 -5
  1519. package/skills/observing-agentforce/references/improve-reference.md +0 -359
  1520. package/skills/observing-agentforce/references/issue-classification.md +0 -220
  1521. package/skills/observing-agentforce/references/reproduce-reference.md +0 -131
  1522. package/skills/observing-agentforce/references/stdm-queries.md +0 -373
  1523. package/skills/observing-agentforce/references/stdm-schema.md +0 -189
  1524. package/skills/orchestrating-datacloud/CREDITS.md +0 -15
  1525. package/skills/orchestrating-datacloud/README.md +0 -127
  1526. package/skills/orchestrating-datacloud/SKILL.md +0 -235
  1527. package/skills/orchestrating-datacloud/UPSTREAM.md +0 -45
  1528. package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +0 -5
  1529. package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +0 -7
  1530. package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +0 -7
  1531. package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +0 -5
  1532. package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +0 -5
  1533. package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +0 -21
  1534. package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +0 -55
  1535. package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +0 -17
  1536. package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +0 -30
  1537. package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +0 -14
  1538. package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +0 -12
  1539. package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +0 -9
  1540. package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +0 -16
  1541. package/skills/orchestrating-datacloud/references/feature-readiness.md +0 -157
  1542. package/skills/orchestrating-datacloud/references/plugin-setup.md +0 -138
  1543. package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +0 -53
  1544. package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +0 -511
  1545. package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +0 -68
  1546. package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +0 -58
  1547. package/skills/platform-agentexchange-partner-offers-enable/SKILL.md +0 -111
  1548. package/skills/platform-agentexchange-partner-offers-enable/assets/org-pref-template.md +0 -27
  1549. package/skills/platform-agentexchange-partner-offers-enable/examples/org-preference-settings.xml +0 -4
  1550. package/skills/preparing-datacloud/CREDITS.md +0 -7
  1551. package/skills/preparing-datacloud/README.md +0 -51
  1552. package/skills/preparing-datacloud/SKILL.md +0 -190
  1553. package/skills/preparing-datacloud/examples/ingestion-api/.env.example +0 -8
  1554. package/skills/preparing-datacloud/examples/ingestion-api/README.md +0 -48
  1555. package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +0 -144
  1556. package/skills/querying-soql/CREDITS.md +0 -21
  1557. package/skills/querying-soql/README.md +0 -41
  1558. package/skills/querying-soql/SKILL.md +0 -142
  1559. package/skills/querying-soql/assets/aggregate-queries.soql +0 -242
  1560. package/skills/querying-soql/assets/basic-queries.soql +0 -188
  1561. package/skills/querying-soql/assets/bulkified-query-pattern.cls +0 -280
  1562. package/skills/querying-soql/assets/optimization-patterns.soql +0 -259
  1563. package/skills/querying-soql/assets/relationship-queries.soql +0 -203
  1564. package/skills/querying-soql/assets/selector-class.cls +0 -219
  1565. package/skills/querying-soql/references/anti-patterns.md +0 -348
  1566. package/skills/querying-soql/references/cli-commands.md +0 -358
  1567. package/skills/querying-soql/references/field-coverage-rules.md +0 -514
  1568. package/skills/querying-soql/references/query-optimization.md +0 -142
  1569. package/skills/querying-soql/references/selector-patterns.md +0 -479
  1570. package/skills/querying-soql/references/soql-reference.md +0 -227
  1571. package/skills/querying-soql/references/soql-syntax-reference.md +0 -208
  1572. package/skills/querying-soql/scripts/post-tool-validate.py +0 -322
  1573. package/skills/retrieving-datacloud/CREDITS.md +0 -7
  1574. package/skills/retrieving-datacloud/README.md +0 -44
  1575. package/skills/retrieving-datacloud/SKILL.md +0 -119
  1576. package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +0 -44
  1577. package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +0 -43
  1578. package/skills/reviewing-lwc-mobile-offline/SKILL.md +0 -167
  1579. package/skills/reviewing-lwc-mobile-offline/references/grounding.md +0 -7
  1580. package/skills/reviewing-lwc-mobile-offline/references/inline-graphql.md +0 -43
  1581. package/skills/reviewing-lwc-mobile-offline/references/komaci-eslint.md +0 -125
  1582. package/skills/reviewing-lwc-mobile-offline/references/lwc-if.md +0 -78
  1583. package/skills/reviewing-lwc-mobile-offline/scripts/komaci.config.mjs +0 -18
  1584. package/skills/reviewing-lwc-mobile-offline/scripts/package.json +0 -10
  1585. package/skills/reviewing-lwc-mobile-offline/scripts/run-komaci.sh +0 -69
  1586. package/skills/running-apex-tests/CREDITS.md +0 -22
  1587. package/skills/running-apex-tests/README.md +0 -94
  1588. package/skills/running-apex-tests/SKILL.md +0 -157
  1589. package/skills/running-apex-tests/assets/basic-test.cls +0 -169
  1590. package/skills/running-apex-tests/assets/bulk-test.cls +0 -255
  1591. package/skills/running-apex-tests/assets/dml-mock.cls +0 -339
  1592. package/skills/running-apex-tests/assets/mock-callout-test.cls +0 -353
  1593. package/skills/running-apex-tests/assets/stub-provider-example.cls +0 -364
  1594. package/skills/running-apex-tests/assets/test-data-factory.cls +0 -328
  1595. package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +0 -364
  1596. package/skills/running-apex-tests/references/cli-commands.md +0 -289
  1597. package/skills/running-apex-tests/references/mocking-patterns.md +0 -500
  1598. package/skills/running-apex-tests/references/performance-optimization.md +0 -283
  1599. package/skills/running-apex-tests/references/test-fix-loop.md +0 -49
  1600. package/skills/running-apex-tests/references/test-patterns.md +0 -154
  1601. package/skills/running-apex-tests/references/testing-best-practices.md +0 -509
  1602. package/skills/running-code-analyzer/SKILL.md +0 -495
  1603. package/skills/running-code-analyzer/examples/README.md +0 -38
  1604. package/skills/running-code-analyzer/examples/basic-scan-output.json +0 -92
  1605. package/skills/running-code-analyzer/examples/command-variations.md +0 -333
  1606. package/skills/running-code-analyzer/examples/fix-application-before-after.md +0 -142
  1607. package/skills/running-code-analyzer/examples/large-scan-output.json +0 -67
  1608. package/skills/running-code-analyzer/examples/security-focused-output.json +0 -95
  1609. package/skills/running-code-analyzer/references/command-examples.md +0 -27
  1610. package/skills/running-code-analyzer/references/engine-reference.md +0 -34
  1611. package/skills/running-code-analyzer/references/error-handling.md +0 -29
  1612. package/skills/running-code-analyzer/references/flag-reference.md +0 -96
  1613. package/skills/running-code-analyzer/references/post-scan-workflows.md +0 -286
  1614. package/skills/running-code-analyzer/references/quick-start.md +0 -28
  1615. package/skills/running-code-analyzer/references/special-behaviors.md +0 -83
  1616. package/skills/running-code-analyzer/references/vendor-file-handling.md +0 -239
  1617. package/skills/running-code-analyzer/scripts/apply-fixes.js +0 -86
  1618. package/skills/running-code-analyzer/scripts/describe-rule.js +0 -382
  1619. package/skills/running-code-analyzer/scripts/discover-fixes.js +0 -34
  1620. package/skills/running-code-analyzer/scripts/filter-violations.js +0 -405
  1621. package/skills/running-code-analyzer/scripts/list-rules.js +0 -260
  1622. package/skills/running-code-analyzer/scripts/parse-results.js +0 -59
  1623. package/skills/running-code-analyzer/scripts/query-results.js +0 -230
  1624. package/skills/running-code-analyzer/scripts/summarize-fixes.js +0 -32
  1625. package/skills/running-code-analyzer/scripts/verify-execution.sh +0 -28
  1626. package/skills/searching-media/SKILL.md +0 -348
  1627. package/skills/segmenting-datacloud/CREDITS.md +0 -3
  1628. package/skills/segmenting-datacloud/README.md +0 -36
  1629. package/skills/segmenting-datacloud/SKILL.md +0 -114
  1630. package/skills/switching-org/SKILL.md +0 -28
  1631. package/skills/testing-agentforce/SKILL.md +0 -333
  1632. package/skills/testing-agentforce/assets/basic-test-spec.yaml +0 -63
  1633. package/skills/testing-agentforce/assets/guardrail-test-spec.yaml +0 -105
  1634. package/skills/testing-agentforce/assets/standard-test-spec.yaml +0 -127
  1635. package/skills/testing-agentforce/references/action-execution.md +0 -241
  1636. package/skills/testing-agentforce/references/batch-testing.md +0 -274
  1637. package/skills/testing-agentforce/references/preview-testing.md +0 -353
  1638. package/skills/testing-agentforce/references/test-report-format.md +0 -160
  1639. package/skills/testing-agentforce/references/troubleshooting.md +0 -73
  1640. package/skills/uplifting-components-to-slds2/SKILL.md +0 -239
  1641. package/skills/uplifting-components-to-slds2/references/color-hooks-decision-guide.md +0 -459
  1642. package/skills/uplifting-components-to-slds2/references/common-patterns.md +0 -87
  1643. package/skills/uplifting-components-to-slds2/references/examples.md +0 -461
  1644. package/skills/uplifting-components-to-slds2/references/migration-checklist.md +0 -67
  1645. package/skills/uplifting-components-to-slds2/references/non-color-hooks-decision-guide.md +0 -333
  1646. package/skills/uplifting-components-to-slds2/references/rule-lwc-token-to-slds-hook.md +0 -135
  1647. package/skills/uplifting-components-to-slds2/references/rule-no-deprecated-tokens-slds1.md +0 -211
  1648. package/skills/uplifting-components-to-slds2/references/rule-no-hardcoded-values.md +0 -160
  1649. package/skills/uplifting-components-to-slds2/references/rule-no-slds-class-overrides.md +0 -126
  1650. package/skills/using-mobile-native-capabilities/SKILL.md +0 -181
  1651. package/skills/using-mobile-native-capabilities/references/app-review.md +0 -68
  1652. package/skills/using-mobile-native-capabilities/references/ar-space-capture.md +0 -125
  1653. package/skills/using-mobile-native-capabilities/references/barcode-scanner.md +0 -219
  1654. package/skills/using-mobile-native-capabilities/references/base-capability.md +0 -22
  1655. package/skills/using-mobile-native-capabilities/references/biometrics.md +0 -90
  1656. package/skills/using-mobile-native-capabilities/references/calendar.md +0 -213
  1657. package/skills/using-mobile-native-capabilities/references/contacts.md +0 -232
  1658. package/skills/using-mobile-native-capabilities/references/document-scanner.md +0 -342
  1659. package/skills/using-mobile-native-capabilities/references/geofencing.md +0 -123
  1660. package/skills/using-mobile-native-capabilities/references/location.md +0 -158
  1661. package/skills/using-mobile-native-capabilities/references/mobile-capabilities.md +0 -30
  1662. package/skills/using-mobile-native-capabilities/references/nfc.md +0 -181
  1663. package/skills/using-mobile-native-capabilities/references/payments.md +0 -95
  1664. package/skills/using-salesforce-archive/SKILL.md +0 -121
  1665. package/skills/using-salesforce-archive/examples/monitor-failed-jobs.md +0 -47
  1666. package/skills/using-salesforce-archive/references/archive-activity-entity.md +0 -59
  1667. package/skills/using-salesforce-archive/references/connect-api-operations.md +0 -157
  1668. package/skills/using-ui-bundle-salesforce-data/SKILL.md +0 -638
  1669. package/skills/using-ui-bundle-salesforce-data/scripts/graphql-search.sh +0 -191
  1670. package/skills/validating-slds/SKILL.md +0 -262
  1671. package/skills/validating-slds/references/quality-checks.md +0 -308
  1672. package/skills/validating-slds/references/report-format.md +0 -302
  1673. package/skills/validating-slds/scripts/analyze-quality.cjs +0 -521
  1674. /package/skills/{getting-datacloud-schema → data360-schema-get}/scripts/get_dlo_schema.py +0 -0
  1675. /package/skills/{getting-datacloud-schema → data360-schema-get}/scripts/get_dmo_schema.py +0 -0
@@ -1,2835 +0,0 @@
1
- """Phase 2 Batch 1: pipeline orchestrator for investigating-agentforce-architecture.
2
-
3
- Composes Phase 1 primitives (config, rest_client, sf_cli, soql_loader,
4
- probe_channels, fetch_soql, parallel_retrieve, parse_wave, finalize) into
5
- the 13-phase flow defined in the plan.
6
-
7
- NOT a credential holder. Credentials live in a single mutable cell
8
- (`_creds_cell`) that both `creds_provider()` and `refresh_fn()` close over.
9
- Every SOQL call uses `creds_provider` so `retry_on_401`'s refresh path
10
- can deliver fresh creds into the retry — storing the URL/token
11
- in function args would defeat the refresh entirely.
12
-
13
- Phase ordering:
14
- 1 parse args (Bash harness does phases 1-3 today;
15
- 2 resolve creds (sf org display) P2 Batch 1 runs them in-process too)
16
- 3 probe channels
17
- 4 resolve bot + version
18
- 5 cache check
19
- 6 Wave A (7 parallel Tooling queries, DAG-ordered)
20
- 7 join Wave A → _bundle_parsed.json-shaped dict
21
- 8 Wave B (Flow + Apex bodies, parallel)
22
- 9 parse_wave -> declared_action_tree.json
23
- 10 render architecture.md (Batch 2 — stubbed)
24
- 11 finalize (atomic writes + manifest)
25
- 12 emit RESULT
26
- """
27
- from __future__ import annotations
28
-
29
- import argparse
30
- import json
31
- import os
32
- import sys
33
- import threading
34
- import time
35
- from functools import partial
36
- from pathlib import Path
37
- from typing import Callable, Tuple
38
-
39
- # Phase 2 Batch 1: all cross-module wiring routes through config so a future
40
- # relocation of DATA_ROOT / CACHE_ROOT only touches one file.
41
- from config import (
42
- CACHE_TTL_DAYS,
43
- DATA_ROOT,
44
- SCHEMA_VERSION,
45
- build_agent_cache_dir,
46
- build_agent_data_dir,
47
- )
48
- from rest_client import RestClientError, redact_error
49
- from sf_cli import AuthRequired, SfCliError, run_sf
50
- from soql_loader import SoqlParamError
51
-
52
- # Phase 2 Batch 1 imports — functional pipeline primitives.
53
- from fetch_soql import (
54
- fetch_apex_bodies_by_ids,
55
- fetch_apex_bodies_by_names,
56
- fetch_bot_definition_details,
57
- fetch_bot_versions,
58
- fetch_flow_definition_by_ids,
59
- fetch_flow_definition_ids_by_names,
60
- fetch_flow_metadata,
61
- fetch_functions_by_plugins,
62
- fetch_planner_attrs,
63
- fetch_planner_bundle_functions,
64
- fetch_planner_definition,
65
- fetch_plugin_functions,
66
- fetch_plugin_instructions,
67
- fetch_plugins_by_planner,
68
- )
69
- from metadata_listing import (
70
- list_prompt_template_metadata,
71
- retrieve_prompt_templates,
72
- )
73
- from parallel_retrieve import fetch_bodies_parallel
74
- from parse_bundle import classify_generation
75
- from probe_channels import probe_channels
76
- from resolve_invocation_target import looks_like_sf_id, resolve_or_unresolved
77
-
78
-
79
- # ---------------------------------------------------------------------------
80
- # CLI
81
- # ---------------------------------------------------------------------------
82
-
83
-
84
- def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
85
- p = argparse.ArgumentParser(prog="architecture")
86
- p.add_argument("--org-alias", required=True)
87
- p.add_argument("--agent", required=True, dest="agent_api_name")
88
- p.add_argument("--version", dest="agent_version")
89
- p.add_argument("--force", action="store_true", dest="force_refresh")
90
- # --reprobe forces a fresh channel-probe run on pipeline start.
91
- p.add_argument("--reprobe", action="store_true")
92
- p.add_argument("--parallelism", type=int, default=5)
93
- p.add_argument("--max-mermaid-nodes", type=int, default=80)
94
- p.add_argument("--work-dir", required=True)
95
- # Runtime-agnostic path overrides. Defaults are
96
- # ~/.vibe/{data,cache}/investigating-agentforce-architecture/.
97
- # Other runtimes (AFV OOTB, Codex, Cursor, OpenCode) pass these to land
98
- # artifacts under their own distribution layout.
99
- p.add_argument(
100
- "--data-dir",
101
- type=Path,
102
- default=None,
103
- help="Override data root (default: ~/.vibe/data/investigating-agentforce-architecture).",
104
- )
105
- p.add_argument(
106
- "--cache-dir",
107
- type=Path,
108
- default=None,
109
- help="Override cache root (default: ~/.vibe/cache/investigating-agentforce-architecture).",
110
- )
111
- return p.parse_args(argv)
112
-
113
-
114
- # ---------------------------------------------------------------------------
115
- # Three-level rebind for --data-dir / --cache-dir overrides.
116
- #
117
- # Python's `from X import Y` snapshots Y into the importer's local namespace.
118
- # Mutating X.Y later does NOT update the importer's local binding. main.py
119
- # does `from config import DATA_ROOT, ...` at module top, so without a
120
- # global rebind, line 2221's `str(DATA_ROOT)` would write the default path
121
- # even when --data-dir was passed.
122
- #
123
- # Levels rebound:
124
- # 1. paths.DATA_ROOT (the source of truth)
125
- # 2. config.DATA_ROOT (the re-export)
126
- # 3. main.DATA_ROOT (THIS module's local snapshot — via global)
127
- #
128
- # Plus: config.PROBE_CACHE_ROOT (derived from CACHE_ROOT at import time).
129
- # ---------------------------------------------------------------------------
130
-
131
-
132
- def _apply_path_overrides(args: argparse.Namespace) -> None:
133
- """Apply --data-dir / --cache-dir overrides across all 3 namespace levels.
134
-
135
- Must be called BEFORE any pipeline code reads DATA_ROOT or CACHE_ROOT.
136
- """
137
- if not (args.data_dir or args.cache_dir):
138
- return
139
- global DATA_ROOT # rebind level 1: this module
140
- from _shared import runtime, paths
141
- import config
142
-
143
- skill_name = "investigating-agentforce-architecture"
144
- if args.data_dir:
145
- runtime.set_data_root_override(args.data_dir)
146
- new_data = runtime.resolve_data_root(skill_name)
147
- paths.DATA_ROOT = new_data # level 2: paths module
148
- config.DATA_ROOT = new_data # level 3: config module re-export
149
- DATA_ROOT = new_data # level 1: main.py local
150
- if args.cache_dir:
151
- runtime.set_cache_root_override(args.cache_dir)
152
- new_cache = runtime.resolve_cache_root(skill_name)
153
- paths.CACHE_ROOT = new_cache
154
- config.CACHE_ROOT = new_cache
155
- config.PROBE_CACHE_ROOT = new_cache / "_channel_probe"
156
-
157
-
158
- # ---------------------------------------------------------------------------
159
- # Phase 2 Batch 1: credentials
160
- # ---------------------------------------------------------------------------
161
- # Single mutable cell read by `creds_provider`. `refresh_fn` rewrites the
162
- # cell. `retry_on_401` in rest_client invokes refresh_fn for side effect;
163
- # the next invocation of creds_provider picks up the new tuple. See
164
- # rest_client
165
-
166
-
167
- def _build_creds_plumbing(
168
- initial_creds: Tuple[str, str],
169
- resolve_creds: Callable[[], Tuple[str, str]],
170
- *,
171
- dedupe_window_s: float = 1.0,
172
- ) -> Tuple[
173
- Callable[[], Tuple[str, str]],
174
- Callable[[], Tuple[str, str]],
175
- "list[Tuple[str, str]]",
176
- ]:
177
- """Build the (creds_provider, refresh_fn, creds_cell) triple.
178
-
179
- + `creds_provider` re-reads `creds_cell`
180
- on every call so a refresh actually lands in the NEXT SOQL attempt.
181
- `refresh_fn` is serialized by an internal `threading.Lock` + a
182
- `time.monotonic()` dedupe window — N concurrent 401s against the same
183
- stale token collapse to ONE `resolve_creds()` spawn per window. That
184
- caps real `sf org display` spawns at roughly 1/second regardless of
185
- pool size.
186
-
187
- Extracted from `main()` so the closure is testable without threading
188
- a whole pipeline run through argparse + mocks.
189
-
190
- Returns (creds_provider, refresh_fn, creds_cell). The cell is
191
- returned so callers/tests can inspect the current tuple directly
192
- (it's the single source of truth the provider reads from).
193
- """
194
- creds_cell: list[Tuple[str, str]] = [initial_creds]
195
- lock = threading.Lock()
196
- last_refresh_mono = [0.0]
197
-
198
- def creds_provider() -> Tuple[str, str]:
199
- return creds_cell[0]
200
-
201
- def refresh_fn() -> Tuple[str, str]:
202
- with lock:
203
- now = time.monotonic()
204
- if now - last_refresh_mono[0] < dedupe_window_s:
205
- # Another thread refreshed within the dedupe window — reuse.
206
- return creds_cell[0]
207
- creds_cell[0] = resolve_creds()
208
- last_refresh_mono[0] = now
209
- return creds_cell[0]
210
-
211
- return creds_provider, refresh_fn, creds_cell
212
-
213
-
214
- _REDACTION_MARKER_FRAGMENT = "show-access-token"
215
- """Substring that uniquely identifies the sf CLI v2 redaction placeholder
216
- (`"[REDACTED] Use 'sf org auth show-access-token' to view"`). We match on
217
- this fragment rather than the full literal because the upstream wording
218
- has shifted between sf CLI builds, but the embedded subcommand name has
219
- been stable since cli#3560 landed."""
220
-
221
-
222
- def _resolve_creds(org_alias: str) -> Tuple[str, str]:
223
- """Resolve (instance_url, access_token) for ``org_alias``.
224
-
225
- Two-path strategy per forcedotcom/cli#3560 (effective 2026-05-27):
226
-
227
- 1. **Primary** — call ``sf org display`` for instanceUrl, then
228
- ``sf org auth show-access-token`` for the access token. This is
229
- the upstream long-term path; ``SF_TEMP_SHOW_SECRETS`` is
230
- decommissioned in summer 2026.
231
- 2. **Fallback** — if the dedicated command isn't shipped in the
232
- installed sf CLI version (older releases), fall back to the
233
- legacy ``sf org display --verbose`` with the
234
- ``SF_TEMP_SHOW_SECRETS=true`` env var that ``run_sf`` injects
235
- unconditionally. The fallback is detected by the redaction
236
- placeholder appearing in the ``accessToken`` field — exact match
237
- on the substring ``show-access-token`` (see
238
- ``_REDACTION_MARKER_FRAGMENT``).
239
-
240
- sf_cli.run_sf already redacts stderr on failure paths. Any
241
- exception surfaces as `AuthRequired` / `SfCliError`; caller routes
242
- through `_emit_fail`.
243
- """
244
- display_data = run_sf("org_display", ORG_ALIAS=org_alias)
245
- display_result = display_data.get("result") or {}
246
- instance_url = display_result.get("instanceUrl") or ""
247
- if not instance_url:
248
- raise AuthRequired(
249
- "sf org display returned an incomplete payload (missing instanceUrl)"
250
- )
251
-
252
- # Primary path: dedicated command. Catches both the unknown-command
253
- # case (older sf CLI) and any AuthRequired surfaced from the recipe.
254
- try:
255
- token_data = run_sf("show_access_token", ORG_ALIAS=org_alias)
256
- except SfCliError:
257
- # Older sf CLI versions emit "is not a sf command" on stderr; the
258
- # recipe surfaces that as SfCliError. Fall back to the
259
- # SF_TEMP_SHOW_SECRETS path via the org_display payload we
260
- # already have.
261
- access_token = display_result.get("accessToken") or ""
262
- else:
263
- token_result = token_data.get("result") or {}
264
- access_token = token_result.get("accessToken") or ""
265
-
266
- # Defensive fallback: if the dedicated command silently returned an
267
- # empty token OR sf CLI redacted the org_display token to the
268
- # placeholder, try the org_display payload directly. SF_TEMP_SHOW_SECRETS
269
- # is set unconditionally by run_sf so this works as long as the env
270
- # var is still honoured by the installed sf CLI.
271
- if not access_token or _REDACTION_MARKER_FRAGMENT in access_token:
272
- legacy_token = display_result.get("accessToken") or ""
273
- if legacy_token and _REDACTION_MARKER_FRAGMENT not in legacy_token:
274
- access_token = legacy_token
275
-
276
- if not access_token or _REDACTION_MARKER_FRAGMENT in access_token:
277
- raise AuthRequired(
278
- "could not retrieve a usable access token via sf org auth "
279
- "show-access-token (primary) or sf org display (fallback); "
280
- "ensure sf CLI is logged in for this org and either the "
281
- "dedicated command is available or SF_TEMP_SHOW_SECRETS is "
282
- "still honoured."
283
- )
284
-
285
- return instance_url, access_token
286
-
287
-
288
- def _derive_org_ids(org_alias: str) -> Tuple[str, str, str]:
289
- """Run `sf org display --json` once more for org_id_15 + org_id_18 +
290
- api_version.
291
-
292
- Reused call: the second `sf org display` is cheap and keeps the
293
- creds-resolve + org-ids functions uncoupled. When a run passes both
294
- through together, the overhead is two spawn()s not one — fine given
295
- the whole pipeline is O(seconds).
296
-
297
- Returns (org_id_15, org_id_18, api_version) — all strings. api_version
298
- matches `vNN.N` (validated by probe_channels' path builder downstream).
299
-
300
- Gap 3 fix (2026-05-05): returns the 18-char id as well so downstream
301
- emit helpers can populate the RESULT-block `ORG_ID_18` field. The
302
- 18-char value comes straight from `sf org display`; we do NOT compute
303
- it from the 15-char prefix.
304
- """
305
- data = run_sf("org_display", ORG_ALIAS=org_alias)
306
- result = data.get("result") or {}
307
- org_id_18 = result.get("id") or ""
308
- # SF org id is 18 chars; the 15-char slice is the stable prefix used
309
- # everywhere in this skill. Fail fast if shorter.
310
- if len(org_id_18) < 15:
311
- raise SfCliError(f"sf org display returned malformed id (len={len(org_id_18)})")
312
- org_id_15 = org_id_18[:15]
313
- api_version_raw = str(result.get("apiVersion") or "")
314
- # apiVersion from sf CLI is "60.0" shape; our validator requires "v60.0".
315
- api_version = api_version_raw if api_version_raw.startswith("v") else f"v{api_version_raw}"
316
- return org_id_15, org_id_18, api_version
317
-
318
-
319
- # ---------------------------------------------------------------------------
320
- # Phase 4: bot resolution (in-process; Data API via fetch_soql)
321
- # ---------------------------------------------------------------------------
322
-
323
-
324
- def _resolve_bot(
325
- agent_api_name: str,
326
- explicit_version: str | None,
327
- creds_provider: Callable[[], Tuple[str, str]],
328
- refresh_fn: Callable[[], Tuple[str, str]],
329
- *,
330
- api_version: str,
331
- ) -> dict | None:
332
- """Resolve (bot_id, version, master_label, planner_name, bot_def_details).
333
-
334
- Returns a dict with:
335
- bot_id, version, master_label, version_auto_picked (bool),
336
- bot_definition (dict row from BotDefinition details query),
337
- all_versions (list of {version, status}) — retained for error ctx.
338
-
339
- Returns None on AGENT_NOT_FOUND. Caller distinguishes by checking the
340
- absence — not by catching an exception — to keep the error-emit path
341
- a flat if-chain.
342
-
343
- `api_version` is threaded in from
344
- `_derive_org_ids`. The Data-API helpers require it — see
345
- `rest_client.data_query` for why the old hardcoded `v60.0` was
346
- wrong (real orgs run v66 and expose fields v60 does not).
347
- """
348
- versions = fetch_bot_versions(
349
- agent_api_name, creds_provider,
350
- api_version=api_version, on_401_refresh=refresh_fn,
351
- )
352
- if not versions:
353
- return None
354
-
355
- # Natural-key sort: v10 > v9 > v2 > v1. Copy the scheme from
356
- # resolve_bot.py so multi-version bots rank consistently across the
357
- # in-process + shell-out entry points.
358
- def _natural_key(v: dict) -> list:
359
- import re
360
- dn = v.get("DeveloperName") or ""
361
- return [int(p) if p.isdigit() else p for p in re.split(r"(\d+)", dn)]
362
-
363
- versions.sort(key=_natural_key, reverse=True)
364
-
365
- picked = None
366
- if explicit_version:
367
- for v in versions:
368
- if v.get("DeveloperName") == explicit_version:
369
- picked = v
370
- break
371
- version_auto_picked = False
372
- else:
373
- for v in versions:
374
- if v.get("Status") == "Active":
375
- picked = v
376
- break
377
- version_auto_picked = True
378
-
379
- if not picked:
380
- # Signal "version miss" distinctly from "bot miss". Caller emits
381
- # STATUS=AGENT_VERSION_NOT_FOUND with AVAILABLE_VERSIONS.
382
- return {
383
- "bot_id": "",
384
- "version": explicit_version or "",
385
- "master_label": "",
386
- "version_auto_picked": False,
387
- "all_versions": [
388
- {
389
- "version": v.get("DeveloperName") or "",
390
- "status": v.get("Status") or "",
391
- }
392
- for v in versions
393
- ],
394
- "_version_not_found": True,
395
- }
396
-
397
- bot_id = picked.get("BotDefinitionId") or ""
398
- bd_node = picked.get("BotDefinition") or {}
399
- master_label = bd_node.get("MasterLabel") or ""
400
- chosen_version = picked.get("DeveloperName") or ""
401
-
402
- # Phase 2 Batch 1: pull BotDefinition metadata once for the tree's
403
- # `agent` block. Non-fatal if the second query fails — tree falls
404
- # back to defaults.
405
- try:
406
- bot_def = fetch_bot_definition_details(
407
- agent_api_name, creds_provider,
408
- api_version=api_version, on_401_refresh=refresh_fn,
409
- )
410
- except (RestClientError, SoqlParamError):
411
- bot_def = None
412
-
413
- # Planner-name resolution moved to Wave A — `fetch_planner_definition`
414
- # now takes (agent_api_name, chosen_version) and performs a chain-LIKE
415
- # lookup (`<agent>%\_<vN>`). The canonical planner DeveloperName comes
416
- # back on the row and propagates downstream via the bundle join.
417
- return {
418
- "bot_id": bot_id,
419
- "version": chosen_version,
420
- "master_label": master_label,
421
- "version_auto_picked": version_auto_picked,
422
- "bot_definition": bot_def or {},
423
- }
424
-
425
-
426
- # ---------------------------------------------------------------------------
427
- # Phase 5: cache check
428
- # ---------------------------------------------------------------------------
429
-
430
-
431
- def _cache_is_fresh(cache_dir: Path) -> dict | None:
432
- """Return the manifest dict if the cache is hot + fresh, else None.
433
-
434
- Checks: manifest exists, schema_version matches, TTL not expired,
435
- data_path is a real file. Any failure degrades to `None` so the
436
- caller falls through to the pipeline-run path.
437
-
438
- Mirrors cache_check.py's shell-level logic; duplicated in-process so
439
- main.py can branch without shelling out.
440
- """
441
- import datetime as dt
442
-
443
- manifest_path = cache_dir / "manifest.json"
444
- if not manifest_path.is_file():
445
- return None
446
- try:
447
- manifest = json.loads(manifest_path.read_text())
448
- except (OSError, json.JSONDecodeError):
449
- return None
450
-
451
- if str(manifest.get("schema_version") or "0") != SCHEMA_VERSION:
452
- return None
453
-
454
- data_path_s = manifest.get("data_path") or ""
455
- if not data_path_s or not Path(data_path_s).is_file():
456
- return None
457
-
458
- try:
459
- built = dt.datetime.fromisoformat(
460
- (manifest.get("built_at_utc") or "").replace("Z", "+00:00")
461
- )
462
- except ValueError:
463
- return None
464
-
465
- age_days = (dt.datetime.now(dt.timezone.utc) - built).days
466
- ttl = int(manifest.get("ttl_days") or CACHE_TTL_DAYS)
467
- if age_days > ttl:
468
- return None
469
-
470
- return manifest
471
-
472
-
473
- # ---------------------------------------------------------------------------
474
- # Phase 6: Wave A
475
- # ---------------------------------------------------------------------------
476
-
477
-
478
- def _run_wave_a(
479
- agent_api_name: str,
480
- version: str | None,
481
- creds_provider: Callable[[], Tuple[str, str]],
482
- refresh_fn: Callable[[], Tuple[str, str]],
483
- *,
484
- api_version: str,
485
- parallelism: int = 5,
486
- ) -> dict | None:
487
- """Run the 7-query GenAi normalized DAG in layered parallel steps.
488
-
489
- A1 resolves the live `GenAiPlannerDefinition` from (agent_api_name,
490
- version) via a chain-LIKE lookup — Agentforce's accretive planner
491
- naming (v1=`<Agent>`, v2=`<Agent>_v2`, v3=`<Agent>_v2_v3`, ...) means
492
- (agent, version) alone is the only reliable key. The resolved row's
493
- `DeveloperName` is the canonical planner_name that propagates
494
- downstream via the bundle join in `_join_wave_a_to_bundle`.
495
-
496
- Returns a dict:
497
- {
498
- "planner": {...},
499
- "plugins": [...], # A2
500
- "bundle_functions_join": [...], # A3
501
- "functions": [...], # A4
502
- "instructions": [...], # A5
503
- "plugin_functions_join": [...], # A6
504
- "attrs": [...], # A7
505
- "unresolved": [...], # per-channel A2..A6 failures
506
- }
507
- Returns None if A1 yields no planner row — caller emits a clean
508
- error instead of failing later in the join.
509
-
510
- Failures:
511
- * RestClientError / HTTPError on A1 → propagates. No graceful path
512
- when the planner itself is unreachable.
513
- * A2..A6 failures: one failure in a parallel layer doesn't abort
514
- the layer (fetch_bodies_parallel's contract). The failed channel
515
- yields an empty data list AND an entry in `unresolved` keyed by
516
- channel with reason `wave-a-<channel>-failed:<redacted>`. The
517
- caller folds these into `tree["_unresolved"]` so STATUS flips
518
- to PARTIAL_OK.
519
- """
520
- # A1 — scalar, no parallelism. api_version threads through
521
- # every fetcher; see module docstring + fetch_soql.py.
522
- planner = fetch_planner_definition(
523
- agent_api_name, version, creds_provider,
524
- api_version=api_version, on_401_refresh=refresh_fn,
525
- )
526
- if not planner:
527
- return None
528
-
529
- planner_id = planner.get("Id")
530
- if not planner_id:
531
- # Planner row missing Id — malformed response. Treat as miss.
532
- return None
533
-
534
- unresolved: list[dict] = []
535
-
536
- # Layer 2: A2 + A3 in parallel
537
- layer2 = fetch_bodies_parallel(
538
- [
539
- partial(
540
- fetch_plugins_by_planner,
541
- planner_id, creds_provider,
542
- api_version=api_version, on_401_refresh=refresh_fn,
543
- ),
544
- partial(
545
- fetch_planner_bundle_functions,
546
- planner_id, creds_provider,
547
- api_version=api_version, on_401_refresh=refresh_fn,
548
- ),
549
- ],
550
- max_workers=parallelism,
551
- )
552
- plugins = layer2[0][1] if layer2[0][0] else []
553
- bundle_functions_join = layer2[1][1] if layer2[1][0] else []
554
- for channel, (ok, r) in zip(("plugins", "bundle-functions"), layer2):
555
- if not ok:
556
- entry = {
557
- "kind": "WAVE_A",
558
- "channel": channel,
559
- "reason": f"wave-a-{channel}-failed:{redact_error(r)}",
560
- }
561
- preview = getattr(r, "_response_body_preview", None)
562
- if preview:
563
- entry["response_body_preview"] = preview
564
- unresolved.append(entry)
565
-
566
- plugin_ids = [p.get("Id") for p in plugins if p.get("Id")]
567
-
568
- # Layer 3: A4 + A5 + A6 in parallel
569
- layer3 = fetch_bodies_parallel(
570
- [
571
- partial(
572
- fetch_functions_by_plugins,
573
- plugin_ids, creds_provider,
574
- api_version=api_version, on_401_refresh=refresh_fn,
575
- ),
576
- partial(
577
- fetch_plugin_instructions,
578
- plugin_ids, creds_provider,
579
- api_version=api_version, on_401_refresh=refresh_fn,
580
- ),
581
- partial(
582
- fetch_plugin_functions,
583
- plugin_ids, creds_provider,
584
- api_version=api_version, on_401_refresh=refresh_fn,
585
- ),
586
- ],
587
- max_workers=parallelism,
588
- )
589
- functions = layer3[0][1] if layer3[0][0] else []
590
- instructions = layer3[1][1] if layer3[1][0] else []
591
- plugin_functions_join = layer3[2][1] if layer3[2][0] else []
592
- for channel, (ok, r) in zip(
593
- ("functions", "instructions", "plugin-functions"), layer3,
594
- ):
595
- if not ok:
596
- entry = {
597
- "kind": "WAVE_A",
598
- "channel": channel,
599
- "reason": f"wave-a-{channel}-failed:{redact_error(r)}",
600
- }
601
- preview = getattr(r, "_response_body_preview", None)
602
- if preview:
603
- entry["response_body_preview"] = preview
604
- unresolved.append(entry)
605
-
606
- # Layer 4: A7 alone, parent_ids = function_ids. Planner-level attrs
607
- # returned 0 rows live (a planner never carries direct attrs) so the
608
- # prior `function_ids ∪ {planner_id}` widened the IN-list for no
609
- # payoff. Keep the list minimal; dedupe defensively in case a
610
- # function Id repeats across bundles.
611
- parent_ids = list(dict.fromkeys(
612
- f.get("Id") for f in functions if f.get("Id")
613
- ))
614
- try:
615
- attrs = fetch_planner_attrs(
616
- parent_ids, creds_provider,
617
- api_version=api_version, on_401_refresh=refresh_fn,
618
- )
619
- except (RestClientError, SoqlParamError):
620
- attrs = []
621
-
622
- return {
623
- "planner": planner,
624
- "plugins": plugins,
625
- "bundle_functions_join": bundle_functions_join,
626
- "functions": functions,
627
- "instructions": instructions,
628
- "plugin_functions_join": plugin_functions_join,
629
- "attrs": attrs,
630
- "unresolved": unresolved,
631
- }
632
-
633
-
634
- # ---------------------------------------------------------------------------
635
- # Phase 7: join Wave A → _bundle_parsed.json shape
636
- # ---------------------------------------------------------------------------
637
-
638
-
639
- def _join_wave_a_to_bundle(
640
- bot_info: dict,
641
- wave_a: dict,
642
- ) -> dict:
643
- """Reshape normalized Wave-A rows into the bundle dict parse_wave expects.
644
-
645
- `parse_bundle.py` wrote XML-shaped bundles keyed by:
646
- plannerType, plannerName, generation, description, masterLabel,
647
- topics[{name, actions[{name, invocationTarget, invocationTargetType, ...}]}],
648
- plannerActions[{...}]
649
-
650
- We reconstruct that shape from the Tooling rows so parse_wave's
651
- `init_tree` + `build_root_children` accept the dict unchanged.
652
- """
653
- planner = wave_a["planner"]
654
- planner_type = planner.get("PlannerType") or ""
655
- generation = classify_generation(planner_type)
656
-
657
- functions_by_id = {f.get("Id"): f for f in wave_a["functions"] if f.get("Id")}
658
- # Plugin join: map plugin_id → ordered function_ids
659
- plugin_fn_map: dict[str, list[str]] = {}
660
- for row in wave_a["plugin_functions_join"]:
661
- pid = row.get("PluginId")
662
- fn_id = row.get("Function")
663
- if pid and fn_id:
664
- plugin_fn_map.setdefault(pid, []).append(fn_id)
665
-
666
- def _action_dict(fn: dict) -> dict:
667
- """Shape a GenAiFunctionDefinition row as a bundle-action dict."""
668
- return {
669
- "name": fn.get("DeveloperName") or fn.get("Id") or "",
670
- "localDeveloperName": fn.get("LocalDeveloperName"),
671
- "masterLabel": fn.get("MasterLabel"),
672
- "description": fn.get("Description"),
673
- "invocationTarget": fn.get("InvocationTarget"),
674
- "invocationTargetType": (fn.get("InvocationTargetType") or "").strip(),
675
- "source": fn.get("Source"),
676
- }
677
-
678
- topics = []
679
- for plugin in wave_a["plugins"]:
680
- pid = plugin.get("Id")
681
- fn_ids = plugin_fn_map.get(pid, [])
682
- actions = [
683
- _action_dict(functions_by_id[fid])
684
- for fid in fn_ids if fid in functions_by_id
685
- ]
686
- topics.append({
687
- "name": plugin.get("DeveloperName") or "",
688
- "localDeveloperName": plugin.get("LocalDeveloperName"),
689
- "masterLabel": plugin.get("MasterLabel"),
690
- "description": plugin.get("Description"),
691
- "canEscalate": bool(plugin.get("CanEscalate")),
692
- "pluginType": plugin.get("PluginType"),
693
- "actions": actions,
694
- })
695
-
696
- # A planner never has direct functions (user invariant, verified
697
- # against my-org-alias). The previous `PlannerId`-leg query leaked
698
- # orphan rows (e.g. `AnswerQuestionsWithKnowledge_*`) as root-level
699
- # children. Key retained for downstream compatibility with callers
700
- # that read `bundle.get("plannerActions", [])` (parse_wave, a few
701
- # _route / _normalize paths); always emits an empty list now.
702
- return {
703
- "plannerType": planner_type,
704
- "plannerName": planner.get("DeveloperName"),
705
- "generation": generation,
706
- "description": planner.get("Description"),
707
- "masterLabel": planner.get("MasterLabel"),
708
- "topics": topics,
709
- "plannerActions": [],
710
- }
711
-
712
-
713
- # ---------------------------------------------------------------------------
714
- # Phase 8: Wave B (Flow + Apex body fetches)
715
- # ---------------------------------------------------------------------------
716
-
717
-
718
- def _collect_wave_b_targets(bundle_parsed: dict) -> dict[str, list[str]]:
719
- """Walk topics + plannerActions. Return {kind: [invocation_target, ...]}.
720
-
721
- Deduplicates per-kind. Caller routes each kind through the appropriate
722
- fetch_soql helper.
723
- """
724
- apex_names: set[str] = set()
725
- apex_ids: set[str] = set()
726
- flow_names: set[str] = set()
727
- flow_ids: set[str] = set()
728
- # Bug 1 fix (2026-05-05): prompt-template targets can arrive as either
729
- # DeveloperNames (classic) OR 0hf-prefix Ids (observed in live orgs —
730
- # GenAiFunctionDefinition.InvocationTarget sometimes stores the Id).
731
- # Route to separate buckets so the Id bucket can be resolved → DevName
732
- # by _normalize_prompt_template_id_targets before Wave B retrieve.
733
- prompt_template_ids: set[str] = set()
734
- unresolved: list[dict] = []
735
-
736
- def _route(target: str, ttype: str) -> None:
737
- t = (ttype or "").lower()
738
- if not target:
739
- return
740
- # Bug 1 fix: prompt-template targets can arrive as either
741
- # DeveloperNames (classic) OR 0hf-prefix Ids. The Metadata API
742
- # retrieve expects DeveloperName; an Id sent verbatim returns
743
- # zero members and the target stays in _pending_fetches forever.
744
- # Route 0hf Ids into a separate bucket for post-lookup rewrite
745
- # via _normalize_prompt_template_id_targets (parallel to the
746
- # existing _normalize_flow_id_targets pattern).
747
- if t in ("prompttemplate", "generatepromptresponse") or t.startswith("prompt") or t.startswith("genai"):
748
- if looks_like_sf_id(target) and target[:3].lower() == "0hf":
749
- prompt_template_ids.add(target)
750
- return
751
- # bundle-declared kinds that never carry an Id.
752
- # Standard actions store their identifier (not an SF Id) directly
753
- # in InvocationTarget. Skip the ID router entirely — routing them
754
- # through resolve_or_unresolved would pollute `_unresolved` with
755
- # misleading "invalid-id-format" entries.
756
- if t == "standardinvocableaction":
757
- return
758
- # for flow/apex, only consult the ID router
759
- # when the target actually looks like a Salesforce Id. Classic
760
- # DeveloperNames (e.g. `MyFlow`, `AGNT_Foo`) don't
761
- # match the Id shape and used to land in _unresolved with reason
762
- # `invalid-id-format` — noise. Short-circuit: if it's not an Id
763
- # shape, skip the router and trust the invocationTargetType.
764
- if t in ("flow", "apex") and looks_like_sf_id(target):
765
- kind, _channel = resolve_or_unresolved(target, unresolved)
766
- if kind == "apex":
767
- apex_ids.add(target)
768
- return
769
- if kind in ("flow_definition", "flow_version"):
770
- flow_ids.add(target)
771
- return
772
- # Unknown Id prefix: resolve_or_unresolved already appended
773
- # to `unresolved` with reason "unknown-id-prefix:..." — fall
774
- # through; the target stays unrouted and surfaces there.
775
- return
776
- # Classic path: InvocationTarget is a DeveloperName.
777
- if t == "apex":
778
- apex_names.add(target)
779
- elif t == "flow":
780
- flow_names.add(target)
781
- # Any other unrecognized type: silently skip. parse_wave will
782
- # classify the node as UNKNOWN and it surfaces via _kind_counts.
783
-
784
- for topic in bundle_parsed.get("topics", []) or []:
785
- for a in topic.get("actions", []) or []:
786
- _route(a.get("invocationTarget") or "",
787
- a.get("invocationTargetType") or "")
788
- for a in bundle_parsed.get("plannerActions", []) or []:
789
- _route(a.get("invocationTarget") or "",
790
- a.get("invocationTargetType") or "")
791
-
792
- return {
793
- "apex_names": sorted(apex_names),
794
- "apex_ids": sorted(apex_ids),
795
- "flow_names": sorted(flow_names),
796
- "flow_ids": sorted(flow_ids),
797
- "prompt_template_ids": sorted(prompt_template_ids),
798
- "_unresolved": unresolved,
799
- }
800
-
801
-
802
- def _fetch_wave_b_by_names(
803
- *,
804
- apex_names: list[str],
805
- apex_ids: list[str],
806
- flow_names: list[str],
807
- flow_ids: list[str],
808
- prompt_template_ids: list[str] | None = None,
809
- creds_provider: Callable[[], Tuple[str, str]],
810
- refresh_fn: Callable[[], Tuple[str, str]],
811
- api_version: str,
812
- org_alias: str,
813
- parallelism: int = 5,
814
- ) -> dict:
815
- """Fire body fetches for an explicit set of Apex/Flow identifiers.
816
-
817
- Factored out of `_run_wave_b` so the iterative Wave B caller
818
- (`_iterate_wave_b`) can reuse the same shape on subflow rounds —
819
- every round's fetch concurrency + error handling semantics must
820
- match the initial round exactly (same parallel layer, same
821
- unresolved bookkeeping).
822
-
823
- Returns a dict with:
824
- apex_rows: list of ApexClass records (Name keyed)
825
- flow_def_rows: list of FlowDefinition records (DeveloperName keyed)
826
- flow_metadata: dict {version_id: Flow record}
827
- unresolved: list of {id, reason} from fetch failures
828
-
829
- Any empty input list short-circuits that branch — callers can pass
830
- subsets safely (e.g. subflow rounds typically pass only flow_names).
831
- """
832
- unresolved: list[dict] = []
833
-
834
- # First hop: resolve IDs back to names where applicable. The results
835
- # merge into the same rowsets the name-keyed path produces.
836
- # api_version threads into every fetch call.
837
- if apex_ids:
838
- try:
839
- apex_by_id_rows = fetch_apex_bodies_by_ids(
840
- apex_ids, creds_provider,
841
- api_version=api_version, on_401_refresh=refresh_fn,
842
- )
843
- except (RestClientError, SoqlParamError) as e:
844
- unresolved.append({"kind": "APEX", "reason": f"apex-by-id-failed:{redact_error(e)}"})
845
- apex_by_id_rows = []
846
- else:
847
- apex_by_id_rows = []
848
-
849
- if flow_ids:
850
- try:
851
- flow_def_by_id_rows = fetch_flow_definition_by_ids(
852
- flow_ids, creds_provider,
853
- api_version=api_version, on_401_refresh=refresh_fn,
854
- )
855
- except (RestClientError, SoqlParamError) as e:
856
- unresolved.append({"kind": "FLOW", "reason": f"flow-def-by-id-failed:{redact_error(e)}"})
857
- flow_def_by_id_rows = []
858
- else:
859
- flow_def_by_id_rows = []
860
-
861
- # Bug 1 fix: GenAiPromptTemplate is NOT SOQL-queryable (not on Tooling,
862
- # not on Data API). The only way to resolve Id → DeveloperName is
863
- # `sf org list metadata -m GenAiPromptTemplate`. We list every prompt
864
- # template in the org, build an Id → fullName map, filter to the Ids
865
- # we care about, and project to the same {Id, DeveloperName} shape the
866
- # rest of the pipeline expects.
867
- #
868
- # Failure is non-fatal — the Ids stay in the bucket and surface in
869
- # `_pending_fetches` rather than masking the real issue.
870
- if prompt_template_ids:
871
- try:
872
- rows = list_prompt_template_metadata(org_alias)
873
- except (SfCliError, AuthRequired) as e:
874
- unresolved.append({
875
- "kind": "PROMPT_TEMPLATE",
876
- "reason": f"prompt-template-listmetadata-failed:{redact_error(e)}",
877
- })
878
- rows = []
879
- wanted = set(prompt_template_ids)
880
- prompt_template_id_rows = [
881
- {"Id": r["id"], "DeveloperName": r["fullName"]}
882
- for r in rows
883
- if isinstance(r, dict) and r.get("id") in wanted and r.get("fullName")
884
- ]
885
- else:
886
- prompt_template_id_rows = []
887
-
888
- # Parallel layer: apex-by-name + flow-def-by-name. Empty name lists
889
- # still produce a task, but the downstream fetcher short-circuits on
890
- # empty input — the overhead is a single worker dispatch which is
891
- # cheaper than conditionally building the task list.
892
- name_layer = fetch_bodies_parallel(
893
- [
894
- partial(
895
- fetch_apex_bodies_by_names,
896
- apex_names, creds_provider,
897
- api_version=api_version, on_401_refresh=refresh_fn,
898
- ),
899
- partial(
900
- fetch_flow_definition_ids_by_names,
901
- flow_names, creds_provider,
902
- api_version=api_version, on_401_refresh=refresh_fn,
903
- ),
904
- ],
905
- max_workers=parallelism,
906
- )
907
- apex_name_rows = name_layer[0][1] if name_layer[0][0] else []
908
- flow_def_name_rows = name_layer[1][1] if name_layer[1][0] else []
909
- # Bug D.1 fix: include the response body preview captured by
910
- # rest_client._query_once when the failure was an HTTPError. Without
911
- # it, all wave-B 400s collapse to "HTTP Error 400: Bad Request" with
912
- # no signal about which name caused the malformed query. Falls back
913
- # to None (existing shape) for non-HTTPError failures.
914
- for ok, r in (name_layer[0], name_layer[1]):
915
- if not ok:
916
- entry = {"kind": "APEX_OR_FLOW", "reason": f"wave-b-batch-failed:{redact_error(r)}"}
917
- preview = getattr(r, "_response_body_preview", None)
918
- if preview:
919
- entry["response_body_preview"] = preview
920
- unresolved.append(entry)
921
-
922
- apex_rows = [*apex_name_rows, *apex_by_id_rows]
923
- flow_def_rows = [*flow_def_name_rows, *flow_def_by_id_rows]
924
-
925
- # Second hop: one Flow.Metadata single-row call per ActiveVersionId.
926
- # Parallelized via fetch_bodies_parallel.
927
- version_ids = [
928
- r.get("ActiveVersionId") for r in flow_def_rows
929
- if r.get("ActiveVersionId")
930
- ]
931
- metadata_tasks = [
932
- partial(
933
- fetch_flow_metadata,
934
- vid, creds_provider,
935
- api_version=api_version, on_401_refresh=refresh_fn,
936
- )
937
- for vid in version_ids
938
- ]
939
- metadata_results = fetch_bodies_parallel(
940
- metadata_tasks, max_workers=parallelism,
941
- )
942
- flow_metadata: dict[str, dict] = {}
943
- for vid, (ok, result_or_exc) in zip(version_ids, metadata_results):
944
- if ok and isinstance(result_or_exc, dict):
945
- flow_metadata[vid] = result_or_exc
946
- elif not ok:
947
- unresolved.append({
948
- "kind": "FLOW",
949
- "version_id": vid,
950
- "reason": f"flow-metadata-failed:{redact_error(result_or_exc)}",
951
- })
952
-
953
- return {
954
- "apex_rows": apex_rows,
955
- "flow_def_rows": flow_def_rows,
956
- "flow_metadata": flow_metadata,
957
- "prompt_template_id_rows": prompt_template_id_rows,
958
- "unresolved": unresolved,
959
- }
960
-
961
-
962
- def _run_wave_b(
963
- bundle_parsed: dict,
964
- creds_provider: Callable[[], Tuple[str, str]],
965
- refresh_fn: Callable[[], Tuple[str, str]],
966
- *,
967
- api_version: str,
968
- org_alias: str,
969
- parallelism: int = 5,
970
- ) -> dict:
971
- """Fire body fetches for every Apex/Flow target in the bundle.
972
-
973
- Returns a dict with:
974
- apex_rows: list of ApexClass records (Name keyed)
975
- flow_def_rows: list of FlowDefinition records (DeveloperName keyed)
976
- flow_metadata: dict {version_id: Flow record}
977
- unresolved: list of {id, reason} from NGA ID routing
978
-
979
- Only covers the top-level identifiers enumerated directly in
980
- `bundle_parsed`. Subflows referenced inside fetched Flow.Metadata
981
- bodies (e.g. shared utility flows like `handleFlowFault`) are
982
- discovered AFTER this function returns and need a second round of
983
- fetching — see `_iterate_wave_b`.
984
- """
985
- targets = _collect_wave_b_targets(bundle_parsed)
986
-
987
- fetched = _fetch_wave_b_by_names(
988
- apex_names=targets["apex_names"],
989
- apex_ids=targets["apex_ids"],
990
- flow_names=targets["flow_names"],
991
- flow_ids=targets["flow_ids"],
992
- prompt_template_ids=targets.get("prompt_template_ids") or [],
993
- creds_provider=creds_provider,
994
- refresh_fn=refresh_fn,
995
- api_version=api_version,
996
- org_alias=org_alias,
997
- parallelism=parallelism,
998
- )
999
-
1000
- # Merge the routing-layer unresolved entries (unknown-id-prefix, etc.)
1001
- # with the fetch-layer ones. Order: routing first, fetch second — it's
1002
- # the order they're discovered in the pipeline.
1003
- fetched["unresolved"] = [*targets["_unresolved"], *fetched["unresolved"]]
1004
- return fetched
1005
-
1006
-
1007
- # ---------------------------------------------------------------------------
1008
- # iterative Wave B for nested-subflow discovery
1009
- # ---------------------------------------------------------------------------
1010
-
1011
-
1012
- def _extract_refs_from_flow_metadata(
1013
- flow_metadata: dict[str, dict],
1014
- ) -> Tuple[set[str], set[str]]:
1015
- """Scan fetched Flow.Metadata dicts for downstream subflow + apex refs.
1016
-
1017
- Returns `(subflow_names, apex_names)` — both DeveloperName sets.
1018
- Subsets of the data that `_build_flow_children` walks, narrowed to
1019
- just the name-extraction we need before we have enough information
1020
- to build the full child list.
1021
-
1022
- The extractor is intentionally permissive: missing keys / non-dict
1023
- entries / blank names all drop silently. Parsing shape mirrors the
1024
- `Metadata.actionCalls[]` + `Metadata.subflows[]` layout documented
1025
- in the fetch_flow_metadata docstring and exercised by the
1026
- CLASSIC_FLOW_METADATA fixture.
1027
-
1028
- Apex discovery from actionCalls is deliberate — a subflow body CAN
1029
- reference a new Apex class the parent tree didn't see (actionType
1030
- == "apex" && actionName == <new class>). Missing those means the
1031
- iterated tree has unexpanded APEX leaves even after flows resolve.
1032
- """
1033
- subflow_names: set[str] = set()
1034
- apex_names: set[str] = set()
1035
- for record in (flow_metadata or {}).values():
1036
- if not isinstance(record, dict):
1037
- continue
1038
- md = record.get("Metadata")
1039
- if not isinstance(md, dict):
1040
- continue
1041
- for ac in md.get("actionCalls") or []:
1042
- if not isinstance(ac, dict):
1043
- continue
1044
- if (ac.get("actionType") or "") == "apex":
1045
- nm = ac.get("actionName") or ""
1046
- if nm:
1047
- apex_names.add(nm)
1048
- for sub in md.get("subflows") or []:
1049
- if not isinstance(sub, dict):
1050
- continue
1051
- nm = sub.get("flowName") or ""
1052
- if nm:
1053
- subflow_names.add(nm)
1054
- return subflow_names, apex_names
1055
-
1056
-
1057
- def _iterate_wave_b(
1058
- initial_wave_b: dict,
1059
- creds_provider: Callable[[], Tuple[str, str]],
1060
- refresh_fn: Callable[[], Tuple[str, str]],
1061
- *,
1062
- api_version: str,
1063
- org_alias: str,
1064
- parallelism: int = 5,
1065
- max_iterations: int = 5,
1066
- ) -> dict:
1067
- """Drive Wave B to fixed-point for nested subflow / apex discovery.
1068
-
1069
- The initial `_run_wave_b` call only enumerates top-level flow refs
1070
- from `bundle_parsed`. When those flow bodies reference subflows
1071
- (via `Metadata.subflows[].flowName`) or new Apex classes (via
1072
- `Metadata.actionCalls[]`), their bodies were never fetched — so
1073
- `_build_flow_children` would shape them as leaf nodes with no
1074
- children even though the real subtree has content.
1075
-
1076
- Per round:
1077
- 1. Extract subflow + apex refs from the current flow_metadata.
1078
- 2. Diff against already-fetched DeveloperNames.
1079
- 3. If diff empty → converged, return.
1080
- 4. Fetch the diff via `_fetch_wave_b_by_names`.
1081
- 5. Merge into the running wave_b dict.
1082
- 6. Repeat.
1083
-
1084
- Safety:
1085
- * `max_iterations=5` — empirically 2-3 is enough on real bots
1086
- (handleFlowFault etc.). Hit the cap → remaining unfetched names
1087
- surface via parse_wave's `_pending_fetches.FLOW` (their names
1088
- are never added to `visited_by_kind["FLOW"]` since they're
1089
- absent from `flow_def_rows`) and a marker lands in `unresolved`
1090
- for triage.
1091
- * Fetch failures in a round are tolerated by `_fetch_wave_b_by_names`
1092
- — the affected names simply don't make it into `flow_def_rows`
1093
- and naturally surface as pending.
1094
-
1095
- Returns the (possibly enlarged) wave_b dict; caller mutates nothing.
1096
- """
1097
- if max_iterations <= 0:
1098
- return initial_wave_b
1099
-
1100
- # Running state: copy so callers see their original dict untouched.
1101
- merged_apex_rows = list(initial_wave_b.get("apex_rows") or [])
1102
- merged_flow_def_rows = list(initial_wave_b.get("flow_def_rows") or [])
1103
- merged_flow_metadata: dict[str, dict] = dict(
1104
- initial_wave_b.get("flow_metadata") or {}
1105
- )
1106
- merged_unresolved = list(initial_wave_b.get("unresolved") or [])
1107
-
1108
- fetched_flow_names: set[str] = {
1109
- r.get("DeveloperName") for r in merged_flow_def_rows
1110
- if r.get("DeveloperName")
1111
- }
1112
- fetched_apex_names: set[str] = {
1113
- r.get("Name") for r in merged_apex_rows if r.get("Name")
1114
- }
1115
-
1116
- for _round in range(max_iterations):
1117
- subflow_names, apex_names = _extract_refs_from_flow_metadata(
1118
- merged_flow_metadata
1119
- )
1120
- new_flow_names = sorted(subflow_names - fetched_flow_names)
1121
- new_apex_names = sorted(apex_names - fetched_apex_names)
1122
- if not new_flow_names and not new_apex_names:
1123
- # Fixed-point reached.
1124
- return {
1125
- "apex_rows": merged_apex_rows,
1126
- "flow_def_rows": merged_flow_def_rows,
1127
- "flow_metadata": merged_flow_metadata,
1128
- "prompt_template_id_rows": initial_wave_b.get(
1129
- "prompt_template_id_rows"
1130
- ) or [],
1131
- "unresolved": merged_unresolved,
1132
- }
1133
-
1134
- round_result = _fetch_wave_b_by_names(
1135
- apex_names=new_apex_names,
1136
- apex_ids=[],
1137
- flow_names=new_flow_names,
1138
- flow_ids=[],
1139
- creds_provider=creds_provider,
1140
- refresh_fn=refresh_fn,
1141
- api_version=api_version,
1142
- org_alias=org_alias,
1143
- parallelism=parallelism,
1144
- )
1145
- merged_apex_rows.extend(round_result["apex_rows"])
1146
- merged_flow_def_rows.extend(round_result["flow_def_rows"])
1147
- merged_flow_metadata.update(round_result["flow_metadata"])
1148
- merged_unresolved.extend(round_result["unresolved"])
1149
-
1150
- # Update fetched-name bookkeeping — we only track rows we
1151
- # actually received (fetch failure ⇒ not fetched ⇒ will be
1152
- # retried next round, bounded by the iteration cap).
1153
- for r in round_result["flow_def_rows"]:
1154
- nm = r.get("DeveloperName")
1155
- if nm:
1156
- fetched_flow_names.add(nm)
1157
- for r in round_result["apex_rows"]:
1158
- nm = r.get("Name")
1159
- if nm:
1160
- fetched_apex_names.add(nm)
1161
-
1162
- # Iteration cap hit. Scan one more time to see what's still pending
1163
- # so we can surface it clearly in `unresolved`. These names will also
1164
- # land in `_pending_fetches.FLOW` via parse_wave's visited-vs-pending
1165
- # diff (they're absent from flow_def_rows ⇒ absent from
1166
- # visited_by_kind["FLOW"]).
1167
- subflow_names, apex_names = _extract_refs_from_flow_metadata(
1168
- merged_flow_metadata
1169
- )
1170
- still_pending_flows = sorted(subflow_names - fetched_flow_names)
1171
- still_pending_apex = sorted(apex_names - fetched_apex_names)
1172
- for nm in still_pending_flows:
1173
- merged_unresolved.append({
1174
- "kind": "FLOW",
1175
- "api_name": nm,
1176
- "reason": f"wave-b-iteration-cap:{max_iterations}-rounds-exhausted",
1177
- })
1178
- for nm in still_pending_apex:
1179
- merged_unresolved.append({
1180
- "kind": "APEX",
1181
- "api_name": nm,
1182
- "reason": f"wave-b-iteration-cap:{max_iterations}-rounds-exhausted",
1183
- })
1184
-
1185
- return {
1186
- "apex_rows": merged_apex_rows,
1187
- "flow_def_rows": merged_flow_def_rows,
1188
- "flow_metadata": merged_flow_metadata,
1189
- "prompt_template_id_rows": initial_wave_b.get(
1190
- "prompt_template_id_rows"
1191
- ) or [],
1192
- "unresolved": merged_unresolved,
1193
- }
1194
-
1195
-
1196
- # ---------------------------------------------------------------------------
1197
- # build flow_children from in-memory Wave B metadata
1198
- # ---------------------------------------------------------------------------
1199
-
1200
-
1201
- def _build_flow_children(
1202
- flow_metadata: dict[str, dict],
1203
- flow_def_rows: list[dict],
1204
- ) -> dict[str, list[dict]]:
1205
- """Produce `{flow_developer_name: [child_ref, ...]}` from Wave B data.
1206
-
1207
- Mirrors the shape `parse_wave.harvest_waves` produces from on-disk
1208
- flow XML, but sourced from the in-memory `Flow.Metadata` JSON that
1209
- Wave B already fetched via the Tooling REST API (the `Metadata`
1210
- complexvalue field decodes to a plain dict — see
1211
- `fetch_flow_metadata` + test fixture `CLASSIC_FLOW_METADATA`). The
1212
- shape parse_wave expects per child:
1213
-
1214
- {"kind": "APEX", "api_name": <name>, "element_name": <elem>}
1215
- {"kind": "PROMPT_TEMPLATE", "api_name": <name>, "element_name": <elem>}
1216
- {"kind": "STANDARD_ACTION", "api_name": <name>, "element_name": <elem>,
1217
- "invocation_type": <actionType>}
1218
- {"kind": "FLOW", "api_name": <target_flow_name>,
1219
- "element_name": <elem>}
1220
- {"kind": "UNKNOWN", "api_name": <name>, "element_name": <elem>,
1221
- "invocation_type": <actionType>}
1222
-
1223
- Keying is by FlowDefinition.DeveloperName (not ActiveVersionId) —
1224
- `walk_and_inflate` looks up by `leaf["api_name"]`, which the bundle
1225
- populates with the Flow's DeveloperName.
1226
-
1227
- Flows whose ActiveVersionId is missing (inactive / draft-only) or
1228
- whose fetched metadata was None are silently skipped — they never
1229
- had a body to walk. actionCall entries missing required fields
1230
- (`actionType`, `actionName`, or `name`) degrade to UNKNOWN via
1231
- `classify_action_call`, which already tolerates blanks. Subflow
1232
- entries missing `flowName` are dropped entirely (no api_name to
1233
- descend into).
1234
- """
1235
- import parse_wave
1236
-
1237
- # Build ActiveVersionId → DeveloperName lookup. FlowDefinition rows with
1238
- # no ActiveVersionId (inactive flows, or flows only materializing a
1239
- # Latest version) skip this map — `flow_metadata` is keyed on
1240
- # ActiveVersionId too, so they drop out symmetrically.
1241
- version_to_name: dict[str, str] = {}
1242
- for row in flow_def_rows or []:
1243
- vid = row.get("ActiveVersionId")
1244
- dev_name = row.get("DeveloperName")
1245
- if vid and dev_name:
1246
- version_to_name[vid] = dev_name
1247
-
1248
- flow_children: dict[str, list[dict]] = {}
1249
- for version_id, record in (flow_metadata or {}).items():
1250
- flow_name = version_to_name.get(version_id)
1251
- if not flow_name:
1252
- # No matching FlowDefinition row — can't key the children list.
1253
- continue
1254
- if not isinstance(record, dict):
1255
- continue
1256
- md = record.get("Metadata") or {}
1257
- if not isinstance(md, dict):
1258
- continue
1259
-
1260
- children: list[dict] = []
1261
-
1262
- # actionCalls — each entry has `name` (element id), `actionType`,
1263
- # `actionName`. `actionType`/`actionName` may be missing on edge
1264
- # cases (flow authored against an older API version that omits
1265
- # the field); classify_action_call tolerates empty strings and
1266
- # will return UNKNOWN.
1267
- for ac in md.get("actionCalls") or []:
1268
- if not isinstance(ac, dict):
1269
- continue
1270
- element_name = ac.get("name")
1271
- action_type = ac.get("actionType") or ""
1272
- action_name = ac.get("actionName") or ""
1273
- if not element_name:
1274
- # An unnamed actionCall can't be addressed in the tree
1275
- # view; drop rather than synthesize a placeholder.
1276
- continue
1277
- children.append(
1278
- parse_wave.classify_action_call(action_type, action_name, element_name)
1279
- )
1280
-
1281
- # subflows — each has `name` (element id) + `flowName` (target).
1282
- for sub in md.get("subflows") or []:
1283
- if not isinstance(sub, dict):
1284
- continue
1285
- element_name = sub.get("name")
1286
- target = sub.get("flowName")
1287
- if not element_name or not target:
1288
- continue
1289
- children.append({
1290
- "kind": "FLOW",
1291
- "element_name": element_name,
1292
- "api_name": target,
1293
- })
1294
-
1295
- flow_children[flow_name] = children
1296
-
1297
- return flow_children
1298
-
1299
-
1300
- # ---------------------------------------------------------------------------
1301
- # Flow-ID → DeveloperName normalization
1302
- # ---------------------------------------------------------------------------
1303
-
1304
-
1305
- def _normalize_flow_id_targets(bundle_parsed: dict, flow_def_rows: list[dict]) -> None:
1306
- """Rewrite action invocationTargets that are Flow IDs → DeveloperNames.
1307
-
1308
- Mutates `bundle_parsed` in place. No-op when no flow_def_rows match.
1309
-
1310
- Classic bots occasionally store 300Uv-prefix FlowDefinition IDs or
1311
- 301-prefix Flow version IDs in `GenAiFunctionDefinition.InvocationTarget`
1312
- instead of DeveloperNames. Wave B's FlowDefinition fetch (by-id branch)
1313
- already resolved those IDs; the rows carry both Id + ActiveVersionId +
1314
- DeveloperName. We build a bi-directional map (300-id → name, 301-id →
1315
- name via ActiveVersionId) and rewrite every action whose target is a
1316
- known ID.
1317
-
1318
- Unmatched IDs (Flow genuinely not queryable or belongs to a managed
1319
- package we can't see) stay as-is so the pipeline surfaces them in
1320
- _pending_fetches rather than silently discarding.
1321
- """
1322
- # Build ID → DeveloperName lookup from both Id and ActiveVersionId keys.
1323
- id_to_name: dict[str, str] = {}
1324
- for row in flow_def_rows or []:
1325
- dev_name = row.get("DeveloperName")
1326
- if not dev_name:
1327
- continue
1328
- row_id = row.get("Id")
1329
- if row_id:
1330
- id_to_name[row_id] = dev_name
1331
- active_ver = row.get("ActiveVersionId")
1332
- if active_ver:
1333
- id_to_name[active_ver] = dev_name
1334
-
1335
- if not id_to_name:
1336
- return
1337
-
1338
- def _rewrite_action(action: dict) -> None:
1339
- target = action.get("invocationTarget")
1340
- ttype = (action.get("invocationTargetType") or "").strip().lower()
1341
- if ttype != "flow" or not isinstance(target, str):
1342
- return
1343
- resolved = id_to_name.get(target)
1344
- if resolved:
1345
- # Preserve the original ID for traceability — consumers that
1346
- # need it can still read `_original_invocation_target_id`.
1347
- action["_original_invocation_target_id"] = target
1348
- action["invocationTarget"] = resolved
1349
-
1350
- for topic in bundle_parsed.get("topics") or []:
1351
- for action in topic.get("actions") or []:
1352
- _rewrite_action(action)
1353
- for action in bundle_parsed.get("plannerActions") or []:
1354
- _rewrite_action(action)
1355
-
1356
-
1357
- def _normalize_prompt_template_id_targets(
1358
- bundle_parsed: dict, prompt_template_rows: list[dict],
1359
- ) -> None:
1360
- """Rewrite action invocationTargets that are GenAiPromptTemplate Ids
1361
- (0hf-prefix) → DeveloperNames.
1362
-
1363
- Bug 1 fix (2026-05-05): when GenAiFunctionDefinition.InvocationTarget
1364
- stores a 0hf-prefix prompt template Id instead of a DeveloperName
1365
- (observed in live my-org-alias org), the Metadata API retrieve
1366
- can't match it — Wave B enqueues the Id as-is and the template
1367
- stays in `_pending_fetches.PROMPT_TEMPLATE` forever.
1368
-
1369
- Parallel to `_normalize_flow_id_targets`: build an Id → DeveloperName
1370
- map from `list_prompt_template_metadata` rows (projected to
1371
- {Id, DeveloperName} shape by `_fetch_wave_b_by_names`), mutate the
1372
- bundle in place. Unmatched Ids stay as-is (genuinely missing template,
1373
- or the Metadata API listing failed).
1374
- """
1375
- id_to_name: dict[str, str] = {}
1376
- for row in prompt_template_rows or []:
1377
- row_id = row.get("Id")
1378
- dev_name = row.get("DeveloperName")
1379
- if row_id and dev_name:
1380
- id_to_name[row_id] = dev_name
1381
-
1382
- if not id_to_name:
1383
- return
1384
-
1385
- def _rewrite_action(action: dict) -> None:
1386
- target = action.get("invocationTarget")
1387
- ttype = (action.get("invocationTargetType") or "").strip().lower()
1388
- # Match the same ttype predicate used by _route for prompt-template
1389
- # targets — otherwise a Flow action whose target happens to collide
1390
- # with a prompt template Id (unlikely but possible) wouldn't be
1391
- # caught. _route's predicate is the authority on what's a prompt.
1392
- is_prompt_ttype = (
1393
- ttype in ("prompttemplate", "generatepromptresponse")
1394
- or ttype.startswith("prompt")
1395
- or ttype.startswith("genai")
1396
- )
1397
- if not is_prompt_ttype or not isinstance(target, str):
1398
- return
1399
- resolved = id_to_name.get(target)
1400
- if resolved:
1401
- action["_original_invocation_target_id"] = target
1402
- action["invocationTarget"] = resolved
1403
-
1404
- for topic in bundle_parsed.get("topics") or []:
1405
- for action in topic.get("actions") or []:
1406
- _rewrite_action(action)
1407
- for action in bundle_parsed.get("plannerActions") or []:
1408
- _rewrite_action(action)
1409
-
1410
-
1411
- def _normalize_apex_id_targets(
1412
- bundle_parsed: dict, apex_by_id_rows: list[dict],
1413
- ) -> None:
1414
- """Rewrite action invocationTargets that are Apex (01p-prefix Id)
1415
- -> ApexClass Name.
1416
-
1417
- Gap B fix (2026-05-05): when GenAiFunctionDefinition.InvocationTarget
1418
- stores a 01p-prefix ApexClass Id instead of a class Name (observed in
1419
- live my-org-alias org, e.g. 01p000000000000AAA ->
1420
- MyController), downstream Wave B body retrieval enqueues
1421
- the Id as-is into `_pending_fetches.APEX` and the tree renders the raw
1422
- Id instead of the class name.
1423
-
1424
- Parallel to `_normalize_prompt_template_id_targets`: build an Id ->
1425
- Name map from `fetch_apex_bodies_by_ids` rows (ApexClass uses `Name`,
1426
- not `DeveloperName`), mutate the bundle in place. Unmatched Ids stay
1427
- as-is (genuinely missing class, or the by-Id fetch failed).
1428
- """
1429
- id_to_name: dict[str, str] = {}
1430
- for row in apex_by_id_rows or []:
1431
- row_id = row.get("Id")
1432
- class_name = row.get("Name")
1433
- if row_id and class_name:
1434
- id_to_name[row_id] = class_name
1435
-
1436
- if not id_to_name:
1437
- return
1438
-
1439
- def _rewrite_action(action: dict) -> None:
1440
- target = action.get("invocationTarget")
1441
- ttype = (action.get("invocationTargetType") or "").strip().lower()
1442
- # Match the same ttype predicate used by _route for apex targets.
1443
- # Mirrors the prompt-template normalizer's ttype gate so a Flow
1444
- # action whose target happens to collide with an ApexClass Id
1445
- # (unlikely but possible) isn't miscaught.
1446
- is_apex_ttype = ttype in ("apex", "apexaction") or ttype.startswith("apex")
1447
- if not is_apex_ttype or not isinstance(target, str):
1448
- return
1449
- # Prefix-gate the rewrite to the ApexClass key prefix (01p).
1450
- # Mirrors the `target[:3].lower() == "01p"` check in _collect_wave_b_targets.
1451
- if target[:3].lower() != "01p":
1452
- return
1453
- resolved = id_to_name.get(target)
1454
- if resolved:
1455
- action["_original_invocation_target_id"] = target
1456
- action["invocationTarget"] = resolved
1457
-
1458
- for topic in bundle_parsed.get("topics") or []:
1459
- for action in topic.get("actions") or []:
1460
- _rewrite_action(action)
1461
- for action in bundle_parsed.get("plannerActions") or []:
1462
- _rewrite_action(action)
1463
-
1464
-
1465
- # ---------------------------------------------------------------------------
1466
- # Signature derivation — Apex + Flow (rendered in Section 7 of architecture.md)
1467
- # ---------------------------------------------------------------------------
1468
-
1469
-
1470
- def _derive_apex_signature(apex_row: dict) -> str | None:
1471
- """Return a compact one-line signature string for an Apex class, or None.
1472
-
1473
- Sourced from `SymbolTable.methods[]` on the ApexClass Tooling row. Picks
1474
- the "primary" method:
1475
- 1. Prefer a method annotated `@InvocableMethod` (what Flow / Agentforce
1476
- actually invoke — typically exactly one per Agentforce-relevant
1477
- class).
1478
- 2. Else prefer a `global` or `public static` non-constructor method.
1479
- 3. Else fall back to the first method in SymbolTable source order.
1480
-
1481
- Format: `<modifiers> <returnType> <name>(<p1_type> <p1_name>, ...)`. If
1482
- `returnType` is absent (constructor shape) it's omitted. Parameters are
1483
- rendered as `<type> <name>`; empty param list becomes `()`.
1484
-
1485
- Returns None when `SymbolTable` is missing/empty or contains no method
1486
- candidates. Body parsing is intentionally NOT attempted — too brittle.
1487
- """
1488
- if not isinstance(apex_row, dict):
1489
- return None
1490
- symbol_table = apex_row.get("SymbolTable")
1491
- if not isinstance(symbol_table, dict):
1492
- return None
1493
- methods = symbol_table.get("methods")
1494
- if not isinstance(methods, list) or not methods:
1495
- return None
1496
-
1497
- def _is_invocable(m: dict) -> bool:
1498
- anns = m.get("annotations") or []
1499
- for ann in anns:
1500
- if isinstance(ann, dict):
1501
- if (ann.get("name") or "").lower() == "invocablemethod":
1502
- return True
1503
- elif isinstance(ann, str):
1504
- if ann.lower() == "invocablemethod":
1505
- return True
1506
- return False
1507
-
1508
- def _is_constructor(m: dict) -> bool:
1509
- # SymbolTable represents constructors via `constructors[]`, but some
1510
- # payloads fold them into `methods[]` with a null/empty returnType.
1511
- rt = m.get("returnType")
1512
- return not rt
1513
-
1514
- def _is_promoted(m: dict) -> bool:
1515
- mods = [str(x).lower() for x in (m.get("modifiers") or [])]
1516
- if _is_constructor(m):
1517
- return False
1518
- if "global" in mods:
1519
- return True
1520
- if "public" in mods and "static" in mods:
1521
- return True
1522
- return False
1523
-
1524
- candidates = [m for m in methods if isinstance(m, dict)]
1525
- if not candidates:
1526
- return None
1527
-
1528
- primary: dict | None = next((m for m in candidates if _is_invocable(m)), None)
1529
- if primary is None:
1530
- primary = next((m for m in candidates if _is_promoted(m)), None)
1531
- if primary is None:
1532
- # Last-resort: first method. Skip if it's purely a private/local helper
1533
- # with no chance of being the public entry point — those add noise.
1534
- primary = candidates[0]
1535
- mods = [str(x).lower() for x in (primary.get("modifiers") or [])]
1536
- if "private" in mods and not _is_invocable(primary):
1537
- return None
1538
-
1539
- modifiers = [str(x) for x in (primary.get("modifiers") or [])]
1540
- return_type = primary.get("returnType") or ""
1541
- name = primary.get("name") or ""
1542
- if not name:
1543
- return None
1544
-
1545
- params_out: list[str] = []
1546
- for p in primary.get("parameters") or []:
1547
- if not isinstance(p, dict):
1548
- continue
1549
- p_type = p.get("type") or ""
1550
- p_name = p.get("name") or ""
1551
- if p_type and p_name:
1552
- params_out.append(f"{p_type} {p_name}")
1553
- elif p_type:
1554
- params_out.append(p_type)
1555
- elif p_name:
1556
- params_out.append(p_name)
1557
- params_str = ", ".join(params_out)
1558
-
1559
- parts: list[str] = []
1560
- if modifiers:
1561
- parts.append(" ".join(modifiers))
1562
- if return_type:
1563
- parts.append(return_type)
1564
- parts.append(f"{name}({params_str})")
1565
- return " ".join(parts)
1566
-
1567
-
1568
- def _derive_flow_signature(flow_metadata_record: dict) -> str | None:
1569
- """Return a compact signature string for a Flow, or None.
1570
-
1571
- Sourced from `Metadata.variables[]` on the Tooling Flow record
1572
- (`fetch_flow_metadata` output — the `flow_metadata_record` is the
1573
- full Tooling row, and `.Metadata` is the decoded complexvalue dict).
1574
-
1575
- Flow variables carry boolean `isInput` / `isOutput` flags. A variable
1576
- with `isInput: true` contributes to the `in:` side; `isOutput: true`
1577
- contributes to the `out:` side; a variable can set both (round-trip)
1578
- and will appear on BOTH sides. Variables with neither flag are locals
1579
- and are skipped.
1580
-
1581
- Format: `in: <name>: <type>[, ...] | out: <name>: <type>[, ...]`.
1582
- If only one side has entries, only that side is emitted. Returns None
1583
- when neither side has entries.
1584
-
1585
- Collection variables render as `List<<dataType>>`. sObject variables
1586
- use the `objectType` field (e.g. `List<Case>` rather than
1587
- `List<SObject>`). Insertion order from `variables[]` is preserved —
1588
- we deliberately do not sort, to keep the signature aligned with the
1589
- flow author's declared order.
1590
- """
1591
- if not isinstance(flow_metadata_record, dict):
1592
- return None
1593
- md = flow_metadata_record.get("Metadata")
1594
- if not isinstance(md, dict):
1595
- # Test convenience: accept a bare Metadata dict, not just the full row.
1596
- if "variables" in flow_metadata_record:
1597
- md = flow_metadata_record
1598
- else:
1599
- return None
1600
-
1601
- variables = md.get("variables") or []
1602
- if not isinstance(variables, list):
1603
- return None
1604
-
1605
- def _render_type(var: dict) -> str:
1606
- data_type = (var.get("dataType") or "").strip()
1607
- obj_type = (var.get("objectType") or "").strip()
1608
- apex_class = (var.get("apexClass") or "").strip()
1609
- dt_lower = data_type.lower()
1610
- # sObject variables carry the concrete SObject name in `objectType`
1611
- # (e.g. `Case`). Apex-typed variables carry the concrete class name
1612
- # in `apexClass` (e.g. `CX_OrgSelector.Org`). Without the apexClass
1613
- # branch, collections of Apex-typed values render as the useless
1614
- # `List<Apex>` instead of `List<CX_OrgSelector.Org>`.
1615
- if dt_lower == "sobject" and obj_type:
1616
- base = obj_type
1617
- elif dt_lower == "apex" and apex_class:
1618
- base = apex_class
1619
- else:
1620
- base = data_type or "Object"
1621
- if var.get("isCollection"):
1622
- return f"List<{base}>"
1623
- return base
1624
-
1625
- inputs: list[str] = []
1626
- outputs: list[str] = []
1627
- for v in variables:
1628
- if not isinstance(v, dict):
1629
- continue
1630
- name = v.get("name")
1631
- if not name:
1632
- continue
1633
- rendered = f"{name}: {_render_type(v)}"
1634
- if v.get("isInput"):
1635
- inputs.append(rendered)
1636
- if v.get("isOutput"):
1637
- outputs.append(rendered)
1638
-
1639
- if not inputs and not outputs:
1640
- return None
1641
-
1642
- parts: list[str] = []
1643
- if inputs:
1644
- parts.append("in: " + ", ".join(inputs))
1645
- if outputs:
1646
- parts.append("out: " + ", ".join(outputs))
1647
- return " | ".join(parts)
1648
-
1649
-
1650
- def _stamp_signatures(
1651
- node: dict,
1652
- apex_sigs: dict[str, str],
1653
- flow_sigs: dict[str, str],
1654
- flow_reasons: dict[str, str] | None = None,
1655
- ) -> None:
1656
- """Recursively stamp `node["signature"]` on matching APEX / FLOW leaves.
1657
-
1658
- Shared utility flows / helpers that appear in multiple branches all
1659
- receive the same stamped signature — they point at the same
1660
- FlowDefinition / ApexClass, so the signature is the same.
1661
-
1662
- Gap 2 fix (2026-05-05): when a FLOW leaf has no signature but *does*
1663
- have an explanation in `flow_reasons` (e.g. managed-pkg body not
1664
- retrievable via the Data API fallback), stamp `node["_signature_reason"]`
1665
- so the renderer can distinguish a silent hole from a known limitation.
1666
- """
1667
- if not isinstance(node, dict):
1668
- return
1669
- kind = node.get("kind")
1670
- name = node.get("api_name")
1671
- if kind == "APEX" and name and name in apex_sigs:
1672
- node["signature"] = apex_sigs[name]
1673
- elif kind == "FLOW" and name:
1674
- if name in flow_sigs:
1675
- node["signature"] = flow_sigs[name]
1676
- elif flow_reasons and name in flow_reasons:
1677
- node["_signature_reason"] = flow_reasons[name]
1678
- for child in node.get("children") or []:
1679
- _stamp_signatures(child, apex_sigs, flow_sigs, flow_reasons)
1680
-
1681
-
1682
- # ---------------------------------------------------------------------------
1683
- # Gap C (2026-05-05): prompt template body retrieve + stamp
1684
- # ---------------------------------------------------------------------------
1685
-
1686
-
1687
- def _is_prompt_ttype(ttype: str) -> bool:
1688
- """Mirror the ttype predicate used by `_route` /
1689
- `_normalize_prompt_template_id_targets` so collection + rewrite +
1690
- retrieve all recognize the same action kind."""
1691
- t = (ttype or "").strip().lower()
1692
- return (
1693
- t in ("prompttemplate", "generatepromptresponse")
1694
- or t.startswith("prompt")
1695
- or t.startswith("genai")
1696
- )
1697
-
1698
-
1699
- def _collect_prompt_template_names(bundle_parsed: dict) -> set[str]:
1700
- """Walk topics + plannerActions, collect prompt-template DeveloperNames.
1701
-
1702
- Called AFTER `_normalize_prompt_template_id_targets` — any 0hf-prefix
1703
- Id that resolved via Wave B's Id-list-metadata should already be a
1704
- DeveloperName. Defensive: drop anything that still looks Id-shaped
1705
- (0hf prefix) so we don't send a malformed
1706
- `GenAiPromptTemplate:0hfUv...` spec to the retrieve CLI.
1707
- """
1708
- names: set[str] = set()
1709
-
1710
- def _collect(action: dict) -> None:
1711
- ttype = action.get("invocationTargetType") or ""
1712
- if not _is_prompt_ttype(ttype):
1713
- return
1714
- target = action.get("invocationTarget")
1715
- if not isinstance(target, str) or not target:
1716
- return
1717
- if target[:3].lower() == "0hf":
1718
- # Id never got rewritten — the list_metadata lookup missed it
1719
- # (managed-pkg template, permission issue). Skip; it stays in
1720
- # _pending_fetches with the Id as the key.
1721
- return
1722
- names.add(target)
1723
-
1724
- for topic in bundle_parsed.get("topics") or []:
1725
- for action in topic.get("actions") or []:
1726
- _collect(action)
1727
- for action in bundle_parsed.get("plannerActions") or []:
1728
- _collect(action)
1729
- return names
1730
-
1731
-
1732
- def _collect_flow_nested_prompt_template_names(
1733
- node: dict,
1734
- already_retrieved: dict[str, dict],
1735
- out: set[str],
1736
- ) -> None:
1737
- """Walk the finalized tree and collect PROMPT_TEMPLATE leaves whose
1738
- body wasn't stamped during the bundle-scoped retrieve.
1739
-
1740
- Bundle-scoped `_collect_prompt_template_names` only sees prompt
1741
- templates declared as top-level topic/planner InvocationTargets.
1742
- Prompt templates referenced from inside a Flow (via a
1743
- `generatePromptResponse` actionCall) are discovered later during
1744
- Wave B's BFS of flow XML and end up as PROMPT_TEMPLATE leaves in the
1745
- tree — but their names never reached the first retrieve, so their
1746
- `_body_available` stays False and content is silently lost.
1747
-
1748
- Defensive: drop 0hf-Id-shape names (managed-pkg templates whose Id
1749
- never rewrote to a DeveloperName) — sending
1750
- `GenAiPromptTemplate:0hfUv...` to the retrieve CLI yields a
1751
- malformed spec; the Id stays in `_pending_fetches.PROMPT_TEMPLATE`
1752
- as intended.
1753
- """
1754
- if not isinstance(node, dict):
1755
- return
1756
- if node.get("kind") == "PROMPT_TEMPLATE":
1757
- name = node.get("api_name")
1758
- if (
1759
- isinstance(name, str)
1760
- and name
1761
- and name[:3].lower() != "0hf"
1762
- and not node.get("_body_available", False)
1763
- ):
1764
- body = already_retrieved.get(name)
1765
- if not (body and body.get("content")):
1766
- out.add(name)
1767
- for child in node.get("children") or []:
1768
- _collect_flow_nested_prompt_template_names(child, already_retrieved, out)
1769
-
1770
-
1771
- def _stamp_prompt_template_bodies(
1772
- node: dict,
1773
- bodies: dict[str, dict],
1774
- ) -> None:
1775
- """Recursively stamp prompt-template body fields onto matching
1776
- PROMPT_TEMPLATE leaves.
1777
-
1778
- For each leaf whose `api_name` matches a key in `bodies`, attach:
1779
- - master_label, content, inputs, active_version_identifier
1780
- - _body_available = True
1781
-
1782
- Leaves with no matching body get `_body_available = False` so the
1783
- renderer can distinguish "no body retrieved" from "body successfully
1784
- empty". Shared templates appearing in multiple branches receive the
1785
- same stamped body (they reference the same DeveloperName).
1786
- """
1787
- if not isinstance(node, dict):
1788
- return
1789
- kind = node.get("kind")
1790
- name = node.get("api_name")
1791
- if kind == "PROMPT_TEMPLATE" and name:
1792
- body = bodies.get(name)
1793
- if body:
1794
- node["master_label"] = body.get("masterLabel")
1795
- node["content"] = body.get("content")
1796
- node["inputs"] = body.get("inputs") or []
1797
- node["active_version_identifier"] = body.get(
1798
- "activeVersionIdentifier"
1799
- )
1800
- node["_body_available"] = True
1801
- else:
1802
- node["_body_available"] = False
1803
- for child in node.get("children") or []:
1804
- _stamp_prompt_template_bodies(child, bodies)
1805
-
1806
-
1807
- # ---------------------------------------------------------------------------
1808
- # Phase 9: build declared_action_tree.json via parse_wave primitives
1809
- # ---------------------------------------------------------------------------
1810
-
1811
-
1812
- def _run_parse_wave(
1813
- bot_info: dict,
1814
- bundle_parsed: dict,
1815
- wave_b: dict,
1816
- args: argparse.Namespace,
1817
- work_dir: Path,
1818
- ) -> dict:
1819
- """Invoke parse_wave's init_tree + root-children builder in-process.
1820
-
1821
- parse_wave was written to be invoked as a subprocess with env vars
1822
- carrying AGENT_API_NAME / AGENT_VERSION / BOT_ID / etc. For Phase 2
1823
- Batch 1 we set those env vars transiently and call the module's
1824
- public helpers — no subprocess overhead, same behavior.
1825
- """
1826
- import parse_wave
1827
-
1828
- # parse_wave reads these via os.environ.
1829
- prior_env = {
1830
- "AGENT_API_NAME": os.environ.get("AGENT_API_NAME"),
1831
- "AGENT_VERSION": os.environ.get("AGENT_VERSION"),
1832
- "BOT_ID": os.environ.get("BOT_ID"),
1833
- "BOT_MASTER_LABEL": os.environ.get("BOT_MASTER_LABEL"),
1834
- "VERSION_AUTO_PICKED": os.environ.get("VERSION_AUTO_PICKED"),
1835
- }
1836
- os.environ["AGENT_API_NAME"] = args.agent_api_name
1837
- os.environ["AGENT_VERSION"] = bot_info["version"]
1838
- os.environ["BOT_ID"] = bot_info["bot_id"]
1839
- os.environ["BOT_MASTER_LABEL"] = bot_info["master_label"]
1840
- os.environ["VERSION_AUTO_PICKED"] = "true" if bot_info["version_auto_picked"] else "false"
1841
-
1842
- try:
1843
- # Persist the bundle for parse_wave's finalize_cap path.
1844
- bundle_out = work_dir / "_bundle_parsed.json"
1845
- bundle_out.write_text(json.dumps(bundle_parsed, indent=2))
1846
-
1847
- # Persist a fake _bot_definition.json so init_tree reads real
1848
- # metadata for the agent block.
1849
- bd_file = work_dir / "_bot_definition.json"
1850
- bd_file.write_text(json.dumps({
1851
- "result": {"records": [bot_info.get("bot_definition") or {}]},
1852
- }))
1853
-
1854
- tree = parse_wave.init_tree(work_dir, bundle_parsed)
1855
-
1856
- # Build root children + track bundle-derived BFS refs.
1857
- # call the public `empty_kind_sets` /
1858
- # `BFS_KINDS` symbols — reaching into `parse_wave._*` reopened the
1859
- # leading-underscore surface that closed for `redact_text`.
1860
- visited_by_kind = parse_wave.empty_kind_sets()
1861
- aux_visited: set[tuple[str, str]] = set()
1862
- children, bundle_refs = parse_wave.build_root_children(
1863
- bundle_parsed, visited_by_kind, aux_visited,
1864
- )
1865
- tree["root"]["children"] = children
1866
-
1867
- # Merge Flow metadata into flow_children. parse_wave wants this as
1868
- # `{flow_name: [child_refs]}`. Build it from the in-memory
1869
- # `Flow.Metadata` JSON Wave B already fetched — the Tooling REST
1870
- # API decodes the `Metadata` complexvalue field into a plain dict,
1871
- # so no XML parsing is needed (see `_build_flow_children` +
1872
- # fixture `CLASSIC_FLOW_METADATA`). Without this, every FLOW leaf
1873
- # in `metadata_tree.json` shipped with `children: []` and the
1874
- # user's recursive-tree view was flat.
1875
- flow_children = _build_flow_children(
1876
- wave_b["flow_metadata"], wave_b["flow_def_rows"],
1877
- )
1878
-
1879
- # BFS routing for bundle refs.
1880
- pending_by_kind, _cycles = parse_wave.bfs_step(
1881
- parse_wave.empty_kind_sets(), visited_by_kind, bundle_refs,
1882
- )
1883
-
1884
- # Depth-cap accumulator threaded through inflate.
1885
- depth_cap_pending = parse_wave.empty_kind_sets()
1886
- parse_wave.walk_and_inflate(
1887
- tree["root"], flow_children, pending_out=depth_cap_pending,
1888
- )
1889
-
1890
- # Merge any Apex / Flow we actually fetched into visited — they
1891
- # no longer count as pending.
1892
- for row in wave_b["apex_rows"]:
1893
- nm = row.get("Name")
1894
- if nm:
1895
- visited_by_kind["APEX"].add(nm)
1896
- for row in wave_b["flow_def_rows"]:
1897
- nm = row.get("DeveloperName")
1898
- if nm:
1899
- visited_by_kind["FLOW"].add(nm)
1900
- # Gap C (2026-05-05): prompt templates whose bodies we retrieved
1901
- # count as visited and must drop out of _pending_fetches.
1902
- # Templates the retrieve didn't return (permission / managed-pkg /
1903
- # retrieve failure) stay out of `visited` so they surface there,
1904
- # mirroring the Flow-by-name "no rows = stays pending" pattern.
1905
- prompt_template_bodies = wave_b.get("prompt_template_bodies") or {}
1906
- for name in prompt_template_bodies:
1907
- if name:
1908
- visited_by_kind["PROMPT_TEMPLATE"].add(name)
1909
-
1910
- # Stamp Apex / Flow signatures onto every matching tree node so
1911
- # render_architecture.py can populate Section 7. Wave B already
1912
- # fetched SymbolTable (Apex) + Metadata (Flow); we just project it
1913
- # onto `{kind, api_name}` leaves here. Shared utility flows /
1914
- # helpers that appear in multiple positions all receive the same
1915
- # stamped signature — that's the correct behavior (same definition).
1916
- apex_sigs: dict[str, str] = {}
1917
- for row in wave_b["apex_rows"]:
1918
- nm = row.get("Name")
1919
- if not nm:
1920
- continue
1921
- sig = _derive_apex_signature(row)
1922
- if sig:
1923
- apex_sigs[nm] = sig
1924
-
1925
- flow_sigs: dict[str, str] = {}
1926
- # Gap 2 fix (2026-05-05): explain silent signature holes. Managed
1927
- # flows come back from `fetch_flow_definition_ids_by_names` via the
1928
- # FlowDefinitionView fallback with _source="FlowDefinitionView",
1929
- # ActiveVersionId=None, _body_available=False — by design, since
1930
- # managed-pkg flow bodies are IP-protected. Previously every such
1931
- # row produced an unexplained "_Signature not captured._" in the
1932
- # rendered markdown. Now we surface the structural reason.
1933
- #
1934
- # For the generic "no usable metadata record" case (Tooling row
1935
- # present but flow_metadata missing — e.g. metadata fetch failed
1936
- # or the flow has no active version at all) we also stamp a reason
1937
- # so the renderer never silently drops the node.
1938
- flow_reasons: dict[str, str] = {}
1939
- flow_metadata_by_vid = wave_b.get("flow_metadata") or {}
1940
- for row in wave_b["flow_def_rows"]:
1941
- dev_name = row.get("DeveloperName") or row.get("_bare_developer_name")
1942
- if not dev_name:
1943
- continue
1944
- source = row.get("_source") or ""
1945
- if source == "FlowDefinitionView":
1946
- ns = row.get("NamespacePrefix") or ""
1947
- reason = (
1948
- f"managed-package (ns={ns}); body not retrievable via Tooling/Metadata API"
1949
- if ns
1950
- else "managed-package; body not retrievable via Tooling/Metadata API"
1951
- )
1952
- flow_reasons[dev_name] = reason
1953
- continue
1954
- active_ver = row.get("ActiveVersionId")
1955
- if not active_ver:
1956
- flow_reasons[dev_name] = "no active version"
1957
- continue
1958
- md_record = flow_metadata_by_vid.get(active_ver)
1959
- if not md_record:
1960
- flow_reasons[dev_name] = "flow metadata fetch returned no record"
1961
- continue
1962
- sig = _derive_flow_signature(md_record)
1963
- if sig:
1964
- flow_sigs[dev_name] = sig
1965
- else:
1966
- flow_reasons[dev_name] = "flow metadata has no in/out params"
1967
-
1968
- _stamp_signatures(tree["root"], apex_sigs, flow_sigs, flow_reasons)
1969
-
1970
- # Gap C: stamp retrieved prompt-template bodies onto the tree.
1971
- # Leaves with a matching body gain content/master_label/inputs;
1972
- # leaves without get `_body_available = False` so the renderer
1973
- # can distinguish "retrieve missed" from "body truly absent".
1974
- _stamp_prompt_template_bodies(tree["root"], prompt_template_bodies)
1975
-
1976
- for kind in parse_wave.BFS_KINDS:
1977
- pending_by_kind[kind] |= depth_cap_pending.get(kind, set())
1978
-
1979
- depth_cap_tripped = any(depth_cap_pending[k] for k in parse_wave.BFS_KINDS)
1980
-
1981
- tree["_pending_fetches"] = {
1982
- k: sorted(pending_by_kind.get(k, set()) - visited_by_kind.get(k, set()))
1983
- for k in parse_wave.BFS_KINDS
1984
- }
1985
-
1986
- any_pending = any(tree["_pending_fetches"][k] for k in parse_wave.BFS_KINDS)
1987
- if depth_cap_tripped:
1988
- tree["_partial"] = True
1989
- tree["_partial_reason"] = "max-depth-cap"
1990
- elif any_pending:
1991
- tree["_partial"] = True
1992
- if not tree.get("_partial_reason"):
1993
- tree["_partial_reason"] = "pending-refs"
1994
- else:
1995
- tree["_partial"] = False
1996
- tree["_partial_reason"] = None
1997
-
1998
- # Surface Wave-B-level unresolved items (e.g. unknown ID prefixes).
1999
- for u in wave_b.get("unresolved", []) or []:
2000
- tree.setdefault("_unresolved", []).append(u)
2001
-
2002
- node_count, depth, kind_counts = parse_wave.compute_stats(tree["root"])
2003
- tree["node_count"] = node_count
2004
- tree["depth"] = depth
2005
- tree["_kind_counts"] = kind_counts
2006
-
2007
- all_visited: set[tuple[str, str]] = set(aux_visited)
2008
- for kind, names in visited_by_kind.items():
2009
- for n in names:
2010
- all_visited.add((kind, n))
2011
- tree["_visited"] = [list(v) for v in sorted(all_visited)]
2012
-
2013
- tree_path = work_dir / "declared_action_tree.json"
2014
- tmp = tree_path.with_suffix(tree_path.suffix + ".tmp")
2015
- tmp.write_text(json.dumps(tree, indent=2))
2016
- os.replace(tmp, tree_path)
2017
- return tree
2018
- finally:
2019
- # Restore env so test runners that reuse the process don't leak
2020
- # state across invocations.
2021
- for k, v in prior_env.items():
2022
- if v is None:
2023
- os.environ.pop(k, None)
2024
- else:
2025
- os.environ[k] = v
2026
-
2027
-
2028
- # ---------------------------------------------------------------------------
2029
- # Phase 11: finalize
2030
- # ---------------------------------------------------------------------------
2031
-
2032
-
2033
- def _swap_dir_atomic(target: Path, staging: Path) -> None:
2034
- """Per-file overwrite from `staging` into `target` — preserves any
2035
- unrelated sibling content already present in `target`.
2036
-
2037
- P0 fix (2026-05-05): the prior implementation did
2038
- ``os.replace(target, backup); os.replace(staging, target)`` — an
2039
- atomic whole-directory swap that was correct in isolation but
2040
- DESTRUCTIVE of co-tenants. The `<agent>__<ver>/` dir is co-tenanted:
2041
- co-tenants write per-session subdirs
2042
- (`<session_id>/`) alongside architecture's files. Swapping the whole
2043
- directory silently wiped every cached session trace.
2044
-
2045
- New behavior: iterate `staging`'s immediate children and `os.replace`
2046
- each one into `target`. The directory `target` itself is never
2047
- moved or deleted, so any session subdirs under it survive.
2048
-
2049
- Trade-off: the old helper supported atomic rollback (restore from
2050
- backup on failure). The per-file pattern cannot — a crash partway
2051
- through the loop leaves architecture's output in a split state
2052
- (some new files, some old). This is acceptable because:
2053
- - per-file `os.replace` is still atomic (no empty-path window
2054
- for any individual file, so the "concurrent reader sees
2055
- empty dir" bug that addressed is still closed);
2056
- - `last_built_at.txt` is written LAST by the caller, so
2057
- consumers can treat its presence as the success sentinel;
2058
- - architecture is re-runnable, co-tenant session traces are not.
2059
-
2060
- Callers must still guarantee `staging` is on the same filesystem as
2061
- `target` (helper constructs `staging` as a sibling of `target`, so
2062
- that holds by construction).
2063
- """
2064
- import shutil
2065
-
2066
- if not staging.is_dir():
2067
- raise OSError(f"staging dir missing: {staging}")
2068
-
2069
- target.mkdir(parents=True, exist_ok=True)
2070
-
2071
- for src in staging.iterdir():
2072
- dst = target / src.name
2073
- # Clear any existing destination so `os.replace` lands cleanly
2074
- # when the incoming type differs (file replacing dir or vice
2075
- # versa). For same-type overwrites `os.replace` would handle
2076
- # files on its own, but directories require an empty target or
2077
- # same-name existing dir — safer to unify both here.
2078
- if dst.exists() or dst.is_symlink():
2079
- if dst.is_dir() and not dst.is_symlink():
2080
- shutil.rmtree(dst)
2081
- else:
2082
- dst.unlink()
2083
- os.replace(src, dst)
2084
-
2085
- # Staging should be empty now; best-effort teardown.
2086
- try:
2087
- staging.rmdir()
2088
- except OSError:
2089
- shutil.rmtree(staging, ignore_errors=True)
2090
-
2091
-
2092
- def _run_finalize(
2093
- data_dir: Path,
2094
- cache_dir: Path,
2095
- tree: dict,
2096
- work_dir: Path,
2097
- agent_api_name: str,
2098
- agent_version: str,
2099
- planner_name: str,
2100
- ) -> None:
2101
- """Atomic-write tree + summary + manifest. Keep it simple.
2102
-
2103
- For Phase 2 Batch 1 we replicate finalize.py's essential behavior
2104
- (tree + manifest) but skip the sf_meta mirror — there's no
2105
- sf_meta dir when main.py runs the pipeline SOQL-first. Metadata-API
2106
- retrieves land in Batch 2/3.
2107
-
2108
- both `data_dir` and `cache_dir` are swapped
2109
- via `_swap_dir_atomic` to close the "rmtree then rename" empty-dir
2110
- window. A crash during the second swap restores the original from
2111
- the staging-sibling `.<name>.backup.<pid>` rather than leaving an
2112
- empty path.
2113
- """
2114
- import datetime as dt
2115
- import shutil
2116
-
2117
- built_at = dt.datetime.now(dt.timezone.utc).isoformat().replace("+00:00", "Z")
2118
- tree_base = f"{agent_api_name}_{agent_version}_metadata_tree"
2119
-
2120
- # Finalize's _partial computation. Mirrors finalize.py:109-117 — both
2121
- # buckets (_pending_fetches AND _unresolved) must be empty for a
2122
- # clean run. _unresolved captures wave-B failures (HTTP 4xx,
2123
- # iteration-cap exhaustion, managed-flow filter misses) that have
2124
- # already been moved out of _pending_fetches; checking only the
2125
- # latter would silently call a partial run "converged".
2126
- planner_ok = bool(planner_name)
2127
- pending_total = sum(len(v) for v in (tree.get("_pending_fetches") or {}).values())
2128
- unresolved_count = len(tree.get("_unresolved") or [])
2129
- waves_converged = pending_total == 0 and unresolved_count == 0
2130
- tree["_partial"] = not (planner_ok and waves_converged)
2131
- tree.pop("_visited", None)
2132
-
2133
- # Pin deterministic child ordering as the last assembly step before
2134
- # the authoritative write. Shared with the standalone `finalize.py`
2135
- # subprocess so both paths produce byte-identical trees. Downstream
2136
- # readers see one canonical order from disk; they do not re-sort.
2137
- from finalize import sort_tree_in_place
2138
- sort_tree_in_place(tree.get("root") or {})
2139
-
2140
- # staging names are siblings (same parent) so the
2141
- # `os.replace` used by `_swap_dir_atomic` is a same-filesystem atomic
2142
- # rename. `.staging.<pid>` disambiguates concurrent pipelines on the
2143
- # same host.
2144
- data_parent = data_dir.parent
2145
- data_staging = data_parent / f".{data_dir.name}.staging.{os.getpid()}"
2146
- if data_staging.exists():
2147
- shutil.rmtree(data_staging)
2148
- data_staging.mkdir(parents=True)
2149
- tree_out = data_staging / f"{tree_base}.json"
2150
- tree_out.write_text(json.dumps(tree, indent=2))
2151
-
2152
- # P2.2-1: phase 10 (architecture.md renderer). Imported lazily so a
2153
- # renderer bug can't break the existing Batch 1 pipeline before the
2154
- # tree JSON has been written — the tree + manifest remain the
2155
- # authoritative outputs, architecture.md is a derived artifact.
2156
- #
2157
- # filename now self-identifying —
2158
- # `{agent_api_name}_{agent_version}_architecture.md` (e.g.
2159
- # `MyAgent_v5_architecture.md`). Same shape as the tree JSON,
2160
- # minus the `_metadata_tree` suffix. The `.error` sidecar follows
2161
- # the same shape.
2162
- arch_base = f"{agent_api_name}_{agent_version}"
2163
- arch_name = f"{arch_base}_architecture.md"
2164
- arch_error_name = f"{arch_base}_architecture.md.error"
2165
- try:
2166
- from render_architecture import render as _render_architecture
2167
- _render_architecture(tree_out, data_staging / arch_name)
2168
- except Exception as e:
2169
- # Best-effort: a render failure downgrades the run to "tree OK,
2170
- # architecture skipped" rather than aborting finalize. The
2171
- # reason string surfaces in the next-run logs for triage.
2172
- (data_staging / arch_error_name).write_text(
2173
- f"render_architecture failed: {type(e).__name__}: {e}\n"
2174
- )
2175
-
2176
- # dropped `{tree_base}.summary.md` from the output contract —
2177
- # was a redundant summary of the tree JSON; consumers should read the
2178
- # JSON directly. See CHANGELOG for details.
2179
- (data_staging / "last_built_at.txt").write_text(built_at + "\n")
2180
-
2181
- _swap_dir_atomic(data_dir, data_staging)
2182
-
2183
- # CACHE_DIR staging — same two-phase swap.
2184
- cache_parent = cache_dir.parent
2185
- cache_staging = cache_parent / f".{cache_dir.name}.staging.{os.getpid()}"
2186
- if cache_staging.exists():
2187
- shutil.rmtree(cache_staging)
2188
- cache_staging.mkdir(parents=True)
2189
-
2190
- manifest = {
2191
- "built_at_utc": built_at,
2192
- "schema_version": tree.get("_schema_version", SCHEMA_VERSION),
2193
- "agent": tree.get("agent", {}),
2194
- "node_count": tree.get("node_count", 0),
2195
- "depth": tree.get("depth", 0),
2196
- "kind_counts": tree.get("_kind_counts", {}),
2197
- "ttl_days": CACHE_TTL_DAYS,
2198
- "data_path": str(data_dir / f"{tree_base}.json"),
2199
- "partial": tree.get("_partial", False),
2200
- "unresolved_count": len(tree.get("_unresolved", []) or []),
2201
- }
2202
- (cache_staging / "manifest.json").write_text(json.dumps(manifest, indent=2))
2203
- # Copy tree + bundle sidecar for cache replay
2204
- (cache_staging / "declared_action_tree.json").write_text(json.dumps(tree, indent=2))
2205
- bundle_src = work_dir / "_bundle_parsed.json"
2206
- if bundle_src.is_file():
2207
- (cache_staging / "_bundle_parsed.json").write_text(bundle_src.read_text())
2208
-
2209
- _swap_dir_atomic(cache_dir, cache_staging)
2210
-
2211
-
2212
- # ---------------------------------------------------------------------------
2213
- # Emit helpers
2214
- # ---------------------------------------------------------------------------
2215
-
2216
-
2217
- def _read_built_at_utc(cache_dir: Path | None) -> str:
2218
- if cache_dir is None:
2219
- return ""
2220
- try:
2221
- return json.loads((cache_dir / "manifest.json").read_text()).get("built_at_utc", "") or ""
2222
- except (OSError, ValueError):
2223
- return ""
2224
-
2225
-
2226
- def _emit_fail(
2227
- args: argparse.Namespace,
2228
- extra_ctx: dict | None,
2229
- status: str,
2230
- error_detail: str = "",
2231
- start_epoch: float | None = None,
2232
- ) -> int:
2233
- """Write an .emit_ctx.json with STATUS=<status>.
2234
-
2235
- STATUS enum (from emit_result.py):
2236
- OK, PARTIAL_OK, INVALID_INPUT, AUTH_REQUIRED, AGENT_NOT_FOUND,
2237
- AGENT_VERSION_NOT_FOUND, RETRIEVE_FAILED, WRITE_FAILED.
2238
-
2239
- For probe failures, the plan's description suggested SCHEMA_DRIFT
2240
- but emit_result doesn't carry that enum value. We map probe failures
2241
- to RETRIEVE_FAILED with an explicit error_detail — the RESULT block's
2242
- ERROR_DETAIL carries the "schema-drift" reason. Adding a new enum
2243
- value would require touching emit_result (out of scope P1 primitive);
2244
- the mapping preserves emit_result's existing contract.
2245
-
2246
- Returns the exit code the caller should return.
2247
- """
2248
- work_dir = Path(args.work_dir)
2249
- work_dir.mkdir(parents=True, exist_ok=True)
2250
- ctx = {
2251
- "status": status,
2252
- "error_detail": error_detail,
2253
- "agent_api_name": args.agent_api_name,
2254
- "agent_version": args.agent_version or "",
2255
- "version_auto_picked": False,
2256
- "agent_generation": "unknown",
2257
- "bot_id": "",
2258
- "org_id_15": "",
2259
- "org_id_18": "",
2260
- "cache_hit": False,
2261
- "cached_at_utc": "",
2262
- "cache_path": "",
2263
- "output_json_path": "",
2264
- "output_summary_path": "",
2265
- "node_count": 0,
2266
- "depth": 0,
2267
- "partial": status == "PARTIAL_OK",
2268
- "partial_reason": "",
2269
- "pending_fetches_count": 0,
2270
- "unresolved_count": 0,
2271
- "available_bots": "",
2272
- "available_versions": "",
2273
- # Bug fix (2026-05-05): start_epoch captured once at pipeline entry
2274
- # and threaded through every _emit_* helper. Previously each helper
2275
- # re-captured time.time() AFTER the pipeline had already run, so
2276
- # emit_result.py computed WALL_TIME_SECONDS against a timestamp taken
2277
- # ~tens of seconds AFTER the real work finished and reported ~0.0s.
2278
- "start_epoch": start_epoch if start_epoch is not None else time.time(),
2279
- "data_dir": str(DATA_ROOT),
2280
- "work_dir": str(work_dir),
2281
- # failure paths never invoke the renderer.
2282
- "architecture_path": "",
2283
- "render_failed": False,
2284
- "render_error_detail": "",
2285
- }
2286
- if extra_ctx:
2287
- ctx.update(extra_ctx)
2288
- (work_dir / ".emit_ctx.json").write_text(json.dumps(ctx, indent=2))
2289
- return 1
2290
-
2291
-
2292
- def _emit_cache_hit(
2293
- args: argparse.Namespace,
2294
- data_dir: Path,
2295
- cache_dir: Path,
2296
- manifest: dict,
2297
- start_epoch: float | None = None,
2298
- *,
2299
- org_id_15: str = "",
2300
- org_id_18: str = "",
2301
- ) -> int:
2302
- work_dir = Path(args.work_dir)
2303
- work_dir.mkdir(parents=True, exist_ok=True)
2304
- agent_version = manifest.get("agent", {}).get("version", "")
2305
- tree_base = f"{args.agent_api_name}_{agent_version}_metadata_tree"
2306
-
2307
- # on a cache hit the renderer is NOT re-invoked — but the
2308
- # architecture.md from the prior run is a legitimate output of the
2309
- # cached data_dir. Surface it when present, skip the .error sidecar
2310
- # since render_failed semantics only apply to THIS run's renderer.
2311
- # filename rename to `{agent}_{ver}_architecture.md` —
2312
- # NB `tree_base` above still carries the `_metadata_tree` suffix (it
2313
- # names the JSON); architecture filenames drop the suffix.
2314
- arch_base = f"{args.agent_api_name}_{agent_version}"
2315
- arch_path = data_dir / f"{arch_base}_architecture.md"
2316
- architecture_path = str(arch_path) if arch_path.is_file() else ""
2317
-
2318
- ctx = {
2319
- "status": "OK",
2320
- "error_detail": "",
2321
- "agent_api_name": args.agent_api_name,
2322
- "agent_version": manifest.get("agent", {}).get("version", ""),
2323
- "version_auto_picked": manifest.get("agent", {}).get("_version_auto_picked", False),
2324
- "agent_generation": manifest.get("agent", {}).get("generation", "unknown"),
2325
- "bot_id": manifest.get("agent", {}).get("bot_id", ""),
2326
- "org_id_15": org_id_15,
2327
- "org_id_18": org_id_18,
2328
- "cache_hit": True,
2329
- "cached_at_utc": manifest.get("built_at_utc", ""),
2330
- "cache_path": str(cache_dir),
2331
- "output_json_path": str(data_dir / f"{tree_base}.json"),
2332
- # summary.md dropped from the output contract. Field kept
2333
- # empty for RESULT-block shape stability.
2334
- "output_summary_path": "",
2335
- "node_count": int(manifest.get("node_count", 0) or 0),
2336
- "depth": int(manifest.get("depth", 0) or 0),
2337
- "partial": bool(manifest.get("partial", False)),
2338
- "partial_reason": "",
2339
- "pending_fetches_count": 0,
2340
- "unresolved_count": int(manifest.get("unresolved_count", 0) or 0),
2341
- "available_bots": "",
2342
- "available_versions": "",
2343
- # Bug fix (2026-05-05): see _emit_fail note — start_epoch is captured
2344
- # at pipeline entry and threaded through. Cache-hit paths are short-
2345
- # running so the drift is smaller, but the field should still reflect
2346
- # the invocation's real wall time.
2347
- "start_epoch": start_epoch if start_epoch is not None else time.time(),
2348
- "data_dir": str(data_dir),
2349
- "work_dir": str(work_dir),
2350
- # architecture-render outcome signals. render_failed
2351
- # stays False for cache replays — that flag tracks THIS run's
2352
- # renderer, not the cached run's; a cache hit implies no retry.
2353
- "architecture_path": architecture_path,
2354
- "render_failed": False,
2355
- "render_error_detail": "",
2356
- }
2357
- (work_dir / ".emit_ctx.json").write_text(json.dumps(ctx, indent=2))
2358
- return 0
2359
-
2360
-
2361
- def _emit_ok(
2362
- args: argparse.Namespace,
2363
- data_dir: Path,
2364
- tree: dict,
2365
- bot_info: dict,
2366
- org_id_15: str,
2367
- start_epoch: float | None = None,
2368
- cache_dir: Path | None = None,
2369
- org_id_18: str = "",
2370
- ) -> int:
2371
- work_dir = Path(args.work_dir)
2372
- work_dir.mkdir(parents=True, exist_ok=True)
2373
- agent_version = bot_info["version"]
2374
- tree_base = f"{args.agent_api_name}_{agent_version}_metadata_tree"
2375
- pending_total = sum(len(v) for v in (tree.get("_pending_fetches") or {}).values())
2376
-
2377
- # surface architecture-render outcome on the success path.
2378
- # finalize writes either `{agent}_{ver}_architecture.md` (render OK) or
2379
- # `{agent}_{ver}_architecture.md.error` (render raised) into the
2380
- # data_dir; we read whichever is present and plumb the fields through
2381
- # the ctx. emit_result consumes the boolean to auto-promote
2382
- # OK -> PARTIAL_OK when the tree landed but the diagram render failed.
2383
- # filename rename — self-identifying shape. `tree_base` above
2384
- # is for the JSON path (carries `_metadata_tree`); architecture uses
2385
- # the unsuffixed agent+version base.
2386
- arch_base = f"{args.agent_api_name}_{agent_version}"
2387
- arch_path = data_dir / f"{arch_base}_architecture.md"
2388
- arch_sidecar = data_dir / f"{arch_base}_architecture.md.error"
2389
- architecture_path = str(arch_path) if arch_path.is_file() else ""
2390
- render_failed = arch_sidecar.is_file()
2391
- render_error_detail = ""
2392
- if render_failed:
2393
- try:
2394
- raw = arch_sidecar.read_text(errors="replace").strip()
2395
- except OSError:
2396
- raw = ""
2397
- if raw:
2398
- # Single-line cap, 200-char truncation, scrubbed via the
2399
- # rest_client redactor (same contract as write_emit_ctx).
2400
- from rest_client import redact_text as _redact
2401
- render_error_detail = _redact(raw.splitlines()[0])[:200]
2402
-
2403
- ctx = {
2404
- "status": "PARTIAL_OK" if tree.get("_partial") else "OK",
2405
- "error_detail": "",
2406
- "agent_api_name": args.agent_api_name,
2407
- "agent_version": bot_info["version"],
2408
- "version_auto_picked": bot_info["version_auto_picked"],
2409
- "agent_generation": tree.get("agent", {}).get("generation", "unknown"),
2410
- "bot_id": bot_info["bot_id"],
2411
- "org_id_15": org_id_15,
2412
- # Gap 3 fix (2026-05-05): the 18-char id is available from
2413
- # `sf org display` in _derive_org_ids but was previously dropped.
2414
- # Now threaded from pipeline entry so the RESULT contract field is
2415
- # actually populated on success.
2416
- "org_id_18": org_id_18,
2417
- "cache_hit": False,
2418
- "cached_at_utc": _read_built_at_utc(cache_dir),
2419
- # Gap 4 fix (2026-05-05): non-cache-hit runs write the manifest into
2420
- # `cache_dir` (see _run_finalize) so the field should point at the
2421
- # same path a subsequent invocation would probe. Caller passes the
2422
- # already-computed cache_dir; we skip the leading-empty fallback
2423
- # only when it's truly unknown (shouldn't happen on _emit_ok).
2424
- "cache_path": str(cache_dir) if cache_dir is not None else "",
2425
- "output_json_path": str(data_dir / f"{tree_base}.json"),
2426
- # summary.md dropped from the output contract.
2427
- "output_summary_path": "",
2428
- "node_count": int(tree.get("node_count", 0) or 0),
2429
- "depth": int(tree.get("depth", 0) or 0),
2430
- "partial": bool(tree.get("_partial", False)),
2431
- "partial_reason": tree.get("_partial_reason") or "",
2432
- "pending_fetches_count": pending_total,
2433
- "unresolved_count": len(tree.get("_unresolved", []) or []),
2434
- "available_bots": "",
2435
- "available_versions": "",
2436
- # Bug fix (2026-05-05): see _emit_fail note — start_epoch threaded
2437
- # from pipeline entry so WALL_TIME_SECONDS reflects the full run.
2438
- "start_epoch": start_epoch if start_epoch is not None else time.time(),
2439
- "data_dir": str(data_dir),
2440
- "work_dir": str(work_dir),
2441
- # architecture-render outcome signals.
2442
- "architecture_path": architecture_path,
2443
- "render_failed": render_failed,
2444
- "render_error_detail": render_error_detail,
2445
- }
2446
- (work_dir / ".emit_ctx.json").write_text(json.dumps(ctx, indent=2))
2447
- return 0
2448
-
2449
-
2450
- # ---------------------------------------------------------------------------
2451
- # Entry point
2452
- # ---------------------------------------------------------------------------
2453
-
2454
-
2455
- def _run_pipeline(args: argparse.Namespace, start_epoch: float) -> int: # noqa: PLR0911, PLR0915
2456
- """Execute the 12-phase pipeline. Extracted from `main()` so the
2457
- top-level entry point can wrap any uncaught exception in a RESULT
2458
- block .
2459
-
2460
- Every structured failure path here already routes through
2461
- `_emit_fail` and returns a non-zero exit code. Exceptions that
2462
- escape this function are, by definition, bugs we hadn't thought of
2463
- yet — `main()` catches them so the skill contract (RESULT block on
2464
- every exit path) holds regardless.
2465
- """
2466
- work_dir = Path(args.work_dir)
2467
- work_dir.mkdir(parents=True, exist_ok=True)
2468
-
2469
- # Phase 2 Batch 1: single creds cell shared between provider + refresh.
2470
- # Refresh mutates the cell; provider reads it on every attempt — this
2471
- # is the `` refresh contract.
2472
- #
2473
- # Wave B fetches run N concurrent Flow.Metadata
2474
- # calls through parallel_retrieve.fetch_bodies_parallel. `refresh_fn`
2475
- # serializes behind a lock + 1-second monotonic dedupe window so
2476
- # concurrent 401s don't each fork their own `sf org display`. See
2477
- # `_build_creds_plumbing`.
2478
- try:
2479
- initial = _resolve_creds(args.org_alias)
2480
- except (AuthRequired, SfCliError) as e:
2481
- return _emit_fail(
2482
- args, None, "AUTH_REQUIRED",
2483
- error_detail=redact_error(e),
2484
- start_epoch=start_epoch,
2485
- )
2486
-
2487
- creds_provider, refresh_fn, _creds_cell = _build_creds_plumbing(
2488
- initial,
2489
- resolve_creds=lambda: _resolve_creds(args.org_alias),
2490
- )
2491
-
2492
- # Phase 2.5: derive org_id_15 + org_id_18 + api_version
2493
- try:
2494
- org_id_15, org_id_18, api_version = _derive_org_ids(args.org_alias)
2495
- except (AuthRequired, SfCliError) as e:
2496
- return _emit_fail(
2497
- args, None, "AUTH_REQUIRED",
2498
- error_detail=redact_error(e),
2499
- start_epoch=start_epoch,
2500
- )
2501
-
2502
- # Phase 3: probe channels
2503
- channels = probe_channels(
2504
- args.org_alias, org_id_15, api_version,
2505
- force_refresh=args.reprobe,
2506
- )
2507
- if channels.get("status") == "PROBE_FAILED":
2508
- # Plan suggested STATUS=SCHEMA_DRIFT; emit_result's STATUS enum
2509
- # doesn't include that value. Mapping to RETRIEVE_FAILED with a
2510
- # "schema-drift" ERROR_DETAIL preserves the existing enum
2511
- # contract while surfacing the cause. A future batch may add
2512
- # SCHEMA_DRIFT to the enum; that change lives in emit_result.
2513
- missing = [
2514
- (sobj, e.get("mandatory_missing", []))
2515
- for sobj, e in (channels.get("channels") or {}).items()
2516
- if e.get("mandatory_missing")
2517
- ]
2518
- return _emit_fail(
2519
- args, None, "RETRIEVE_FAILED",
2520
- error_detail=f"schema-drift: mandatory fields missing: {missing[:3]}",
2521
- start_epoch=start_epoch,
2522
- )
2523
-
2524
- # Phase 4: resolve bot + version
2525
- try:
2526
- bot_info = _resolve_bot(
2527
- args.agent_api_name, args.agent_version,
2528
- creds_provider, refresh_fn,
2529
- api_version=api_version,
2530
- )
2531
- except (RestClientError, SoqlParamError) as e:
2532
- return _emit_fail(
2533
- args, None, "AUTH_REQUIRED",
2534
- error_detail=redact_error(e),
2535
- start_epoch=start_epoch,
2536
- )
2537
-
2538
- if bot_info is None:
2539
- # AGENT_NOT_FOUND — emit without a list-of-available-bots context.
2540
- # The unbounded bot-list SELECT was removed (LIMIT-less unfiltered
2541
- # query on BotDefinition). Operators can run their own SOQL if
2542
- # they need to enumerate available bots.
2543
- return _emit_fail(
2544
- args,
2545
- {"org_id_15": org_id_15},
2546
- "AGENT_NOT_FOUND",
2547
- error_detail=f"BotDefinition.DeveloperName '{args.agent_api_name}' not found",
2548
- start_epoch=start_epoch,
2549
- )
2550
-
2551
- if bot_info.get("_version_not_found"):
2552
- vers_csv = ",".join(
2553
- f"{v['version']}({v['status']})" for v in bot_info.get("all_versions", [])
2554
- )
2555
- return _emit_fail(
2556
- args,
2557
- {"available_versions": vers_csv, "org_id_15": org_id_15},
2558
- "AGENT_VERSION_NOT_FOUND",
2559
- error_detail=f"No matching BotVersion (requested: {args.agent_version!r})",
2560
- start_epoch=start_epoch,
2561
- )
2562
-
2563
- # Phase 5: cache check
2564
- data_dir = build_agent_data_dir(org_id_15, args.agent_api_name, bot_info["version"])
2565
- cache_dir = build_agent_cache_dir(org_id_15, args.agent_api_name, bot_info["version"])
2566
- if not args.force_refresh:
2567
- manifest = _cache_is_fresh(cache_dir)
2568
- if manifest is not None:
2569
- return _emit_cache_hit(
2570
- args, data_dir, cache_dir, manifest,
2571
- start_epoch=start_epoch,
2572
- org_id_15=org_id_15,
2573
- org_id_18=org_id_18,
2574
- )
2575
-
2576
- # Phase 6: Wave A — 7 queries, DAG-ordered parallel layers. A1 now
2577
- # takes (agent_api_name, version) and resolves the canonical planner
2578
- # DeveloperName from the live chain naming invariant (v1 = <Agent>,
2579
- # vN = <Agent>...%\_vN); the row's DeveloperName becomes the
2580
- # authoritative `planner_name` for finalize/render downstream.
2581
- try:
2582
- wave_a = _run_wave_a(
2583
- args.agent_api_name, bot_info["version"],
2584
- creds_provider, refresh_fn,
2585
- api_version=api_version,
2586
- parallelism=args.parallelism,
2587
- )
2588
- except (RestClientError, SoqlParamError) as e:
2589
- return _emit_fail(
2590
- args, None, "RETRIEVE_FAILED",
2591
- error_detail=f"wave-a-failed:{redact_error(e)}",
2592
- start_epoch=start_epoch,
2593
- )
2594
-
2595
- if wave_a is None:
2596
- return _emit_fail(
2597
- args, {"org_id_15": org_id_15},
2598
- "AGENT_NOT_FOUND",
2599
- error_detail=(
2600
- f"GenAiPlannerDefinition chain not found for "
2601
- f"agent={args.agent_api_name!r} version={bot_info['version']!r}"
2602
- ),
2603
- start_epoch=start_epoch,
2604
- )
2605
-
2606
- # Phase 7: join Wave A → bundle-shaped dict
2607
- bundle_parsed = _join_wave_a_to_bundle(bot_info, wave_a)
2608
-
2609
- # Phase 8: Wave B — body fetches
2610
- try:
2611
- wave_b = _run_wave_b(
2612
- bundle_parsed,
2613
- creds_provider, refresh_fn,
2614
- api_version=api_version,
2615
- org_alias=args.org_alias,
2616
- parallelism=args.parallelism,
2617
- )
2618
- except (RestClientError, SoqlParamError) as e:
2619
- return _emit_fail(
2620
- args, None, "RETRIEVE_FAILED",
2621
- error_detail=f"wave-b-failed:{redact_error(e)}",
2622
- start_epoch=start_epoch,
2623
- )
2624
-
2625
- # Phase 8.5: iterative Wave B — follow subflow + apex refs from fetched
2626
- # Flow.Metadata bodies until fixed-point. Without this pass, shared
2627
- # utility flows (handleFlowFault) and nested subflows ship as empty
2628
- # leaves even though their bodies are reachable via Tooling API.
2629
- # Iteration cap safeguards against pathological flow graphs.
2630
- try:
2631
- wave_b = _iterate_wave_b(
2632
- wave_b,
2633
- creds_provider, refresh_fn,
2634
- api_version=api_version,
2635
- org_alias=args.org_alias,
2636
- parallelism=args.parallelism,
2637
- max_iterations=5,
2638
- )
2639
- except (RestClientError, SoqlParamError) as e:
2640
- return _emit_fail(
2641
- args, None, "RETRIEVE_FAILED",
2642
- error_detail=f"wave-b-iter-failed:{redact_error(e)}",
2643
- start_epoch=start_epoch,
2644
- )
2645
-
2646
- # Surface Wave-A layer-2/3 task failures alongside Wave-B's so the
2647
- # downstream `_run_parse_wave` sweep folds them into `tree["_unresolved"]`
2648
- # and `_partial_reason` flips to PARTIAL_OK.
2649
- wave_a_unresolved = wave_a.get("unresolved") or []
2650
- if wave_a_unresolved:
2651
- wave_b["unresolved"] = [*wave_a_unresolved, *(wave_b.get("unresolved") or [])]
2652
-
2653
- # normalize Flow-ID InvocationTargets → DeveloperName.
2654
- # Classic ReAct bots occasionally store NGA-style 300Uv-prefix Flow IDs
2655
- # in GenAiFunctionDefinition.InvocationTarget (observed in one real-org
2656
- # benchmark run, 6 flows out of 6). Wave B's fetch_flow_definition_by_ids
2657
- # successfully resolves them, but the resolved DeveloperName never
2658
- # propagates back into bundle_parsed — so parse_wave sees the raw ID as
2659
- # the flow's api_name, which never matches visited["FLOW"] (keyed on
2660
- # DeveloperName), and every such flow ends up in _pending_fetches.
2661
- # Result: PARTIAL_OK on what should be OK, plus unreadable Flow IDs in
2662
- # rendered architecture.md.
2663
- #
2664
- # Fix: rewrite bundle_parsed's action invocationTarget in-place from
2665
- # ID → DeveloperName using wave_b["flow_def_rows"] (both the IN-by-names
2666
- # and the IN-by-ids branches populate it). Unresolved IDs (Flow not
2667
- # found in the org) stay as-is and will land in _pending_fetches as
2668
- # intended (they really are unresolved).
2669
- _normalize_flow_id_targets(bundle_parsed, wave_b["flow_def_rows"])
2670
-
2671
- # Bug 1 fix (2026-05-05): analogous rewrite for GenAiPromptTemplate Ids.
2672
- # Wave B's prompt-template Id fetch resolves 0hf-prefix Ids to
2673
- # DeveloperNames; without this rewrite the bundle would enqueue the
2674
- # raw Id into _pending_fetches.PROMPT_TEMPLATE and the downstream
2675
- # Metadata retrieve would never match.
2676
- _normalize_prompt_template_id_targets(
2677
- bundle_parsed, wave_b.get("prompt_template_id_rows") or [],
2678
- )
2679
-
2680
- # Gap B fix (2026-05-05): analogous rewrite for ApexClass Ids.
2681
- # Wave B's fetch_apex_bodies_by_ids resolves 01p-prefix Ids to ApexClass
2682
- # Name; without this rewrite the bundle would enqueue the raw Id into
2683
- # _pending_fetches.APEX and the tree would render the bare Id instead
2684
- # of the class name.
2685
- _normalize_apex_id_targets(
2686
- bundle_parsed, wave_b.get("apex_rows") or [],
2687
- )
2688
-
2689
- # Gap C fix (2026-05-05): retrieve GenAiPromptTemplate bodies.
2690
- # GenAiPromptTemplate is NOT SOQL-queryable (Tooling or Data API). The
2691
- # only way to fetch the body is `sf project retrieve start
2692
- # --metadata GenAiPromptTemplate:<name>,...`. After
2693
- # _normalize_prompt_template_id_targets has rewritten 0hf-Ids to
2694
- # DeveloperNames, collect the names and retrieve in a single sf
2695
- # subprocess call. The resulting bodies get stashed on wave_b so
2696
- # _run_parse_wave can stamp them onto PROMPT_TEMPLATE leaves (parallel
2697
- # to the Apex/Flow signature stamping pattern).
2698
- prompt_template_names = _collect_prompt_template_names(bundle_parsed)
2699
- prompt_template_bodies: dict[str, dict] = {}
2700
- if prompt_template_names:
2701
- try:
2702
- prompt_template_bodies = retrieve_prompt_templates(
2703
- args.org_alias,
2704
- sorted(prompt_template_names),
2705
- work_dir,
2706
- )
2707
- except AuthRequired:
2708
- raise
2709
- except SfCliError as e:
2710
- wave_b.setdefault("unresolved", []).append({
2711
- "kind": "PROMPT_TEMPLATE",
2712
- "reason": f"prompt-template-retrieve-failed:{redact_error(e)}",
2713
- })
2714
- wave_b["prompt_template_bodies"] = prompt_template_bodies
2715
-
2716
- # Phase 9: parse_wave -> declared_action_tree.json
2717
- try:
2718
- tree = _run_parse_wave(bot_info, bundle_parsed, wave_b, args, work_dir)
2719
- except (OSError, KeyError) as e:
2720
- return _emit_fail(
2721
- args, None, "WRITE_FAILED",
2722
- error_detail=f"parse-wave-failed:{redact_error(e)}",
2723
- start_epoch=start_epoch,
2724
- )
2725
-
2726
- # Phase 10: render architecture.md — invoked inline from _run_finalize
2727
- # so the write lands in the same staging dir as the tree JSON and
2728
- # participates in the atomic _swap_dir_atomic below. See P2.2-1.
2729
-
2730
- # Flow-nested prompt-template catch-up (2026-05-05). The bundle-scoped
2731
- # retrieve at step 1 above only covers prompt templates declared as
2732
- # top-level topic/planner InvocationTargets. Templates referenced from
2733
- # inside a Flow (via a `generatePromptResponse` actionCall) are
2734
- # discovered during parse_wave's BFS of flow XML — too late for the
2735
- # first retrieve. Without this second pass their `_body_available`
2736
- # stays False and the md renders `_Body not retrieved._` with no
2737
- # PARTIAL flag (silent content loss). `_stamp_prompt_template_bodies`
2738
- # is idempotent, so re-stamping already-stamped leaves is safe.
2739
- flow_nested_names: set[str] = set()
2740
- _collect_flow_nested_prompt_template_names(
2741
- tree["root"], prompt_template_bodies, flow_nested_names,
2742
- )
2743
- if flow_nested_names:
2744
- try:
2745
- more_bodies = retrieve_prompt_templates(
2746
- args.org_alias,
2747
- sorted(flow_nested_names),
2748
- work_dir,
2749
- )
2750
- except AuthRequired:
2751
- raise
2752
- except SfCliError as e:
2753
- tree.setdefault("_unresolved", []).append({
2754
- "kind": "PROMPT_TEMPLATE",
2755
- "reason": f"prompt-template-retrieve-failed:{redact_error(e)}",
2756
- })
2757
- else:
2758
- prompt_template_bodies.update(more_bodies)
2759
- _stamp_prompt_template_bodies(tree["root"], prompt_template_bodies)
2760
- # _kind_counts / _pending_fetches are unchanged: the leaves
2761
- # already existed and were counted; this pass only attaches
2762
- # body content to them. No BFS-kind reshuffling needed.
2763
-
2764
- # Phase 11: finalize. The canonical planner_name now comes from the
2765
- # resolved planner row (Wave A), which joins into bundle_parsed as
2766
- # `plannerName`; fall back to the agent api name if the resolver
2767
- # returned a row without a DeveloperName (shouldn't happen on a
2768
- # healthy planner but keeps finalize's _partial flag well-defined).
2769
- planner_name = bundle_parsed.get("plannerName") or args.agent_api_name
2770
- try:
2771
- _run_finalize(
2772
- data_dir, cache_dir, tree, work_dir,
2773
- args.agent_api_name, bot_info["version"],
2774
- planner_name,
2775
- )
2776
- except OSError as e:
2777
- return _emit_fail(
2778
- args, None, "WRITE_FAILED",
2779
- error_detail=f"finalize-failed:{redact_error(e)}",
2780
- start_epoch=start_epoch,
2781
- )
2782
-
2783
- # Phase 12: emit RESULT
2784
- return _emit_ok(
2785
- args, data_dir, tree, bot_info, org_id_15,
2786
- start_epoch=start_epoch,
2787
- cache_dir=cache_dir,
2788
- org_id_18=org_id_18,
2789
- )
2790
-
2791
-
2792
- def main(argv: list[str] | None = None) -> int:
2793
- """Entry point — parses args, runs pipeline, guarantees a RESULT block.
2794
-
2795
- the skill contract promises that every exit
2796
- path emits `=== RESULT ===` with a structured STATUS. The prior
2797
- implementation let any uncaught exception from the pipeline (e.g.
2798
- the HTTP 405 from , or any future bug we haven't foreseen)
2799
- propagate to the top of the process — the user saw a Python
2800
- traceback on stderr and the wrapper skill never got its RESULT
2801
- block. We now wrap `_run_pipeline` in a broad `except Exception` and
2802
- funnel uncaught failures through `_emit_fail` with
2803
- STATUS=RETRIEVE_FAILED + ERROR_DETAIL="uncaught-exception: <redacted
2804
- message>". `redact_error` keeps tokens / full-URL querystrings out
2805
- of the ctx file. `SystemExit` + `KeyboardInterrupt` are NOT caught —
2806
- argparse's `--help` path + Ctrl-C must propagate normally.
2807
- """
2808
- args = parse_args(argv)
2809
- # MUST happen before any pipeline phase reads DATA_ROOT / CACHE_ROOT.
2810
- # See _apply_path_overrides docstring for the 3-level rebind contract.
2811
- _apply_path_overrides(args)
2812
- # Bug fix (2026-05-05): capture start_epoch ONCE at real pipeline entry
2813
- # and thread it through every _emit_* call so WALL_TIME_SECONDS measures
2814
- # actual pipeline duration, not ctx-write→emit_result drift.
2815
- start_epoch = time.time()
2816
- try:
2817
- return _run_pipeline(args, start_epoch)
2818
- except Exception as exc:
2819
- # broad catch — anything that reaches here is a bug
2820
- # but the skill contract requires a structured exit. redact_error
2821
- # strips bearer tokens and accessToken values from the message
2822
- # ; the exception class name leads the detail so triage
2823
- # can still identify the shape even when the message is terse.
2824
- redacted = redact_error(exc)
2825
- return _emit_fail(
2826
- args,
2827
- None,
2828
- "RETRIEVE_FAILED",
2829
- error_detail=f"uncaught-exception: {redacted}",
2830
- start_epoch=start_epoch,
2831
- )
2832
-
2833
-
2834
- if __name__ == "__main__":
2835
- sys.exit(main())