@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.
- package/package.json +3 -3
- package/skills/applying-slds/SKILL.md +322 -0
- package/skills/applying-slds/checklists.md +83 -0
- package/skills/applying-slds/examples.md +283 -0
- package/skills/applying-slds/guidance/README.md +83 -0
- package/skills/applying-slds/guidance/blueprints-index.md +213 -0
- package/skills/applying-slds/guidance/icons-guidance.md +186 -0
- package/skills/applying-slds/guidance/overviews/borders.md +236 -0
- package/skills/applying-slds/guidance/overviews/color.md +266 -0
- package/skills/applying-slds/guidance/overviews/display-density.md +366 -0
- package/skills/applying-slds/guidance/overviews/icons.md +240 -0
- package/skills/applying-slds/guidance/overviews/illustrations.md +235 -0
- package/skills/applying-slds/guidance/overviews/shadows.md +176 -0
- package/skills/applying-slds/guidance/overviews/spacing.md +216 -0
- package/skills/applying-slds/guidance/overviews/typography.md +323 -0
- package/skills/applying-slds/guidance/overviews/utilities.md +542 -0
- package/skills/applying-slds/guidance/slds-development-guide.md +288 -0
- package/skills/applying-slds/guidance/styling-hooks/borders.md +202 -0
- package/skills/applying-slds/guidance/styling-hooks/color/expressive-palette-hooks.md +153 -0
- package/skills/applying-slds/guidance/styling-hooks/color/index.md +171 -0
- package/skills/applying-slds/guidance/styling-hooks/color/semantic/accent-hooks.md +204 -0
- package/skills/applying-slds/guidance/styling-hooks/color/semantic/feedback-hooks.md +768 -0
- package/skills/applying-slds/guidance/styling-hooks/color/semantic/surface-hooks.md +337 -0
- package/skills/applying-slds/guidance/styling-hooks/color/system-hooks.md +132 -0
- package/skills/applying-slds/guidance/styling-hooks/index.md +327 -0
- package/skills/applying-slds/guidance/styling-hooks/shadows.md +238 -0
- package/skills/applying-slds/guidance/styling-hooks/spacing.md +254 -0
- package/skills/applying-slds/guidance/styling-hooks/typography.md +448 -0
- package/skills/applying-slds/guidance/utilities/alignment.md +119 -0
- package/skills/applying-slds/guidance/utilities/borders.md +131 -0
- package/skills/applying-slds/guidance/utilities/box.md +125 -0
- package/skills/applying-slds/guidance/utilities/color.md +165 -0
- package/skills/applying-slds/guidance/utilities/dark-mode.md +111 -0
- package/skills/applying-slds/guidance/utilities/description-list.md +168 -0
- package/skills/applying-slds/guidance/utilities/floats.md +117 -0
- package/skills/applying-slds/guidance/utilities/grid.md +264 -0
- package/skills/applying-slds/guidance/utilities/horizontal-list.md +110 -0
- package/skills/applying-slds/guidance/utilities/hyphenation.md +84 -0
- package/skills/applying-slds/guidance/utilities/index.md +205 -0
- package/skills/applying-slds/guidance/utilities/interactions.md +89 -0
- package/skills/applying-slds/guidance/utilities/layout.md +109 -0
- package/skills/applying-slds/guidance/utilities/line-clamp.md +131 -0
- package/skills/applying-slds/guidance/utilities/margin.md +155 -0
- package/skills/applying-slds/guidance/utilities/media-object.md +161 -0
- package/skills/applying-slds/guidance/utilities/name-value-list.md +152 -0
- package/skills/applying-slds/guidance/utilities/padding.md +155 -0
- package/skills/applying-slds/guidance/utilities/position.md +177 -0
- package/skills/applying-slds/guidance/utilities/print.md +114 -0
- package/skills/applying-slds/guidance/utilities/scrollable.md +126 -0
- package/skills/applying-slds/guidance/utilities/sizing.md +190 -0
- package/skills/applying-slds/guidance/utilities/themes.md +121 -0
- package/skills/applying-slds/guidance/utilities/truncate.md +127 -0
- package/skills/applying-slds/guidance/utilities/typography.md +166 -0
- package/skills/applying-slds/guidance/utilities/vertical-list.md +166 -0
- package/skills/applying-slds/guidance/utilities/visibility.md +228 -0
- package/skills/applying-slds/metadata/README.md +84 -0
- package/skills/applying-slds/metadata/blueprints/components/accordion.yaml +304 -0
- package/skills/applying-slds/metadata/blueprints/components/activity-timeline.yaml +92 -0
- package/skills/applying-slds/metadata/blueprints/components/alert.yaml +103 -0
- package/skills/applying-slds/metadata/blueprints/components/app-launcher.yaml +94 -0
- package/skills/applying-slds/metadata/blueprints/components/avatar-group.yaml +81 -0
- package/skills/applying-slds/metadata/blueprints/components/avatar.yaml +97 -0
- package/skills/applying-slds/metadata/blueprints/components/badges.yaml +102 -0
- package/skills/applying-slds/metadata/blueprints/components/brand-band.yaml +198 -0
- package/skills/applying-slds/metadata/blueprints/components/breadcrumbs.yaml +95 -0
- package/skills/applying-slds/metadata/blueprints/components/builder-header.yaml +192 -0
- package/skills/applying-slds/metadata/blueprints/components/button-groups.yaml +82 -0
- package/skills/applying-slds/metadata/blueprints/components/button-icons.yaml +295 -0
- package/skills/applying-slds/metadata/blueprints/components/buttons.yaml +230 -0
- package/skills/applying-slds/metadata/blueprints/components/cards.yaml +124 -0
- package/skills/applying-slds/metadata/blueprints/components/carousel.yaml +140 -0
- package/skills/applying-slds/metadata/blueprints/components/chat.yaml +179 -0
- package/skills/applying-slds/metadata/blueprints/components/checkbox-button-group.yaml +192 -0
- package/skills/applying-slds/metadata/blueprints/components/checkbox-button.yaml +204 -0
- package/skills/applying-slds/metadata/blueprints/components/checkbox-toggle.yaml +177 -0
- package/skills/applying-slds/metadata/blueprints/components/checkbox.yaml +108 -0
- package/skills/applying-slds/metadata/blueprints/components/color-picker.yaml +172 -0
- package/skills/applying-slds/metadata/blueprints/components/combobox.yaml +136 -0
- package/skills/applying-slds/metadata/blueprints/components/counter.yaml +147 -0
- package/skills/applying-slds/metadata/blueprints/components/data-tables.yaml +157 -0
- package/skills/applying-slds/metadata/blueprints/components/datepickers.yaml +130 -0
- package/skills/applying-slds/metadata/blueprints/components/datetime-picker.yaml +155 -0
- package/skills/applying-slds/metadata/blueprints/components/docked-composer.yaml +201 -0
- package/skills/applying-slds/metadata/blueprints/components/docked-form-footer.yaml +161 -0
- package/skills/applying-slds/metadata/blueprints/components/docked-utility-bar.yaml +175 -0
- package/skills/applying-slds/metadata/blueprints/components/drop-zone.yaml +115 -0
- package/skills/applying-slds/metadata/blueprints/components/dueling-picklist.yaml +196 -0
- package/skills/applying-slds/metadata/blueprints/components/dynamic-icons.yaml +128 -0
- package/skills/applying-slds/metadata/blueprints/components/dynamic-menu.yaml +141 -0
- package/skills/applying-slds/metadata/blueprints/components/expandable-section.yaml +115 -0
- package/skills/applying-slds/metadata/blueprints/components/expression.yaml +143 -0
- package/skills/applying-slds/metadata/blueprints/components/feeds.yaml +125 -0
- package/skills/applying-slds/metadata/blueprints/components/file-selector.yaml +154 -0
- package/skills/applying-slds/metadata/blueprints/components/files.yaml +119 -0
- package/skills/applying-slds/metadata/blueprints/components/form-element.yaml +145 -0
- package/skills/applying-slds/metadata/blueprints/components/global-header.yaml +120 -0
- package/skills/applying-slds/metadata/blueprints/components/global-navigation.yaml +100 -0
- package/skills/applying-slds/metadata/blueprints/components/icons.yaml +138 -0
- package/skills/applying-slds/metadata/blueprints/components/illustration.yaml +205 -0
- package/skills/applying-slds/metadata/blueprints/components/input.yaml +151 -0
- package/skills/applying-slds/metadata/blueprints/components/list-builder.yaml +127 -0
- package/skills/applying-slds/metadata/blueprints/components/lookups.yaml +132 -0
- package/skills/applying-slds/metadata/blueprints/components/map.yaml +118 -0
- package/skills/applying-slds/metadata/blueprints/components/menus.yaml +134 -0
- package/skills/applying-slds/metadata/blueprints/components/modals.yaml +152 -0
- package/skills/applying-slds/metadata/blueprints/components/notifications.yaml +88 -0
- package/skills/applying-slds/metadata/blueprints/components/page-headers.yaml +135 -0
- package/skills/applying-slds/metadata/blueprints/components/panels.yaml +149 -0
- package/skills/applying-slds/metadata/blueprints/components/path.yaml +154 -0
- package/skills/applying-slds/metadata/blueprints/components/picklist.yaml +125 -0
- package/skills/applying-slds/metadata/blueprints/components/pills.yaml +154 -0
- package/skills/applying-slds/metadata/blueprints/components/popovers.yaml +120 -0
- package/skills/applying-slds/metadata/blueprints/components/progress-bar.yaml +110 -0
- package/skills/applying-slds/metadata/blueprints/components/progress-indicator.yaml +133 -0
- package/skills/applying-slds/metadata/blueprints/components/progress-ring.yaml +102 -0
- package/skills/applying-slds/metadata/blueprints/components/prompt.yaml +126 -0
- package/skills/applying-slds/metadata/blueprints/components/publishers.yaml +178 -0
- package/skills/applying-slds/metadata/blueprints/components/radio-button-group.yaml +172 -0
- package/skills/applying-slds/metadata/blueprints/components/radio-group.yaml +112 -0
- package/skills/applying-slds/metadata/blueprints/components/rich-text-editor.yaml +135 -0
- package/skills/applying-slds/metadata/blueprints/components/scoped-notifications.yaml +188 -0
- package/skills/applying-slds/metadata/blueprints/components/scoped-tabs.yaml +97 -0
- package/skills/applying-slds/metadata/blueprints/components/select.yaml +127 -0
- package/skills/applying-slds/metadata/blueprints/components/setup-assistant.yaml +152 -0
- package/skills/applying-slds/metadata/blueprints/components/slider.yaml +111 -0
- package/skills/applying-slds/metadata/blueprints/components/spinners.yaml +135 -0
- package/skills/applying-slds/metadata/blueprints/components/split-view.yaml +112 -0
- package/skills/applying-slds/metadata/blueprints/components/summary-detail.yaml +103 -0
- package/skills/applying-slds/metadata/blueprints/components/tabs.yaml +138 -0
- package/skills/applying-slds/metadata/blueprints/components/textarea.yaml +116 -0
- package/skills/applying-slds/metadata/blueprints/components/tiles.yaml +108 -0
- package/skills/applying-slds/metadata/blueprints/components/timepicker.yaml +111 -0
- package/skills/applying-slds/metadata/blueprints/components/toast.yaml +154 -0
- package/skills/applying-slds/metadata/blueprints/components/tooltips.yaml +107 -0
- package/skills/applying-slds/metadata/blueprints/components/tree-grid.yaml +116 -0
- package/skills/applying-slds/metadata/blueprints/components/trees.yaml +116 -0
- package/skills/applying-slds/metadata/blueprints/components/trial-bar.yaml +112 -0
- package/skills/applying-slds/metadata/blueprints/components/vertical-navigation.yaml +130 -0
- package/skills/applying-slds/metadata/blueprints/components/vertical-tabs.yaml +140 -0
- package/skills/applying-slds/metadata/blueprints/components/visual-picker.yaml +150 -0
- package/skills/applying-slds/metadata/blueprints/components/welcome-mat.yaml +136 -0
- package/skills/applying-slds/metadata/hooks-index.json +6272 -0
- package/skills/applying-slds/metadata/icon-metadata.json +38466 -0
- package/skills/applying-slds/metadata/utilities-index.json +21912 -0
- package/skills/applying-slds/references/component-selection.md +112 -0
- package/skills/applying-slds/references/icons-decision-guide.md +124 -0
- package/skills/applying-slds/references/styling-decision-guide.md +228 -0
- package/skills/applying-slds/references/utilities-quick-ref.md +125 -0
- package/skills/applying-slds/scripts/search-blueprints.cjs +117 -0
- package/skills/applying-slds/scripts/search-hooks.cjs +139 -0
- package/skills/applying-slds/scripts/search-icons.cjs +174 -0
- package/skills/applying-slds/scripts/search-utilities.cjs +161 -0
- package/skills/building-ui-bundle-app/SKILL.md +33 -8
- package/skills/generating-custom-application/SKILL.md +1 -1
- package/skills/generating-custom-lightning-type/SKILL.md +17 -39
- package/skills/generating-custom-lightning-type/assets/primitive-types-and-constraints.md +41 -0
- package/skills/generating-custom-lightning-type/references/widget-rendition.md +124 -0
- package/skills/generating-ui-bundle-custom-app/SKILL.md +93 -0
- package/skills/generating-ui-bundle-custom-app/docs/configure-metadata-custom-application.md +70 -0
- package/skills/generating-ui-bundle-metadata/SKILL.md +39 -1
- package/skills/investigating-agentforce-architecture/README.md +156 -0
- package/skills/investigating-agentforce-architecture/SKILL.md +230 -0
- package/skills/investigating-agentforce-architecture/assets/cli/describe_sobject.yaml +16 -0
- package/skills/investigating-agentforce-architecture/assets/cli/describe_tooling_sobject.yaml +17 -0
- package/skills/investigating-agentforce-architecture/assets/cli/list_metadata_genaiprompttemplate.yaml +17 -0
- package/skills/investigating-agentforce-architecture/assets/cli/org_display.yaml +15 -0
- package/skills/investigating-agentforce-architecture/assets/cli/retrieve_genai_plugin.yaml +18 -0
- package/skills/investigating-agentforce-architecture/assets/cli/show_access_token.yaml +27 -0
- package/skills/investigating-agentforce-architecture/assets/mermaid/action_tree.mmd +20 -0
- package/skills/investigating-agentforce-architecture/assets/mermaid/data_flow.mmd +19 -0
- package/skills/investigating-agentforce-architecture/assets/mermaid/dependency_graph.mmd +19 -0
- package/skills/investigating-agentforce-architecture/assets/mermaid/invocation_sequence.mmd +20 -0
- package/skills/investigating-agentforce-architecture/assets/mermaid/planner_state.mmd +18 -0
- package/skills/investigating-agentforce-architecture/assets/soql/apex_class_bodies_by_ids.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/apex_class_bodies_by_names.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/bot_definition_details.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/bot_version_lookup.soql +4 -0
- package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_by_ids.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_ids_by_names.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/flow_definition_view_by_durable_ids.soql +4 -0
- package/skills/investigating-agentforce-architecture/assets/soql/flow_metadata_by_id.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/functions_by_plugins.soql +5 -0
- package/skills/investigating-agentforce-architecture/assets/soql/planner_attrs_by_parent_ids.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/planner_bundle_functions.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/planner_definition_by_agent_chain.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/plugin_functions_by_plugin_ids.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/plugin_instructions_by_plugin_ids.soql +3 -0
- package/skills/investigating-agentforce-architecture/assets/soql/plugins_by_planner.soql +4 -0
- package/skills/investigating-agentforce-architecture/references/architecture_sections.md +243 -0
- package/skills/investigating-agentforce-architecture/references/contract.json +244 -0
- package/skills/investigating-agentforce-architecture/references/soql_fields.md +512 -0
- package/skills/investigating-agentforce-architecture/scripts/_shared/__init__.py +1 -0
- package/skills/investigating-agentforce-architecture/scripts/_shared/fs_guard.py +329 -0
- package/skills/investigating-agentforce-architecture/scripts/_shared/paths.py +110 -0
- package/skills/investigating-agentforce-architecture/scripts/_shared/runtime.py +59 -0
- package/skills/investigating-agentforce-architecture/scripts/_shared/sql.py +10 -0
- package/skills/investigating-agentforce-architecture/scripts/cache_check.py +234 -0
- package/skills/investigating-agentforce-architecture/scripts/config.py +131 -0
- package/skills/investigating-agentforce-architecture/scripts/fetch_soql.py +689 -0
- package/skills/investigating-agentforce-architecture/scripts/finalize.py +295 -0
- package/skills/investigating-agentforce-architecture/scripts/main.py +2835 -0
- package/skills/investigating-agentforce-architecture/scripts/metadata_listing.py +265 -0
- package/skills/investigating-agentforce-architecture/scripts/parallel_retrieve.py +69 -0
- package/skills/investigating-agentforce-architecture/scripts/parse_bundle.py +215 -0
- package/skills/investigating-agentforce-architecture/scripts/parse_wave.py +845 -0
- package/skills/investigating-agentforce-architecture/scripts/probe_channels.py +302 -0
- package/skills/investigating-agentforce-architecture/scripts/render_architecture.py +1043 -0
- package/skills/investigating-agentforce-architecture/scripts/resolve_bot.py +255 -0
- package/skills/investigating-agentforce-architecture/scripts/resolve_invocation_target.py +130 -0
- package/skills/investigating-agentforce-architecture/scripts/rest_client.py +763 -0
- package/skills/investigating-agentforce-architecture/scripts/retrieve_planner.py +13 -0
- package/skills/investigating-agentforce-architecture/scripts/sf_cli.py +242 -0
- package/skills/investigating-agentforce-architecture/scripts/soql_loader.py +253 -0
- package/skills/investigating-agentforce-architecture/scripts/summarize_tree.py +143 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/__init__.py +0 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/_bootstrap.py +23 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/fixtures/__init__.py +0 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/fixtures/genai_payloads.py +400 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_cache_check.py +307 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_cache_check_main.py +283 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_config.py +115 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_end_to_end_fixture.py +651 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_finalize.py +278 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_flow_children_inflation.py +582 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_fs_guard.py +113 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_iterative_wave_b.py +478 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_main_pipeline.py +3359 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_parallel_retrieve.py +131 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_bundle.py +400 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave.py +644 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_classifiers.py +224 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_helpers.py +380 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_parse_wave_main.py +397 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_per_branch_visited.py +244 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_probe_channels.py +359 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_probe_cli_recipes.py +185 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_render_architecture.py +810 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_bot.py +203 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_creds.py +157 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_resolve_invocation_target.py +145 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_rest_client.py +1253 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_runtime_override.py +100 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_sf_cli.py +261 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_signature_stamping.py +466 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_soql_loader.py +501 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_summarize_tree.py +241 -0
- package/skills/investigating-agentforce-architecture/scripts/tests/test_write_emit_ctx.py +480 -0
- package/skills/investigating-agentforce-architecture/tools/emit_env.py +157 -0
- package/skills/investigating-agentforce-architecture/tools/emit_result.py +262 -0
- package/skills/investigating-agentforce-architecture/tools/sanitize.py +33 -0
- package/skills/investigating-agentforce-architecture/tools/write_emit_ctx.py +332 -0
- package/skills/investigating-agentforce-d360/README.md +123 -0
- package/skills/investigating-agentforce-d360/SKILL.md +163 -0
- package/skills/investigating-agentforce-d360/assets/dc/app_generation.sql +51 -0
- package/skills/investigating-agentforce-d360/assets/dc/content_category.sql +44 -0
- package/skills/investigating-agentforce-d360/assets/dc/content_quality.sql +41 -0
- package/skills/investigating-agentforce-d360/assets/dc/discover_sessions.sql +36 -0
- package/skills/investigating-agentforce-d360/assets/dc/feedback.sql +47 -0
- package/skills/investigating-agentforce-d360/assets/dc/feedback_details.sql +38 -0
- package/skills/investigating-agentforce-d360/assets/dc/gateway_records.sql +45 -0
- package/skills/investigating-agentforce-d360/assets/dc/gateway_request_llm.sql +50 -0
- package/skills/investigating-agentforce-d360/assets/dc/gateway_request_metadata.sql +44 -0
- package/skills/investigating-agentforce-d360/assets/dc/gateway_request_tags.sql +42 -0
- package/skills/investigating-agentforce-d360/assets/dc/gateway_requests.sql +89 -0
- package/skills/investigating-agentforce-d360/assets/dc/gateway_responses.sql +43 -0
- package/skills/investigating-agentforce-d360/assets/dc/generations.sql +52 -0
- package/skills/investigating-agentforce-d360/assets/dc/interactions.sql +53 -0
- package/skills/investigating-agentforce-d360/assets/dc/messages.sql +53 -0
- package/skills/investigating-agentforce-d360/assets/dc/messaging_session.sql +37 -0
- package/skills/investigating-agentforce-d360/assets/dc/moment_interactions.sql +34 -0
- package/skills/investigating-agentforce-d360/assets/dc/moments.sql +39 -0
- package/skills/investigating-agentforce-d360/assets/dc/participants.sql +48 -0
- package/skills/investigating-agentforce-d360/assets/dc/sessions.sql +78 -0
- package/skills/investigating-agentforce-d360/assets/dc/steps.sql +64 -0
- package/skills/investigating-agentforce-d360/assets/dc/tag_associations.sql +46 -0
- package/skills/investigating-agentforce-d360/assets/dc/tag_definition_associations.sql +37 -0
- package/skills/investigating-agentforce-d360/assets/dc/tag_definitions.sql +50 -0
- package/skills/investigating-agentforce-d360/assets/dc/tags.sql +37 -0
- package/skills/investigating-agentforce-d360/assets/dc/telemetry_spans.sql +55 -0
- package/skills/investigating-agentforce-d360/references/artifacts.md +50 -0
- package/skills/investigating-agentforce-d360/references/dc_dmo_fields.md +823 -0
- package/skills/investigating-agentforce-d360/references/dc_pipeline_contract.md +608 -0
- package/skills/investigating-agentforce-d360/scripts/_shared/__init__.py +2 -0
- package/skills/investigating-agentforce-d360/scripts/_shared/cli_override.py +98 -0
- package/skills/investigating-agentforce-d360/scripts/_shared/fs_guard.py +334 -0
- package/skills/investigating-agentforce-d360/scripts/_shared/paths.py +155 -0
- package/skills/investigating-agentforce-d360/scripts/_shared/runtime.py +59 -0
- package/skills/investigating-agentforce-d360/scripts/_shared/sql.py +14 -0
- package/skills/investigating-agentforce-d360/scripts/assemble_dc.py +1624 -0
- package/skills/investigating-agentforce-d360/scripts/config.py +45 -0
- package/skills/investigating-agentforce-d360/scripts/dc.py +188 -0
- package/skills/investigating-agentforce-d360/scripts/discover_sessions.py +556 -0
- package/skills/investigating-agentforce-d360/scripts/fetch_dc.py +1045 -0
- package/skills/investigating-agentforce-d360/scripts/render_dc.py +1750 -0
- package/skills/investigating-agentforce-d360/scripts/resolve_session.py +264 -0
- package/skills/investigating-agentforce-d360/scripts/storage.py +92 -0
- package/skills/investigating-agentforce-d360/scripts/tests/__init__.py +0 -0
- package/skills/investigating-agentforce-d360/scripts/tests/_bootstrap.py +15 -0
- package/skills/investigating-agentforce-d360/scripts/tests/fixtures/__init__.py +0 -0
- package/skills/investigating-agentforce-d360/scripts/tests/fixtures/synthetic_session.py +424 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_bootstrap_and_mode.py +115 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_gateway_direct.py +220 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_gateway_direct_integration.py +158 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_helpers.py +287 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_assemble_dc_integration.py +247 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_dc_and_resolve_session.py +433 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_discover_sessions.py +458 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_discover_sessions_grep_ci.py +193 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_helpers.py +266 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_identity.py +528 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_main.py +251 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_waterfall.py +229 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_fetch_dc_waterfall_full.py +283 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_identity_coherence.py +327 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_branches.py +256 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_gateway_direct.py +130 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_helpers.py +291 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_integration.py +220 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_planner_llm_calls.py +284 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_render_dc_show_prompts_gating.py +215 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_resolve_from_disk.py +100 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_resolve_session_main.py +149 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_runtime_override.py +104 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_session_shape.py +95 -0
- package/skills/investigating-agentforce-d360/scripts/tests/test_session_shape_dropped_by_stdm.py +85 -0
- package/skills/managing-managed-event-subscription/SKILL.md +152 -0
- package/skills/managing-managed-event-subscription/assets/managed-event-subscription-template.xml +20 -0
- package/skills/managing-managed-event-subscription/references/delete-guide.md +57 -0
- package/skills/managing-managed-event-subscription/references/topic-name-formats.md +26 -0
- package/skills/managing-managed-event-subscription/references/update-constraints.md +30 -0
- package/skills/reviewing-lwc-mobile-offline/SKILL.md +168 -0
- package/skills/reviewing-lwc-mobile-offline/references/grounding.md +7 -0
- package/skills/reviewing-lwc-mobile-offline/references/inline-graphql.md +43 -0
- package/skills/reviewing-lwc-mobile-offline/references/komaci-eslint.md +125 -0
- package/skills/reviewing-lwc-mobile-offline/references/lwc-if.md +78 -0
- package/skills/reviewing-lwc-mobile-offline/scripts/komaci.config.mjs +18 -0
- package/skills/reviewing-lwc-mobile-offline/scripts/package.json +10 -0
- package/skills/reviewing-lwc-mobile-offline/scripts/run-komaci.sh +69 -0
- package/skills/uplifting-components-to-slds2/SKILL.md +3 -2
- package/skills/uplifting-components-to-slds2/references/color-hooks-decision-guide.md +30 -9
- package/skills/uplifting-components-to-slds2/references/examples.md +24 -6
- package/skills/using-mobile-native-capabilities/SKILL.md +182 -0
- package/skills/using-mobile-native-capabilities/references/app-review.md +68 -0
- package/skills/using-mobile-native-capabilities/references/ar-space-capture.md +125 -0
- package/skills/using-mobile-native-capabilities/references/barcode-scanner.md +219 -0
- package/skills/using-mobile-native-capabilities/references/base-capability.md +22 -0
- package/skills/using-mobile-native-capabilities/references/biometrics.md +90 -0
- package/skills/using-mobile-native-capabilities/references/calendar.md +213 -0
- package/skills/using-mobile-native-capabilities/references/contacts.md +232 -0
- package/skills/using-mobile-native-capabilities/references/document-scanner.md +342 -0
- package/skills/using-mobile-native-capabilities/references/geofencing.md +123 -0
- package/skills/using-mobile-native-capabilities/references/location.md +158 -0
- package/skills/using-mobile-native-capabilities/references/mobile-capabilities.md +30 -0
- package/skills/using-mobile-native-capabilities/references/nfc.md +181 -0
- package/skills/using-mobile-native-capabilities/references/payments.md +95 -0
- package/skills/validating-slds/SKILL.md +262 -0
- package/skills/validating-slds/references/quality-checks.md +308 -0
- package/skills/validating-slds/references/report-format.md +302 -0
- 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 (`"` 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` |
|