@salesforce/afv-skills 1.14.0 → 1.16.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 (365) hide show
  1. package/package.json +1 -1
  2. package/skills/activating-datacloud/SKILL.md +0 -1
  3. package/skills/analyzing-omnistudio-dependencies/SKILL.md +0 -1
  4. package/skills/applying-slds/SKILL.md +322 -0
  5. package/skills/applying-slds/checklists.md +83 -0
  6. package/skills/applying-slds/examples.md +283 -0
  7. package/skills/applying-slds/guidance/README.md +83 -0
  8. package/skills/applying-slds/guidance/blueprints-index.md +213 -0
  9. package/skills/applying-slds/guidance/icons-guidance.md +186 -0
  10. package/skills/applying-slds/guidance/overviews/borders.md +236 -0
  11. package/skills/applying-slds/guidance/overviews/color.md +266 -0
  12. package/skills/applying-slds/guidance/overviews/display-density.md +366 -0
  13. package/skills/applying-slds/guidance/overviews/icons.md +240 -0
  14. package/skills/applying-slds/guidance/overviews/illustrations.md +235 -0
  15. package/skills/applying-slds/guidance/overviews/shadows.md +176 -0
  16. package/skills/applying-slds/guidance/overviews/spacing.md +216 -0
  17. package/skills/applying-slds/guidance/overviews/typography.md +323 -0
  18. package/skills/applying-slds/guidance/overviews/utilities.md +542 -0
  19. package/skills/applying-slds/guidance/slds-development-guide.md +288 -0
  20. package/skills/applying-slds/guidance/styling-hooks/borders.md +202 -0
  21. package/skills/applying-slds/guidance/styling-hooks/color/expressive-palette-hooks.md +153 -0
  22. package/skills/applying-slds/guidance/styling-hooks/color/index.md +171 -0
  23. package/skills/applying-slds/guidance/styling-hooks/color/semantic/accent-hooks.md +204 -0
  24. package/skills/applying-slds/guidance/styling-hooks/color/semantic/feedback-hooks.md +768 -0
  25. package/skills/applying-slds/guidance/styling-hooks/color/semantic/surface-hooks.md +337 -0
  26. package/skills/applying-slds/guidance/styling-hooks/color/system-hooks.md +132 -0
  27. package/skills/applying-slds/guidance/styling-hooks/index.md +327 -0
  28. package/skills/applying-slds/guidance/styling-hooks/shadows.md +238 -0
  29. package/skills/applying-slds/guidance/styling-hooks/spacing.md +254 -0
  30. package/skills/applying-slds/guidance/styling-hooks/typography.md +448 -0
  31. package/skills/applying-slds/guidance/utilities/alignment.md +119 -0
  32. package/skills/applying-slds/guidance/utilities/borders.md +131 -0
  33. package/skills/applying-slds/guidance/utilities/box.md +125 -0
  34. package/skills/applying-slds/guidance/utilities/color.md +165 -0
  35. package/skills/applying-slds/guidance/utilities/dark-mode.md +111 -0
  36. package/skills/applying-slds/guidance/utilities/description-list.md +168 -0
  37. package/skills/applying-slds/guidance/utilities/floats.md +117 -0
  38. package/skills/applying-slds/guidance/utilities/grid.md +264 -0
  39. package/skills/applying-slds/guidance/utilities/horizontal-list.md +110 -0
  40. package/skills/applying-slds/guidance/utilities/hyphenation.md +84 -0
  41. package/skills/applying-slds/guidance/utilities/index.md +205 -0
  42. package/skills/applying-slds/guidance/utilities/interactions.md +89 -0
  43. package/skills/applying-slds/guidance/utilities/layout.md +109 -0
  44. package/skills/applying-slds/guidance/utilities/line-clamp.md +131 -0
  45. package/skills/applying-slds/guidance/utilities/margin.md +155 -0
  46. package/skills/applying-slds/guidance/utilities/media-object.md +161 -0
  47. package/skills/applying-slds/guidance/utilities/name-value-list.md +152 -0
  48. package/skills/applying-slds/guidance/utilities/padding.md +155 -0
  49. package/skills/applying-slds/guidance/utilities/position.md +177 -0
  50. package/skills/applying-slds/guidance/utilities/print.md +114 -0
  51. package/skills/applying-slds/guidance/utilities/scrollable.md +126 -0
  52. package/skills/applying-slds/guidance/utilities/sizing.md +190 -0
  53. package/skills/applying-slds/guidance/utilities/themes.md +121 -0
  54. package/skills/applying-slds/guidance/utilities/truncate.md +127 -0
  55. package/skills/applying-slds/guidance/utilities/typography.md +166 -0
  56. package/skills/applying-slds/guidance/utilities/vertical-list.md +166 -0
  57. package/skills/applying-slds/guidance/utilities/visibility.md +228 -0
  58. package/skills/applying-slds/metadata/README.md +84 -0
  59. package/skills/applying-slds/metadata/blueprints/components/accordion.yaml +304 -0
  60. package/skills/applying-slds/metadata/blueprints/components/activity-timeline.yaml +92 -0
  61. package/skills/applying-slds/metadata/blueprints/components/alert.yaml +103 -0
  62. package/skills/applying-slds/metadata/blueprints/components/app-launcher.yaml +94 -0
  63. package/skills/applying-slds/metadata/blueprints/components/avatar-group.yaml +81 -0
  64. package/skills/applying-slds/metadata/blueprints/components/avatar.yaml +97 -0
  65. package/skills/applying-slds/metadata/blueprints/components/badges.yaml +102 -0
  66. package/skills/applying-slds/metadata/blueprints/components/brand-band.yaml +198 -0
  67. package/skills/applying-slds/metadata/blueprints/components/breadcrumbs.yaml +95 -0
  68. package/skills/applying-slds/metadata/blueprints/components/builder-header.yaml +192 -0
  69. package/skills/applying-slds/metadata/blueprints/components/button-groups.yaml +82 -0
  70. package/skills/applying-slds/metadata/blueprints/components/button-icons.yaml +295 -0
  71. package/skills/applying-slds/metadata/blueprints/components/buttons.yaml +230 -0
  72. package/skills/applying-slds/metadata/blueprints/components/cards.yaml +124 -0
  73. package/skills/applying-slds/metadata/blueprints/components/carousel.yaml +140 -0
  74. package/skills/applying-slds/metadata/blueprints/components/chat.yaml +179 -0
  75. package/skills/applying-slds/metadata/blueprints/components/checkbox-button-group.yaml +192 -0
  76. package/skills/applying-slds/metadata/blueprints/components/checkbox-button.yaml +204 -0
  77. package/skills/applying-slds/metadata/blueprints/components/checkbox-toggle.yaml +177 -0
  78. package/skills/applying-slds/metadata/blueprints/components/checkbox.yaml +108 -0
  79. package/skills/applying-slds/metadata/blueprints/components/color-picker.yaml +172 -0
  80. package/skills/applying-slds/metadata/blueprints/components/combobox.yaml +136 -0
  81. package/skills/applying-slds/metadata/blueprints/components/counter.yaml +147 -0
  82. package/skills/applying-slds/metadata/blueprints/components/data-tables.yaml +157 -0
  83. package/skills/applying-slds/metadata/blueprints/components/datepickers.yaml +130 -0
  84. package/skills/applying-slds/metadata/blueprints/components/datetime-picker.yaml +155 -0
  85. package/skills/applying-slds/metadata/blueprints/components/docked-composer.yaml +201 -0
  86. package/skills/applying-slds/metadata/blueprints/components/docked-form-footer.yaml +161 -0
  87. package/skills/applying-slds/metadata/blueprints/components/docked-utility-bar.yaml +175 -0
  88. package/skills/applying-slds/metadata/blueprints/components/drop-zone.yaml +115 -0
  89. package/skills/applying-slds/metadata/blueprints/components/dueling-picklist.yaml +196 -0
  90. package/skills/applying-slds/metadata/blueprints/components/dynamic-icons.yaml +128 -0
  91. package/skills/applying-slds/metadata/blueprints/components/dynamic-menu.yaml +141 -0
  92. package/skills/applying-slds/metadata/blueprints/components/expandable-section.yaml +115 -0
  93. package/skills/applying-slds/metadata/blueprints/components/expression.yaml +143 -0
  94. package/skills/applying-slds/metadata/blueprints/components/feeds.yaml +125 -0
  95. package/skills/applying-slds/metadata/blueprints/components/file-selector.yaml +154 -0
  96. package/skills/applying-slds/metadata/blueprints/components/files.yaml +119 -0
  97. package/skills/applying-slds/metadata/blueprints/components/form-element.yaml +145 -0
  98. package/skills/applying-slds/metadata/blueprints/components/global-header.yaml +120 -0
  99. package/skills/applying-slds/metadata/blueprints/components/global-navigation.yaml +100 -0
  100. package/skills/applying-slds/metadata/blueprints/components/icons.yaml +138 -0
  101. package/skills/applying-slds/metadata/blueprints/components/illustration.yaml +205 -0
  102. package/skills/applying-slds/metadata/blueprints/components/input.yaml +151 -0
  103. package/skills/applying-slds/metadata/blueprints/components/list-builder.yaml +127 -0
  104. package/skills/applying-slds/metadata/blueprints/components/lookups.yaml +132 -0
  105. package/skills/applying-slds/metadata/blueprints/components/map.yaml +118 -0
  106. package/skills/applying-slds/metadata/blueprints/components/menus.yaml +134 -0
  107. package/skills/applying-slds/metadata/blueprints/components/modals.yaml +152 -0
  108. package/skills/applying-slds/metadata/blueprints/components/notifications.yaml +88 -0
  109. package/skills/applying-slds/metadata/blueprints/components/page-headers.yaml +135 -0
  110. package/skills/applying-slds/metadata/blueprints/components/panels.yaml +149 -0
  111. package/skills/applying-slds/metadata/blueprints/components/path.yaml +154 -0
  112. package/skills/applying-slds/metadata/blueprints/components/picklist.yaml +125 -0
  113. package/skills/applying-slds/metadata/blueprints/components/pills.yaml +154 -0
  114. package/skills/applying-slds/metadata/blueprints/components/popovers.yaml +120 -0
  115. package/skills/applying-slds/metadata/blueprints/components/progress-bar.yaml +110 -0
  116. package/skills/applying-slds/metadata/blueprints/components/progress-indicator.yaml +133 -0
  117. package/skills/applying-slds/metadata/blueprints/components/progress-ring.yaml +102 -0
  118. package/skills/applying-slds/metadata/blueprints/components/prompt.yaml +126 -0
  119. package/skills/applying-slds/metadata/blueprints/components/publishers.yaml +178 -0
  120. package/skills/applying-slds/metadata/blueprints/components/radio-button-group.yaml +172 -0
  121. package/skills/applying-slds/metadata/blueprints/components/radio-group.yaml +112 -0
  122. package/skills/applying-slds/metadata/blueprints/components/rich-text-editor.yaml +135 -0
  123. package/skills/applying-slds/metadata/blueprints/components/scoped-notifications.yaml +188 -0
  124. package/skills/applying-slds/metadata/blueprints/components/scoped-tabs.yaml +97 -0
  125. package/skills/applying-slds/metadata/blueprints/components/select.yaml +127 -0
  126. package/skills/applying-slds/metadata/blueprints/components/setup-assistant.yaml +152 -0
  127. package/skills/applying-slds/metadata/blueprints/components/slider.yaml +111 -0
  128. package/skills/applying-slds/metadata/blueprints/components/spinners.yaml +135 -0
  129. package/skills/applying-slds/metadata/blueprints/components/split-view.yaml +112 -0
  130. package/skills/applying-slds/metadata/blueprints/components/summary-detail.yaml +103 -0
  131. package/skills/applying-slds/metadata/blueprints/components/tabs.yaml +138 -0
  132. package/skills/applying-slds/metadata/blueprints/components/textarea.yaml +116 -0
  133. package/skills/applying-slds/metadata/blueprints/components/tiles.yaml +108 -0
  134. package/skills/applying-slds/metadata/blueprints/components/timepicker.yaml +111 -0
  135. package/skills/applying-slds/metadata/blueprints/components/toast.yaml +154 -0
  136. package/skills/applying-slds/metadata/blueprints/components/tooltips.yaml +107 -0
  137. package/skills/applying-slds/metadata/blueprints/components/tree-grid.yaml +116 -0
  138. package/skills/applying-slds/metadata/blueprints/components/trees.yaml +116 -0
  139. package/skills/applying-slds/metadata/blueprints/components/trial-bar.yaml +112 -0
  140. package/skills/applying-slds/metadata/blueprints/components/vertical-navigation.yaml +130 -0
  141. package/skills/applying-slds/metadata/blueprints/components/vertical-tabs.yaml +140 -0
  142. package/skills/applying-slds/metadata/blueprints/components/visual-picker.yaml +150 -0
  143. package/skills/applying-slds/metadata/blueprints/components/welcome-mat.yaml +136 -0
  144. package/skills/applying-slds/metadata/hooks-index.json +6272 -0
  145. package/skills/applying-slds/metadata/icon-metadata.json +38466 -0
  146. package/skills/applying-slds/metadata/utilities-index.json +21912 -0
  147. package/skills/applying-slds/references/component-selection.md +112 -0
  148. package/skills/applying-slds/references/icons-decision-guide.md +124 -0
  149. package/skills/applying-slds/references/styling-decision-guide.md +228 -0
  150. package/skills/applying-slds/references/utilities-quick-ref.md +125 -0
  151. package/skills/applying-slds/scripts/search-blueprints.cjs +117 -0
  152. package/skills/applying-slds/scripts/search-hooks.cjs +139 -0
  153. package/skills/applying-slds/scripts/search-icons.cjs +174 -0
  154. package/skills/applying-slds/scripts/search-utilities.cjs +161 -0
  155. package/skills/building-mobile-apps/SKILL.md +0 -1
  156. package/skills/building-omnistudio-callable-apex/SKILL.md +0 -1
  157. package/skills/building-omnistudio-datamapper/SKILL.md +0 -1
  158. package/skills/building-omnistudio-flexcard/SKILL.md +0 -1
  159. package/skills/building-omnistudio-integration-procedure/SKILL.md +0 -1
  160. package/skills/building-omnistudio-omniscript/SKILL.md +0 -1
  161. package/skills/building-sf-integrations/SKILL.md +0 -1
  162. package/skills/configuring-connected-apps/SKILL.md +0 -1
  163. package/skills/connecting-datacloud/SKILL.md +0 -1
  164. package/skills/creating-b2b-commerce-store/SKILL.md +0 -1
  165. package/skills/debugging-apex-logs/SKILL.md +0 -1
  166. package/skills/deploying-metadata/SKILL.md +0 -1
  167. package/skills/deploying-omnistudio-datapacks/SKILL.md +0 -1
  168. package/skills/developing-agentforce/SKILL.md +0 -1
  169. package/skills/fetching-salesforce-docs/SKILL.md +0 -1
  170. package/skills/generating-custom-lightning-type/SKILL.md +17 -39
  171. package/skills/generating-custom-lightning-type/assets/primitive-types-and-constraints.md +41 -0
  172. package/skills/generating-custom-lightning-type/references/widget-rendition.md +124 -0
  173. package/skills/generating-lwc-components/SKILL.md +0 -1
  174. package/skills/generating-mermaid-diagrams/SKILL.md +0 -1
  175. package/skills/generating-visual-diagrams/SKILL.md +0 -1
  176. package/skills/handling-sf-data/SKILL.md +0 -1
  177. package/skills/harmonizing-datacloud/SKILL.md +0 -1
  178. package/skills/integrating-b2b-commerce-open-code-components/SKILL.md +0 -1
  179. package/skills/investigating-agentforce-architecture/README.md +156 -0
  180. package/skills/investigating-agentforce-architecture/SKILL.md +230 -0
  181. package/skills/investigating-agentforce-architecture/assets/cli/describe_sobject.yaml +16 -0
  182. package/skills/investigating-agentforce-architecture/assets/cli/describe_tooling_sobject.yaml +17 -0
  183. package/skills/investigating-agentforce-architecture/assets/cli/list_metadata_genaiprompttemplate.yaml +17 -0
  184. package/skills/investigating-agentforce-architecture/assets/cli/org_display.yaml +15 -0
  185. package/skills/investigating-agentforce-architecture/assets/cli/retrieve_genai_plugin.yaml +18 -0
  186. package/skills/investigating-agentforce-architecture/assets/cli/show_access_token.yaml +27 -0
  187. package/skills/investigating-agentforce-architecture/assets/mermaid/action_tree.mmd +20 -0
  188. package/skills/investigating-agentforce-architecture/assets/mermaid/data_flow.mmd +19 -0
  189. package/skills/investigating-agentforce-architecture/assets/mermaid/dependency_graph.mmd +19 -0
  190. package/skills/investigating-agentforce-architecture/assets/mermaid/invocation_sequence.mmd +20 -0
  191. package/skills/investigating-agentforce-architecture/assets/mermaid/planner_state.mmd +18 -0
  192. package/skills/investigating-agentforce-architecture/assets/soql/apex_class_bodies_by_ids.soql +3 -0
  193. package/skills/investigating-agentforce-architecture/assets/soql/apex_class_bodies_by_names.soql +3 -0
  194. package/skills/investigating-agentforce-architecture/assets/soql/bot_definition_details.soql +3 -0
  195. package/skills/investigating-agentforce-architecture/assets/soql/bot_version_lookup.soql +4 -0
  196. package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_by_ids.soql +3 -0
  197. package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_ids_by_names.soql +3 -0
  198. package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_view_by_durable_ids.soql +4 -0
  199. package/skills/investigating-agentforce-architecture/assets/soql/flow_metadata_by_id.soql +3 -0
  200. package/skills/investigating-agentforce-architecture/assets/soql/functions_by_plugins.soql +5 -0
  201. package/skills/investigating-agentforce-architecture/assets/soql/planner_attrs_by_parent_ids.soql +3 -0
  202. package/skills/investigating-agentforce-architecture/assets/soql/planner_bundle_functions.soql +3 -0
  203. package/skills/investigating-agentforce-architecture/assets/soql/planner_definition_by_agent_chain.soql +3 -0
  204. package/skills/investigating-agentforce-architecture/assets/soql/plugin_functions_by_plugin_ids.soql +3 -0
  205. package/skills/investigating-agentforce-architecture/assets/soql/plugin_instructions_by_plugin_ids.soql +3 -0
  206. package/skills/investigating-agentforce-architecture/assets/soql/plugins_by_planner.soql +4 -0
  207. package/skills/investigating-agentforce-architecture/references/architecture_sections.md +243 -0
  208. package/skills/investigating-agentforce-architecture/references/contract.json +244 -0
  209. package/skills/investigating-agentforce-architecture/references/soql_fields.md +512 -0
  210. package/skills/investigating-agentforce-architecture/scripts/_shared/__init__.py +1 -0
  211. package/skills/investigating-agentforce-architecture/scripts/_shared/fs_guard.py +329 -0
  212. package/skills/investigating-agentforce-architecture/scripts/_shared/paths.py +110 -0
  213. package/skills/investigating-agentforce-architecture/scripts/_shared/runtime.py +59 -0
  214. package/skills/investigating-agentforce-architecture/scripts/_shared/sql.py +10 -0
  215. package/skills/investigating-agentforce-architecture/scripts/cache_check.py +234 -0
  216. package/skills/investigating-agentforce-architecture/scripts/config.py +131 -0
  217. package/skills/investigating-agentforce-architecture/scripts/fetch_soql.py +689 -0
  218. package/skills/investigating-agentforce-architecture/scripts/finalize.py +295 -0
  219. package/skills/investigating-agentforce-architecture/scripts/main.py +2835 -0
  220. package/skills/investigating-agentforce-architecture/scripts/metadata_listing.py +265 -0
  221. package/skills/investigating-agentforce-architecture/scripts/parallel_retrieve.py +69 -0
  222. package/skills/investigating-agentforce-architecture/scripts/parse_bundle.py +215 -0
  223. package/skills/investigating-agentforce-architecture/scripts/parse_wave.py +845 -0
  224. package/skills/investigating-agentforce-architecture/scripts/probe_channels.py +302 -0
  225. package/skills/investigating-agentforce-architecture/scripts/render_architecture.py +1043 -0
  226. package/skills/investigating-agentforce-architecture/scripts/resolve_bot.py +255 -0
  227. package/skills/investigating-agentforce-architecture/scripts/resolve_invocation_target.py +130 -0
  228. package/skills/investigating-agentforce-architecture/scripts/rest_client.py +763 -0
  229. package/skills/investigating-agentforce-architecture/scripts/retrieve_planner.py +13 -0
  230. package/skills/investigating-agentforce-architecture/scripts/sf_cli.py +242 -0
  231. package/skills/investigating-agentforce-architecture/scripts/soql_loader.py +253 -0
  232. package/skills/investigating-agentforce-architecture/scripts/summarize_tree.py +143 -0
  233. package/skills/investigating-agentforce-architecture/scripts/tests/__init__.py +0 -0
  234. package/skills/investigating-agentforce-architecture/scripts/tests/_bootstrap.py +23 -0
  235. package/skills/investigating-agentforce-architecture/scripts/tests/fixtures/__init__.py +0 -0
  236. package/skills/investigating-agentforce-architecture/scripts/tests/fixtures/genai_payloads.py +400 -0
  237. package/skills/investigating-agentforce-architecture/scripts/tests/test_cache_check.py +307 -0
  238. package/skills/investigating-agentforce-architecture/scripts/tests/test_cache_check_main.py +283 -0
  239. package/skills/investigating-agentforce-architecture/scripts/tests/test_config.py +115 -0
  240. package/skills/investigating-agentforce-architecture/scripts/tests/test_end_to_end_fixture.py +651 -0
  241. package/skills/investigating-agentforce-architecture/scripts/tests/test_finalize.py +278 -0
  242. package/skills/investigating-agentforce-architecture/scripts/tests/test_flow_children_inflation.py +582 -0
  243. package/skills/investigating-agentforce-architecture/scripts/tests/test_fs_guard.py +113 -0
  244. package/skills/investigating-agentforce-architecture/scripts/tests/test_iterative_wave_b.py +478 -0
  245. package/skills/investigating-agentforce-architecture/scripts/tests/test_main_pipeline.py +3359 -0
  246. package/skills/investigating-agentforce-architecture/scripts/tests/test_parallel_retrieve.py +131 -0
  247. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_bundle.py +400 -0
  248. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave.py +644 -0
  249. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_classifiers.py +224 -0
  250. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_helpers.py +380 -0
  251. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_main.py +397 -0
  252. package/skills/investigating-agentforce-architecture/scripts/tests/test_per_branch_visited.py +244 -0
  253. package/skills/investigating-agentforce-architecture/scripts/tests/test_probe_channels.py +359 -0
  254. package/skills/investigating-agentforce-architecture/scripts/tests/test_probe_cli_recipes.py +185 -0
  255. package/skills/investigating-agentforce-architecture/scripts/tests/test_render_architecture.py +810 -0
  256. package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_bot.py +203 -0
  257. package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_creds.py +157 -0
  258. package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_invocation_target.py +145 -0
  259. package/skills/investigating-agentforce-architecture/scripts/tests/test_rest_client.py +1253 -0
  260. package/skills/investigating-agentforce-architecture/scripts/tests/test_runtime_override.py +100 -0
  261. package/skills/investigating-agentforce-architecture/scripts/tests/test_sf_cli.py +261 -0
  262. package/skills/investigating-agentforce-architecture/scripts/tests/test_signature_stamping.py +466 -0
  263. package/skills/investigating-agentforce-architecture/scripts/tests/test_soql_loader.py +501 -0
  264. package/skills/investigating-agentforce-architecture/scripts/tests/test_summarize_tree.py +241 -0
  265. package/skills/investigating-agentforce-architecture/scripts/tests/test_write_emit_ctx.py +480 -0
  266. package/skills/investigating-agentforce-architecture/tools/emit_env.py +157 -0
  267. package/skills/investigating-agentforce-architecture/tools/emit_result.py +262 -0
  268. package/skills/investigating-agentforce-architecture/tools/sanitize.py +33 -0
  269. package/skills/investigating-agentforce-architecture/tools/write_emit_ctx.py +332 -0
  270. package/skills/investigating-agentforce-d360/README.md +123 -0
  271. package/skills/investigating-agentforce-d360/SKILL.md +163 -0
  272. package/skills/investigating-agentforce-d360/assets/dc/app_generation.sql +51 -0
  273. package/skills/investigating-agentforce-d360/assets/dc/content_category.sql +44 -0
  274. package/skills/investigating-agentforce-d360/assets/dc/content_quality.sql +41 -0
  275. package/skills/investigating-agentforce-d360/assets/dc/discover_sessions.sql +36 -0
  276. package/skills/investigating-agentforce-d360/assets/dc/feedback.sql +47 -0
  277. package/skills/investigating-agentforce-d360/assets/dc/feedback_details.sql +38 -0
  278. package/skills/investigating-agentforce-d360/assets/dc/gateway_records.sql +45 -0
  279. package/skills/investigating-agentforce-d360/assets/dc/gateway_request_llm.sql +50 -0
  280. package/skills/investigating-agentforce-d360/assets/dc/gateway_request_metadata.sql +44 -0
  281. package/skills/investigating-agentforce-d360/assets/dc/gateway_request_tags.sql +42 -0
  282. package/skills/investigating-agentforce-d360/assets/dc/gateway_requests.sql +89 -0
  283. package/skills/investigating-agentforce-d360/assets/dc/gateway_responses.sql +43 -0
  284. package/skills/investigating-agentforce-d360/assets/dc/generations.sql +52 -0
  285. package/skills/investigating-agentforce-d360/assets/dc/interactions.sql +53 -0
  286. package/skills/investigating-agentforce-d360/assets/dc/messages.sql +53 -0
  287. package/skills/investigating-agentforce-d360/assets/dc/messaging_session.sql +37 -0
  288. package/skills/investigating-agentforce-d360/assets/dc/moment_interactions.sql +34 -0
  289. package/skills/investigating-agentforce-d360/assets/dc/moments.sql +39 -0
  290. package/skills/investigating-agentforce-d360/assets/dc/participants.sql +48 -0
  291. package/skills/investigating-agentforce-d360/assets/dc/sessions.sql +78 -0
  292. package/skills/investigating-agentforce-d360/assets/dc/steps.sql +64 -0
  293. package/skills/investigating-agentforce-d360/assets/dc/tag_associations.sql +46 -0
  294. package/skills/investigating-agentforce-d360/assets/dc/tag_definition_associations.sql +37 -0
  295. package/skills/investigating-agentforce-d360/assets/dc/tag_definitions.sql +50 -0
  296. package/skills/investigating-agentforce-d360/assets/dc/tags.sql +37 -0
  297. package/skills/investigating-agentforce-d360/assets/dc/telemetry_spans.sql +55 -0
  298. package/skills/investigating-agentforce-d360/references/artifacts.md +50 -0
  299. package/skills/investigating-agentforce-d360/references/dc_dmo_fields.md +823 -0
  300. package/skills/investigating-agentforce-d360/references/dc_pipeline_contract.md +608 -0
  301. package/skills/investigating-agentforce-d360/scripts/_shared/__init__.py +2 -0
  302. package/skills/investigating-agentforce-d360/scripts/_shared/cli_override.py +98 -0
  303. package/skills/investigating-agentforce-d360/scripts/_shared/fs_guard.py +334 -0
  304. package/skills/investigating-agentforce-d360/scripts/_shared/paths.py +155 -0
  305. package/skills/investigating-agentforce-d360/scripts/_shared/runtime.py +59 -0
  306. package/skills/investigating-agentforce-d360/scripts/_shared/sql.py +14 -0
  307. package/skills/investigating-agentforce-d360/scripts/assemble_dc.py +1624 -0
  308. package/skills/investigating-agentforce-d360/scripts/config.py +45 -0
  309. package/skills/investigating-agentforce-d360/scripts/dc.py +188 -0
  310. package/skills/investigating-agentforce-d360/scripts/discover_sessions.py +556 -0
  311. package/skills/investigating-agentforce-d360/scripts/fetch_dc.py +1045 -0
  312. package/skills/investigating-agentforce-d360/scripts/render_dc.py +1750 -0
  313. package/skills/investigating-agentforce-d360/scripts/resolve_session.py +264 -0
  314. package/skills/investigating-agentforce-d360/scripts/storage.py +92 -0
  315. package/skills/investigating-agentforce-d360/scripts/tests/__init__.py +0 -0
  316. package/skills/investigating-agentforce-d360/scripts/tests/_bootstrap.py +15 -0
  317. package/skills/investigating-agentforce-d360/scripts/tests/fixtures/__init__.py +0 -0
  318. package/skills/investigating-agentforce-d360/scripts/tests/fixtures/synthetic_session.py +424 -0
  319. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_bootstrap_and_mode.py +115 -0
  320. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_gateway_direct.py +220 -0
  321. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_gateway_direct_integration.py +158 -0
  322. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_helpers.py +287 -0
  323. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_integration.py +247 -0
  324. package/skills/investigating-agentforce-d360/scripts/tests/test_dc_and_resolve_session.py +433 -0
  325. package/skills/investigating-agentforce-d360/scripts/tests/test_discover_sessions.py +458 -0
  326. package/skills/investigating-agentforce-d360/scripts/tests/test_discover_sessions_grep_ci.py +193 -0
  327. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_helpers.py +266 -0
  328. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_identity.py +528 -0
  329. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_main.py +251 -0
  330. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_waterfall.py +229 -0
  331. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_waterfall_full.py +283 -0
  332. package/skills/investigating-agentforce-d360/scripts/tests/test_identity_coherence.py +327 -0
  333. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_branches.py +256 -0
  334. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_gateway_direct.py +130 -0
  335. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_helpers.py +291 -0
  336. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_integration.py +220 -0
  337. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_planner_llm_calls.py +284 -0
  338. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_show_prompts_gating.py +215 -0
  339. package/skills/investigating-agentforce-d360/scripts/tests/test_resolve_from_disk.py +100 -0
  340. package/skills/investigating-agentforce-d360/scripts/tests/test_resolve_session_main.py +149 -0
  341. package/skills/investigating-agentforce-d360/scripts/tests/test_runtime_override.py +104 -0
  342. package/skills/investigating-agentforce-d360/scripts/tests/test_session_shape.py +95 -0
  343. package/skills/investigating-agentforce-d360/scripts/tests/test_session_shape_dropped_by_stdm.py +85 -0
  344. package/skills/managing-managed-event-subscription/SKILL.md +152 -0
  345. package/skills/managing-managed-event-subscription/assets/managed-event-subscription-template.xml +20 -0
  346. package/skills/managing-managed-event-subscription/references/delete-guide.md +57 -0
  347. package/skills/managing-managed-event-subscription/references/topic-name-formats.md +26 -0
  348. package/skills/managing-managed-event-subscription/references/update-constraints.md +30 -0
  349. package/skills/modeling-omnistudio-epc-catalog/SKILL.md +0 -1
  350. package/skills/observing-agentforce/SKILL.md +0 -1
  351. package/skills/orchestrating-datacloud/SKILL.md +0 -1
  352. package/skills/preparing-datacloud/SKILL.md +0 -1
  353. package/skills/querying-soql/SKILL.md +0 -1
  354. package/skills/retrieving-datacloud/SKILL.md +0 -1
  355. package/skills/running-apex-tests/SKILL.md +0 -1
  356. package/skills/running-code-analyzer/SKILL.md +0 -1
  357. package/skills/segmenting-datacloud/SKILL.md +0 -1
  358. package/skills/testing-agentforce/SKILL.md +0 -1
  359. package/skills/uplifting-components-to-slds2/SKILL.md +3 -2
  360. package/skills/uplifting-components-to-slds2/references/color-hooks-decision-guide.md +30 -9
  361. package/skills/uplifting-components-to-slds2/references/examples.md +24 -6
  362. package/skills/validating-slds/SKILL.md +262 -0
  363. package/skills/validating-slds/references/quality-checks.md +308 -0
  364. package/skills/validating-slds/references/report-format.md +302 -0
  365. package/skills/validating-slds/scripts/analyze-quality.cjs +521 -0
@@ -0,0 +1,230 @@
1
+ ---
2
+ name: investigating-agentforce-architecture
3
+ description: "Declared architecture snapshot for one Agentforce agent: planner, topics, actions, flows, Apex, prompt templates, and NGA plugins. Renders a human-readable architecture document and Mermaid invocation graph from design-time metadata (not runtime audit rows). TRIGGER when user asks to describe, diagram, inventory, audit, document, or diff (e.g. v3 vs v5) the architecture / action tree / topic structure / tool inventory of a specific agent by agent API name in a specific org. DO NOT TRIGGER for runtime session traces, conversation transcripts, generation timings, or gateway audit chains — this skill reads design-time metadata only (use investigating-agentforce-d360 for session traces)."
4
+ metadata:
5
+ version: "1.0"
6
+ ---
7
+
8
+ # investigating-agentforce-architecture — declared architecture snapshot
9
+
10
+ Design-time metadata tree for one Agentforce agent: planner → topics → actions → flows → Apex → prompts → NGA plugins. Reads declared metadata only — `BotDefinition`, `GenAiPlanner*`, `GenAiPlugin*`, `GenAiFunction*`, `Flow`, `ApexClass`, `GenAiPromptTemplate`. Does **not** read runtime audit rows.
11
+
12
+ **Runtime budget: 30–45s typical, ≤60s hard cap** on reference fixtures. Sequential baseline would be 90–220s; parallel Tooling SOQL fan-out delivers a 3–5× speedup. Large bots with many flows scale approximately linearly — each flow metadata retrieve is one round-trip.
13
+
14
+ Runs **inline** — no subagent. Every phase is deterministic file processing.
15
+
16
+ ## If the user hasn't given enough to proceed
17
+
18
+ When invoked with no `agent_api_name` AND no org alias, print the following block **verbatim** — do not paraphrase, do not pre-run any script. Trigger condition: `$ARGUMENTS` is empty OR names no agent (no `--agent` flag and no known agent API name in the prose) OR names no org (no `--org` flag and no known alias).
19
+
20
+ > Which agent should I document, and in which org?
21
+ >
22
+ > I need:
23
+ > - **Agent API name** — the `DeveloperName` of the `BotDefinition` (e.g. `MyAgent`, `MySalesAgent`). Not the label.
24
+ > - **Org alias** — for `sf` CLI auth (the alias you configured with `sf org login`)
25
+ >
26
+ > Optional:
27
+ > - **Version** — an `agent_version_api_name` like `v5`. If omitted, I'll resolve the active `BotVersion`.
28
+ > - **`--force`** — ignore cached tree; re-fetch everything.
29
+ > - **`--reprobe`** — re-run the 7-day channel-probe cache (only needed after a Salesforce release).
30
+ >
31
+ > I'll run the metadata pipeline inline. Artifacts land under `~/.vibe/data/investigating-agentforce-architecture/<org_id15>/<agent_api_name>__<agent_version>/` (overridable with `--data-dir`).
32
+
33
+ ## Pipeline invocation
34
+
35
+ When the user has supplied `--org <alias>` + `--agent <api_name>` (plus any optional flags), run this block. One `python3` invocation drives the full pipeline. `main.py` writes `.emit_ctx.json`; `emit_result.py` reads it and prints the final `=== RESULT ===` block last to stdout.
36
+
37
+ ```bash
38
+ set -euo pipefail
39
+
40
+ # zsh arrays are 1-indexed by default; bash arrays are 0-indexed.
41
+ # This block uses 0-indexed semantics throughout (_args[$i] starting at i=0),
42
+ # so under zsh + `set -u` the very first read of `_args[0]` would trip
43
+ # `parameter not set`. KSH_ARRAYS makes zsh treat arrays as 0-indexed,
44
+ # matching the bash shebang's expectation. No-op under bash.
45
+ [ -n "${ZSH_VERSION:-}" ] && setopt KSH_ARRAYS
46
+
47
+ SKILL_ROOT="${SKILL_ROOT:-${PLUGIN_ROOT:-$HOME/.vibe/skills}/investigating-agentforce-architecture}"
48
+
49
+ # Argument parser. Accepts both `--org foo` and `--org=foo`.
50
+ # `$ARGUMENTS` is the raw user input Claude Code substitutes.
51
+ ARG_ORG=""
52
+ ARG_AGENT=""
53
+ ARG_VERSION=""
54
+ ARG_FORCE=""
55
+ ARG_REPROBE=""
56
+ ARG_PARALLELISM=""
57
+ ARG_MAX_MERMAID=""
58
+
59
+ # shellcheck disable=SC2206
60
+ _args=($ARGUMENTS)
61
+ i=0
62
+ while [ $i -lt ${#_args[@]} ]; do
63
+ tok="${_args[$i]}"
64
+ case "$tok" in
65
+ --org=*) ARG_ORG="${tok#--org=}" ;;
66
+ --org) i=$((i+1)); ARG_ORG="${_args[$i]:-}" ;;
67
+ --agent=*) ARG_AGENT="${tok#--agent=}" ;;
68
+ --agent) i=$((i+1)); ARG_AGENT="${_args[$i]:-}" ;;
69
+ --version=*) ARG_VERSION="${tok#--version=}" ;;
70
+ --version) i=$((i+1)); ARG_VERSION="${_args[$i]:-}" ;;
71
+ --parallelism=*) ARG_PARALLELISM="${tok#--parallelism=}" ;;
72
+ --parallelism) i=$((i+1)); ARG_PARALLELISM="${_args[$i]:-}" ;;
73
+ --max-mermaid-nodes=*) ARG_MAX_MERMAID="${tok#--max-mermaid-nodes=}" ;;
74
+ --max-mermaid-nodes) i=$((i+1)); ARG_MAX_MERMAID="${_args[$i]:-}" ;;
75
+ --force) ARG_FORCE="1" ;;
76
+ --reprobe) ARG_REPROBE="1" ;;
77
+ esac
78
+ i=$((i+1))
79
+ done
80
+
81
+ # Usage block if required flags missing. Agent reads stderr,
82
+ # prints verbatim, and stops — does NOT pre-run main.py.
83
+ if [ -z "$ARG_ORG" ] || [ -z "$ARG_AGENT" ]; then
84
+ cat >&2 <<'USAGE'
85
+ > Which agent should I document, and in which org?
86
+ >
87
+ > I need:
88
+ > - **Agent API name** — the BotDefinition.DeveloperName (e.g. `MyAgent`)
89
+ > - **Org alias** — for `sf` CLI auth (the alias you configured with `sf org login`)
90
+ >
91
+ > Optional flags:
92
+ > - `--version v5` — pin a specific BotVersion (default: Active+highest)
93
+ > - `--force` — bypass cache
94
+ > - `--reprobe` — force channel-probe refresh
95
+ > - `--parallelism N` — ThreadPoolExecutor size (default 5)
96
+ > - `--max-mermaid-nodes N` — cap Mermaid node count (default 80)
97
+ USAGE
98
+ exit 2
99
+ fi
100
+
101
+ # Fresh work dir per invocation. Epoch + random suffix avoids collisions
102
+ # between concurrent runs on the same host.
103
+ WORK_DIR="/tmp/investigating-agentforce-architecture-$(date +%s)-$RANDOM"
104
+ mkdir -p "$WORK_DIR"
105
+
106
+ # Input validation at the boundary, BEFORE any python3 call.
107
+ # fs_guard exits 1 and prints an INVALID_INPUT RESULT block on failure;
108
+ # `|| exit 1` is mandatory — bare calls silently continue past failures.
109
+ python3 "$SKILL_ROOT/scripts/_shared/fs_guard.py" "$ARG_AGENT" agent_api_name api_name || exit 1
110
+ python3 "$SKILL_ROOT/scripts/_shared/fs_guard.py" "$ARG_ORG" org_alias not_empty || exit 1
111
+ python3 "$SKILL_ROOT/scripts/_shared/fs_guard.py" "$WORK_DIR" WORK_DIR symlink || exit 1
112
+ python3 "$SKILL_ROOT/scripts/_shared/fs_guard.py" "$WORK_DIR" WORK_DIR owned || exit 1
113
+ if [ -n "$ARG_VERSION" ]; then
114
+ python3 "$SKILL_ROOT/scripts/_shared/fs_guard.py" "$ARG_VERSION" agent_version api_name || exit 1
115
+ fi
116
+
117
+ # Single python3 call drives all pipeline phases. main.py writes
118
+ # `.emit_ctx.json` into $WORK_DIR — emit_result.py then renders the
119
+ # RESULT block from that ctx. No subprocess-per-phase.
120
+ _main_args=(--org-alias "$ARG_ORG" --agent "$ARG_AGENT" --work-dir "$WORK_DIR")
121
+ [ -n "$ARG_VERSION" ] && _main_args+=(--version "$ARG_VERSION")
122
+ [ -n "$ARG_FORCE" ] && _main_args+=(--force)
123
+ [ -n "$ARG_REPROBE" ] && _main_args+=(--reprobe)
124
+ [ -n "$ARG_PARALLELISM" ] && _main_args+=(--parallelism "$ARG_PARALLELISM")
125
+ [ -n "$ARG_MAX_MERMAID" ] && _main_args+=(--max-mermaid-nodes "$ARG_MAX_MERMAID")
126
+
127
+ # main.py returns nonzero on terminal failures; we DON'T short-circuit —
128
+ # emit_result still publishes the failure RESULT block. `set -e` is
129
+ # temporarily relaxed around this single call.
130
+ set +e
131
+ python3 "$SKILL_ROOT/scripts/main.py" "${_main_args[@]}"
132
+ _rc=$?
133
+ set -e
134
+
135
+ # Final RESULT block is emit_result.py's stdout — MUST be the last thing
136
+ # stdout sees. emit_result exits 0 on render success; the bash harness
137
+ # propagates main.py's rc for the agent's exit status.
138
+ WORK_DIR="$WORK_DIR" python3 "$SKILL_ROOT/tools/emit_result.py"
139
+ exit "$_rc"
140
+ ```
141
+
142
+ ## Inputs
143
+
144
+ | Input | Flag | Required | Default |
145
+ |---|---|---|---|
146
+ | `org_alias` | `--org` | yes | — |
147
+ | `agent_api_name` | `--agent` | yes | — |
148
+ | `agent_version_api_name` | `--version` | no | active BotVersion |
149
+ | `force_refresh` | `--force` | no | false (honor cache) |
150
+ | `reprobe` | `--reprobe` | no | false (honor 7-day channel-probe cache) |
151
+ | `parallelism` | `--parallelism` | no | 5 |
152
+ | `max_mermaid_nodes` | `--max-mermaid-nodes` | no | 80 |
153
+ | `data_dir` | `--data-dir` | no | `~/.vibe/data/investigating-agentforce-architecture` |
154
+ | `cache_dir` | `--cache-dir` | no | `~/.vibe/cache/investigating-agentforce-architecture` |
155
+
156
+ ## Outputs
157
+
158
+ All artifacts under `~/.vibe/data/investigating-agentforce-architecture/<org_id15>/<agent_api_name>__<agent_version>/` (default; override with `--data-dir <path>`):
159
+
160
+ ```
161
+ <agent>_<ver>_metadata_tree.json primary artifact — normalized planner/topic/action/flow/apex/prompt/plugin tree
162
+ <agent>_<ver>_architecture.md human-readable section-by-section rendering (H1 + 7 numbered sections, plus a conditional Dependency graph appendix). Mermaid diagrams are embedded inside the relevant sections (Action tree, Data flow, and Dependency graph)
163
+ ```
164
+
165
+ ## Pipeline — inline, no subagent
166
+
167
+ ```
168
+ resolve_bot.py → BotDefinition + BotVersion + planner name lookup
169
+ retrieve_planner.py → Metadata API zip retrieve for GenAiPlannerBundle (+ NGA plugins if present)
170
+ parallel_retrieve.py → 6 parallel Tooling SOQL channels fan out from the planner id
171
+ (resolved by the `planner_definition_by_agent_chain` seed query):
172
+ - plugins_by_planner (GenAiPluginDefinition)
173
+ - planner_bundle_functions (GenAiPlannerFunctionDef join)
174
+ - functions_by_plugins (GenAiFunctionDefinition)
175
+ - planner_attrs_by_parent_ids (GenAiPlannerAttrDefinition)
176
+ - plugin_functions_by_plugin_ids (GenAiPluginFunctionDef join)
177
+ - plugin_instructions_by_plugin_ids (GenAiPluginInstructionDef)
178
+ parse_bundle.py → parse retrieved XML into normalized node shapes
179
+ parse_wave.py → BFS expansion: flow/apex/prompt refs discovered in nodes
180
+ → SOQL for Flow/Apex bodies (batched by id list)
181
+ → Metadata retrieve ONLY for GenAiPromptTemplate (+ NGA external plugins conditionally)
182
+ finalize.py → merge waves into metadata_tree.json
183
+ render_architecture.py → <agent>_<ver>_architecture.md + Mermaid invocation graph (capped at --max-mermaid-nodes)
184
+ ```
185
+
186
+ **Channel strategy — SOQL-first.**
187
+ - **Tooling SOQL** for every normalized tree node (planner, plugins, functions, plugin-functions, plugin-instructions, planner-functions, planner-attrs) — 6 parallel channels keyed on planner id, plus the `planner_definition_by_agent_chain` seed query that resolves the planner id from the agent chain.
188
+ - **Data API SOQL** for Flow (by id) and Apex (by id or name) bodies — batched.
189
+ - **Metadata retrieve** only for two cases: (a) `GenAiPromptTemplate` (prompt bodies aren't cleanly exposed via Tooling SOQL), and (b) NGA **external plugins** when the planner is Native Generative Agent shape (skipped for classic ReAct).
190
+
191
+ This is where the 3–5× speedup comes from. A naive implementation would retrieve everything via Metadata API zips sequentially; parallel Tooling SOQL covers ~80% of the tree in a single fan-out.
192
+
193
+ ## Planner shapes — classic ReAct vs NGA
194
+
195
+ The skill normalizes two planner families into a single tree shape:
196
+
197
+ | Shape | `GenAiPlannerDefinition.PlannerType` | InvocationTarget style | NGA plugins? |
198
+ |---|---|---|---|
199
+ | **Classic ReAct** | `ReactAiPlannerV1` / `SequentialPlannerIntentClassifier` / etc. | DeveloperName strings | no |
200
+ | **NGA** | `ConcurrentMultiAgentOrchestration` / `AnthropicCompatibleV1` / etc. | Sometimes 15/18-char Ids (ID-prefix routed) | yes (external plugins via Metadata retrieve) |
201
+
202
+ The ID-prefix router in `resolve_invocation_target.py` distinguishes the two: NGA InvocationTargets that look like ids (`01p…` = ApexClass, `301…` = Flow, etc.) get resolved via id-scoped SOQL; DeveloperName targets go through name-scoped SOQL. Unknown prefixes surface as `_unresolved[]` with `reason="unknown-id-prefix:<prefix>"` — never silently dropped.
203
+
204
+ ## Caching
205
+
206
+ - **Tree cache**: `metadata_tree.json` is reused unless `--force` is passed. Cache key includes the asset-hash of every `.soql` / `.yaml` / `.mmd` template bundled with the skill — bump a template, the cache busts automatically.
207
+ - **Channel probe cache**: 7-day TTL on the per-org `sf sobject describe` results that validate every field name the SOQL assets reference. A Salesforce quarterly release that renames / removes a field triggers `status: PROBE_FAILED`; `--reprobe` forces a refresh.
208
+
209
+ ## Prerequisites
210
+
211
+ | Tool | Required |
212
+ |---|---|
213
+ | `sf` CLI (authenticated against the target org) | yes — `sf org login web --alias <alias>` |
214
+ | Python 3.10+ | yes |
215
+
216
+ ## Reference docs to load when needed
217
+
218
+ Do NOT load eagerly. Load when the user's question requires it:
219
+
220
+ - `references/soql_fields.md` — per-sObject field reference for the 13 sObjects this skill touches (2 Data API + 11 Tooling), with `[mandatory]` vs `[optional]` tags. Load when the user asks about a specific field, or when debugging an `INVALID_FIELD` SOQL error.
221
+ - `references/contract.json` — machine-readable schema for `metadata_tree.json`. Load when writing downstream tooling that consumes the tree.
222
+ - `references/architecture_sections.md` — section-by-section structure of the rendered `<agent>_<ver>_architecture.md`.
223
+
224
+ ## Invariants worth knowing upfront
225
+
226
+ - **Pipeline is deterministic.** Same `(org, agent, version)` + static org metadata → byte-identical `<agent>_<ver>_metadata_tree.json` and `<agent>_<ver>_architecture.md`. Only manifest timestamps drift across re-runs.
227
+ - **Forward-only traversal.** Every discovered ref goes forward from planner → children. No backward lookups.
228
+ - **Partial results are surfaced, not silenced.** Any unresolved reference lands in `_unresolved[]` with `reason=...`. `STATUS=PARTIAL_OK` if any channel failed; `STATUS=OK` only on a clean run.
229
+ - **Cycle detection is per-branch.** Same flow visited along its own ancestor chain emits `_cycle_back_to:<path>` instead of recursing. A defensive `MAX_BFS_DEPTH=20` guard backs the per-branch ancestor set; real-world agents bottom out well before either limit fires. (Earlier docs claimed a hard cap of 5; that was the historical limit and was abandoned because shared utility flows like `handleFlowFault` tripped it on every nested tree — see `config.MAX_BFS_DEPTH` for the rationale.)
230
+ - **Child ordering is alphabetical by `api_name` (case-insensitive).** Topics come before non-topic plannerActions at the root level. Flow-actionCall order is NOT sorted — that's the flow author's execution sequence.
@@ -0,0 +1,16 @@
1
+ name: describe_sobject
2
+ argv:
3
+ - sf
4
+ - sobject
5
+ - describe
6
+ - --sobject
7
+ - "{{SOBJECT}}"
8
+ - --target-org
9
+ - "{{ORG_ALIAS}}"
10
+ - --json
11
+ timeout_seconds: 300
12
+ required_params: [ORG_ALIAS, SOBJECT]
13
+ success_check: stdout_json_status_zero
14
+ auth_required_stderr_patterns:
15
+ - NoOrgAuthenticationError
16
+ - AuthInfoError
@@ -0,0 +1,17 @@
1
+ name: describe_tooling_sobject
2
+ argv:
3
+ - sf
4
+ - sobject
5
+ - describe
6
+ - --sobject
7
+ - "{{SOBJECT}}"
8
+ - --use-tooling-api
9
+ - --target-org
10
+ - "{{ORG_ALIAS}}"
11
+ - --json
12
+ timeout_seconds: 300
13
+ required_params: [ORG_ALIAS, SOBJECT]
14
+ success_check: stdout_json_status_zero
15
+ auth_required_stderr_patterns:
16
+ - NoOrgAuthenticationError
17
+ - AuthInfoError
@@ -0,0 +1,17 @@
1
+ name: list_metadata_genaiprompttemplate
2
+ argv:
3
+ - sf
4
+ - org
5
+ - list
6
+ - metadata
7
+ - --metadata-type
8
+ - GenAiPromptTemplate
9
+ - --target-org
10
+ - "{{ORG_ALIAS}}"
11
+ - --json
12
+ timeout_seconds: 300
13
+ required_params: [ORG_ALIAS]
14
+ success_check: stdout_json_status_zero
15
+ auth_required_stderr_patterns:
16
+ - NoOrgAuthenticationError
17
+ - AuthInfoError
@@ -0,0 +1,15 @@
1
+ name: org_display
2
+ argv:
3
+ - sf
4
+ - org
5
+ - display
6
+ - --target-org
7
+ - "{{ORG_ALIAS}}"
8
+ - --json
9
+ - --verbose
10
+ timeout_seconds: 300
11
+ required_params: [ORG_ALIAS]
12
+ success_check: stdout_json_status_zero
13
+ auth_required_stderr_patterns:
14
+ - NoOrgAuthenticationError
15
+ - AuthInfoError
@@ -0,0 +1,18 @@
1
+ name: retrieve_genai_plugin
2
+ argv:
3
+ - sf
4
+ - project
5
+ - retrieve
6
+ - start
7
+ - --target-org
8
+ - "{{ORG_ALIAS}}"
9
+ - --target-metadata-dir
10
+ - "{{TARGET_DIR}}"
11
+ - --json
12
+ extra_argv_anchor: --target-metadata-dir
13
+ timeout_seconds: 300
14
+ required_params: [ORG_ALIAS, TARGET_DIR]
15
+ success_check: stdout_json_status_zero
16
+ auth_required_stderr_patterns:
17
+ - NoOrgAuthenticationError
18
+ - AuthInfoError
@@ -0,0 +1,27 @@
1
+ name: show_access_token
2
+ # Primary access-token retrieval path per forcedotcom/cli#3560 (effective
3
+ # 2026-05-27). The `sf org display --json` field is now redacted to a
4
+ # placeholder string by default; the dedicated `sf org auth show-access-token`
5
+ # command is the long-term replacement.
6
+ #
7
+ # `--no-prompt` skips the interactive confirmation banner so the command
8
+ # behaves identically under `--json`.
9
+ #
10
+ # The legacy fallback (`sf org display` with `SF_TEMP_SHOW_SECRETS=true`)
11
+ # stays wired for sf CLI versions that don't ship show-access-token; that
12
+ # fallback is orchestrated in `main.py::_resolve_creds`, not here.
13
+ argv:
14
+ - sf
15
+ - org
16
+ - auth
17
+ - show-access-token
18
+ - --target-org
19
+ - "{{ORG_ALIAS}}"
20
+ - --json
21
+ - --no-prompt
22
+ timeout_seconds: 60
23
+ required_params: [ORG_ALIAS]
24
+ success_check: stdout_json_status_zero
25
+ auth_required_stderr_patterns:
26
+ - NoOrgAuthenticationError
27
+ - AuthInfoError
@@ -0,0 +1,20 @@
1
+ %% action_tree.mmd - section 4 declared action tree (flowchart TB)
2
+ %%
3
+ %% Placeholders (substituted by render_architecture.load_mermaid):
4
+ %% SUBGRAPHS placeholder: one `subgraph <topic_id>[<topic_label>] ... end`
5
+ %% block per topic. Non-topic actions (plannerActions)
6
+ %% go in a synthetic subgraph keyed `_plannerActions`.
7
+ %% EDGES placeholder: tree edges, one per child->parent descent. Cycle-
8
+ %% back annotations render as dotted back-edges
9
+ %% `A -.->|cycle| B` (see
10
+ %% render_architecture._render_action_tree).
11
+ %%
12
+ %% placeholder names are written as bare tokens (no double-curly)
13
+ %% so load_mermaid's single-pass str.replace cannot corrupt this header.
14
+ %%
15
+ %% Node-cap enforcement: if the tree exceeds `max_mermaid_nodes["flowchart"]`,
16
+ %% the renderer emits a summary placeholder instead of this template.
17
+ flowchart TB
18
+ {{SUBGRAPHS}}
19
+
20
+ {{EDGES}}
@@ -0,0 +1,19 @@
1
+ %% data_flow.mmd - section 8 data flow / context propagation (flowchart LR)
2
+ %%
3
+ %% Placeholders (substituted by render_architecture.load_mermaid):
4
+ %% NODES placeholder: node declarations: `<id>[<label>]`, one per line.
5
+ %% EDGES placeholder: labeled-where-possible edges:
6
+ %% `A -->|<var>: <type>| B`, bare `A --> B` when no
7
+ %% parameter threads between the lanes.
8
+ %%
9
+ %% placeholder names are written as bare tokens (no double-curly)
10
+ %% so load_mermaid's single-pass str.replace cannot corrupt this header.
11
+ %%
12
+ %% Source: GenAiPlannerAttrDefinition rows on the planner drive which slots
13
+ %% populate which actions. Renderer (render_architecture._render_data_flow)
14
+ %% builds nodes/edges from the tree's planner-slot metadata; no slots ->
15
+ %% degenerate diagram with just `User --> Planner --> Actions` skeleton.
16
+ flowchart LR
17
+ {{NODES}}
18
+
19
+ {{EDGES}}
@@ -0,0 +1,19 @@
1
+ %% dependency_graph.mmd - conditional section (graph LR)
2
+ %%
3
+ %% Rendered ONLY when `_unresolved[]` is non-empty OR cycles exist in the
4
+ %% action tree. Otherwise render_architecture skips this template entirely.
5
+ %%
6
+ %% Placeholders (substituted by render_architecture.load_mermaid):
7
+ %% NODES placeholder: node declarations: `<id>[<label>]`. Unresolved refs
8
+ %% use a `:::unresolved` class marker for CSS styling.
9
+ %% EDGES placeholder: cross-artifact dependency edges harvested from the
10
+ %% tree. Cycle-back edges render as `A -.->|cycle| B`.
11
+ %%
12
+ %% placeholder names are written as bare tokens (no double-curly)
13
+ %% so load_mermaid's single-pass str.replace cannot corrupt this header.
14
+ graph LR
15
+ {{NODES}}
16
+
17
+ {{EDGES}}
18
+
19
+ classDef unresolved stroke-dasharray: 5 5
@@ -0,0 +1,20 @@
1
+ %% invocation_sequence.mmd - section 3 invocation sequence (sequenceDiagram)
2
+ %%
3
+ %% Placeholders (substituted by render_architecture.load_mermaid):
4
+ %% PARTICIPANTS placeholder: one `participant <Name>` line per lane,
5
+ %% newline-joined; deactivate with
6
+ %% `<Dst>-->>-<Src>: <response>`.
7
+ %% MESSAGES placeholder: one `<Src>->>+<Dst>: <label>` per message line.
8
+ %%
9
+ %% placeholder names above are written as bare tokens (no double-
10
+ %% curly) so load_mermaid's single-pass str.replace cannot substitute them
11
+ %% here. That keeps %% headers intact in the rendered output - Mermaid
12
+ %% ignores %% lines as comments at render time, and debuggability wins.
13
+ %%
14
+ %% Renderer (render_architecture.py::_render_invocation_sequence) is the sole
15
+ %% consumer. Generation-aware: classic ReAct uses Planner<->TopicClassifier
16
+ %% <->ActionExecutor; NGA orchestrations add one lane per sub-agent.
17
+ sequenceDiagram
18
+ autonumber
19
+ {{PARTICIPANTS}}
20
+ {{MESSAGES}}
@@ -0,0 +1,18 @@
1
+ %% planner_state.mmd - section 7 planner state machine (stateDiagram-v2)
2
+ %%
3
+ %% Placeholders (substituted by render_architecture.load_mermaid):
4
+ %% STATES placeholder: state declarations (`state Foo { ... }` or
5
+ %% bare `state`).
6
+ %% TRANSITIONS placeholder: transition list (`A --> B: <label>`).
7
+ %%
8
+ %% placeholder names are written as bare tokens (no double-curly)
9
+ %% so load_mermaid's single-pass str.replace cannot corrupt this header.
10
+ %%
11
+ %% Renderer selects one of a small library of per-generation state machines
12
+ %% (render_architecture._planner_state_for_generation) and fills in the
13
+ %% template. BYOP / SEARCH generations skip this section and emit a prose
14
+ %% placeholder at call site rather than rendering this template.
15
+ stateDiagram-v2
16
+ {{STATES}}
17
+
18
+ {{TRANSITIONS}}
@@ -0,0 +1,3 @@
1
+ SELECT Id, Name, Body, SymbolTable, ApiVersion, IsValid
2
+ FROM ApexClass
3
+ WHERE Id IN ({{APEX_IDS_LIST}})
@@ -0,0 +1,3 @@
1
+ SELECT Id, Name, Body, SymbolTable, ApiVersion, IsValid
2
+ FROM ApexClass
3
+ WHERE Name IN ({{NAMES_LIST}})
@@ -0,0 +1,3 @@
1
+ SELECT DeveloperName, MasterLabel, Description, AgentType, Type, AgentTemplate, BotSource
2
+ FROM BotDefinition
3
+ WHERE DeveloperName = '{{AGENT_API_NAME}}'
@@ -0,0 +1,4 @@
1
+ SELECT Id, DeveloperName, Status, BotDefinitionId,
2
+ BotDefinition.DeveloperName, BotDefinition.MasterLabel
3
+ FROM BotVersion
4
+ WHERE BotDefinition.DeveloperName = '{{AGENT_API_NAME}}'
@@ -0,0 +1,3 @@
1
+ SELECT Id, DeveloperName, ActiveVersionId, LatestVersionId
2
+ FROM FlowDefinition
3
+ WHERE Id IN ({{FLOW_DEF_IDS_LIST}})
@@ -0,0 +1,3 @@
1
+ SELECT Id, DeveloperName, NamespacePrefix, ActiveVersionId
2
+ FROM FlowDefinition
3
+ WHERE DeveloperName IN ({{NAMES_LIST}}) AND NamespacePrefix = NULL
@@ -0,0 +1,4 @@
1
+ SELECT DurableId, ApiName, Label, NamespacePrefix, ActiveVersionId,
2
+ IsActive, ManageableState, ProcessType
3
+ FROM FlowDefinitionView
4
+ WHERE DurableId IN ({{DURABLE_IDS_LIST}})
@@ -0,0 +1,3 @@
1
+ SELECT Id, FullName, Metadata
2
+ FROM Flow
3
+ WHERE Id = '{{FLOW_VERSION_ID}}'
@@ -0,0 +1,5 @@
1
+ SELECT Id, DeveloperName, MasterLabel, Description, InvocationTargetType, InvocationTarget,
2
+ IsLocal, IsConfirmationRequired, IsIncludeInProgressIndicator, ProgressIndicatorMessage,
3
+ Source, PluginId, PlannerId, ParentId, LocalDeveloperName
4
+ FROM GenAiFunctionDefinition
5
+ WHERE PluginId IN ({{PLUGIN_IDS}})
@@ -0,0 +1,3 @@
1
+ SELECT Id, ParentId, DeveloperName, MasterLabel, Description, MappingType, ParameterName
2
+ FROM GenAiPlannerAttrDefinition
3
+ WHERE ParentId IN ({{PARENT_IDS}})
@@ -0,0 +1,3 @@
1
+ SELECT Id, PlannerId, Plugin
2
+ FROM GenAiPlannerFunctionDef
3
+ WHERE PlannerId = '{{PLANNER_ID}}'
@@ -0,0 +1,3 @@
1
+ SELECT Id, DeveloperName, MasterLabel, Description, PlannerType, Capabilities, AgentGraph
2
+ FROM GenAiPlannerDefinition
3
+ WHERE DeveloperName LIKE '{{AGENT_NAME}}%\_{{VERSION}}'
@@ -0,0 +1,3 @@
1
+ SELECT Id, PluginId, Function
2
+ FROM GenAiPluginFunctionDef
3
+ WHERE PluginId IN ({{PLUGIN_IDS}})
@@ -0,0 +1,3 @@
1
+ SELECT Id, GenAiPluginDefinitionId, DeveloperName, MasterLabel, Description, SortOrder
2
+ FROM GenAiPluginInstructionDef
3
+ WHERE GenAiPluginDefinitionId IN ({{PLUGIN_IDS}})
@@ -0,0 +1,4 @@
1
+ SELECT Id, DeveloperName, MasterLabel, Description, PluginType, Scope,
2
+ IsLocal, CanEscalate, Source, ParentId, LocalDeveloperName
3
+ FROM GenAiPluginDefinition
4
+ WHERE PlannerId = '{{PLANNER_ID}}'