@salesforce/afv-skills 1.13.0 → 1.15.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 (359) hide show
  1. package/package.json +3 -3
  2. package/skills/applying-slds/SKILL.md +322 -0
  3. package/skills/applying-slds/checklists.md +83 -0
  4. package/skills/applying-slds/examples.md +283 -0
  5. package/skills/applying-slds/guidance/README.md +83 -0
  6. package/skills/applying-slds/guidance/blueprints-index.md +213 -0
  7. package/skills/applying-slds/guidance/icons-guidance.md +186 -0
  8. package/skills/applying-slds/guidance/overviews/borders.md +236 -0
  9. package/skills/applying-slds/guidance/overviews/color.md +266 -0
  10. package/skills/applying-slds/guidance/overviews/display-density.md +366 -0
  11. package/skills/applying-slds/guidance/overviews/icons.md +240 -0
  12. package/skills/applying-slds/guidance/overviews/illustrations.md +235 -0
  13. package/skills/applying-slds/guidance/overviews/shadows.md +176 -0
  14. package/skills/applying-slds/guidance/overviews/spacing.md +216 -0
  15. package/skills/applying-slds/guidance/overviews/typography.md +323 -0
  16. package/skills/applying-slds/guidance/overviews/utilities.md +542 -0
  17. package/skills/applying-slds/guidance/slds-development-guide.md +288 -0
  18. package/skills/applying-slds/guidance/styling-hooks/borders.md +202 -0
  19. package/skills/applying-slds/guidance/styling-hooks/color/expressive-palette-hooks.md +153 -0
  20. package/skills/applying-slds/guidance/styling-hooks/color/index.md +171 -0
  21. package/skills/applying-slds/guidance/styling-hooks/color/semantic/accent-hooks.md +204 -0
  22. package/skills/applying-slds/guidance/styling-hooks/color/semantic/feedback-hooks.md +768 -0
  23. package/skills/applying-slds/guidance/styling-hooks/color/semantic/surface-hooks.md +337 -0
  24. package/skills/applying-slds/guidance/styling-hooks/color/system-hooks.md +132 -0
  25. package/skills/applying-slds/guidance/styling-hooks/index.md +327 -0
  26. package/skills/applying-slds/guidance/styling-hooks/shadows.md +238 -0
  27. package/skills/applying-slds/guidance/styling-hooks/spacing.md +254 -0
  28. package/skills/applying-slds/guidance/styling-hooks/typography.md +448 -0
  29. package/skills/applying-slds/guidance/utilities/alignment.md +119 -0
  30. package/skills/applying-slds/guidance/utilities/borders.md +131 -0
  31. package/skills/applying-slds/guidance/utilities/box.md +125 -0
  32. package/skills/applying-slds/guidance/utilities/color.md +165 -0
  33. package/skills/applying-slds/guidance/utilities/dark-mode.md +111 -0
  34. package/skills/applying-slds/guidance/utilities/description-list.md +168 -0
  35. package/skills/applying-slds/guidance/utilities/floats.md +117 -0
  36. package/skills/applying-slds/guidance/utilities/grid.md +264 -0
  37. package/skills/applying-slds/guidance/utilities/horizontal-list.md +110 -0
  38. package/skills/applying-slds/guidance/utilities/hyphenation.md +84 -0
  39. package/skills/applying-slds/guidance/utilities/index.md +205 -0
  40. package/skills/applying-slds/guidance/utilities/interactions.md +89 -0
  41. package/skills/applying-slds/guidance/utilities/layout.md +109 -0
  42. package/skills/applying-slds/guidance/utilities/line-clamp.md +131 -0
  43. package/skills/applying-slds/guidance/utilities/margin.md +155 -0
  44. package/skills/applying-slds/guidance/utilities/media-object.md +161 -0
  45. package/skills/applying-slds/guidance/utilities/name-value-list.md +152 -0
  46. package/skills/applying-slds/guidance/utilities/padding.md +155 -0
  47. package/skills/applying-slds/guidance/utilities/position.md +177 -0
  48. package/skills/applying-slds/guidance/utilities/print.md +114 -0
  49. package/skills/applying-slds/guidance/utilities/scrollable.md +126 -0
  50. package/skills/applying-slds/guidance/utilities/sizing.md +190 -0
  51. package/skills/applying-slds/guidance/utilities/themes.md +121 -0
  52. package/skills/applying-slds/guidance/utilities/truncate.md +127 -0
  53. package/skills/applying-slds/guidance/utilities/typography.md +166 -0
  54. package/skills/applying-slds/guidance/utilities/vertical-list.md +166 -0
  55. package/skills/applying-slds/guidance/utilities/visibility.md +228 -0
  56. package/skills/applying-slds/metadata/README.md +84 -0
  57. package/skills/applying-slds/metadata/blueprints/components/accordion.yaml +304 -0
  58. package/skills/applying-slds/metadata/blueprints/components/activity-timeline.yaml +92 -0
  59. package/skills/applying-slds/metadata/blueprints/components/alert.yaml +103 -0
  60. package/skills/applying-slds/metadata/blueprints/components/app-launcher.yaml +94 -0
  61. package/skills/applying-slds/metadata/blueprints/components/avatar-group.yaml +81 -0
  62. package/skills/applying-slds/metadata/blueprints/components/avatar.yaml +97 -0
  63. package/skills/applying-slds/metadata/blueprints/components/badges.yaml +102 -0
  64. package/skills/applying-slds/metadata/blueprints/components/brand-band.yaml +198 -0
  65. package/skills/applying-slds/metadata/blueprints/components/breadcrumbs.yaml +95 -0
  66. package/skills/applying-slds/metadata/blueprints/components/builder-header.yaml +192 -0
  67. package/skills/applying-slds/metadata/blueprints/components/button-groups.yaml +82 -0
  68. package/skills/applying-slds/metadata/blueprints/components/button-icons.yaml +295 -0
  69. package/skills/applying-slds/metadata/blueprints/components/buttons.yaml +230 -0
  70. package/skills/applying-slds/metadata/blueprints/components/cards.yaml +124 -0
  71. package/skills/applying-slds/metadata/blueprints/components/carousel.yaml +140 -0
  72. package/skills/applying-slds/metadata/blueprints/components/chat.yaml +179 -0
  73. package/skills/applying-slds/metadata/blueprints/components/checkbox-button-group.yaml +192 -0
  74. package/skills/applying-slds/metadata/blueprints/components/checkbox-button.yaml +204 -0
  75. package/skills/applying-slds/metadata/blueprints/components/checkbox-toggle.yaml +177 -0
  76. package/skills/applying-slds/metadata/blueprints/components/checkbox.yaml +108 -0
  77. package/skills/applying-slds/metadata/blueprints/components/color-picker.yaml +172 -0
  78. package/skills/applying-slds/metadata/blueprints/components/combobox.yaml +136 -0
  79. package/skills/applying-slds/metadata/blueprints/components/counter.yaml +147 -0
  80. package/skills/applying-slds/metadata/blueprints/components/data-tables.yaml +157 -0
  81. package/skills/applying-slds/metadata/blueprints/components/datepickers.yaml +130 -0
  82. package/skills/applying-slds/metadata/blueprints/components/datetime-picker.yaml +155 -0
  83. package/skills/applying-slds/metadata/blueprints/components/docked-composer.yaml +201 -0
  84. package/skills/applying-slds/metadata/blueprints/components/docked-form-footer.yaml +161 -0
  85. package/skills/applying-slds/metadata/blueprints/components/docked-utility-bar.yaml +175 -0
  86. package/skills/applying-slds/metadata/blueprints/components/drop-zone.yaml +115 -0
  87. package/skills/applying-slds/metadata/blueprints/components/dueling-picklist.yaml +196 -0
  88. package/skills/applying-slds/metadata/blueprints/components/dynamic-icons.yaml +128 -0
  89. package/skills/applying-slds/metadata/blueprints/components/dynamic-menu.yaml +141 -0
  90. package/skills/applying-slds/metadata/blueprints/components/expandable-section.yaml +115 -0
  91. package/skills/applying-slds/metadata/blueprints/components/expression.yaml +143 -0
  92. package/skills/applying-slds/metadata/blueprints/components/feeds.yaml +125 -0
  93. package/skills/applying-slds/metadata/blueprints/components/file-selector.yaml +154 -0
  94. package/skills/applying-slds/metadata/blueprints/components/files.yaml +119 -0
  95. package/skills/applying-slds/metadata/blueprints/components/form-element.yaml +145 -0
  96. package/skills/applying-slds/metadata/blueprints/components/global-header.yaml +120 -0
  97. package/skills/applying-slds/metadata/blueprints/components/global-navigation.yaml +100 -0
  98. package/skills/applying-slds/metadata/blueprints/components/icons.yaml +138 -0
  99. package/skills/applying-slds/metadata/blueprints/components/illustration.yaml +205 -0
  100. package/skills/applying-slds/metadata/blueprints/components/input.yaml +151 -0
  101. package/skills/applying-slds/metadata/blueprints/components/list-builder.yaml +127 -0
  102. package/skills/applying-slds/metadata/blueprints/components/lookups.yaml +132 -0
  103. package/skills/applying-slds/metadata/blueprints/components/map.yaml +118 -0
  104. package/skills/applying-slds/metadata/blueprints/components/menus.yaml +134 -0
  105. package/skills/applying-slds/metadata/blueprints/components/modals.yaml +152 -0
  106. package/skills/applying-slds/metadata/blueprints/components/notifications.yaml +88 -0
  107. package/skills/applying-slds/metadata/blueprints/components/page-headers.yaml +135 -0
  108. package/skills/applying-slds/metadata/blueprints/components/panels.yaml +149 -0
  109. package/skills/applying-slds/metadata/blueprints/components/path.yaml +154 -0
  110. package/skills/applying-slds/metadata/blueprints/components/picklist.yaml +125 -0
  111. package/skills/applying-slds/metadata/blueprints/components/pills.yaml +154 -0
  112. package/skills/applying-slds/metadata/blueprints/components/popovers.yaml +120 -0
  113. package/skills/applying-slds/metadata/blueprints/components/progress-bar.yaml +110 -0
  114. package/skills/applying-slds/metadata/blueprints/components/progress-indicator.yaml +133 -0
  115. package/skills/applying-slds/metadata/blueprints/components/progress-ring.yaml +102 -0
  116. package/skills/applying-slds/metadata/blueprints/components/prompt.yaml +126 -0
  117. package/skills/applying-slds/metadata/blueprints/components/publishers.yaml +178 -0
  118. package/skills/applying-slds/metadata/blueprints/components/radio-button-group.yaml +172 -0
  119. package/skills/applying-slds/metadata/blueprints/components/radio-group.yaml +112 -0
  120. package/skills/applying-slds/metadata/blueprints/components/rich-text-editor.yaml +135 -0
  121. package/skills/applying-slds/metadata/blueprints/components/scoped-notifications.yaml +188 -0
  122. package/skills/applying-slds/metadata/blueprints/components/scoped-tabs.yaml +97 -0
  123. package/skills/applying-slds/metadata/blueprints/components/select.yaml +127 -0
  124. package/skills/applying-slds/metadata/blueprints/components/setup-assistant.yaml +152 -0
  125. package/skills/applying-slds/metadata/blueprints/components/slider.yaml +111 -0
  126. package/skills/applying-slds/metadata/blueprints/components/spinners.yaml +135 -0
  127. package/skills/applying-slds/metadata/blueprints/components/split-view.yaml +112 -0
  128. package/skills/applying-slds/metadata/blueprints/components/summary-detail.yaml +103 -0
  129. package/skills/applying-slds/metadata/blueprints/components/tabs.yaml +138 -0
  130. package/skills/applying-slds/metadata/blueprints/components/textarea.yaml +116 -0
  131. package/skills/applying-slds/metadata/blueprints/components/tiles.yaml +108 -0
  132. package/skills/applying-slds/metadata/blueprints/components/timepicker.yaml +111 -0
  133. package/skills/applying-slds/metadata/blueprints/components/toast.yaml +154 -0
  134. package/skills/applying-slds/metadata/blueprints/components/tooltips.yaml +107 -0
  135. package/skills/applying-slds/metadata/blueprints/components/tree-grid.yaml +116 -0
  136. package/skills/applying-slds/metadata/blueprints/components/trees.yaml +116 -0
  137. package/skills/applying-slds/metadata/blueprints/components/trial-bar.yaml +112 -0
  138. package/skills/applying-slds/metadata/blueprints/components/vertical-navigation.yaml +130 -0
  139. package/skills/applying-slds/metadata/blueprints/components/vertical-tabs.yaml +140 -0
  140. package/skills/applying-slds/metadata/blueprints/components/visual-picker.yaml +150 -0
  141. package/skills/applying-slds/metadata/blueprints/components/welcome-mat.yaml +136 -0
  142. package/skills/applying-slds/metadata/hooks-index.json +6272 -0
  143. package/skills/applying-slds/metadata/icon-metadata.json +38466 -0
  144. package/skills/applying-slds/metadata/utilities-index.json +21912 -0
  145. package/skills/applying-slds/references/component-selection.md +112 -0
  146. package/skills/applying-slds/references/icons-decision-guide.md +124 -0
  147. package/skills/applying-slds/references/styling-decision-guide.md +228 -0
  148. package/skills/applying-slds/references/utilities-quick-ref.md +125 -0
  149. package/skills/applying-slds/scripts/search-blueprints.cjs +117 -0
  150. package/skills/applying-slds/scripts/search-hooks.cjs +139 -0
  151. package/skills/applying-slds/scripts/search-icons.cjs +174 -0
  152. package/skills/applying-slds/scripts/search-utilities.cjs +161 -0
  153. package/skills/building-ui-bundle-app/SKILL.md +33 -8
  154. package/skills/generating-custom-application/SKILL.md +1 -1
  155. package/skills/generating-custom-lightning-type/SKILL.md +17 -39
  156. package/skills/generating-custom-lightning-type/assets/primitive-types-and-constraints.md +41 -0
  157. package/skills/generating-custom-lightning-type/references/widget-rendition.md +124 -0
  158. package/skills/generating-ui-bundle-custom-app/SKILL.md +93 -0
  159. package/skills/generating-ui-bundle-custom-app/docs/configure-metadata-custom-application.md +70 -0
  160. package/skills/generating-ui-bundle-metadata/SKILL.md +39 -1
  161. package/skills/investigating-agentforce-architecture/README.md +156 -0
  162. package/skills/investigating-agentforce-architecture/SKILL.md +230 -0
  163. package/skills/investigating-agentforce-architecture/assets/cli/describe_sobject.yaml +16 -0
  164. package/skills/investigating-agentforce-architecture/assets/cli/describe_tooling_sobject.yaml +17 -0
  165. package/skills/investigating-agentforce-architecture/assets/cli/list_metadata_genaiprompttemplate.yaml +17 -0
  166. package/skills/investigating-agentforce-architecture/assets/cli/org_display.yaml +15 -0
  167. package/skills/investigating-agentforce-architecture/assets/cli/retrieve_genai_plugin.yaml +18 -0
  168. package/skills/investigating-agentforce-architecture/assets/cli/show_access_token.yaml +27 -0
  169. package/skills/investigating-agentforce-architecture/assets/mermaid/action_tree.mmd +20 -0
  170. package/skills/investigating-agentforce-architecture/assets/mermaid/data_flow.mmd +19 -0
  171. package/skills/investigating-agentforce-architecture/assets/mermaid/dependency_graph.mmd +19 -0
  172. package/skills/investigating-agentforce-architecture/assets/mermaid/invocation_sequence.mmd +20 -0
  173. package/skills/investigating-agentforce-architecture/assets/mermaid/planner_state.mmd +18 -0
  174. package/skills/investigating-agentforce-architecture/assets/soql/apex_class_bodies_by_ids.soql +3 -0
  175. package/skills/investigating-agentforce-architecture/assets/soql/apex_class_bodies_by_names.soql +3 -0
  176. package/skills/investigating-agentforce-architecture/assets/soql/bot_definition_details.soql +3 -0
  177. package/skills/investigating-agentforce-architecture/assets/soql/bot_version_lookup.soql +4 -0
  178. package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_by_ids.soql +3 -0
  179. package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_ids_by_names.soql +3 -0
  180. package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_view_by_durable_ids.soql +4 -0
  181. package/skills/investigating-agentforce-architecture/assets/soql/flow_metadata_by_id.soql +3 -0
  182. package/skills/investigating-agentforce-architecture/assets/soql/functions_by_plugins.soql +5 -0
  183. package/skills/investigating-agentforce-architecture/assets/soql/planner_attrs_by_parent_ids.soql +3 -0
  184. package/skills/investigating-agentforce-architecture/assets/soql/planner_bundle_functions.soql +3 -0
  185. package/skills/investigating-agentforce-architecture/assets/soql/planner_definition_by_agent_chain.soql +3 -0
  186. package/skills/investigating-agentforce-architecture/assets/soql/plugin_functions_by_plugin_ids.soql +3 -0
  187. package/skills/investigating-agentforce-architecture/assets/soql/plugin_instructions_by_plugin_ids.soql +3 -0
  188. package/skills/investigating-agentforce-architecture/assets/soql/plugins_by_planner.soql +4 -0
  189. package/skills/investigating-agentforce-architecture/references/architecture_sections.md +243 -0
  190. package/skills/investigating-agentforce-architecture/references/contract.json +244 -0
  191. package/skills/investigating-agentforce-architecture/references/soql_fields.md +512 -0
  192. package/skills/investigating-agentforce-architecture/scripts/_shared/__init__.py +1 -0
  193. package/skills/investigating-agentforce-architecture/scripts/_shared/fs_guard.py +329 -0
  194. package/skills/investigating-agentforce-architecture/scripts/_shared/paths.py +110 -0
  195. package/skills/investigating-agentforce-architecture/scripts/_shared/runtime.py +59 -0
  196. package/skills/investigating-agentforce-architecture/scripts/_shared/sql.py +10 -0
  197. package/skills/investigating-agentforce-architecture/scripts/cache_check.py +234 -0
  198. package/skills/investigating-agentforce-architecture/scripts/config.py +131 -0
  199. package/skills/investigating-agentforce-architecture/scripts/fetch_soql.py +689 -0
  200. package/skills/investigating-agentforce-architecture/scripts/finalize.py +295 -0
  201. package/skills/investigating-agentforce-architecture/scripts/main.py +2835 -0
  202. package/skills/investigating-agentforce-architecture/scripts/metadata_listing.py +265 -0
  203. package/skills/investigating-agentforce-architecture/scripts/parallel_retrieve.py +69 -0
  204. package/skills/investigating-agentforce-architecture/scripts/parse_bundle.py +215 -0
  205. package/skills/investigating-agentforce-architecture/scripts/parse_wave.py +845 -0
  206. package/skills/investigating-agentforce-architecture/scripts/probe_channels.py +302 -0
  207. package/skills/investigating-agentforce-architecture/scripts/render_architecture.py +1043 -0
  208. package/skills/investigating-agentforce-architecture/scripts/resolve_bot.py +255 -0
  209. package/skills/investigating-agentforce-architecture/scripts/resolve_invocation_target.py +130 -0
  210. package/skills/investigating-agentforce-architecture/scripts/rest_client.py +763 -0
  211. package/skills/investigating-agentforce-architecture/scripts/retrieve_planner.py +13 -0
  212. package/skills/investigating-agentforce-architecture/scripts/sf_cli.py +242 -0
  213. package/skills/investigating-agentforce-architecture/scripts/soql_loader.py +253 -0
  214. package/skills/investigating-agentforce-architecture/scripts/summarize_tree.py +143 -0
  215. package/skills/investigating-agentforce-architecture/scripts/tests/__init__.py +0 -0
  216. package/skills/investigating-agentforce-architecture/scripts/tests/_bootstrap.py +23 -0
  217. package/skills/investigating-agentforce-architecture/scripts/tests/fixtures/__init__.py +0 -0
  218. package/skills/investigating-agentforce-architecture/scripts/tests/fixtures/genai_payloads.py +400 -0
  219. package/skills/investigating-agentforce-architecture/scripts/tests/test_cache_check.py +307 -0
  220. package/skills/investigating-agentforce-architecture/scripts/tests/test_cache_check_main.py +283 -0
  221. package/skills/investigating-agentforce-architecture/scripts/tests/test_config.py +115 -0
  222. package/skills/investigating-agentforce-architecture/scripts/tests/test_end_to_end_fixture.py +651 -0
  223. package/skills/investigating-agentforce-architecture/scripts/tests/test_finalize.py +278 -0
  224. package/skills/investigating-agentforce-architecture/scripts/tests/test_flow_children_inflation.py +582 -0
  225. package/skills/investigating-agentforce-architecture/scripts/tests/test_fs_guard.py +113 -0
  226. package/skills/investigating-agentforce-architecture/scripts/tests/test_iterative_wave_b.py +478 -0
  227. package/skills/investigating-agentforce-architecture/scripts/tests/test_main_pipeline.py +3359 -0
  228. package/skills/investigating-agentforce-architecture/scripts/tests/test_parallel_retrieve.py +131 -0
  229. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_bundle.py +400 -0
  230. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave.py +644 -0
  231. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_classifiers.py +224 -0
  232. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_helpers.py +380 -0
  233. package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_main.py +397 -0
  234. package/skills/investigating-agentforce-architecture/scripts/tests/test_per_branch_visited.py +244 -0
  235. package/skills/investigating-agentforce-architecture/scripts/tests/test_probe_channels.py +359 -0
  236. package/skills/investigating-agentforce-architecture/scripts/tests/test_probe_cli_recipes.py +185 -0
  237. package/skills/investigating-agentforce-architecture/scripts/tests/test_render_architecture.py +810 -0
  238. package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_bot.py +203 -0
  239. package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_creds.py +157 -0
  240. package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_invocation_target.py +145 -0
  241. package/skills/investigating-agentforce-architecture/scripts/tests/test_rest_client.py +1253 -0
  242. package/skills/investigating-agentforce-architecture/scripts/tests/test_runtime_override.py +100 -0
  243. package/skills/investigating-agentforce-architecture/scripts/tests/test_sf_cli.py +261 -0
  244. package/skills/investigating-agentforce-architecture/scripts/tests/test_signature_stamping.py +466 -0
  245. package/skills/investigating-agentforce-architecture/scripts/tests/test_soql_loader.py +501 -0
  246. package/skills/investigating-agentforce-architecture/scripts/tests/test_summarize_tree.py +241 -0
  247. package/skills/investigating-agentforce-architecture/scripts/tests/test_write_emit_ctx.py +480 -0
  248. package/skills/investigating-agentforce-architecture/tools/emit_env.py +157 -0
  249. package/skills/investigating-agentforce-architecture/tools/emit_result.py +262 -0
  250. package/skills/investigating-agentforce-architecture/tools/sanitize.py +33 -0
  251. package/skills/investigating-agentforce-architecture/tools/write_emit_ctx.py +332 -0
  252. package/skills/investigating-agentforce-d360/README.md +123 -0
  253. package/skills/investigating-agentforce-d360/SKILL.md +163 -0
  254. package/skills/investigating-agentforce-d360/assets/dc/app_generation.sql +51 -0
  255. package/skills/investigating-agentforce-d360/assets/dc/content_category.sql +44 -0
  256. package/skills/investigating-agentforce-d360/assets/dc/content_quality.sql +41 -0
  257. package/skills/investigating-agentforce-d360/assets/dc/discover_sessions.sql +36 -0
  258. package/skills/investigating-agentforce-d360/assets/dc/feedback.sql +47 -0
  259. package/skills/investigating-agentforce-d360/assets/dc/feedback_details.sql +38 -0
  260. package/skills/investigating-agentforce-d360/assets/dc/gateway_records.sql +45 -0
  261. package/skills/investigating-agentforce-d360/assets/dc/gateway_request_llm.sql +50 -0
  262. package/skills/investigating-agentforce-d360/assets/dc/gateway_request_metadata.sql +44 -0
  263. package/skills/investigating-agentforce-d360/assets/dc/gateway_request_tags.sql +42 -0
  264. package/skills/investigating-agentforce-d360/assets/dc/gateway_requests.sql +89 -0
  265. package/skills/investigating-agentforce-d360/assets/dc/gateway_responses.sql +43 -0
  266. package/skills/investigating-agentforce-d360/assets/dc/generations.sql +52 -0
  267. package/skills/investigating-agentforce-d360/assets/dc/interactions.sql +53 -0
  268. package/skills/investigating-agentforce-d360/assets/dc/messages.sql +53 -0
  269. package/skills/investigating-agentforce-d360/assets/dc/messaging_session.sql +37 -0
  270. package/skills/investigating-agentforce-d360/assets/dc/moment_interactions.sql +34 -0
  271. package/skills/investigating-agentforce-d360/assets/dc/moments.sql +39 -0
  272. package/skills/investigating-agentforce-d360/assets/dc/participants.sql +48 -0
  273. package/skills/investigating-agentforce-d360/assets/dc/sessions.sql +78 -0
  274. package/skills/investigating-agentforce-d360/assets/dc/steps.sql +64 -0
  275. package/skills/investigating-agentforce-d360/assets/dc/tag_associations.sql +46 -0
  276. package/skills/investigating-agentforce-d360/assets/dc/tag_definition_associations.sql +37 -0
  277. package/skills/investigating-agentforce-d360/assets/dc/tag_definitions.sql +50 -0
  278. package/skills/investigating-agentforce-d360/assets/dc/tags.sql +37 -0
  279. package/skills/investigating-agentforce-d360/assets/dc/telemetry_spans.sql +55 -0
  280. package/skills/investigating-agentforce-d360/references/artifacts.md +50 -0
  281. package/skills/investigating-agentforce-d360/references/dc_dmo_fields.md +823 -0
  282. package/skills/investigating-agentforce-d360/references/dc_pipeline_contract.md +608 -0
  283. package/skills/investigating-agentforce-d360/scripts/_shared/__init__.py +2 -0
  284. package/skills/investigating-agentforce-d360/scripts/_shared/cli_override.py +98 -0
  285. package/skills/investigating-agentforce-d360/scripts/_shared/fs_guard.py +334 -0
  286. package/skills/investigating-agentforce-d360/scripts/_shared/paths.py +155 -0
  287. package/skills/investigating-agentforce-d360/scripts/_shared/runtime.py +59 -0
  288. package/skills/investigating-agentforce-d360/scripts/_shared/sql.py +14 -0
  289. package/skills/investigating-agentforce-d360/scripts/assemble_dc.py +1624 -0
  290. package/skills/investigating-agentforce-d360/scripts/config.py +45 -0
  291. package/skills/investigating-agentforce-d360/scripts/dc.py +188 -0
  292. package/skills/investigating-agentforce-d360/scripts/discover_sessions.py +556 -0
  293. package/skills/investigating-agentforce-d360/scripts/fetch_dc.py +1045 -0
  294. package/skills/investigating-agentforce-d360/scripts/render_dc.py +1750 -0
  295. package/skills/investigating-agentforce-d360/scripts/resolve_session.py +264 -0
  296. package/skills/investigating-agentforce-d360/scripts/storage.py +92 -0
  297. package/skills/investigating-agentforce-d360/scripts/tests/__init__.py +0 -0
  298. package/skills/investigating-agentforce-d360/scripts/tests/_bootstrap.py +15 -0
  299. package/skills/investigating-agentforce-d360/scripts/tests/fixtures/__init__.py +0 -0
  300. package/skills/investigating-agentforce-d360/scripts/tests/fixtures/synthetic_session.py +424 -0
  301. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_bootstrap_and_mode.py +115 -0
  302. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_gateway_direct.py +220 -0
  303. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_gateway_direct_integration.py +158 -0
  304. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_helpers.py +287 -0
  305. package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_integration.py +247 -0
  306. package/skills/investigating-agentforce-d360/scripts/tests/test_dc_and_resolve_session.py +433 -0
  307. package/skills/investigating-agentforce-d360/scripts/tests/test_discover_sessions.py +458 -0
  308. package/skills/investigating-agentforce-d360/scripts/tests/test_discover_sessions_grep_ci.py +193 -0
  309. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_helpers.py +266 -0
  310. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_identity.py +528 -0
  311. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_main.py +251 -0
  312. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_waterfall.py +229 -0
  313. package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_waterfall_full.py +283 -0
  314. package/skills/investigating-agentforce-d360/scripts/tests/test_identity_coherence.py +327 -0
  315. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_branches.py +256 -0
  316. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_gateway_direct.py +130 -0
  317. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_helpers.py +291 -0
  318. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_integration.py +220 -0
  319. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_planner_llm_calls.py +284 -0
  320. package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_show_prompts_gating.py +215 -0
  321. package/skills/investigating-agentforce-d360/scripts/tests/test_resolve_from_disk.py +100 -0
  322. package/skills/investigating-agentforce-d360/scripts/tests/test_resolve_session_main.py +149 -0
  323. package/skills/investigating-agentforce-d360/scripts/tests/test_runtime_override.py +104 -0
  324. package/skills/investigating-agentforce-d360/scripts/tests/test_session_shape.py +95 -0
  325. package/skills/investigating-agentforce-d360/scripts/tests/test_session_shape_dropped_by_stdm.py +85 -0
  326. package/skills/managing-managed-event-subscription/SKILL.md +152 -0
  327. package/skills/managing-managed-event-subscription/assets/managed-event-subscription-template.xml +20 -0
  328. package/skills/managing-managed-event-subscription/references/delete-guide.md +57 -0
  329. package/skills/managing-managed-event-subscription/references/topic-name-formats.md +26 -0
  330. package/skills/managing-managed-event-subscription/references/update-constraints.md +30 -0
  331. package/skills/reviewing-lwc-mobile-offline/SKILL.md +168 -0
  332. package/skills/reviewing-lwc-mobile-offline/references/grounding.md +7 -0
  333. package/skills/reviewing-lwc-mobile-offline/references/inline-graphql.md +43 -0
  334. package/skills/reviewing-lwc-mobile-offline/references/komaci-eslint.md +125 -0
  335. package/skills/reviewing-lwc-mobile-offline/references/lwc-if.md +78 -0
  336. package/skills/reviewing-lwc-mobile-offline/scripts/komaci.config.mjs +18 -0
  337. package/skills/reviewing-lwc-mobile-offline/scripts/package.json +10 -0
  338. package/skills/reviewing-lwc-mobile-offline/scripts/run-komaci.sh +69 -0
  339. package/skills/uplifting-components-to-slds2/SKILL.md +3 -2
  340. package/skills/uplifting-components-to-slds2/references/color-hooks-decision-guide.md +30 -9
  341. package/skills/uplifting-components-to-slds2/references/examples.md +24 -6
  342. package/skills/using-mobile-native-capabilities/SKILL.md +182 -0
  343. package/skills/using-mobile-native-capabilities/references/app-review.md +68 -0
  344. package/skills/using-mobile-native-capabilities/references/ar-space-capture.md +125 -0
  345. package/skills/using-mobile-native-capabilities/references/barcode-scanner.md +219 -0
  346. package/skills/using-mobile-native-capabilities/references/base-capability.md +22 -0
  347. package/skills/using-mobile-native-capabilities/references/biometrics.md +90 -0
  348. package/skills/using-mobile-native-capabilities/references/calendar.md +213 -0
  349. package/skills/using-mobile-native-capabilities/references/contacts.md +232 -0
  350. package/skills/using-mobile-native-capabilities/references/document-scanner.md +342 -0
  351. package/skills/using-mobile-native-capabilities/references/geofencing.md +123 -0
  352. package/skills/using-mobile-native-capabilities/references/location.md +158 -0
  353. package/skills/using-mobile-native-capabilities/references/mobile-capabilities.md +30 -0
  354. package/skills/using-mobile-native-capabilities/references/nfc.md +181 -0
  355. package/skills/using-mobile-native-capabilities/references/payments.md +95 -0
  356. package/skills/validating-slds/SKILL.md +262 -0
  357. package/skills/validating-slds/references/quality-checks.md +308 -0
  358. package/skills/validating-slds/references/report-format.md +302 -0
  359. package/skills/validating-slds/scripts/analyze-quality.cjs +521 -0
@@ -0,0 +1,823 @@
1
+ # STDM + GenAI DMO field reference
2
+
3
+ > **Convention.** Executable SQL literals live under `assets/dc/*.sql`
4
+ > and are loaded by scripts via `dc.load_sql`. Reference docs (including
5
+ > this one) describe query shape, column meaning, and join topology in
6
+ > prose — they do **not** contain the literal the engine would execute.
7
+ > Rationale: loaders parse, comment-strip, and placeholder-substitute
8
+ > the asset files; `.md` code fences are inert. A query literal in
9
+ > `.md` is orphan code with no linter coverage and no guarantee it
10
+ > matches the live schema.
11
+
12
+ Field reference for the DMOs this skill touches. **24 queried** by the
13
+ `scripts/fetch_dc.py` waterfall (one `.sql` template each under
14
+ `assets/dc/`). All field lists are copy-pasteable into `assets/dc/*.sql`
15
+ SELECT lists. Schemas verified against live Data Cloud v66.0 via
16
+ `sf ssot/metadata` describes; join paths verified by running the
17
+ waterfall end-to-end on live sessions.
18
+
19
+ **Source of truth: the live org** (`sf ssot/metadata?entityName=<dmo>`).
20
+ Official Salesforce Help pages list *logical* API names and aspirational
21
+ enum values that frequently diverge from the physical names and runtime
22
+ values the Data Cloud API actually exposes. When a Help page disagrees
23
+ with a live describe, trust the live describe — the names and enums in
24
+ this reference are what you query.
25
+
26
+ Official doc pointers (for context, not authority — Session Tracing doc
27
+ uses logical API names and aspirational enum values that diverge from
28
+ what the live `sf ssot/metadata` describe returns; trust the live describe):
29
+ - Session Tracing DMOs: https://help.salesforce.com/s/articleView?id=ai.generative_ai_session_trace_data_model.htm&type=5
30
+ - Generative AI Audit and Feedback DMOs: https://help.salesforce.com/s/articleView?id=ai.generative_ai_feedback_data_model.htm&type=5
31
+ - Agent Optimization DMOs: https://help.salesforce.com/s/articleView?id=ai.generative_ai_optimize_data_model.htm&type=5
32
+ - Agent Platform Tracing (`ssot__TelemetryTraceSpan__dlm`): https://help.salesforce.com/s/articleView?id=ai.generative_ai_platform_trace.htm&type=5
33
+
34
+ **Casing gotchas (important):**
35
+ - DMO table casing is **mixed** — don't assume a single rule. Three STDM DMOs use uppercase `AIAgent` (`ssot__AIAgentSession__dlm`, `ssot__AIAgentInteraction__dlm`, `ssot__AIAgentInteractionStep__dlm`); all other `ssot__*AiAgent*__dlm` tables use lowercase `AiAgent`. Trust the exact name in each section header or the live `describe`.
36
+ - Field names consistently use **`AiAgent`** (lowercase `i`), e.g. `ssot__AiAgentSessionId__c`, across every DMO.
37
+ - Generative AI Audit and Feedback DMOs (`GenAIGeneration`, `GenAIContentQuality`, `GenAIContentCategory`, and the 9 other DMOs in that family — see below) do **not** use the `ssot__` prefix. Their fields end in `__c`, not `ssot__*__c`.
38
+
39
+ ---
40
+
41
+ ## Cross-DMO join map
42
+
43
+ Every edge is strictly **forward** from Session. `scripts/fetch_dc.py` runs
44
+ the tree as a 5-wave waterfall; each child query keys off ids harvested
45
+ from parents in earlier waves. No backward lookups, no cross-validation
46
+ paths — if a DMO can't be reached by a forward FK from Session, it's not
47
+ fetched.
48
+
49
+ The audit/cost chain (GatewayRequest and its children) enters the tree
50
+ forward through `GenAIGatewayRequest.sessionId__c`. Storage gotcha: the
51
+ value is stored as a literal 40-char string INCLUDING surrounding
52
+ double-quotes, e.g. `"<session_uuid>"`. Non-session features store the
53
+ sentinel `"no_session"`. A raw-UUID exact match returns 0 rows; use
54
+ `sessionId__c LIKE '%<sid>%'` or `sessionId__c = '"<sid>"'`.
55
+
56
+ Per-run row counts, empty reasons, and join paths are recorded in
57
+ `dc._session_manifest.json`.
58
+
59
+ Legend: ★ = session-FK direct (one hop) ▸ = polymorphic `parent__c`
60
+ ⚠ = requires feature provisioning
61
+
62
+ ```
63
+ Session (ssot__AIAgentSession__dlm, PK ssot__Id__c)
64
+
65
+ ├── ★ Participant (ssot__AiAgentSessionId__c)
66
+
67
+ ├── ★ Message (ssot__AiAgentSessionId__c)
68
+ │ └── Message.participant (ssot__AiAgentSessionParticipantId__c → Participant.ssot__Id__c)
69
+
70
+ ├── ★ Moment (ssot__AiAgentSessionId__c)
71
+ │ └── MomentInteraction (ssot__AiAgentMomentId__c, ssot__AiAgentInteractionId__c)
72
+
73
+ ├── ★ TagAssociation ▸ (ssot__AiAgentSessionId__c when target is session;
74
+ │ ssot__AiAgentInteractionId__c when target is turn;
75
+ │ ssot__AiAgentMomentId__c when target is moment —
76
+ │ exactly one of the three is populated per row)
77
+ │ ├── → AiAgentTag (ssot__AiAgentTagId__c = Tag.ssot__Id__c)
78
+ │ │ └── TagDefinition (Tag.ssot__AiAgentTagDefinitionId__c =
79
+ │ │ TagDefinition.ssot__Id__c)
80
+ │ │ — catalog, not session-keyed; query with
81
+ │ │ ssot__Status__c = 'Available' (verified live;
82
+ │ │ Help docs' 'Active' value does not match live data)
83
+ │ └── → TagDefinitionAssociation
84
+ │ (ssot__AiAgentTagDefinitionAssociationId__c = TagDefAssoc.ssot__Id__c)
85
+ │ — catalog, not session-keyed; query by ssot__AiAgentApiName__c IN
86
+ │ {agent_api_names from Participant(role='AGENT') ∪ Moment}
87
+ │ (Participant is the primary source — Moment rows may be absent on
88
+ │ orgs without Agent Optimization enabled)
89
+
90
+ ├── ★ Interaction (ssot__AiAgentSessionId__c)
91
+ │ ├── Step (ssot__AiAgentInteractionId__c)
92
+ │ │ └── GenAIGeneration (step.ssot__GenerationId__c IN {generationId__c})
93
+ │ │ │ (assembly bridge → references/dc_pipeline_contract.md:
94
+ │ │ │ Generation.generationResponseId__c =
95
+ │ │ │ GatewayResponse.generationResponseId__c)
96
+ │ │ ├── GenAIContentQuality (parent__c = generationId__c)
97
+ │ │ │ └── GenAIContentCategory ▸ (parent__c = Quality.id__c;
98
+ │ │ │ toxicity sub-category rows)
99
+ │ │ ├── GenAIContentCategory ▸ (parent__c = generationId__c;
100
+ │ │ │ non-toxicity detector rows)
101
+ │ │ ├── GenAIAppGeneration (generationId__c = Gen.generationId__c;
102
+ │ │ │ sibling record, often empty on observed orgs)
103
+ │ │ └── GenAIFeedback (generationId__c)
104
+ │ │ ├── GenAIFeedbackDetail (parent__c = feedback.feedbackId__c)
105
+ │ │ └── GenAIGtwyObjRecord ▸ (parent__c = feedback.feedbackId__c
106
+ │ │ when type__c is a feedback attachment)
107
+ │ └── ⚠ TelemetryTraceSpan (ssot__TelemetryTrace__c IN {trace_ids};
108
+ │ trace_ids extracted from Interaction.ssot__AttributeText__c via
109
+ │ html.unescape() + regex "internalTraceId":"([a-f0-9]+)" —
110
+ │ Interaction.ssot__TelemetryTraceId__c column is usually empty.
111
+ │ Requires Agent Platform Tracing enabled on the org.)
112
+
113
+ └── ★ GenAIGatewayRequest (sessionId__c LIKE '%<sid>%')
114
+ │ — one row per LLM call owned by the session,
115
+ │ across all features (plannerservice,
116
+ │ PromptTemplateGenerationsInvocable, etc.)
117
+
118
+ ├── GenAIGatewayResponse (generationRequestId__c = gatewayRequestId__c)
119
+ ├── GenAIGatewayRequestTag (parent__c = gatewayRequestId__c)
120
+ ├── GenAIGtwyObjRecord ▸ (parent__c = gatewayRequestId__c
121
+ │ when type__c = grounded record attachment;
122
+ │ populated only for grounding features —
123
+ │ planner-only sessions produce 0 rows)
124
+ ├── GenAIGtwyRequestMetadata (parent__c = gatewayRequestId__c;
125
+ │ typed metadata rows, e.g. ToolCall payloads)
126
+ └── ⚠ GenAIGtwyRequestLLM (parent__c = gatewayRequestId__c;
127
+ per-call LLM diagnostics; schema provisioned
128
+ but writer inactive on every sandbox observed
129
+ — treat as aspirational)
130
+ ```
131
+
132
+ ### How to "join all 24" from one session id
133
+
134
+ All 24 entries below are in the `scripts/fetch_dc.py` waterfall — the
135
+ join expressions are exactly what the script runs, and each one has a
136
+ `.sql` template under `assets/dc/`.
137
+
138
+ ```
139
+ 1. sessions WHERE ssot__Id__c = {sid}
140
+ 2. interactions WHERE ssot__AiAgentSessionId__c = {sid}
141
+ 3. messages WHERE ssot__AiAgentSessionId__c = {sid}
142
+ 4. moments WHERE ssot__AiAgentSessionId__c = {sid}
143
+ 5. participants WHERE ssot__AiAgentSessionId__c = {sid}
144
+ 6. tag_associations WHERE ssot__AiAgentSessionId__c = {sid}
145
+ 7. gateway_requests WHERE sessionId__c LIKE '%{sid}%'
146
+ — sessionId__c is stored quoted (e.g. '"<sid>"');
147
+ raw-UUID exact match returns 0. Equivalent
148
+ exact form: sessionId__c = '"{sid}"'
149
+ 8. steps WHERE ssot__AiAgentInteractionId__c IN {interaction_ids}
150
+ 9. moment_interactions WHERE ssot__AiAgentInteractionId__c IN {interaction_ids}
151
+ 10. telemetry_spans WHERE ssot__TelemetryTrace__c IN {trace_ids_from_AttributeText}
152
+ 11. generations WHERE generationId__c IN {step.ssot__GenerationId__c values}
153
+ 12. gateway_request_tags WHERE parent__c IN {gateway_request_ids}
154
+ 13. gateway_responses WHERE generationRequestId__c IN {gateway_request_ids}
155
+ 14. gateway_records (→ GenAIGtwyObjRecord__dlm) WHERE parent__c IN {gateway_request_ids}
156
+ 15. feedback WHERE generationId__c IN {generation_ids}
157
+ 16. content_quality WHERE parent__c IN {generation_ids}
158
+ 17. content_category WHERE parent__c IN ({generation_ids} ∪ {content_quality.id__c})
159
+ 18. feedback_details WHERE parent__c IN {feedback.feedbackId__c}
160
+ 19. tag_definitions WHERE ssot__Status__c = 'Available'
161
+ — not keyed by session (tag vocabulary)
162
+ 20. tag_definition_associations WHERE ssot__AiAgentApiName__c IN
163
+ {agent_api_names from Participant(role='AGENT') ∪ Moment}
164
+ — keyed by agent, not session. Participant is primary
165
+ (Moment rows may be absent without Agent Optimization)
166
+ 21. tags WHERE ssot__AiAgentTagDefinitionId__c IN
167
+ {tag_definition.ssot__Id__c}
168
+ — tag VALUES; session reaches them via TagAssociation
169
+
170
+ 22. app_generation WHERE generationId__c IN {step.ssot__GenerationId__c values}
171
+ — app-layer twin of GenAIGeneration
172
+ 23. gateway_request_metadata WHERE parent__c IN {gateway_request_ids}
173
+ — verified live: parent__c → GatewayRequest.gatewayRequestId__c
174
+ 24. gateway_request_llm WHERE parent__c IN {gateway_request_ids}
175
+ — same parent pattern as Metadata; writer inactive on
176
+ observed sandboxes (0 rows expected until enabled)
177
+ ```
178
+
179
+ ---
180
+
181
+ ### DMO materialization timing
182
+
183
+ Data Cloud DMOs don't all appear at the same time. Gateway DMOs
184
+ materialize within minutes; STDM Interaction/Step/Message DMOs can
185
+ take hours to days.
186
+
187
+ | DMO | Table | Materializes | Notes |
188
+ |---|---|---|---|
189
+ | Session | `ssot__AIAgentSession__dlm` | Minutes | Always query first |
190
+ | Participant | `ssot__AiAgentSessionParticipant__dlm` | Minutes | Fast |
191
+ | GatewayRequest | `GenAIGatewayRequest__dlm` | Minutes | Direct FK via `sessionId__c LIKE` |
192
+ | GatewayResponse | `GenAIGatewayResponse__dlm` | Minutes | Joins via `generationRequestId__c` |
193
+ | GatewayRequestTag | `GenAIGatewayRequestTag__dlm` | Minutes | `parent__c = gatewayRequestId__c` |
194
+ | GtwyRequestMetadata | `GenAIGtwyRequestMetadata__dlm` | Minutes | `parent__c = gatewayRequestId__c` |
195
+ | Moment | `ssot__AiAgentMoment__dlm` | Hours–days | Often empty on same-day |
196
+ | Interaction | `ssot__AIAgentInteraction__dlm` | **Hours–days** | Do NOT use as query anchor for fresh sessions — `fetch_dc.py` classifies this as `session_shape=interactions_not_materialized_yet` and renders the gateway-direct view |
197
+ | Message | `ssot__AiAgentSessionMessage__dlm` | Hours–days | Downstream of Interaction |
198
+ | Step | `ssot__AIAgentInteractionStep__dlm` | Hours–days | Downstream of Interaction |
199
+ | Generation | `GenAIGeneration__dlm` | Hours–days | Downstream of Step |
200
+ | GtwyRequestLLM | `GenAIGtwyRequestLLM__dlm` | N/A | Writer inactive on sandboxes |
201
+
202
+ ---
203
+
204
+ ## Session Tracing DMOs (5)
205
+
206
+ ### `ssot__AIAgentSession__dlm` — one row per session
207
+
208
+ | Field | Type | Notes |
209
+ |---|---|---|
210
+ | `ssot__Id__c` | string (PK) | Session UUID (what users pass in) |
211
+ | `ssot__StartTimestamp__c` | string (ISO UTC) | |
212
+ | `ssot__EndTimestamp__c` | string (ISO UTC) | null while active |
213
+ | `ssot__AiAgentSessionEndType__c` | string | Completed / Abandoned / Escalated / etc. |
214
+ | `ssot__AiAgentChannelType__c` | string | e.g. "SCRT2 - EmbeddedMessaging", "Voice" |
215
+ | `ssot__RelatedMessagingSessionId__c` | string | |
216
+ | `ssot__RelatedVoiceCallId__c` | string | |
217
+ | `ssot__InternalOrganizationId__c` | string | 18-char org id |
218
+ | `ssot__SessionOwnerId__c` | string | |
219
+ | `ssot__SessionOwnerObject__c` | string | Owner type, e.g. "User" |
220
+ | `ssot__IndividualId__c` | string | Data 360 individual id |
221
+ | `ssot__PreviousSessionId__c` | string | Conversation-chain link to prior session |
222
+ | `ssot__VariableText__c` | string | Session-level variables, JSON. Channel-specific bootstrap dict (e.g. `__resolved_locale__`, `__supports_result_display__`, `__user_dst_offset_ms__`). Parsed at assemble time into `session.identity.bootstrap_variables`. The presence of Builder-Previewer-only keys (`__supports_result_display__` etc.) is one input to the derived `session.identity.mode` field — see dc_pipeline_contract.md §2.9a. |
223
+
224
+ Note: **agent API name is NOT on Session**. Join with Moment to get agent info.
225
+
226
+ ### `ssot__AiAgentSessionParticipant__dlm` — one row per participant per session
227
+
228
+ Roles: `USER`, `AGENT`.
229
+
230
+ | Field | Type | Notes |
231
+ |---|---|---|
232
+ | `ssot__Id__c` | string (PK) | |
233
+ | `ssot__AiAgentSessionId__c` | string (FK) | → Session.Id |
234
+ | `ssot__ParticipantId__c` | string | MessagingEndUser id (USER) or GenAiPlannerDefinition id (AGENT) |
235
+ | `ssot__AiAgentApiName__c` | string | Bot identity — omit on USER rows |
236
+ | `ssot__AiAgentType__c` | string | e.g. "DemoAgentType" |
237
+ | `ssot__AiAgentTemplateApiName__c` | string | |
238
+ | `ssot__AiAgentVersionApiName__c` | string | e.g. "v5" |
239
+ | `ssot__AiAgentSessionParticipantRole__c` | string | USER \| AGENT |
240
+ | `ssot__ParticipantObject__c` | string | e.g. "MessagingEndUser", "GenAiPlannerDefinition" |
241
+ | `ssot__StartTimestamp__c` | string | |
242
+ | `ssot__EndTimestamp__c` | string | |
243
+ | `ssot__IndividualId__c` | string | Data 360 individual id |
244
+ | `ssot__InternalOrganizationId__c` | string | 18-char org id |
245
+ | `ssot__ParticipantAttributeText__c` | string | JSON — per-participant metadata |
246
+
247
+ ### `ssot__AIAgentInteraction__dlm` — one row per turn (and session-end event)
248
+
249
+ Types: `TURN`, `SESSION_END`.
250
+
251
+ | Field | Type | Notes |
252
+ |---|---|---|
253
+ | `ssot__Id__c` | string (PK) | Turn/interaction UUID |
254
+ | `ssot__AiAgentSessionId__c` | string (FK) | → Session.Id |
255
+ | `ssot__AiAgentInteractionType__c` | string | TURN \| SESSION_END |
256
+ | `ssot__TopicApiName__c` | string | Which topic handled this turn |
257
+ | `ssot__StartTimestamp__c` | string | |
258
+ | `ssot__EndTimestamp__c` | string | |
259
+ | `ssot__PrevInteractionId__c` | string | |
260
+ | `ssot__SessionOwnerId__c` | string | |
261
+ | `ssot__IndividualId__c` | string | |
262
+ | `ssot__InternalOrganizationId__c` | string | |
263
+ | `ssot__TelemetryTraceId__c` | string | Often empty on real orgs (verified live). See note below. |
264
+ | `ssot__TelemetryTraceSpanId__c` | string | Often empty — same caveat as above. |
265
+ | `ssot__AttributeText__c` | string | HTML-escaped JSON. Holds `internalTraceId` + `internalSpanId` — the real runtime trace_id when `TelemetryTraceId__c` is empty. Consumers: `html.unescape()` + regex `"internalTraceId":"([a-f0-9]+)"`. |
266
+
267
+ ### `ssot__AiAgentInteractionMessage__dlm` — one row per user/agent message
268
+
269
+ Types: `Input`, `Output`.
270
+
271
+ | Field | Type | Notes |
272
+ |---|---|---|
273
+ | `ssot__Id__c` | string (PK) | |
274
+ | `ssot__AiAgentSessionId__c` | string (FK) | → Session.Id — direct session FK (verified v66.0) |
275
+ | `ssot__AiAgentInteractionId__c` | string (FK) | → Interaction.Id |
276
+ | `ssot__AiAgentSessionParticipantId__c` | string (FK) | → Participant.Id — who sent/received the message |
277
+ | `ssot__ParentMessageId__c` | string | Threading — prior message in a nested conversation |
278
+ | `ssot__ContentText__c` | string | The actual message text |
279
+ | `ssot__AiAgentInteractionMessageType__c` | string | Input \| Output |
280
+ | `ssot__AiAgentInteractionMsgContentType__c` | string | Content MIME/type (text/audio/etc.) |
281
+ | `Modality__c` | string | e.g. Text, Voice — no `ssot__` prefix |
282
+ | `ssot__MessageSentTimestamp__c` | string | Single-point timestamp (text channels) |
283
+ | `MessageStartTimestamp__c` | datetime | Start of message (voice/streaming) — no `ssot__` prefix |
284
+ | `MessageEndTimestamp__c` | datetime | End of message (voice/streaming) — no `ssot__` prefix |
285
+ | `ssot__InternalOrganizationId__c` | string | 18-char org id |
286
+
287
+ **Messages have a direct session FK** (`ssot__AiAgentSessionId__c`) — scope by session directly; earlier docs claiming otherwise were wrong. The interaction FK is still useful for per-turn joins.
288
+
289
+ ### `ssot__AIAgentInteractionStep__dlm` — one row per planner step
290
+
291
+ Types observed in live data:
292
+ `LLM_STEP`, `ACTION_STEP`, `TOPIC_STEP`, `TRUST_GUARDRAILS_STEP`, `SESSION_END`.
293
+
294
+ | Field | Type | Notes |
295
+ |---|---|---|
296
+ | `ssot__Id__c` | string (PK) | |
297
+ | `ssot__AiAgentInteractionId__c` | string (FK) | → Interaction.Id |
298
+ | `ssot__AiAgentInteractionStepType__c` | string | LLM_STEP \| ACTION_STEP \| TOPIC_STEP \| TRUST_GUARDRAILS_STEP \| SESSION_END |
299
+ | `ssot__Name__c` | string | step/action name (e.g. "AiCopilot__ReactTopicPrompt") |
300
+ | `ssot__InputValueText__c` | string | HTML-escaped JSON; parse after `html.unescape` |
301
+ | `ssot__OutputValueText__c` | string | HTML-escaped JSON; parse after `html.unescape` |
302
+ | `ssot__PreStepVariableText__c` | string | |
303
+ | `ssot__PostStepVariableText__c` | string | |
304
+ | `ssot__GenerationId__c` | string | → `GenAIGeneration.generationId__c`. Populated only on `LLM_STEP` rows (in live samples, most LLM_STEP rows populate it); `NOT_SET` on every other step type. This is the only Step→Generation join key used by the waterfall. |
305
+ | `ssot__ErrorMessageText__c` | string | Sentinel `NOT_SET` when no error (never NULL). Filter errors with `!= 'NOT_SET'`, not `IS NOT NULL`. |
306
+ | `ssot__StartTimestamp__c` | string | |
307
+ | `ssot__EndTimestamp__c` | string | |
308
+ | `ssot__PrevStepId__c` | string | |
309
+ | `ssot__InternalOrganizationId__c` | string | |
310
+ | `ssot__TelemetryTraceSpanId__c` | string | |
311
+ | `ssot__AttributeText__c` | string | |
312
+ | `ssot__GenAiGatewayRequestId__c` | string | Schema-only FK. Live data shows this is frequently `NOT_SET` even on `LLM_STEP` rows. **Not used by the waterfall** — GatewayRequest is fetched forward from Session via `sessionId__c`, which is the authoritative set and covers requests this FK doesn't reach. |
313
+ | `ssot__GenAiGatewayResponseId__c` | string | Schema-only FK. Same as above — documented for schema completeness, not used as a join key. Following it back to GatewayResponse is a backward-reasoning pattern and rejected by the skill design. |
314
+
315
+ Join: steps lack a direct session FK — go through Interaction.
316
+
317
+ **Step Gateway FKs are not join keys.** The three Gateway-related FK
318
+ columns (`ssot__GenAiGatewayRequestId__c`, `ssot__GenAiGatewayResponseId__c`)
319
+ are included in the SELECT for schema completeness but are not used to
320
+ reach any downstream DMO. GatewayRequest is entered forward from Session
321
+ via `GatewayRequest.sessionId__c` (see gateway_requests section); its
322
+ children flow forward from there. Only `ssot__GenerationId__c` is used
323
+ as a forward Step → Generation key.
324
+
325
+ ---
326
+
327
+ ## Generative AI Audit and Feedback DMOs (12 of 13 documented)
328
+
329
+ Canonical umbrella per the Salesforce Help article
330
+ [Data Model for Generative AI Audit and Feedback](https://help.salesforce.com/s/articleView?id=ai.generative_ai_feedback_data_model.htm&type=5).
331
+ Spans the full Einstein generative AI audit chain: LLM requests and responses
332
+ at the gateway, trust-layer safety scoring, and user-side feedback on
333
+ generations.
334
+
335
+ **No `ssot__` prefix.** Fields end in `__c` directly.
336
+
337
+ Data 360 Data Lake Objects (DLOs) that contain generative AI audit and
338
+ feedback data map to custom DMOs (legacy) and standard DMOs. The 13 DMOs
339
+ in this family per the Help article:
340
+
341
+ | DLO | Custom DMO (legacy) | Standard DMO | Queried by `fetch_dc.py`? |
342
+ |---|---|---|---|
343
+ | GenAIAppGeneration | `GenAIAppGeneration__dlm` | Ai Response App Generation | ✓ |
344
+ | GenAIContentCategory | `GenAIContentCategory__dlm` | Ai Content Quality Category | ✓ |
345
+ | GenAIContentQuality | `GenAIContentQuality__dlm` | Ai Content Quality | ✓ |
346
+ | GenAIFeedback | `GenAIFeedback__dlm` | Ai Feedback | ✓ |
347
+ | GenAIFeedbackDetail | `GenAIFeedbackDetail__dlm` | Ai Feedback Additional Info | ✓ |
348
+ | GenAIGatewayRequest | `GenAIGatewayRequest__dlm` | Ai Gateway Request | ✓ |
349
+ | GenAIGatewayRequestTag | `GenAIGatewayRequestTag__dlm` | Ai Gateway Request Tag | ✓ |
350
+ | GenAIGatewayResponse | `GenAIGatewayResponse__dlm` | Ai Gateway Response | ✓ |
351
+ | GenAIGeneration | `GenAIGeneration__dlm` | Ai Response Generation | ✓ |
352
+ | GenAIGtwyRequestMetadata | `GenAIGtwyRequestMetadata__dlm` | Ai Gateway Req Additional Info | ✓ |
353
+ | GenAIGtwyRequestLLM | `GenAIGtwyRequestLLM__dlm` | Ai Gateway Request Model Diagnostic | ✓ |
354
+ | GenAIGtwyObjRecord | `GenAIGtwyObjRecord__dlm` | Ai Gateway Request Object Record | ✓ |
355
+
356
+ The Help article lists one additional DMO in this family —
357
+ `GenAIGtwyObjRecCitation__dlm` (standard DMO: **Ai Gateway Req Object
358
+ Record Citation**). It is not documented here: live `describe` returns
359
+ "DMO with developerName 'GenAIGtwyObjRecCitation' not found" on the
360
+ tested org, so we have no verified schema or join column. Bring it in
361
+ once it's provisioned on a test org.
362
+
363
+ All 12 DMOs marked ✓ above are queried by the 24-query `fetch_dc.py`
364
+ waterfall. Their `.sql` templates are under `assets/dc/` and their full
365
+ schemas are documented in the per-DMO sections below.
366
+
367
+ ### `GenAIGeneration__dlm` — one row per LLM call at the gateway
368
+
369
+ **Joining to a session:** this DMO has NO `sessionId__c`, `traceId__c`, or
370
+ `turnId__c` column (verified via live `describe`; 11 fields total,
371
+ none reference session/trace/turn). The canonical join path is:
372
+
373
+ ```
374
+ Session → Interaction → Step (.ssot__GenerationId__c) → Generation (.generationId__c)
375
+ ```
376
+
377
+ Pull session steps, collect non-empty `ssot__GenerationId__c` values
378
+ (many steps have `NOT_SET`), then filter by `generationId__c IN (...)`.
379
+
380
+ There is no backward chain to this DMO from GatewayRequest/Response.
381
+ The waterfall only reaches `GenAIGeneration__dlm` via the forward
382
+ Step→Generation path above; Generation rows for LLM calls that aren't
383
+ owned by an LLM_STEP are not fetched by this skill.
384
+
385
+ | Field | Type | Notes |
386
+ |---|---|---|
387
+ | `generationId__c` | string (PK) | Forward join key from `Step.ssot__GenerationId__c`. |
388
+ | `generationResponseId__c` | string | Provider-issued response id (OpenAI-style `chatcmpl-*`, Gemini/Anthropic use their own prefixes). Not used as a join key. |
389
+ | `responseText__c` | string | HTML-escaped JSON for tool-calling outputs; `html.unescape()` before parsing. |
390
+ | `maskedResponseText__c` | string | PII-masked version |
391
+ | `responseParameters__c` | string | JSON |
392
+ | `feature__c` | string | e.g. "plannerservice", "Guardrails and Citations" |
393
+ | `timestamp__c` | string | |
394
+ | `orgId__c` | string | |
395
+ | `cloud__c` | string | e.g. "Platform" |
396
+
397
+ ### `GenAIContentQuality__dlm` — per-generation quality row
398
+
399
+ Joined to a generation via `parent__c = generationId__c`.
400
+
401
+ | Field | Type | Notes |
402
+ |---|---|---|
403
+ | `id__c` | string (PK) | |
404
+ | `parent__c` | string (FK) | → `GenAIGeneration.generationId__c` |
405
+ | `isToxicityDetected__c` | string | "true" / "false" — populated only on OUTPUT rows |
406
+ | `contentType__c` | string | INPUT \| OUTPUT |
407
+ | `feature__c` | string | |
408
+ | `timestamp__c` | string | |
409
+ | `orgId__c` | string | |
410
+ | `cloud__c` | string | |
411
+
412
+ ### `GenAIContentCategory__dlm` — per-category detector row
413
+
414
+ Joined either to a generation (direct, non-TOXICITY detectors like
415
+ `InstructionAdherence`) or to a quality row (TOXICITY sub-categories).
416
+ The `parent__c` FK points to whichever parent emitted it.
417
+
418
+ | Field | Type | Notes |
419
+ |---|---|---|
420
+ | `id__c` | string (PK) | |
421
+ | `parent__c` | string (FK) | → `GenAIGeneration.generationId__c` OR `GenAIContentQuality.id__c` |
422
+ | `detectorType__c` | string | TOXICITY \| PII \| PROMPT_DEFENSE \| InstructionAdherence \| TaskResolution |
423
+ | `category__c` | string | e.g. "violence", "safety_score", "Low" / "Medium" / "High" |
424
+ | `value__c` | string | "0.0" – "1.0" as string; convert to float in analysis |
425
+ | `timestamp__c` | string | |
426
+ | `orgId__c` | string | |
427
+ | `cloud__c` | string | |
428
+
429
+ ### `GenAIGatewayRequest__dlm` — one row per LLM request at the gateway
430
+
431
+ Richer than `GenAIGeneration` — carries prompt text, tokens, model, and
432
+ session/user/bot identifiers. **Forward entry point for the entire audit
433
+ chain**, reached from Session via `sessionId__c`:
434
+
435
+ ```
436
+ Session.ssot__Id__c → GatewayRequest.sessionId__c LIKE '%<sid>%'
437
+ ```
438
+
439
+ `sessionId__c` is stored as a literal quoted string (e.g. `"<uuid>"`), so a
440
+ raw-UUID exact match returns 0 rows; use LIKE or `sessionId__c = '"<sid>"'`.
441
+ See `assets/dc/gateway_requests.sql` for details.
442
+
443
+ GatewayRequest is the parent for all downstream audit DMOs — Response,
444
+ RequestTag, GtwyObjRecord, RequestMetadata, RequestLLM — each keyed by
445
+ `generationRequestId__c` or `parent__c = gatewayRequestId__c`.
446
+
447
+ | Field | Type | Notes |
448
+ |---|---|---|
449
+ | `gatewayRequestId__c` | string (PK) | |
450
+ | `generationGroupId__c` | string | Groups multiple generations for one user-visible turn |
451
+ | `sessionId__c` | string | Session FK — the forward entry point. Stored as a quoted string (e.g. `"<uuid>"`) or sentinel `"no_session"`. Query with `sessionId__c LIKE '%<sid>%'` or exact `sessionId__c = '"<sid>"'`; raw-UUID match returns 0 rows. |
452
+ | `userId__c` | string | End-user id |
453
+ | `botVersionId__c` | string | Agent version id |
454
+ | `plannerId__c` | string | Planner id (ReAct etc.) |
455
+ | `feature__c` | string | e.g. `CopilotForDigitalChannels` |
456
+ | `appType__c` | string | |
457
+ | `model__c` | string | e.g. `gpt-4o-2024-11-20` |
458
+ | `provider__c` | string | e.g. `openai`, `azureOpenAI`, `salesforce` |
459
+ | `promptTemplateDevName__c` | string | e.g. `AiCopilot__ReactTopicPrompt`, `Atlas__AgentGraphReasoningPrompt`. Surfaced through the hierarchical view as `gateway_request.prompt_template_dev_name`. |
460
+ | `promptTemplateVersionNo__c` | string | |
461
+ | `prompt__c` | string | **Full input prompt sent to the model** — `role: system` / `role: user` / `role: assistant` segments, tool definitions, conversation history. Up to 30 KB+ on observed sessions. Carried through the hierarchical view as `gateway_request.prompt_text`; surfaced verbatim by `render_dc.py --show-prompts` (off by default; per-prompt display capped at 64 KB). HTML-escaped on the wire (`&quot;` etc.) — renderer unescapes before display. |
462
+ | `maskedPrompt__c` | string | PII-masked variant of `prompt__c`. Empty when `enablePiiMasking__c = "false"`; populated when masking is enabled. |
463
+ | `parameters__c` | string | JSON — extra invocation params |
464
+ | `temperature__c` | number | |
465
+ | `frequencyPenalty__c` | number | |
466
+ | `presencePenalty__c` | number | |
467
+ | `stopSequences__c` | string | |
468
+ | `numGenerations__c` | number | |
469
+ | `promptTokens__c` | number | |
470
+ | `completionTokens__c` | number | |
471
+ | `totalTokens__c` | number | |
472
+ | `enableInputSafetyScoring__c` | string | "true" / "false" |
473
+ | `enableOutputSafetyScoring__c` | string | "true" / "false" |
474
+ | `enablePiiMasking__c` | string | "true" / "false" |
475
+ | `timestamp__c` | datetime | |
476
+ | `orgId__c` | string | |
477
+ | `cloud__c` | string | |
478
+
479
+ ### `GenAIGatewayResponse__dlm` — one row per LLM call response
480
+
481
+ Forward join: from GatewayRequest via `generationRequestId__c IN {gw_req_ids}`.
482
+ Every GatewayRequest has one Response (modulo in-flight calls at fetch time) —
483
+ 1:1 invariant verified live.
484
+
485
+ | Field | Type | Notes |
486
+ |---|---|---|
487
+ | `generationResponseId__c` | string (PK) | Provider-issued response id (e.g. OpenAI `chatcmpl-*`). Same value also appears on `Step.ssot__GenAiGatewayResponseId__c` and `Generation.generationResponseId__c`, but those are not used as join keys. |
488
+ | `generationRequestId__c` | string (FK) | → `GatewayRequest.gatewayRequestId__c`. The forward join key. |
489
+ | `parameters__c` | string | JSON |
490
+ | `timestamp__c` | datetime | |
491
+ | `orgId__c` | string | |
492
+ | `cloud__c` | string | |
493
+
494
+ ### `GenAIGatewayRequestTag__dlm` — k/v tags per request
495
+
496
+ Joined via `parent__c = GatewayRequest.gatewayRequestId__c`. Multiple rows per request.
497
+
498
+ | Field | Type | Notes |
499
+ |---|---|---|
500
+ | `id__c` | string (PK) | |
501
+ | `parent__c` | string (FK) | → `GatewayRequest.gatewayRequestId__c` |
502
+ | `tag__c` | string | e.g. `prompt_template_dev_name`, `user_utterance` |
503
+ | `tagValue__c` | string | |
504
+ | `timestamp__c` | datetime | |
505
+ | `orgId__c` | string | |
506
+ | `cloud__c` | string | |
507
+
508
+ ### `GenAIFeedback__dlm` — user thumbs up/down on a generation
509
+
510
+ Joined via `generationId__c = Generation.generationId__c`. PK `feedbackId__c`
511
+ is the parent for `GenAIFeedbackDetail` rows.
512
+
513
+ | Field | Type | Notes |
514
+ |---|---|---|
515
+ | `feedbackId__c` | string (PK) | |
516
+ | `generationId__c` | string (FK) | → `Generation.generationId__c` |
517
+ | `generationUpdateId__c` | string | |
518
+ | `generationGroupId__c` | string | |
519
+ | `userId__c` | string | |
520
+ | `feedback__c` | string | e.g. `UP`, `DOWN` |
521
+ | `action__c` | string | Richer action, e.g. `REGENERATE`, `COPY` |
522
+ | `source__c` | string | Channel/app that captured the feedback |
523
+ | `feature__c` | string | |
524
+ | `appType__c` | string | |
525
+ | `timestamp__c` | datetime | |
526
+ | `orgId__c` | string | |
527
+ | `cloud__c` | string | |
528
+
529
+ ### `GenAIFeedbackDetail__dlm` — free-text / structured detail per feedback
530
+
531
+ Joined via `parent__c = Feedback.feedbackId__c`. Zero or more rows per feedback.
532
+
533
+ | Field | Type | Notes |
534
+ |---|---|---|
535
+ | `feedbackDetailId__c` | string (PK) | |
536
+ | `parent__c` | string (FK) | → `Feedback.feedbackId__c` |
537
+ | `feedbackText__c` | string | Free-text user input |
538
+ | `appFeedback__c` | string | App-layer reason bucket |
539
+ | `feature__c` | string | |
540
+ | `timestamp__c` | datetime | |
541
+ | `orgId__c` | string | |
542
+ | `cloud__c` | string | |
543
+
544
+ ### `GenAIGtwyObjRecord__dlm` — grounded record attachments on gateway requests
545
+
546
+ Polymorphic. `parent__c` is the id of whatever owns this record (GatewayRequest
547
+ for grounded-content attachments, GenAIFeedback for feedback attachments, etc.)
548
+ and `type__c` names the DMO the attached record lives in
549
+ (e.g. `ssot__KnowledgeArticleVersion__dlm`).
550
+
551
+ **Populated only on planners that perform grounded retrieval.** Join path is
552
+ clean and forward (`Session → GatewayRequest → GtwyObjRecord`), but the child
553
+ table is planner-dependent — a planner that doesn't attach grounded records
554
+ produces zero rows even when the session is fully traced. Verified live:
555
+
556
+ - Tool-calling / planner-style Agentforce sessions (request `feature__c =
557
+ 'plannerservice'` only): 0 rows across all observed sessions. The planner
558
+ doesn't emit grounded-record attachments.
559
+ - Sessions whose requests include `PromptTemplateGenerationsInvocable` or
560
+ `PromptBuilderPreview` features *do* produce rows — e.g. one live turn
561
+ produced a `type__c = ssot__KnowledgeArticleVersion__dlm` attachment via
562
+ the forward chain.
563
+
564
+ If fetch returns 0 for an Agentforce agent session, first check the
565
+ GatewayRequest rows' `plannerId__c` and `feature__c` — a planner that only
566
+ shows `plannerservice` feature will not produce child records. This DMO is
567
+ also org-gated: across a set of observed sandboxes with ~400K total
568
+ GatewayRequest rows, only a minority had any GtwyObjRecord rows at all.
569
+
570
+ | Field | Type | Notes |
571
+ |---|---|---|
572
+ | `id__c` | string (PK) | |
573
+ | `parent__c` | string (FK) | → `GatewayRequest.gatewayRequestId__c` (forward from session) or `GenAIFeedback.feedbackId__c` (feedback attachment) |
574
+ | `recordId__c` | string | Attached record's id in its home DMO |
575
+ | `type__c` | string | DMO the record lives in, e.g. `ssot__KnowledgeArticleVersion__dlm` |
576
+ | `name__c` | string | |
577
+ | `value__c` | string | Often a deep-link URL to the record in the org |
578
+ | `metadata__c` | string | JSON |
579
+ | `feature__c` | string | |
580
+ | `timestamp__c` | datetime | |
581
+ | `orgId__c` | string | |
582
+ | `cloud__c` | string | |
583
+
584
+ The 3 DMOs below are wired into the `fetch_dc.py` waterfall as entries
585
+ 22–24 with matching `.sql` templates under `assets/dc/` (`app_generation`,
586
+ `gateway_request_metadata`, `gateway_request_llm`). Field schemas below are
587
+ from live `describe`. Population varies by DMO:
588
+ - `GenAIAppGeneration__dlm` — provisioned but not populated on observed orgs.
589
+ - `GenAIGtwyRequestMetadata__dlm` — populated whenever the session's
590
+ GatewayRequest rows are populated; one row per request on Agentforce
591
+ sessions (e.g. `ToolCall` payloads for `plannerservice`).
592
+ - `GenAIGtwyRequestLLM__dlm` — **0 rows on every sandbox observed**
593
+ (multiple orgs checked; total GatewayRequest rows ~400K, total
594
+ GtwyRequestLLM rows 0). Schema exists, writer appears inactive.
595
+
596
+ ### `GenAIAppGeneration__dlm` — app-layer generation record
597
+
598
+ Standard DMO: **Ai Response App Generation**. Sibling of
599
+ `GenAIGeneration__dlm`: where `GenAIGeneration` is the raw gateway
600
+ response, `GenAIAppGeneration` appears to be the app/feature-layer view
601
+ of the same generation (separate `id__c` from `generationId__c`).
602
+
603
+ **Executable query:** `assets/dc/app_generation.sql`.
604
+
605
+ **Join path:** `generationId__c → GenAIGeneration.generationId__c → AiAgentInteractionStep.ssot__GenerationId__c → Interaction → Session`. Same Step → Generation bridge used for `GenAIGeneration__dlm`.
606
+
607
+ | Field | Type | Notes |
608
+ |---|---|---|
609
+ | `id__c` | string (PK) | App-generation row id — distinct from `generationId__c` |
610
+ | `generationId__c` | string (FK) | → `GenAIGeneration.generationId__c` (session join path) |
611
+ | `generationUpdate__c` | string | Likely a later revision of the generation |
612
+ | `generationUpdateId__c` | string | id of the update row |
613
+ | `feature__c` | string | |
614
+ | `timestamp__c` | datetime | |
615
+ | `orgId__c` | string | |
616
+ | `cloud__c` | string | |
617
+
618
+ ### `GenAIGtwyRequestMetadata__dlm` — additional per-request metadata
619
+
620
+ Standard DMO: **Ai Gateway Req Additional Info**. Child of
621
+ `GenAIGatewayRequest__dlm`: holds typed metadata rows for a request.
622
+ On live data a sampled row showed `metadataType__c = "ToolCall"` and
623
+ `feature__c = "plannerservice"`, so it's where tool-call/planner-side
624
+ per-request metadata lives.
625
+
626
+ **Executable query:** `assets/dc/gateway_request_metadata.sql`.
627
+
628
+ **Join verified live:** `parent__c → GatewayRequest.gatewayRequestId__c`. A sampled `parent__c` value matched exactly one row in `GenAIGatewayRequest__dlm WHERE gatewayRequestId__c = …`.
629
+
630
+ | Field | Type | Notes |
631
+ |---|---|---|
632
+ | `id__c` | string (PK) | |
633
+ | `parent__c` | string (FK) | → `GatewayRequest.gatewayRequestId__c` (verified live) |
634
+ | `metadataType__c` | string | Observed: `ToolCall`; other values likely |
635
+ | `metadata__c` | string | JSON — the actual metadata payload |
636
+ | `feature__c` | string | Observed: `plannerservice` |
637
+ | `timestamp__c` | datetime | |
638
+ | `orgId__c` | string | |
639
+ | `cloud__c` | string | |
640
+
641
+ ### `GenAIGtwyRequestLLM__dlm` — per-request LLM call diagnostics
642
+
643
+ Standard DMO: **Ai Gateway Request Model Diagnostic**. Child of
644
+ `GenAIGatewayRequest__dlm`: captures LLM invocation diagnostics (latency,
645
+ status, endpoint, region).
646
+
647
+ **Cross-org reality check: 0 rows on every sandbox observed.** Checked
648
+ multiple sandboxes with a combined ~400K GatewayRequest rows — every one
649
+ returned 0 GtwyRequestLLM rows. The schema is provisioned everywhere, but
650
+ the writer appears inactive. Treat as aspirational until the feature is
651
+ enabled and populated somewhere we can verify. The join path is declared
652
+ (by analogy with `GenAIGtwyRequestMetadata`) but not live-verified.
653
+
654
+ **Executable query:** `assets/dc/gateway_request_llm.sql`.
655
+
656
+ **Join:** `parent__c → GatewayRequest.gatewayRequestId__c` (inferred from schema symmetry with `GenAIGtwyRequestMetadata`; not verifiable until an org populates the table).
657
+
658
+ | Field | Type | Notes |
659
+ |---|---|---|
660
+ | `id__c` | string (PK) | |
661
+ | `parent__c` | string (FK) | → `GatewayRequest.gatewayRequestId__c` (by analogy) |
662
+ | `endpoint__c` | string | LLM endpoint URL / name |
663
+ | `region__c` | string | Cloud region the call ran in |
664
+ | `genAILLM__c` | string | Model/LLM identifier |
665
+ | `llmCallStatus__c` | string | e.g. success / error |
666
+ | `llmCallLatency__c` | number | Latency of the LLM call |
667
+ | `llmErrorTrace__c` | string | Error trace when the call failed |
668
+ | `metadata__c` | string | JSON — extra diagnostic info |
669
+ | `feature__c` | string | |
670
+ | `salesforceOrgId__c` | string | Note: `salesforceOrgId__c`, not `orgId__c` |
671
+ | `timestamp__c` | datetime | |
672
+ | `cloud__c` | string | |
673
+
674
+ ---
675
+
676
+ ## Agent Optimization DMOs (6)
677
+
678
+ Provisioned only when **Agent Optimization** is enabled (Enterprise/Performance/
679
+ Unlimited + an Einstein add-on). Extends STDM with moment clustering and LLM-driven
680
+ tag annotations. See: https://help.salesforce.com/s/articleView?id=ai.generative_ai_optimize_data_model.htm&type=5
681
+
682
+ ### `ssot__AiAgentMoment__dlm` — session-level rollup
683
+
684
+ Carries agent identity.
685
+
686
+ | Field | Type | Notes |
687
+ |---|---|---|
688
+ | `ssot__Id__c` | string (PK) | |
689
+ | `ssot__AiAgentSessionId__c` | string (FK) | → Session.Id |
690
+ | `ssot__AiAgentApiName__c` | string | e.g. "MyAgent" |
691
+ | `ssot__AiAgentVersionApiName__c` | string | e.g. "v5" — observed `NOT_SET` in some live samples |
692
+ | `ssot__RequestSummaryText__c` | string | |
693
+ | `ssot__ResponseSummaryText__c` | string | |
694
+ | `ssot__StartTimestamp__c` | string | |
695
+ | `ssot__EndTimestamp__c` | string | |
696
+ | `ssot__InternalOrganizationId__c` | string | |
697
+
698
+ ### `ssot__AiAgentMomentInteraction__dlm` — junction: moment ↔ interactions
699
+
700
+ | Field | Type | Notes |
701
+ |---|---|---|
702
+ | `ssot__Id__c` | string (PK) | |
703
+ | `ssot__AiAgentMomentId__c` | string (FK) | → `Moment.Id` |
704
+ | `ssot__AiAgentInteractionId__c` | string (FK) | → `Interaction.Id` |
705
+ | `ssot__StartTimestamp__c` | datetime | |
706
+ | `ssot__InternalOrganizationId__c` | string | |
707
+
708
+ ### `ssot__AiAgentTagDefinition__dlm` — tag schema / vocabulary
709
+
710
+ | Field | Type | Notes |
711
+ |---|---|---|
712
+ | `ssot__Id__c` | string (PK) | |
713
+ | `ssot__DeveloperName__c` | string | |
714
+ | `ssot__Name__c` | string | |
715
+ | `ssot__Description__c` | string | |
716
+ | `ssot__TagIdentifier__c` | string | |
717
+ | `ssot__DataType__c` | string | |
718
+ | `ssot__Status__c` | string | Live enum observed: `Available` (verified via live describe; all sampled rows used this value). Help docs say `Active/Inactive` but no `'Active'` rows exist on tested orgs — query by `'Available'` or omit filter. |
719
+ | `ssot__VersionNumber__c` | number | |
720
+ | `ssot__EngineType__c` | string | LLM engine that applies the tag |
721
+ | `ssot__SourceType__c` | string | |
722
+ | `ssot__SourceTagReferenceName__c` | string | |
723
+ | `ssot__InputScope__c` | string | |
724
+ | `ssot__CreatedDate__c` | datetime | |
725
+ | `ssot__InternalOrganizationId__c` | string | |
726
+
727
+ ### `ssot__AiAgentTagDefinitionAssociation__dlm` — definition ↔ agent binding
728
+
729
+ | Field | Type | Notes |
730
+ |---|---|---|
731
+ | `ssot__Id__c` | string (PK) | |
732
+ | `ssot__AiAgentTagDefinitionId__c` | string (FK) | → `TagDefinition.Id` |
733
+ | `ssot__AiAgentApiName__c` | string | Agent API name this definition binds to |
734
+ | `ssot__AiPromptTemplateId__c` | string | |
735
+ | `ssot__IsActive__c` | boolean | |
736
+ | `ssot__CreatedDate__c` | datetime | |
737
+ | `ssot__InternalOrganizationId__c` | string | |
738
+
739
+ ### `ssot__AiAgentTag__dlm` — tag instance (a specific value under a definition)
740
+
741
+ | Field | Type | Notes |
742
+ |---|---|---|
743
+ | `ssot__Id__c` | string (PK) | |
744
+ | `ssot__AiAgentTagDefinitionId__c` | string (FK) | → `TagDefinition.Id` |
745
+ | `ssot__Value__c` | string | Tag value text |
746
+ | `ssot__Description__c` | string | |
747
+ | `ssot__OrderNumber__c` | number | Display order |
748
+ | `ssot__IsActive__c` | boolean | |
749
+ | `ssot__IsFallback__c` | boolean | True when this tag is the fallback for the definition |
750
+ | `ssot__CreatedDate__c` | datetime | |
751
+ | `ssot__InternalOrganizationId__c` | string | |
752
+
753
+ ### `ssot__AiAgentTagAssociation__dlm` — applied annotation
754
+
755
+ One row per tag applied to a target. Target is a moment, session, or interaction —
756
+ only one of those FKs is populated per row.
757
+
758
+ | Field | Type | Notes |
759
+ |---|---|---|
760
+ | `ssot__Id__c` | string (PK) | |
761
+ | `ssot__AiAgentTagId__c` | string (FK) | → `AiAgentTag.Id` — the tag value |
762
+ | `ssot__AiAgentTagDefinitionAssociationId__c` | string (FK) | → `TagDefinitionAssociation.Id` |
763
+ | `ssot__AiAgentMomentId__c` | string (FK) | → `Moment.Id` — populated when target is a moment |
764
+ | `ssot__AiAgentSessionId__c` | string (FK) | → `Session.Id` — populated when target is a session |
765
+ | `ssot__AiAgentInteractionId__c` | string (FK) | → `Interaction.Id` — populated when target is a turn |
766
+ | `ssot__IsPassed__c` | boolean | Pass/fail for evaluation-style tags |
767
+ | `ssot__AssociationReasonText__c` | string | LLM rationale for applying this tag |
768
+ | `ssot__CreatedDate__c` | datetime | |
769
+ | `ssot__InternalOrganizationId__c` | string | |
770
+
771
+ ---
772
+
773
+ ## Agent Platform Tracing DMO (1)
774
+
775
+ Provisioned only when **Agent Platform Tracing** is enabled (Setup → Einstein
776
+ Audit, Analytics, and Monitoring Setup → Agent Platform Tracing toggle; requires
777
+ Agentforce Session Tracing already on). Captures OpenTelemetry-style spans from
778
+ Apex, Flows, Prompt Builder, Invocable Actions, Planner, AI Gateway, LLM Gateway,
779
+ and DC Query Federator. Data collection runs every 5 minutes.
780
+
781
+ Joined to STDM via `ssot__TelemetryTrace__c = Interaction.ssot__TelemetryTraceId__c`.
782
+
783
+ ### `ssot__TelemetryTraceSpan__dlm` — one row per span
784
+
785
+ | Field | Type | Notes |
786
+ |---|---|---|
787
+ | `ssot__Id__c` | string (PK) | Span id |
788
+ | `ssot__TelemetryTrace__c` | string (FK) | → `Interaction.ssot__TelemetryTraceId__c` |
789
+ | `ssot__TelemetryParentSpanId__c` | string | Parent span id (within the same trace); null on root |
790
+ | `ssot__OperationName__c` | string | e.g. `run.interaction`, `run.llmstep`, `run.action.<name>`, `run.invokeActions.<name>`, `run.hybridsearch.<index>` |
791
+ | `ssot__ServiceName__c` | string | e.g. `Atlas Reasoning Engine`, `InvocableAction`, `PromptTemplate`, `Einstein AI Gateway`, `Data Cloud` |
792
+ | `ssot__SpanKind__c` | string | OpenTelemetry span kind |
793
+ | `ssot__StatusCode__c` | string | Execution result |
794
+ | `ssot__StartDateTime__c` | datetime | Span start |
795
+ | `ssot__EndDateTime__c` | datetime | Span end |
796
+ | `ssot__DurationNumber__c` | number | Duration in nanoseconds |
797
+ | `ssot__TelemetrySpanAttributeText__c` | string | JSON key/value span attributes (e.g. `prompt_template.api.name`, `retriever.retrievername`) |
798
+ | `ssot__InternalOrganizationId__c` | string | |
799
+
800
+ ---
801
+
802
+ ## Known enum values (live-API verified)
803
+
804
+ | DMO | Field | Values |
805
+ |---|---|---|
806
+ | Session | `AiAgentChannelType__c` | `E & O`, `Builder`, `SCRT2 - EmbeddedMessaging`, `Voice`, `NGC` |
807
+ | Participant | `AiAgentType__c` | `DemoAgentType`, `AgentforceEmployeeAgent`, `AgentforceMyAgent` |
808
+ | Participant | `AiAgentSessionParticipantRole__c` | `USER`, `AGENT` |
809
+ | Interaction | `AiAgentInteractionType__c` | `TURN`, `SESSION_END` |
810
+ | Message | `AiAgentInteractionMessageType__c` | `Input`, `Output` |
811
+ | Step | `AiAgentInteractionStepType__c` | `LLM_STEP`, `ACTION_STEP`, `TOPIC_STEP`, `TRUST_GUARDRAILS_STEP`, `SESSION_END` (verified live) |
812
+ | ContentCategory | `detectorType__c` | `TOXICITY`, `PII`, `PROMPT_DEFENSE`, `InstructionAdherence`, `TaskResolution` |
813
+
814
+ ---
815
+
816
+ ## Tooling
817
+
818
+ DMO queries are executable; one CLI wrapper ships with the skill for
819
+ common operator needs:
820
+
821
+ | Script | Use case | Args |
822
+ |---|---|---|
823
+ | `scripts/discover_sessions.py` | Find sessions by time / agent / channel / outcome / grep; newest-first picker. | `--org`, optional `--since / --agent / --channel / --outcome / --grep / --tz / --limit` |