@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,512 @@
1
+ # sObject field reference — architecture skill
2
+
3
+ Field reference for the 13 sObjects this skill queries across the 15
4
+ SOQL templates under `assets/soql/`. Two are reached via the Data API
5
+ (`BotDefinition`, `BotVersion`); the remaining 11 are Tooling-only.
6
+
7
+ **Source of truth: the live org** (`sf sobject describe --sobject <Name>
8
+ [--use-tooling-api]`). Schemas verified against live Salesforce API
9
+ v66.0 via `sf sobject describe` on `my-org-alias` + `my-org-alias-2`,
10
+ 2026-05-02. Official Salesforce Help pages describe logical structures
11
+ that frequently diverge from the physical fields the REST / Tooling API
12
+ actually expose. When a Help page disagrees with a live describe, trust
13
+ the live describe — the names in this reference are what you query.
14
+
15
+ The source of truth for "mandatory" is `scripts/probe_channels.py`'s
16
+ `MANDATORY_FIELDS` map. A probe that sees any `[mandatory]` field
17
+ missing flips to `status: "PROBE_FAILED"` — the skill aborts with a
18
+ clean error rather than producing a subtly-wrong tree. `[optional]`
19
+ fields degrade gracefully — missing ones are recorded but don't block
20
+ the run.
21
+
22
+ ---
23
+
24
+ ## Casing gotchas
25
+
26
+ - **Mixed case is mandatory for `GenAi*` sObjects.** API names are
27
+ `GenAiPlannerDefinition`, `GenAiPluginDefinition`, `GenAiFunctionDefinition`,
28
+ `GenAiPluginFunctionDef`, `GenAiPluginInstructionDef`,
29
+ `GenAiPlannerFunctionDef`, `GenAiPlannerAttrDefinition`. Lowercase
30
+ variants (`genai_planner_definition`, `genaiplannerdefinition`) do not
31
+ resolve. The SOQL parser is case-insensitive on keywords but
32
+ sObject + field names must match the describe output for Tooling API
33
+ calls to route correctly.
34
+ - **`GenAiPluginFunctionDef` vs `GenAiPlannerFunctionDef` are different
35
+ tables.** Plugin-scope join (topic → function, via `PluginId`) vs
36
+ planner-bundle-scope join (planner → function, via `PlannerId`). Both
37
+ are 10-field join tables with nearly identical shape; keep them
38
+ straight.
39
+ - **`BotVersion.DeveloperName` is the version id, not the version
40
+ label.** `DeveloperName` on BotVersion is the version API name (e.g.
41
+ `v5`), used as the second path segment under
42
+ `<org_id15>/<agent>__<version>/`. `MasterLabel` is the
43
+ human-readable label (e.g. "Version 5 — ported from staging"). Never
44
+ mix them — the data dir layout and the SKILL.md input contract both
45
+ key on `DeveloperName`.
46
+ - **`complexvalue` fields require single-row retrieval.** `Metadata`
47
+ (on `Flow`, `FlowDefinition`, `GenAiPluginDefinition`,
48
+ `GenAiFunctionDefinition`), `SymbolTable` (on `ApexClass`), and
49
+ `AgentGraph` (on `GenAiPlannerDefinition`, often null in practice) are
50
+ `complexvalue` types. Salesforce enforces
51
+ `MALFORMED_QUERY: When retrieving results with Metadata or FullName
52
+ fields, the query qualifications must specify no more than one row for
53
+ retrieval.` Batch IN-clause SELECTs that return ≥2 rows fail. Use a
54
+ single-row equality (`WHERE Id = '<id>'`) per fetch; parallelize
55
+ across ids via `concurrent.futures`. `ApexClass.Body` +
56
+ `ApexClass.SymbolTable` is the one notable exception: the
57
+ `Name IN (...)` batch works even though `SymbolTable` is complex.
58
+
59
+ ---
60
+
61
+ ## Cross-sObject join map
62
+
63
+ Every edge is strictly **forward** from the entry query
64
+ (`GenAiPlannerDefinition WHERE DeveloperName = :planner_name`). No
65
+ backward lookups.
66
+
67
+ ```
68
+ BotDefinition (Data API, PK Id, matched by DeveloperName)
69
+ └── BotVersion (Data API, FK BotDefinitionId)
70
+ │ [resolved to planner name via Bot metadata retrieve]
71
+
72
+ GenAiPlannerDefinition (Tooling, PK Id, matched by DeveloperName)
73
+
74
+ ├── GenAiPluginDefinition ← WHERE PlannerId = :plannerId
75
+ │ ├── GenAiPluginInstructionDef ← WHERE GenAiPluginDefinitionId IN (:topic_ids)
76
+ │ ├── GenAiPluginFunctionDef ← WHERE PluginId IN (:topic_ids)
77
+ │ │ └── Function picklist → GenAiFunctionDefinition.Id
78
+ │ └── GenAiFunctionDefinition ← WHERE PluginId IN (:topic_ids)
79
+
80
+ ├── GenAiPlannerFunctionDef ← WHERE PlannerId = :plannerId
81
+ │ └── Plugin picklist → GenAiPluginDefinition.Id (or external via retrieve)
82
+
83
+ ├── GenAiFunctionDefinition ← WHERE PluginId IN (:topic_ids)
84
+ │ │ (single-query — see functions_by_plugins.soql)
85
+ │ │
86
+ │ └── InvocationTargetType + InvocationTarget route to:
87
+ │ ├── flow → FlowDefinition (batch IN) → Flow.Metadata (parallel single-row)
88
+ │ ├── apex → ApexClass (batch IN, Body + SymbolTable)
89
+ │ ├── standardInvocableAction → (no further fetch — declared only)
90
+ │ └── generatePromptResponse → GenAiPromptTemplate (Metadata API retrieve)
91
+
92
+ └── GenAiPlannerAttrDefinition ← WHERE ParentId IN (:function_ids, :planner_id)
93
+ (polymorphic ParentId: GenAiFunctionDefinition OR GenAiPlannerDefinition)
94
+ ```
95
+
96
+ Per-channel row counts + `_unresolved[]` reasons are recorded in
97
+ `metadata_tree.json` under `_channels` and `_unresolved` keys.
98
+
99
+ ---
100
+
101
+ ## Data API sObjects (2)
102
+
103
+ ### `BotDefinition` (Data API) — one row per agent
104
+
105
+ Root of the agent metadata. Matched by `DeveloperName`; the rest of the
106
+ tree is resolved forward from the `BotVersion` child.
107
+
108
+ | Name | Type | Nillable | Filterable | Tag |
109
+ |---|---|---|---|---|
110
+ | `Id` | id | no | yes | [mandatory] |
111
+ | `DeveloperName` | string | no | yes | [mandatory] |
112
+ | `MasterLabel` | string | yes | yes | [optional] |
113
+ | `Description` | textarea | yes | no | [optional] |
114
+ | `AgentType` | picklist | yes | yes | [optional] — discriminator for classic vs NGA in some orgs |
115
+ | `Type` | picklist | yes | yes | [optional] |
116
+ | `AgentTemplate` | string | yes | yes | [optional] — e.g. `SvcCopilotTmpl__EinsteinAgentKind` |
117
+ | `BotSource` | picklist | yes | yes | [optional] |
118
+ | `AgentUser` | reference | yes | yes | [optional] — FK to `User` |
119
+ | `IsDeleted` | boolean | no | yes | [optional] |
120
+ | `CreatedById` | reference | no | yes | [optional] |
121
+ | `CreatedDate` | datetime | no | yes | [optional] |
122
+ | `LastModifiedById` | reference | no | yes | [optional] |
123
+ | `LastModifiedDate` | datetime | no | yes | [optional] |
124
+ | `SystemModstamp` | datetime | no | yes | [optional] |
125
+
126
+ ### `BotVersion` (Data API) — one row per agent version
127
+
128
+ Resolves the active version (or user-pinned version) for a given bot.
129
+ Parent relationship: `BotDefinition` via `BotDefinitionId`.
130
+
131
+ | Name | Type | Nillable | Filterable | Tag |
132
+ |---|---|---|---|---|
133
+ | `Id` | id | no | yes | [mandatory] |
134
+ | `BotDefinitionId` | reference | no | yes | [mandatory] |
135
+ | `DeveloperName` | string | no | yes | [optional] — version id (e.g. `v5`) |
136
+ | `MasterLabel` | string | yes | yes | [optional] — human label |
137
+ | `Status` | picklist | yes | yes | [optional] — `Active` on the current published version |
138
+ | `VersionNumber` | int | yes | yes | [optional] |
139
+ | `Description` | textarea | yes | no | [optional] |
140
+ | `AiReplyRecordVisibility` | picklist | yes | yes | [optional] |
141
+ | `ResponseDelayMilliseconds` | int | yes | yes | [optional] |
142
+ | `IsDeleted` | boolean | no | yes | [optional] |
143
+ | `CreatedById` | reference | no | yes | [optional] |
144
+ | `CreatedDate` | datetime | no | yes | [optional] |
145
+ | `LastModifiedById` | reference | no | yes | [optional] |
146
+ | `LastModifiedDate` | datetime | no | yes | [optional] |
147
+
148
+ ---
149
+
150
+ ## Tooling API sObjects (11)
151
+
152
+ All sObjects in this section are reachable via the Tooling API only
153
+ (`sf data query --use-tooling-api` or `sf sobject describe --use-tooling-api`).
154
+
155
+ ### `ApexClass` (Tooling) — Apex source + parsed AST
156
+
157
+ Source + full method/property AST for Apex referenced by
158
+ `GenAiFunctionDefinition.InvocationTarget` when
159
+ `InvocationTargetType = 'apex'`. Batch-safe on `Name IN (...)` or
160
+ `Id IN (...)` (despite `SymbolTable` being `complexvalue`, Salesforce
161
+ permits the batch for this particular sObject — verified live).
162
+
163
+ **Note:** `SymbolTable` is **not part of `FIELDS(ALL)`** and must be
164
+ named explicitly in the SELECT.
165
+
166
+ | Name | Type | Nillable | Filterable | Tag |
167
+ |---|---|---|---|---|
168
+ | `Id` | id | no | yes | [mandatory] |
169
+ | `Name` | string | no | yes | [mandatory] |
170
+ | `Body` | textarea | yes | no | [optional] — full Apex source |
171
+ | `SymbolTable` | complexvalue | yes | no | [optional] — parsed AST (methods, params, annotations, line/col) |
172
+ | `ApiVersion` | double | no | yes | [optional] |
173
+ | `IsValid` | boolean | no | yes | [optional] |
174
+ | `Status` | picklist | no | yes | [optional] |
175
+ | `LengthWithoutComments` | int | yes | yes | [optional] |
176
+ | `NamespacePrefix` | string | yes | yes | [optional] |
177
+ | `FullName` | string | yes | no | [optional] — complexvalue companion |
178
+ | `Metadata` | complexvalue | yes | no | [optional] |
179
+ | `ManageableState` | picklist | yes | yes | [optional] |
180
+ | `IsDeleted` | boolean | no | yes | [optional] |
181
+ | `CreatedById` | reference | no | yes | [optional] |
182
+ | `CreatedDate` | datetime | no | yes | [optional] |
183
+ | `LastModifiedById` | reference | no | yes | [optional] |
184
+ | `LastModifiedDate` | datetime | no | yes | [optional] |
185
+ | `SystemModstamp` | datetime | no | yes | [optional] |
186
+
187
+ **Single-row requirement for complexvalue columns:** `Metadata` and
188
+ `FullName` on `ApexClass` follow the standard `MALFORMED_QUERY` rule —
189
+ batch IN-clause SELECTs that return ≥2 rows fail when these two are
190
+ selected. `Body` + `SymbolTable` are the exception (batch works).
191
+ Comments in `assets/soql/apex_class_bodies_by_ids.soql` +
192
+ `apex_class_bodies_by_names.soql` pin this.
193
+
194
+ ### `Flow` (Tooling) — Flow version body
195
+
196
+ Single-row retrieval required — `Metadata` and `FullName` are both
197
+ `complexvalue`. Fired once per `activeVersionId` returned by
198
+ `FlowDefinition`; parallelized via `ThreadPoolExecutor`.
199
+
200
+ **Filterability quirk:** `FullName` is selectable but **not filterable**
201
+ (`INVALID_FIELD: field 'FullName' can not be filtered in a query call`).
202
+ Filter by `Id` instead.
203
+
204
+ | Name | Type | Nillable | Filterable | Tag |
205
+ |---|---|---|---|---|
206
+ | `Id` | id | no | yes | [mandatory] |
207
+ | `DefinitionId` | reference | no | yes | [mandatory] |
208
+ | `FullName` | string | yes | **no** | [optional] — complexvalue companion; not filterable |
209
+ | `Metadata` | complexvalue | yes | no | [optional] — full flow JSON (actionCalls, subflows, variables, decisions, formulas, assignments, apexPluginCalls) |
210
+ | `MasterLabel` | string | yes | yes | [optional] |
211
+ | `Description` | textarea | yes | no | [optional] |
212
+ | `VersionNumber` | int | yes | yes | [optional] |
213
+ | `ProcessType` | picklist | yes | yes | [optional] |
214
+ | `Status` | picklist | yes | yes | [optional] |
215
+ | `ApiVersion` | double | yes | yes | [optional] |
216
+ | `IsActive` | boolean | no | yes | [optional] |
217
+ | `IsTemplate` | boolean | no | yes | [optional] |
218
+ | `RunInMode` | picklist | yes | yes | [optional] |
219
+ | `Environments` | picklist | yes | yes | [optional] |
220
+ | `NamespacePrefix` | string | yes | yes | [optional] |
221
+ | `ManageableState` | picklist | yes | yes | [optional] |
222
+ | `OverriddenFlowId` | reference | yes | yes | [optional] |
223
+ | `SourceTemplateId` | reference | yes | yes | [optional] |
224
+ | `TriggerType` | picklist | yes | yes | [optional] |
225
+ | `IsDeleted` | boolean | no | yes | [optional] |
226
+ | `CreatedById` | reference | no | yes | [optional] |
227
+ | `CreatedDate` | datetime | no | yes | [optional] |
228
+ | `LastModifiedById` | reference | no | yes | [optional] |
229
+ | `LastModifiedDate` | datetime | no | yes | [optional] |
230
+ | `SystemModstamp` | datetime | no | yes | [optional] |
231
+ | `InstalledPackageName` | string | yes | yes | [optional] |
232
+
233
+ **Single-row requirement:** `Metadata` and `FullName` force
234
+ `WHERE Id = '<version_id>'`. The SOQL asset `flow_metadata_by_id.soql`
235
+ encodes this as a single `Id = '...'` predicate.
236
+
237
+ ### `FlowDefinition` (Tooling) — Flow versioning index
238
+
239
+ Two-hop feeder to `Flow`. Batch IN-clause works. Returns
240
+ `ActiveVersionId` + `LatestVersionId` — the skill prefers active.
241
+
242
+ | Name | Type | Nillable | Filterable | Tag |
243
+ |---|---|---|---|---|
244
+ | `Id` | id | no | yes | [mandatory] |
245
+ | `DeveloperName` | string | no | yes | [mandatory] |
246
+ | `ActiveVersionId` | reference | yes | yes | [optional] — FK to `Flow.Id` |
247
+ | `LatestVersionId` | reference | yes | yes | [optional] — FK to `Flow.Id` |
248
+ | `MasterLabel` | string | yes | yes | [optional] |
249
+ | `Description` | textarea | yes | no | [optional] |
250
+ | `NamespacePrefix` | string | yes | yes | [optional] |
251
+ | `ManageableState` | picklist | yes | yes | [optional] |
252
+ | `Metadata` | complexvalue | yes | no | [optional] — definition-level metadata (may carry what the Flow hop provides on some orgs) |
253
+ | `FullName` | string | yes | no | [optional] |
254
+ | `IsDeleted` | boolean | no | yes | [optional] |
255
+ | `CreatedById` | reference | no | yes | [optional] |
256
+ | `CreatedDate` | datetime | no | yes | [optional] |
257
+ | `LastModifiedById` | reference | no | yes | [optional] |
258
+ | `LastModifiedDate` | datetime | no | yes | [optional] |
259
+ | `SystemModstamp` | datetime | no | yes | [optional] |
260
+
261
+ ### `GenAiPlannerDefinition` (Tooling) — planner root
262
+
263
+ Entry query for the tree. Matched by `DeveloperName` (the
264
+ `<genAiPlannerName>` extracted from the Bot metadata retrieve). The
265
+ `PlannerType` picklist is the classifier for classic ReAct vs NGA.
266
+
267
+ **Seven-value `PlannerType` picklist** (verified consistent across
268
+ `my-org-alias`, `my-org-alias-2`, `my-org-alias-3`): grouped by
269
+ namespace — `AiCopilot__*` = classic ReAct family,
270
+ `Atlas__*` = NGA family. `startswith("Atlas__")` is a clean
271
+ classic-vs-NGA discriminator.
272
+
273
+ | Name | Type | Nillable | Filterable | Tag |
274
+ |---|---|---|---|---|
275
+ | `Id` | id | no | yes | [mandatory] |
276
+ | `DeveloperName` | string | no | yes | [mandatory] |
277
+ | `PlannerType` | picklist | yes | yes | [mandatory] |
278
+ | `MasterLabel` | string | yes | yes | [optional] |
279
+ | `Description` | textarea | yes | no | [optional] |
280
+ | `Capabilities` | textarea | yes | no | [optional] — null in every row tested on both classic + NGA |
281
+ | `AgentGraph` | complexvalue | yes | no | [optional] — null in every row tested; single-row rule still applies |
282
+ | `NamespacePrefix` | string | yes | yes | [optional] |
283
+ | `ManageableState` | picklist | yes | yes | [optional] |
284
+ | `Metadata` | complexvalue | yes | no | [optional] |
285
+ | `FullName` | string | yes | no | [optional] |
286
+ | `IsDeleted` | boolean | no | yes | [optional] |
287
+ | `CreatedById` | reference | no | yes | [optional] |
288
+ | `CreatedDate` | datetime | no | yes | [optional] |
289
+ | `LastModifiedById` | reference | no | yes | [optional] |
290
+ | `LastModifiedDate` | datetime | no | yes | [optional] |
291
+ | `SystemModstamp` | datetime | no | yes | [optional] |
292
+
293
+ **Single-row requirement for complexvalue columns:** `AgentGraph`,
294
+ `Metadata`, `FullName` — select individually; entry query pins
295
+ `WHERE DeveloperName = '...' LIMIT 1`.
296
+
297
+ ### `GenAiPluginDefinition` (Tooling) — topics
298
+
299
+ All topics for a planner via `WHERE PlannerId = :plannerId`. Carries
300
+ `PluginType` + `Scope` for topic classification and `CanEscalate` /
301
+ `IsLocal` for behavior flags.
302
+
303
+ | Name | Type | Nillable | Filterable | Tag |
304
+ |---|---|---|---|---|
305
+ | `Id` | id | no | yes | [mandatory] |
306
+ | `DeveloperName` | string | no | yes | [mandatory] |
307
+ | `PluginType` | picklist | yes | yes | [optional] — topic type classifier |
308
+ | `Scope` | textarea | yes | no | [optional] — natural-language topic scope |
309
+ | `MasterLabel` | string | yes | yes | [optional] |
310
+ | `Description` | textarea | yes | no | [optional] |
311
+ | `CanEscalate` | boolean | yes | yes | [optional] |
312
+ | `IsLocal` | boolean | yes | yes | [optional] |
313
+ | `Source` | picklist | yes | yes | [optional] |
314
+ | `ParentId` | reference | yes | yes | [optional] — planner FK (sometimes referred to as `PlannerId` in SOQL filter clauses) |
315
+ | `LocalDeveloperName` | string | yes | yes | [optional] |
316
+ | `Language` | picklist | yes | yes | [optional] |
317
+ | `NamespacePrefix` | string | yes | yes | [optional] |
318
+ | `ManageableState` | picklist | yes | yes | [optional] |
319
+ | `Metadata` | complexvalue | yes | no | [optional] |
320
+ | `FullName` | string | yes | no | [optional] |
321
+ | `ClassificationDescription` | textarea | yes | no | [optional] |
322
+ | `GenAiFunctionInvoker` | string | yes | yes | [optional] |
323
+ | `IsDeleted` | boolean | no | yes | [optional] |
324
+ | `CreatedById` | reference | no | yes | [optional] |
325
+ | `CreatedDate` | datetime | no | yes | [optional] |
326
+ | `LastModifiedById` | reference | no | yes | [optional] |
327
+
328
+ **Single-row requirement:** `Metadata` + `FullName` require per-id
329
+ retrieval. The production path doesn't SELECT `Metadata` on this sObject
330
+ (see `plugins_by_planner.soql`) — it pulls `Scope` + scalar fields
331
+ instead, which batch-safely over `PlannerId = :id`.
332
+
333
+ ### `GenAiPluginFunctionDef` (Tooling) — plugin-function join
334
+
335
+ Join table: `GenAiPluginDefinition` → `GenAiFunctionDefinition`. Batch-
336
+ safe on `PluginId IN (...)`.
337
+
338
+ | Name | Type | Nillable | Filterable | Tag |
339
+ |---|---|---|---|---|
340
+ | `Id` | id | no | yes | [mandatory] |
341
+ | `PluginId` | reference | no | yes | [mandatory] |
342
+ | `Function` | picklist | yes | yes | [optional] — references `GenAiFunctionDefinition.Id` |
343
+ | `NamespacePrefix` | string | yes | yes | [optional] |
344
+ | `ManageableState` | picklist | yes | yes | [optional] |
345
+ | `IsDeleted` | boolean | no | yes | [optional] |
346
+ | `CreatedById` | reference | no | yes | [optional] |
347
+ | `CreatedDate` | datetime | no | yes | [optional] |
348
+ | `LastModifiedById` | reference | no | yes | [optional] |
349
+ | `SystemModstamp` | datetime | no | yes | [optional] |
350
+
351
+ ### `GenAiPluginInstructionDef` (Tooling) — per-topic instructions
352
+
353
+ Per-topic instruction text + ordering. Batch-safe on
354
+ `GenAiPluginDefinitionId IN (...)`.
355
+
356
+ | Name | Type | Nillable | Filterable | Tag |
357
+ |---|---|---|---|---|
358
+ | `Id` | id | no | yes | [mandatory] |
359
+ | `GenAiPluginDefinitionId` | reference | no | yes | [mandatory] |
360
+ | `DeveloperName` | string | no | yes | [optional] |
361
+ | `MasterLabel` | string | yes | yes | [optional] |
362
+ | `Description` | textarea | yes | no | [optional] — the instruction text |
363
+ | `SortOrder` | int | yes | yes | [optional] |
364
+ | `Language` | picklist | yes | yes | [optional] |
365
+ | `NamespacePrefix` | string | yes | yes | [optional] |
366
+ | `ManageableState` | picklist | yes | yes | [optional] |
367
+ | `FullName` | string | yes | no | [optional] |
368
+ | `Metadata` | complexvalue | yes | no | [optional] |
369
+ | `IsDeleted` | boolean | no | yes | [optional] |
370
+ | `CreatedById` | reference | no | yes | [optional] |
371
+ | `CreatedDate` | datetime | no | yes | [optional] |
372
+ | `LastModifiedById` | reference | no | yes | [optional] |
373
+
374
+ **Single-row requirement:** `Metadata` + `FullName` complexvalue pair;
375
+ the production SOQL omits them (scalar fields batch-safely).
376
+
377
+ ### `GenAiFunctionDefinition` (Tooling) — actions
378
+
379
+ The actions. Combined single-query fetches both bundle-scope (`PlannerId`)
380
+ and topic-scope (`PluginId IN`) functions. `InvocationTargetType`
381
+ + `InvocationTarget` route to the downstream fetch (Flow, Apex, prompt,
382
+ standard invocable).
383
+
384
+ **`InvocationTarget` format varies by planner shape** (the ID-prefix
385
+ router lives in `scripts/resolve_invocation_target.py`):
386
+ - Classic ReAct: DeveloperName string (e.g. `AGNT_SetUserSelectedOption`).
387
+ - NGA: Salesforce 15/18-char Id (e.g. `01pVF...` = ApexClass,
388
+ `300VF...` = FlowDefinition, `0hf...` = GenAiPromptTemplate).
389
+
390
+ | Name | Type | Nillable | Filterable | Tag |
391
+ |---|---|---|---|---|
392
+ | `Id` | id | no | yes | [mandatory] |
393
+ | `DeveloperName` | string | no | yes | [mandatory] |
394
+ | `InvocationTarget` | string | yes | yes | [mandatory] |
395
+ | `InvocationTargetType` | picklist | yes | yes | [optional] — `flow` / `apex` / `standardInvocableAction` / `generatePromptResponse` |
396
+ | `MasterLabel` | string | yes | yes | [optional] |
397
+ | `Description` | textarea | yes | no | [optional] |
398
+ | `IsLocal` | boolean | yes | yes | [optional] |
399
+ | `IsConfirmationRequired` | boolean | yes | yes | [optional] |
400
+ | `IsIncludeInProgressIndicator` | boolean | yes | yes | [optional] |
401
+ | `ProgressIndicatorMessage` | string | yes | yes | [optional] |
402
+ | `Source` | picklist | yes | yes | [optional] |
403
+ | `PluginId` | reference | yes | yes | [optional] — topic-scope FK (null for bundle-scope functions) |
404
+ | `PlannerId` | reference | yes | yes | [optional] — bundle-scope FK (null on NGA — attachment is plugin-only) |
405
+ | `ParentId` | reference | yes | yes | [optional] |
406
+ | `LocalDeveloperName` | string | yes | yes | [optional] |
407
+ | `Language` | picklist | yes | yes | [optional] |
408
+ | `InvocationTargetApiName` | string | yes | yes | [optional] |
409
+ | `MissingValuePromptMessage` | string | yes | yes | [optional] |
410
+ | `NamespacePrefix` | string | yes | yes | [optional] |
411
+ | `ManageableState` | picklist | yes | yes | [optional] |
412
+ | `Metadata` | complexvalue | yes | no | [optional] |
413
+ | `FullName` | string | yes | no | [optional] |
414
+ | `IsDeleted` | boolean | no | yes | [optional] |
415
+ | `CreatedById` | reference | no | yes | [optional] |
416
+ | `CreatedDate` | datetime | no | yes | [optional] |
417
+ | `LastModifiedById` | reference | no | yes | [optional] |
418
+
419
+ **Single-row requirement:** `Metadata` + `FullName` complexvalue
420
+ columns; production SOQL omits both to keep the `PlannerId / PluginId IN`
421
+ batch path intact.
422
+
423
+ ### `GenAiPlannerFunctionDef` (Tooling) — planner-bundle join
424
+
425
+ Bundle-scope join: planner → function. Analogous to
426
+ `GenAiPluginFunctionDef` but keyed on `PlannerId`. Batch-safe on
427
+ `PlannerId = :id`.
428
+
429
+ | Name | Type | Nillable | Filterable | Tag |
430
+ |---|---|---|---|---|
431
+ | `Id` | id | no | yes | [mandatory] |
432
+ | `PlannerId` | reference | no | yes | [mandatory] |
433
+ | `Plugin` | picklist | yes | yes | [optional] — references plugin DeveloperName / id |
434
+ | `NamespacePrefix` | string | yes | yes | [optional] |
435
+ | `ManageableState` | picklist | yes | yes | [optional] |
436
+ | `IsDeleted` | boolean | no | yes | [optional] |
437
+ | `CreatedById` | reference | no | yes | [optional] |
438
+ | `CreatedDate` | datetime | no | yes | [optional] |
439
+ | `LastModifiedById` | reference | no | yes | [optional] |
440
+ | `SystemModstamp` | datetime | no | yes | [optional] |
441
+
442
+ ### `GenAiPlannerAttrDefinition` (Tooling) — parameter mappings
443
+
444
+ The `attributeMappings` — I/O parameter bindings between actions and
445
+ the planner. **Polymorphic `ParentId`**: points at either a
446
+ `GenAiFunctionDefinition` (function-scope mappings) or
447
+ `GenAiPlannerDefinition` (bundle-scope mappings). The production SOQL
448
+ passes the union of function ids + planner id via
449
+ `WHERE ParentId IN (:function_ids, :planner_id)`.
450
+
451
+ `MappingType` is the `input` / `output` picklist; `ParameterName`
452
+ identifies the bound variable on the planner side.
453
+
454
+ | Name | Type | Nillable | Filterable | Tag |
455
+ |---|---|---|---|---|
456
+ | `Id` | id | no | yes | [mandatory] |
457
+ | `ParentId` | reference | yes | yes | [optional] — polymorphic: GenAiFunctionDefinition \| GenAiPlannerDefinition |
458
+ | `DeveloperName` | string | no | yes | [optional] |
459
+ | `MasterLabel` | string | yes | yes | [optional] |
460
+ | `Description` | textarea | yes | no | [optional] |
461
+ | `MappingType` | picklist | yes | yes | [optional] — `input` / `output` |
462
+ | `ParameterName` | string | yes | yes | [optional] |
463
+ | `Language` | picklist | yes | yes | [optional] |
464
+ | `NamespacePrefix` | string | yes | yes | [optional] |
465
+ | `ManageableState` | picklist | yes | yes | [optional] |
466
+ | `IsDeleted` | boolean | no | yes | [optional] |
467
+ | `CreatedById` | reference | no | yes | [optional] |
468
+ | `CreatedDate` | datetime | no | yes | [optional] |
469
+ | `LastModifiedById` | reference | no | yes | [optional] |
470
+
471
+ ---
472
+
473
+ ## Known picklist values (live-API verified, 2026-05-02)
474
+
475
+ | sObject | Field | Values |
476
+ |---|---|---|
477
+ | `GenAiPlannerDefinition` | `PlannerType` | Seven values split by namespace. Classic family: `AiCopilot__ReAct`, `AiCopilot__ReactAiPlannerV1`, `AiCopilot__SequentialPlannerIntentClassifier`. NGA family: `Atlas__ConcurrentMultiAgentOrchestration`, `Atlas__AnthropicCompatibleV1`, `Atlas__AtlasReactV1`, `Atlas__MainSubAgent` (exact set may vary by release — `startswith("Atlas__")` is the stable classic-vs-NGA discriminator). |
478
+ | `GenAiFunctionDefinition` | `InvocationTargetType` | `flow`, `apex`, `standardInvocableAction`, `generatePromptResponse` |
479
+ | `GenAiPlannerAttrDefinition` | `MappingType` | `input`, `output` |
480
+ | `BotVersion` | `Status` | `Inactive`, `Active` (active = currently published version) |
481
+
482
+ ---
483
+
484
+ ## Mandatory-field enforcement
485
+
486
+ The `[mandatory]` tags above mirror `scripts/probe_channels.py`:
487
+
488
+ ```python
489
+ MANDATORY_FIELDS: Dict[str, set[str]] = {
490
+ "BotDefinition": {"Id", "DeveloperName"},
491
+ "BotVersion": {"Id", "BotDefinitionId"},
492
+ "ApexClass": {"Id", "Name"},
493
+ "Flow": {"Id", "MasterLabel", "DefinitionId"},
494
+ "FlowDefinition": {"Id", "DeveloperName"},
495
+ "GenAiPlannerDefinition": {"Id", "DeveloperName", "PlannerType"},
496
+ "GenAiPluginDefinition": {"Id", "DeveloperName"},
497
+ "GenAiFunctionDefinition": {"Id", "DeveloperName", "InvocationTarget"},
498
+ "GenAiPlannerAttrDefinition": {"Id"},
499
+ }
500
+ ```
501
+
502
+ `GenAiPluginFunctionDef`, `GenAiPluginInstructionDef`, and
503
+ `GenAiPlannerFunctionDef` don't appear in `MANDATORY_FIELDS` — they're
504
+ join tables whose `Id` + FK columns are present by construction on
505
+ every query. The per-sObject tables above tag their FK columns as
506
+ `[mandatory]` because the SOQL assets SELECT them; a probe that saw
507
+ them missing would still flip `PROBE_FAILED` via the `Id` check, but
508
+ the tag reflects "the skill's SOQL will fail if this column is gone."
509
+
510
+ When a Salesforce quarterly release renames or removes a
511
+ `[mandatory]` field, run with `--reprobe` to force a fresh describe and
512
+ surface the drift cleanly.
@@ -0,0 +1 @@
1
+ # Shared path / fs-guard / sql helpers for investigating-agentforce-architecture.