@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,243 @@
1
+ # architecture.md section reference
2
+
3
+ Per-section rendering spec for `scripts/render_architecture.py::render`.
4
+ One `# Architecture` H1, seven numbered `## N. ...` sections, plus one
5
+ conditional "Dependency graph" appendix. Source of truth: the
6
+ `metadata_tree.json` schema produced by `scripts/parse_wave.py` at the
7
+ end of phase 9.
8
+
9
+ **Source of truth: the live tree** — field shapes evolve as parse_wave
10
+ learns new agent generations. When this doc disagrees with the
11
+ `metadata_tree.json` written by `parse_wave.py` for an actual agent on
12
+ your machine (under `~/.vibe/data/investigating-agentforce-architecture/<org>/<agent>__<ver>/`),
13
+ trust the live tree.
14
+
15
+ The Mermaid templates live at `assets/mermaid/*.mmd` and are the sole
16
+ consumer of the renderer helpers; each `{{PARAM}}` contract is
17
+ documented in the template's own header comment.
18
+
19
+ ---
20
+
21
+ ## Per-diagram node caps
22
+
23
+ Default caps (override via `render(..., max_mermaid_nodes={...})`):
24
+
25
+ | Diagram kind | Default cap | Over-cap behaviour |
26
+ |---|---|---|
27
+ | `flowchart` | 200 | summary placeholder + top-5 fan-out + catalog pointer |
28
+ | `stateDiagram` | 40 | summary placeholder (no fan-out — states are not nodes) |
29
+ | `sequenceDiagram` | 60 | summary placeholder + top-5 fan-out |
30
+ | `graph` | 100 | summary placeholder + top-5 fan-out |
31
+
32
+ Cap is measured in rendered elements (nodes + edges for flowchart/graph,
33
+ messages for sequenceDiagram, states + transitions for stateDiagram).
34
+ Above cap, the renderer emits a `> [diagram truncated: ...]` blockquote
35
+ with the element count, the top-5 nodes by fan-out (when applicable),
36
+ and a pointer to the catalog section that enumerates the same data
37
+ without compression.
38
+
39
+ ---
40
+
41
+ ## 1. Header + agent overview
42
+
43
+ **Purpose**: identify the agent and its planner in a single kv table.
44
+
45
+ **Input fields** (`tree.agent.*`):
46
+
47
+ - `api_name` — agent developer name
48
+ - `version` — `v<N>` label
49
+ - `master_label` — human-readable name
50
+ - `description` — prose summary
51
+ - `agent_type` — `EinsteinAgentKind` / `EinsteinCopilotForSalesforce` / …
52
+ - `type` — `ExternalCopilot` / `InternalCopilot` / …
53
+ - `agent_template`
54
+ - `bot_source`
55
+ - `generation` — `classic` / `nga` / `search` / `byop`
56
+ - `planner_name`
57
+ - `planner_type`
58
+ - `bot_id`
59
+
60
+ Plus `tree._schema_version`.
61
+
62
+ **Output shape**: `# <H1>` with api_name + version, followed by a 2-col
63
+ markdown table.
64
+
65
+ **Empty/degenerate cases**:
66
+
67
+ - Missing `api_name` / `version` renders `?` in the H1 (not `None`).
68
+ - Any missing field renders `-` in its row — not empty, because GitHub
69
+ table rendering collapses empty cells and the row loses alignment.
70
+
71
+ ---
72
+
73
+ ## 2. Anatomy summary
74
+
75
+ **Purpose**: one-paragraph executive summary plus health callouts.
76
+
77
+ **Input fields**:
78
+
79
+ - `tree._kind_counts` — preferred source for topic / action / flow /
80
+ apex / prompt counts.
81
+ - `tree.depth`, `tree.node_count` — size metrics.
82
+ - `tree._partial`, `tree._partial_reason` — health flag + prose reason.
83
+ - `tree._pending_fetches` — `{"FLOW":[...],"APEX":[...],
84
+ "PROMPT_TEMPLATE":[...],"STANDARD_ACTION":[...]}`. Count determines
85
+ the "pending fetches: N" line in the callout.
86
+ - `tree._unresolved` — triggers a second warn callout with the count.
87
+ - `tree.agent.planner_name` — missing -> warn callout.
88
+
89
+ **Output shape**: `## 2. Anatomy summary` + paragraph + zero-to-three
90
+ blockquote callouts. Callouts render as `> **Health: PARTIAL.**` /
91
+ `> **Health: WARN.**` prefixes with bullet sub-lines.
92
+
93
+ **Empty/degenerate cases**: if `_kind_counts` is absent, the walker
94
+ supplies counts from its own pass over the tree. Zero topics is valid
95
+ (SequentialPlannerIntentClassifier).
96
+
97
+ ---
98
+
99
+ ## 3. Action tree
100
+
101
+ **Purpose**: the full declared action tree as a flowchart with per-topic
102
+ subgraphs, plus a deterministic ASCII appendix for diff review.
103
+
104
+ **Input fields**:
105
+
106
+ - Walker-derived `topics[]` -> one subgraph per topic.
107
+ - Walker-derived `edges[]` -> `parent_api_name --> child_api_name`.
108
+ - `node._cycle_back_to` -> dotted back-edge `A -.->|cycle_back_to: X| B`.
109
+ - Planner-level actions (top-level `GEN_AI_FUNCTION` with no parent
110
+ topic) -> synthetic `_plannerActions` subgraph.
111
+
112
+ **Output shape**: ` ```mermaid ` block with `flowchart TB` + subgraphs
113
+ + edges, followed by a `<details>` with ASCII-tree appendix. When
114
+ above cap, the mermaid block is replaced with the truncation
115
+ placeholder; the ASCII appendix still renders.
116
+
117
+ **Empty/degenerate cases**:
118
+
119
+ - No topics, no planner actions -> `%% no topics` + `%% no edges`
120
+ mermaid comments; diagram still parses.
121
+ - Cycle annotations render in both the mermaid (dotted edge) and the
122
+ ASCII appendix (`[cycle]` marker on the node line).
123
+
124
+ ---
125
+
126
+ ## 4. Topic anatomy
127
+
128
+ **Purpose**: per-topic detail dump. One H3 per topic with a bullet list
129
+ of actions.
130
+
131
+ **Input fields**:
132
+
133
+ - Walker-derived `topics[]` with `api_name`, `label`, `actions`.
134
+ - `topic.raw.master_label` (preferred) or api_name for the label.
135
+
136
+ **Output shape**: `## 4. Topic anatomy` + one `### \`<api_name>\``
137
+ block per topic + kv list (`- Label:`, `- Action count:`, `- Actions:`
138
+ with sub-bullets).
139
+
140
+ **Empty/degenerate cases**: 0 topics -> `_No topics defined (planner
141
+ exposes actions directly)._` italic fallback. This is the expected
142
+ case for `SequentialPlannerIntentClassifier`.
143
+
144
+ ---
145
+
146
+ ## 5. Action catalog
147
+
148
+ **Purpose**: flat markdown table of every declared action.
149
+
150
+ **Input fields**:
151
+
152
+ - Walker-derived `actions[]` with `api_name`, `topic`, `raw.unwraps_to`.
153
+
154
+ **Output shape**: 3-col table (`Action | Topic | Unwraps to`). Unwraps
155
+ column renders as `KIND \`api_name\`` when `unwraps_to` is present, `-`
156
+ otherwise. Planner-level actions show `(plannerAction)` in the topic
157
+ column.
158
+
159
+ **Empty/degenerate cases**: no actions -> `_No actions declared._`
160
+ italic fallback.
161
+
162
+ ---
163
+
164
+ ## 6. Data flow / context propagation
165
+
166
+ **Purpose**: show which slot values propagate from user utterance
167
+ through the planner into each action.
168
+
169
+ **Input fields**:
170
+
171
+ - Walker-derived `topics[]` and `actions[]`.
172
+ - `action.raw.planner_attr.variable_name` + `planner_attr.data_type` —
173
+ labels the edge `A -->|var: Type| B`. When absent, the edge is bare.
174
+
175
+ **Output shape**: `flowchart LR` via `load_mermaid("data_flow", ...)`.
176
+ Skeleton: `User` -> `Planner` -> each `Topic` -> each `Action` under
177
+ that topic.
178
+
179
+ **Empty/degenerate cases**: no planner_attr metadata -> every edge is
180
+ bare. 0 topics -> only `User --> Planner` renders (no action-level
181
+ edges). Above cap -> truncation placeholder.
182
+
183
+ ---
184
+
185
+ ## 7. Flow / Apex / Prompt catalogs
186
+
187
+ **Purpose**: per-artifact detail section for every backing flow, apex
188
+ class, and prompt template referenced by any action.
189
+
190
+ **Input fields**:
191
+
192
+ - Walker-derived `flows{}`, `apex{}`, `prompts{}`, keyed on api_name.
193
+ - `node.signature` (or `_signature` fallback) — signature block.
194
+
195
+ **Output shape**: `### Flows` / `### Apex classes` / `### Prompt
196
+ templates` H3 buckets, each containing `#### \`<api_name>\`` + a fenced
197
+ signature block or `_Signature not captured._` fallback. Prompt
198
+ templates render as a flat bullet list (signature capture is
199
+ per-template prose, not a flow/apex shape).
200
+
201
+ **Empty/degenerate cases**: no backing artifacts in the tree ->
202
+ `_No backing artifacts in tree._` italic fallback.
203
+
204
+ ---
205
+
206
+ ## 8. Unresolved refs + artifact pointers
207
+
208
+ **Purpose**: surface every `_unresolved[]` entry and point at the
209
+ sidecar files the reader can open.
210
+
211
+ **Input fields**:
212
+
213
+ - `tree._unresolved[]` — list of `{kind, api_name, reason}` records.
214
+
215
+ **Output shape**: Either a 3-col `Kind | Api name | Reason` table or
216
+ an `_No unresolved references._` italic fallback. Followed by an
217
+ `### Artifact pointers` sub-heading with a bullet list of relative
218
+ paths (tree JSON, manifest, summary).
219
+
220
+ **Empty/degenerate cases**: always renders — the artifact-pointer list
221
+ is unconditional.
222
+
223
+ ---
224
+
225
+ ## Conditional: Dependency graph
226
+
227
+ **Purpose**: rendered only when `tree._unresolved[]` is non-empty OR
228
+ the tree contains cycle annotations. Shows cross-artifact dependencies
229
+ plus the unresolved nodes as dashed-outline markers.
230
+
231
+ **Input fields**:
232
+
233
+ - Walker-derived `edges[]`.
234
+ - `tree._unresolved[]` — each becomes a `:::unresolved` styled node.
235
+ - Walker-derived `cycles[]` — each becomes a dotted back-edge.
236
+
237
+ **Output shape**: `graph LR` via `load_mermaid("dependency_graph",
238
+ ...)`. Includes a `classDef unresolved` class marker at the bottom of
239
+ the template so unresolved nodes render with `stroke-dasharray`.
240
+
241
+ **Empty/degenerate cases**: not rendered at all when both conditions
242
+ are false. Above the `graph` cap -> truncation placeholder replaces
243
+ the mermaid block.
@@ -0,0 +1,244 @@
1
+ {
2
+ "_doc": "retired-name references replaced with plugin-scoped layout. Machine-readable I/O contract for investigating-agentforce-architecture. Orchestrator code reads this file (not SKILL.md prose) to discover the input schema, output keys, STATUS enum, and error-contract rules. The architecture skill runs inline (no subagent).",
3
+ "_schema_version": "3.1",
4
+ "_schema_notes": "3.1 (2026-05-05) canonicalizes `invocation_type` on STANDARD_ACTION / UNKNOWN nodes in the metadata tree. Prior versions split this across `raw_invocation_type` (bundle-sourced nodes) and `raw_action_type` (flow-actionCall-sourced nodes). Both legacy keys are still tolerated by readers for one release.",
5
+ "input": {
6
+ "required": {
7
+ "org_alias": {
8
+ "type": "string",
9
+ "description": "sf CLI alias (e.g. 'my-org-alias'). Auth is always derived via `sf org display --target-org $ORG_ALIAS --json`."
10
+ },
11
+ "agent_api_name": {
12
+ "type": "string",
13
+ "regex": "^[A-Za-z0-9_]+$",
14
+ "description": "BotDefinition.DeveloperName (e.g. 'MyAgent'). Must match the regex above; INVALID_INPUT otherwise."
15
+ }
16
+ },
17
+ "optional": {
18
+ "agent_version_api_name": {
19
+ "type": "string",
20
+ "description": "BotVersion.DeveloperName (e.g. 'v5'). When omitted, the agent auto-picks the Active version with the highest natural-key sort (v10 > v9); VERSION_AUTO_PICKED=true in the RESULT block."
21
+ },
22
+ "org_id_15": {
23
+ "type": "string",
24
+ "regex": "^[A-Za-z0-9]{15}$",
25
+ "description": "15-char org ID. If omitted, derived from `sf org display`."
26
+ },
27
+ "org_id_18": {
28
+ "type": "string",
29
+ "regex": "^[A-Za-z0-9]{18}$",
30
+ "description": "18-char org ID. If omitted, derived from `sf org display`."
31
+ },
32
+ "session_id": {
33
+ "type": "string",
34
+ "description": "Only used to name the ephemeral $WORK_DIR. Random UUID if omitted."
35
+ },
36
+ "work_dir": {
37
+ "type": "absolute_path",
38
+ "description": "Ephemeral scratch. Default: /tmp/investigating-agentforce-architecture-<epoch>-<rand>."
39
+ },
40
+ "cache_root": {
41
+ "type": "absolute_path",
42
+ "description": "Internal rebuildable cache root. Default: ~/.vibe/cache/investigating-agentforce-architecture. Override with --cache-dir <path>."
43
+ },
44
+ "data_root": {
45
+ "type": "absolute_path",
46
+ "description": "Durable user-facing output root. Default: ~/.vibe/data/investigating-agentforce-architecture. Override with --data-dir <path>."
47
+ },
48
+ "force_refresh": {
49
+ "type": "boolean",
50
+ "description": "If true, ignore cache and rewrite. Default: false."
51
+ }
52
+ },
53
+ "minimum_viable": {
54
+ "org_alias": "my-org-alias",
55
+ "agent_api_name": "MyAgent"
56
+ },
57
+ "notes": [
58
+ "Standalone and orchestrated modes accept the same input fields; no renames.",
59
+ "To bypass cache, delete the cache entry or pass force_refresh: true."
60
+ ]
61
+ },
62
+ "output": {
63
+ "format": "Two-part return message: (1) one-line prose status, (2) blank line, (3) === RESULT === key-value block. The KV block is always LAST in the output and always present.",
64
+ "parse_rule": "Find the line '=== RESULT ===', then read subsequent lines as KEY=VALUE pairs until EOF. Values are raw strings; no quoting; one pair per line.",
65
+ "parse_examples": {
66
+ "bash": "awk -F= '/^STATUS=/{print $2; exit}' <<< \"$subagent_output\"",
67
+ "python": "import re; dict(line.split('=', 1) for line in output.splitlines() if re.match(r'^[A-Z_]+=', line))"
68
+ },
69
+ "keys": {
70
+ "STATUS": {
71
+ "type": "enum",
72
+ "presence": "always",
73
+ "description": "Terminal status. See error_contract for per-status required keys.",
74
+ "values": [
75
+ "OK",
76
+ "PARTIAL_OK",
77
+ "INVALID_INPUT",
78
+ "AUTH_REQUIRED",
79
+ "AGENT_NOT_FOUND",
80
+ "AGENT_VERSION_NOT_FOUND",
81
+ "RETRIEVE_FAILED",
82
+ "WRITE_FAILED"
83
+ ]
84
+ },
85
+ "ERROR_DETAIL": {
86
+ "type": "string",
87
+ "presence": "on_error",
88
+ "description": "Human-readable explanation on any non-OK STATUS. Sanitized (no backticks/quotes/dollar signs/newlines)."
89
+ },
90
+ "AGENT_API_NAME": {
91
+ "type": "string",
92
+ "presence": "always",
93
+ "description": "Echo of input agent_api_name. May be empty on INVALID_INPUT if sanitize rejected before resolution."
94
+ },
95
+ "AGENT_VERSION": {
96
+ "type": "string",
97
+ "presence": "on_success_or_after_resolve",
98
+ "description": "Resolved BotVersion.DeveloperName (e.g. 'v5')."
99
+ },
100
+ "VERSION_AUTO_PICKED": {
101
+ "type": "boolean",
102
+ "presence": "on_success_or_after_resolve",
103
+ "description": "True iff agent_version_api_name was omitted and the agent auto-picked."
104
+ },
105
+ "AGENT_GENERATION": {
106
+ "type": "enum",
107
+ "presence": "always",
108
+ "values": ["classic", "nga", "unknown"],
109
+ "description": "classic = AiCopilot__ planner, nga = Atlas__ planner, unknown = anything else / not resolved."
110
+ },
111
+ "BOT_ID": {
112
+ "type": "string",
113
+ "presence": "on_success_or_after_resolve",
114
+ "description": "18-char BotDefinition.Id from SOQL."
115
+ },
116
+ "ORG_ID_15": {
117
+ "type": "string",
118
+ "presence": "on_success_or_after_auth",
119
+ "description": "15-char org ID. Cache-key prefix."
120
+ },
121
+ "ORG_ID_18": {
122
+ "type": "string",
123
+ "presence": "on_success_or_after_auth",
124
+ "description": "18-char org ID (from `sf org display`)."
125
+ },
126
+ "OUTPUT_JSON_PATH": {
127
+ "type": "absolute_path",
128
+ "presence": "on_success",
129
+ "description": "Durable {agent}_{version}_metadata_tree.json path under the resolved data_root."
130
+ },
131
+ "OUTPUT_SUMMARY_PATH": {
132
+ "type": "absolute_path",
133
+ "presence": "always_empty",
134
+ "description": "Reserved — historically pointed at {agent}_{version}_metadata_tree.summary.md. Dropped in ; field is now always emitted empty for RESULT-block shape stability."
135
+ },
136
+ "CACHE_PATH": {
137
+ "type": "absolute_path",
138
+ "presence": "on_success_or_after_cache_check",
139
+ "description": "Cache dir ($CACHE_ROOT/$ORG_ID_15/$AGENT__$VERSION/). Ends with /."
140
+ },
141
+ "CACHE_HIT": {
142
+ "type": "boolean",
143
+ "presence": "on_success_or_after_cache_check",
144
+ "description": "True iff the cache was served without any Metadata API retrieves."
145
+ },
146
+ "CACHED_AT_UTC": {
147
+ "type": "iso8601_utc_or_empty",
148
+ "presence": "on_success_or_after_cache_check",
149
+ "description": "ISO-8601 UTC built-at time. On cache hit this is the age of the cached snapshot; on cold build this is the just-computed timestamp."
150
+ },
151
+ "NODE_COUNT": {
152
+ "type": "integer",
153
+ "presence": "on_success",
154
+ "description": "Total nodes in the declared_action_tree."
155
+ },
156
+ "DEPTH": {
157
+ "type": "integer",
158
+ "presence": "on_success",
159
+ "description": "Max depth of the tree (BOT_DEFINITION = depth 0)."
160
+ },
161
+ "PARTIAL": {
162
+ "type": "boolean",
163
+ "presence": "on_success",
164
+ "description": "True iff the tree is incomplete (planner unresolved OR MAX_WAVE hit). When true, STATUS=PARTIAL_OK."
165
+ },
166
+ "UNRESOLVED_COUNT": {
167
+ "type": "integer",
168
+ "presence": "on_success",
169
+ "description": "Length of tree._unresolved[]."
170
+ },
171
+ "AVAILABLE_BOTS": {
172
+ "type": "csv",
173
+ "presence": "on_AGENT_NOT_FOUND",
174
+ "description": "Comma-separated list of all BotDefinition.DeveloperName values in the org."
175
+ },
176
+ "AVAILABLE_VERSIONS": {
177
+ "type": "csv",
178
+ "presence": "on_AGENT_VERSION_NOT_FOUND",
179
+ "description": "Format: 'v5(Active),v4(Inactive),...' — natural-key sorted DESC."
180
+ },
181
+ "RESULT_BLOCK_PATH": {
182
+ "type": "absolute_path",
183
+ "presence": "always",
184
+ "description": "Path to $DATA_DIR/last_result_block.txt — byte-for-byte tee written BEFORE stdout."
185
+ },
186
+ "WALL_TIME_SECONDS": {
187
+ "type": "float",
188
+ "presence": "always",
189
+ "description": "End-to-end wall-clock seconds. Two decimals. Target: 90-220s cold, <2s warm."
190
+ }
191
+ }
192
+ },
193
+ "error_contract": {
194
+ "OK": {
195
+ "description": "Tree built, zero unresolved, planner resolved.",
196
+ "required_keys": ["STATUS", "AGENT_API_NAME", "AGENT_VERSION", "VERSION_AUTO_PICKED", "AGENT_GENERATION", "BOT_ID", "ORG_ID_15", "ORG_ID_18", "OUTPUT_JSON_PATH", "OUTPUT_SUMMARY_PATH", "CACHE_PATH", "CACHE_HIT", "CACHED_AT_UTC", "NODE_COUNT", "DEPTH", "PARTIAL", "UNRESOLVED_COUNT", "RESULT_BLOCK_PATH", "WALL_TIME_SECONDS"],
197
+ "optional_keys": []
198
+ },
199
+ "PARTIAL_OK": {
200
+ "description": "Tree built but planner unresolved (Bot.bot had no planner) OR waves hit MAX_WAVE=5. tree._unresolved[] explains.",
201
+ "required_keys": ["STATUS", "AGENT_API_NAME", "AGENT_VERSION", "AGENT_GENERATION", "BOT_ID", "ORG_ID_15", "ORG_ID_18", "OUTPUT_JSON_PATH", "CACHE_PATH", "PARTIAL", "UNRESOLVED_COUNT", "WALL_TIME_SECONDS", "RESULT_BLOCK_PATH"],
202
+ "optional_keys": ["OUTPUT_SUMMARY_PATH", "CACHE_HIT", "CACHED_AT_UTC", "NODE_COUNT", "DEPTH", "VERSION_AUTO_PICKED", "ERROR_DETAIL"]
203
+ },
204
+ "INVALID_INPUT": {
205
+ "description": "agent_api_name failed [A-Za-z0-9_]+ regex, or other input validation (org_alias empty, ORG_ID_15 regex, $WORK_DIR symlink/foreign-owned).",
206
+ "required_keys": ["STATUS", "ERROR_DETAIL", "AGENT_API_NAME"],
207
+ "optional_keys": ["ORG_ID_15", "ORG_ID_18"]
208
+ },
209
+ "AUTH_REQUIRED": {
210
+ "description": "`sf org display` returned nothing, or a SOQL/Metadata call failed with an auth error. Caller must run `sf org login web --alias $ORG_ALIAS`.",
211
+ "required_keys": ["STATUS", "ERROR_DETAIL", "AGENT_API_NAME"],
212
+ "optional_keys": ["ORG_ID_15", "ORG_ID_18"]
213
+ },
214
+ "AGENT_NOT_FOUND": {
215
+ "description": "BotDefinition.DeveloperName not in the org. AVAILABLE_BOTS carries the CSV of what IS in the org.",
216
+ "required_keys": ["STATUS", "ERROR_DETAIL", "AGENT_API_NAME", "AVAILABLE_BOTS"],
217
+ "optional_keys": ["ORG_ID_15", "ORG_ID_18"]
218
+ },
219
+ "AGENT_VERSION_NOT_FOUND": {
220
+ "description": "No matching BotVersion under the bot (explicit version doesn't exist, or no Active version found during auto-pick).",
221
+ "required_keys": ["STATUS", "ERROR_DETAIL", "AGENT_API_NAME", "AVAILABLE_VERSIONS"],
222
+ "optional_keys": ["BOT_ID", "ORG_ID_15", "ORG_ID_18"]
223
+ },
224
+ "RETRIEVE_FAILED": {
225
+ "description": "`sf project retrieve start` failed (network, permissions, zip unreadable). ERROR_DETAIL carries the specifics.",
226
+ "required_keys": ["STATUS", "ERROR_DETAIL", "AGENT_API_NAME", "AGENT_VERSION", "BOT_ID"],
227
+ "optional_keys": ["ORG_ID_15", "ORG_ID_18", "OUTPUT_JSON_PATH"]
228
+ },
229
+ "WRITE_FAILED": {
230
+ "description": "Filesystem write failed during finalize (DATA_DIR rename, CACHE_DIR rename, or tree rewrite).",
231
+ "required_keys": ["STATUS", "ERROR_DETAIL", "AGENT_API_NAME", "AGENT_VERSION"],
232
+ "optional_keys": ["BOT_ID", "ORG_ID_15", "ORG_ID_18", "CACHE_HIT", "CACHED_AT_UTC"]
233
+ }
234
+ },
235
+ "stability": {
236
+ "key_names": "Stable. Key-name changes require a NOTICE.md entry and a skill reinstall; consumers read this contract to discover the current key set.",
237
+ "error_codes": "The STATUS enum is fixed at 8 values. A new status is a breaking change for consumers that switch on STATUS.",
238
+ "path_format": "All path values are absolute (no tilde expansion required). One KEY=VALUE per line. No trailing whitespace.",
239
+ "order": "Keys inside the RESULT block appear in a stable order — orchestrators should not depend on order but may use it for human readability."
240
+ },
241
+ "referenced_files": {
242
+ "skill_md": "<SKILL_ROOT>/SKILL.md"
243
+ }
244
+ }