@salesforce/afv-skills 1.41.0 → 1.43.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 +2 -6
- package/skills/automation-sandbox-post-copy-config-generate/SKILL.md +3 -0
- package/skills/automation-sandbox-post-copy-configure/SKILL.md +4 -0
- package/skills/design-systems-slds-validate/SKILL.md +2 -2
- package/skills/dx-app-analytics-query/SKILL.md +1 -3
- package/skills/dx-devops-conflict-resolve/SKILL.md +205 -0
- package/skills/dx-devops-conflict-resolve/examples/conflict-workflows.md +165 -0
- package/skills/dx-devops-conflict-resolve/references/deploy-failure-resolution.md +75 -0
- package/skills/dx-devops-conflict-resolve/references/git-conflict-resolution.md +124 -0
- package/skills/dx-devops-conflict-resolve/scripts/detect-conflicts.sh +91 -0
- package/skills/dx-devops-conflict-resolve/scripts/diagnose-deploy-failure.sh +156 -0
- package/skills/dx-devops-request-status/SKILL.md +160 -0
- package/skills/dx-devops-request-status/examples/polling-workflows.md +101 -0
- package/skills/dx-devops-request-status/references/cli-commands.md +176 -0
- package/skills/dx-devops-request-status/scripts/poll-status.sh +134 -0
- package/skills/dx-devops-test-failures-analyze/SKILL.md +6 -6
- package/skills/dx-devops-test-pipeline-configure/SKILL.md +7 -7
- package/skills/dx-devops-test-suite-assignments-configure/SKILL.md +6 -6
- package/skills/dx-devops-test-suite-run/SKILL.md +6 -6
- package/skills/dx-devops-work-item-manage/SKILL.md +2 -0
- package/skills/dx-org-manage/references/creating-scratch-org.md +5 -2
- package/skills/dx-org-manage/references/creating-snapshot.md +1 -0
- package/skills/dx-org-shape-manage/SKILL.md +152 -0
- package/skills/dx-org-shape-manage/examples/create_error_output.json +9 -0
- package/skills/dx-org-shape-manage/examples/create_success_output.json +9 -0
- package/skills/dx-org-shape-manage/examples/delete_output.json +11 -0
- package/skills/dx-org-shape-manage/examples/list_inactive_output.json +32 -0
- package/skills/dx-org-shape-manage/examples/list_output.json +24 -0
- package/skills/dx-org-shape-manage/references/cli_flags.md +135 -0
- package/skills/dx-org-switch/SKILL.md +2 -2
- package/skills/dx-org-trial-expiration-check/SKILL.md +2 -0
- package/skills/dx-pkg-post-install-configure/SKILL.md +3 -0
- package/skills/education-cloud-multi-campus-configure/SKILL.md +211 -0
- package/skills/education-cloud-multi-campus-configure/examples/hierarchy_visualization.md +174 -0
- package/skills/education-cloud-multi-campus-configure/examples/output_examples.md +54 -0
- package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input.csv +29 -0
- package/skills/education-cloud-multi-campus-configure/examples/sample_hierarchy_input_edgecases.csv +16 -0
- package/skills/education-cloud-multi-campus-configure/references/account_recordtype_prerequisite.md +44 -0
- package/skills/education-cloud-multi-campus-configure/references/delta_computation.md +33 -0
- package/skills/education-cloud-multi-campus-configure/references/error_handling.md +198 -0
- package/skills/education-cloud-multi-campus-configure/references/foundation_prerequisites.md +54 -0
- package/skills/education-cloud-multi-campus-configure/references/gotchas.md +16 -0
- package/skills/education-cloud-multi-campus-configure/references/hierarchy_parsing_rules.md +133 -0
- package/skills/education-cloud-multi-campus-configure/references/mcp-invocation.md +75 -0
- package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/SKILL.md +1 -1
- package/skills/experience-cms-brand-apply/SKILL.md +4 -1
- package/skills/experience-cms-brand-create/SKILL.md +197 -0
- package/skills/experience-cms-brand-create/assets/brand-template.json +329 -0
- package/skills/experience-cms-brand-create/references/brand-anatomy.md +120 -0
- package/skills/experience-cms-brand-create/references/disk-contract.md +84 -0
- package/skills/experience-cms-content-generate/SKILL.md +190 -0
- package/skills/experience-cms-content-generate/assets/display-formats.md +84 -0
- package/skills/experience-cms-content-generate/assets/payloads/create-content-bulk.json +11 -0
- package/skills/experience-cms-content-generate/assets/payloads/create-content-single.json +11 -0
- package/skills/experience-cms-content-generate/assets/payloads/publish-content.json +4 -0
- package/skills/experience-cms-content-generate/assets/payloads/update-content.json +9 -0
- package/skills/experience-cms-content-generate/assets/questions.md +241 -0
- package/skills/experience-cms-content-generate/examples/create-content-call.md +81 -0
- package/skills/experience-cms-content-generate/references/bulk-batching.md +56 -0
- package/skills/experience-cms-content-generate/references/content-type-classification.md +88 -0
- package/skills/experience-cms-content-generate/references/content-write-tool.md +95 -0
- package/skills/experience-cms-content-generate/references/delegation-protocol.md +37 -0
- package/skills/experience-cms-content-generate/references/edit-publish-workflow.md +63 -0
- package/skills/experience-cms-content-generate/references/error-recovery.md +72 -0
- package/skills/experience-cms-content-generate/references/identifier-resolution.md +26 -0
- package/skills/experience-cms-content-generate/references/intent-routing.md +45 -0
- package/skills/experience-cms-content-generate/references/principles.md +19 -0
- package/skills/experience-cms-content-generate/references/ux-rules.md +68 -0
- package/skills/experience-cms-content-generate/references/workspace-resolution.md +33 -0
- package/skills/experience-cms-content-type-generate/SKILL.md +449 -0
- package/skills/experience-cms-content-type-generate/assets/discovery-prompts.md +79 -0
- package/skills/experience-cms-content-type-generate/assets/schema-example.json +70 -0
- package/skills/experience-cms-content-type-generate/references/agent-checklist.md +50 -0
- package/skills/experience-cms-content-type-generate/references/anti-patterns.md +39 -0
- package/skills/experience-cms-content-type-generate/references/deployment-errors.md +27 -0
- package/skills/experience-cms-content-type-generate/references/discovery-details.md +106 -0
- package/skills/experience-cms-content-type-generate/references/discovery-query-rules.md +85 -0
- package/skills/experience-cms-content-type-generate/references/edit-fields-loop.md +48 -0
- package/skills/experience-cms-content-type-generate/references/pre-deploy-checklist.md +21 -0
- package/skills/experience-cms-content-type-generate/references/retrieve-and-reconcile.md +105 -0
- package/skills/experience-cms-content-type-generate/references/schema-rules.md +51 -0
- package/skills/experience-cms-content-type-generate/references/schema-summary-format.md +60 -0
- package/skills/experience-lds-graphql-generate/SKILL.md +4 -0
- package/skills/experience-lwc-accessibility-jest-run/SKILL.md +79 -0
- package/skills/experience-lwc-accessibility-jest-run/references/running-sa11y-jest-tests.md +205 -0
- package/skills/experience-lwc-design-generate/SKILL.md +5 -4
- package/skills/experience-lwc-generate/SKILL.md +10 -9
- package/skills/experience-ui-bundle-deploy/references/dev-preview.md +21 -0
- package/skills/experience-ui-bundle-deploy/references/social-login.md +1 -0
- package/skills/experience-ui-bundle-file-upload-generate/SKILL.md +6 -6
- package/skills/experience-ui-bundle-localize/SKILL.md +30 -37
- package/skills/experience-ui-bundle-localize/references/gotchas.md +23 -7
- package/skills/experience-ui-bundle-localize/references/i18n-setup.md +48 -4
- package/skills/experience-ui-bundle-localize/references/label-xml.md +22 -8
- package/skills/experience-ui-bundle-localize/references/verifying.md +39 -11
- package/skills/experience-ui-bundle-localize/scripts/detect-bundle-type.sh +118 -15
- package/skills/experience-ui-bundle-localize/scripts/tests/test-detect-bundle-type.sh +187 -0
- package/skills/experience-ui-bundle-mfa-configure/SKILL.md +13 -2
- package/skills/experience-ui-bundle-mfa-configure/references/social-login.md +1 -0
- package/skills/experience-ui-bundle-project-generate/SKILL.md +2 -2
- package/skills/integration-connectivity-generate/SKILL.md +11 -10
- package/skills/integration-eventing-cdc-configure/SKILL.md +6 -6
- package/skills/integration-eventing-subscription-configure/SKILL.md +6 -5
- package/skills/mobile-platform-native-capabilities-integrate/SKILL.md +2 -2
- package/skills/mobile-platform-offline-validate/scripts/package.json +1 -1
- package/skills/platform-agentexchange-partner-offers-configure/SKILL.md +8 -8
- package/skills/platform-custom-application-generate/SKILL.md +2 -0
- package/skills/platform-custom-field-generate/SKILL.md +8 -6
- package/skills/platform-custom-metadata-type-generate/SKILL.md +460 -0
- package/skills/platform-custom-metadata-type-generate/references/cmdt-records.md +251 -0
- package/skills/platform-custom-metadata-type-generate/scripts/sanitize-developer-name.sh +46 -0
- package/skills/platform-custom-setting-generate/SKILL.md +419 -0
- package/skills/platform-dataspace-access-configure/SKILL.md +3 -3
- package/skills/platform-sharing-owd-configure/SKILL.md +3 -0
- package/skills/platform-value-set-generate/SKILL.md +2 -0
- package/skills/service-agentforce-channel-configure/SKILL.md +29 -20
- package/skills/service-agentforce-channel-configure/assets/BotEmailDefinition.botEmailDefinition-meta.xml +36 -0
- package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email +17 -0
- package/skills/service-agentforce-channel-configure/assets/email/unfiled$public/AgentforceForServiceEmailTemplate.email-meta.xml +29 -0
- package/skills/service-agentforce-channel-configure/assets/mdapi-package.xml +25 -0
- package/skills/service-agentforce-channel-configure/assets/settings-mdapi-package.xml +30 -0
- package/skills/service-agentforce-channel-configure/references/agent-wiring.md +20 -0
- package/skills/service-agentforce-channel-configure/references/botemaildefinition.md +107 -0
- package/skills/service-agentforce-channel-configure/references/channel-branch-email.md +203 -50
- package/skills/service-agentforce-channel-configure/references/channel-types.md +30 -3
- package/skills/service-agentforce-channel-configure/references/queue-resolution.md +17 -8
- package/skills/service-agentforce-channel-configure/references/routing-flow.md +14 -3
- package/skills/service-agentforce-channel-configure/scripts/validate-botemaildefinition.py +126 -0
- package/skills/service-agentforce-channel-configure/scripts/validate-emailtemplate.py +133 -0
- package/skills/service-de-channel-activate/SKILL.md +271 -0
- package/skills/service-de-channel-activate/references/gotchas.md +31 -0
- package/skills/service-de-channel-activate/references/phone-verification.md +96 -0
- package/skills/service-de-channel-activate/references/worked-examples.md +14 -0
- package/skills/service-de-channel-consent-configure/SKILL.md +230 -0
- package/skills/service-de-channel-consent-configure/references/gotchas.md +41 -0
- package/skills/service-de-channel-consent-configure/references/language-keywords.md +84 -0
- package/skills/service-de-channel-consent-configure/references/worked-examples.md +134 -0
- package/skills/service-de-channel-create/SKILL.md +369 -0
- package/skills/service-de-channel-create/references/apple.md +59 -0
- package/skills/service-de-channel-create/references/connect-insert.md +84 -0
- package/skills/service-de-channel-create/references/facebook.md +154 -0
- package/skills/service-de-channel-create/references/line.md +66 -0
- package/skills/service-de-channel-create/references/sms.md +98 -0
- package/skills/service-de-channel-create/references/whatsapp.md +98 -0
- package/skills/service-de-channel-create/references/worked-examples.md +70 -0
- package/skills/service-de-channel-routing-configure/SKILL.md +345 -0
- package/skills/service-de-channel-routing-configure/references/asa-routing.md +90 -0
- package/skills/service-de-channel-routing-configure/references/gotchas.md +27 -0
- package/skills/service-de-channel-routing-configure/references/queue-creation.md +123 -0
- package/skills/service-de-channel-routing-configure/references/target-locate.md +98 -0
- package/skills/service-de-channel-routing-configure/references/worked-examples.md +174 -0
- package/skills/service-de-headless-channel-configure/SKILL.md +305 -0
- package/skills/service-de-headless-channel-configure/references/gotchas.md +27 -0
- package/skills/service-de-headless-channel-configure/references/inputs.md +49 -0
- package/skills/service-de-headless-channel-configure/references/output-envelopes.md +53 -0
- package/skills/service-de-headless-channel-configure/references/partial-success.md +24 -0
- package/skills/service-de-headless-channel-configure/references/terms-and-conditions.md +54 -0
- package/skills/service-de-headless-channel-configure/references/worked-examples.md +108 -0
- package/skills/service-de-waba-integrate/SKILL.md +227 -0
- package/skills/service-digital-engagement-channel-configure/scripts/check-api-version.sh +29 -0
- package/skills/service-digital-engagement-messaging-site-integrate/SKILL.md +10 -9
- package/skills/service-digital-engagement-messaging-site-integrate/references/lwr_patch.md +39 -21
- package/skills/service-digital-engagement-messaging-site-integrate/scripts/patch_lwr_bundle.sh +157 -96
- package/skills/service-email-to-case-configure/SKILL.md +190 -0
- package/skills/service-email-to-case-configure/assets/CaseSettings.settings-meta.xml +45 -0
- package/skills/service-email-to-case-configure/examples/CaseSettings-two-addresses.settings-meta.xml +36 -0
- package/skills/service-email-to-case-configure/references/apply-mechanics.md +73 -0
- package/skills/service-email-to-case-configure/references/routing_address_reference.md +73 -0
- package/skills/service-email-to-case-configure/references/troubleshooting.md +25 -0
- package/skills/service-email-to-case-configure/scripts/apply-casesettings.py +1315 -0
- package/skills/service-email-to-case-configure/scripts/check-agent-email-capability.sh +26 -0
- package/skills/service-email-to-case-configure/scripts/tests/__init__.py +0 -0
- package/skills/service-email-to-case-configure/scripts/tests/_bootstrap.py +45 -0
- package/skills/service-email-to-case-configure/scripts/tests/_fakeorg.py +366 -0
- package/skills/service-email-to-case-configure/scripts/tests/_run.py +84 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_apply_org_scenarios.py +655 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_get_session.py +134 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_new_capabilities.py +193 -0
- package/skills/service-email-to-case-configure/scripts/tests/test_validate_casesettings.py +170 -0
- package/skills/service-email-to-case-configure/scripts/validate-casesettings.py +229 -0
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/SKILL.md +33 -15
- package/skills/service-itsm-agentic-setup-agentforce-coordinate/examples/output-templates.md +63 -47
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md +17 -12
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/references/cli-invocation.md +5 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-configure/scripts/classify-enable-plan.mjs +11 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/SKILL.md +8 -6
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md +3 -3
- package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs +11 -3
- package/skills/service-itsm-agentic-setup-configure/SKILL.md +5 -5
- package/skills/service-itsm-agentic-setup-configure/examples/output-templates.md +5 -5
- package/skills/service-itsm-agentic-setup-employee-agent-configure/SKILL.md +2 -2
- package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md +11 -7
- package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs +20 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/SKILL.md +10 -6
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/action-availability.md +7 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md +11 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs +24 -17
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/classify-action-availability.mjs +98 -58
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/render-report.mjs +20 -7
- package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/strip-release-management.mjs +176 -0
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/SKILL.md +19 -19
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/cli-invocation.md +3 -4
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/helper-contracts.md +6 -6
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/references/permset-topology.md +3 -10
- package/skills/service-itsm-agentic-setup-itsm-agentforce-permset-assign/scripts/classify-permset-availability.mjs +7 -9
- package/skills/service-itsm-incident-mgmt-configure/SKILL.md +2 -0
- package/skills/service-itsm-incident-priority-configure/SKILL.md +15 -12
- package/skills/service-itsm-incident-priority-configure/examples/matrix-operations.md +27 -1
- package/skills/service-itsm-incident-priority-configure/references/sf-cli-invocation.md +37 -6
- package/skills/service-native-voice-recording-transcription-configure/SKILL.md +146 -0
- package/skills/service-native-voice-recording-transcription-configure/assets/confirmation-output.json +16 -0
- package/skills/service-native-voice-recording-transcription-configure/assets/package.xml +22 -0
- package/skills/service-native-voice-recording-transcription-configure/references/thunderbird-voice-settings.md +101 -0
- package/skills/service-native-voice-recording-transcription-configure/scripts/enable-recording-transcription.sh +181 -0
- package/skills/data360-activate/README.md +0 -38
- package/skills/data360-activate/SKILL.md +0 -127
- package/skills/data360-connect/README.md +0 -57
- package/skills/data360-connect/SKILL.md +0 -163
- package/skills/data360-connect/examples/connections/heroku-postgres.json +0 -15
- package/skills/data360-connect/examples/connections/ingest-api-connection.json +0 -5
- package/skills/data360-connect/examples/connections/ingest-api-schema.json +0 -31
- package/skills/data360-connect/examples/connections/redshift.json +0 -16
- package/skills/data360-connect/examples/connections/sharepoint-unstructured.json +0 -20
- package/skills/data360-connect/examples/connections/snowflake-connection.json +0 -42
- package/skills/data360-harmonize/README.md +0 -31
- package/skills/data360-harmonize/SKILL.md +0 -126
- package/skills/data360-orchestrate/README.md +0 -120
- package/skills/data360-orchestrate/SKILL.md +0 -263
- package/skills/data360-orchestrate/assets/definitions/activation-target.template.json +0 -5
- package/skills/data360-orchestrate/assets/definitions/activation.template.json +0 -7
- package/skills/data360-orchestrate/assets/definitions/calculated-insight.template.json +0 -7
- package/skills/data360-orchestrate/assets/definitions/data-action-target.template.json +0 -5
- package/skills/data360-orchestrate/assets/definitions/data-action.template.json +0 -5
- package/skills/data360-orchestrate/assets/definitions/data-graph.template.json +0 -21
- package/skills/data360-orchestrate/assets/definitions/data-stream.template.json +0 -55
- package/skills/data360-orchestrate/assets/definitions/dmo.template.json +0 -17
- package/skills/data360-orchestrate/assets/definitions/identity-resolution.template.json +0 -30
- package/skills/data360-orchestrate/assets/definitions/mapping.template.json +0 -14
- package/skills/data360-orchestrate/assets/definitions/relationship.template.json +0 -12
- package/skills/data360-orchestrate/assets/definitions/search-index.template.json +0 -9
- package/skills/data360-orchestrate/assets/definitions/segment.template.json +0 -16
- package/skills/data360-orchestrate/references/feature-readiness.md +0 -157
- package/skills/data360-orchestrate/references/plugin-setup.md +0 -138
- package/skills/data360-orchestrate/scripts/bootstrap-plugin.sh +0 -53
- package/skills/data360-orchestrate/scripts/diagnose-org.mjs +0 -511
- package/skills/data360-orchestrate/scripts/generate-manifest.mjs +0 -68
- package/skills/data360-orchestrate/scripts/verify-plugin.sh +0 -58
- package/skills/data360-prepare/README.md +0 -50
- package/skills/data360-prepare/SKILL.md +0 -203
- package/skills/data360-prepare/examples/ingestion-api/.env.example +0 -8
- package/skills/data360-prepare/examples/ingestion-api/README.md +0 -48
- package/skills/data360-prepare/examples/ingestion-api/send-data.py +0 -144
- package/skills/data360-query/README.md +0 -43
- package/skills/data360-query/SKILL.md +0 -128
- package/skills/data360-query/examples/search-indexes/hybrid-structured.json +0 -44
- package/skills/data360-query/examples/search-indexes/vector-knowledge.json +0 -43
- package/skills/data360-segment/README.md +0 -35
- package/skills/data360-segment/SKILL.md +0 -123
- package/skills/service-helpagent-coordinate/references/channel-help-portal.md +0 -22
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-1-1-non-text-content.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-i-lists.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-ii-tables.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iii-form-labels.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-iv-regions.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-1-v-groups.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-3-5-identify-input.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-1-4-3-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-1-1-keyboard.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-4-link-purpose.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-4-6-headings-labels.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-1-pointer-gestures.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-2-pointer-cancellation.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-3-label-in-name.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-2-5-7-dragging-movement.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-1-on-focus.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-2-2-on-input.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-1-error-identification.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-2-labels-instructions.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-3-3-3-error-suggestion.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-i-name.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-ii-role.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/reviewers/sc-4-1-2-iii-value.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-1-1-non-text-content.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-1-use-of-color.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-10-resize-reflow.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-11-non-text-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/references/vision/sc-1-4-3-contrast.md +0 -0
- /package/skills/{experience-lwc-accessibility-validate → experience-accessibility-validate}/scripts/contrast-ratio.py +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: service-itsm-agentic-setup-agentforce-studio-validate
|
|
3
|
-
description: "Validate the Agentforce for IT Service prerequisites for a Fulfiller or Employee agent, using the Salesforce CLI (sf). The READ-ONLY prerequisite check: it reads the Salesforce Go feature toggles behind the Agentforce for IT Service setup page (Agentforce Studio, the IT Service Fulfiller / IT Service Employee
|
|
3
|
+
description: "Validate the Agentforce for IT Service prerequisites for a Fulfiller or Employee agent, using the Salesforce CLI (sf). The READ-ONLY prerequisite check: it reads the Salesforce Go feature toggles behind the Agentforce for IT Service setup page (Agentforce Studio, the IT Service Fulfiller Template / IT Service Employee Template, Specialized Agent Templates for Employee) via one Connect API call, then a helper script classifies the chosen path into a READY / NOT-READY verdict. It never enables anything; when a toggle is off it hands off to agentforce-studio-configure to enable it. Use when asked to check Agentforce prerequisites, validate the org is ready for an ITSM agent, or verify Agentforce Studio is enabled. Triggers: check agentforce prerequisites, validate agentforce readiness, is my org ready for the fulfiller agent, verify agentforce studio enabled. DO NOT TRIGGER: enabling or turning on the toggles, creating the fulfiller agent (service-itsm-agentic-setup-fulfiller-agent-configure), or CMDB CRUD."
|
|
4
4
|
metadata:
|
|
5
|
-
version: "2.
|
|
5
|
+
version: "2.2"
|
|
6
6
|
domains: ["Service", "Agentforce"]
|
|
7
7
|
minApiVersion: "67.0"
|
|
8
8
|
relatedSkills:
|
|
@@ -42,9 +42,9 @@ The feature toggles and their real `featureApiName`s:
|
|
|
42
42
|
| Go-page toggle | featureApiName | Required for |
|
|
43
43
|
|----------------|----------------|--------------|
|
|
44
44
|
| Turn on Agentforce Studio | `sales-cloud-agent-studio` | both paths (shared) |
|
|
45
|
-
| Agentforce for IT Service
|
|
46
|
-
| IT Service Fulfiller | `service-cloud-it-fulfiller-agent` | **fulfiller** |
|
|
47
|
-
| IT Service Employee | `service-cloud-requestor-agent` | **employee** |
|
|
45
|
+
| Agentforce for IT Service | `service-cloud-agentforce-for-itsm` | both paths (shared) |
|
|
46
|
+
| IT Service Fulfiller Template | `service-cloud-it-fulfiller-agent` | **fulfiller** |
|
|
47
|
+
| IT Service Employee Template | `service-cloud-requestor-agent` | **employee** |
|
|
48
48
|
| Specialized Agent Templates for Employee | `service-cloud-it-service-employee-agent` | **employee** |
|
|
49
49
|
|
|
50
50
|
All are **Connect API** features (`/connect/setup/discovery/...`) — the read goes through `sf api request rest`, no Headless360 dispatcher required. The classification is **deterministic** and lives in `scripts/classify-readiness.mjs` (invoked via `Bash`), not in prose.
|
|
@@ -184,7 +184,7 @@ Org: <org-alias> (API v67.0)
|
|
|
184
184
|
Agent path: fulfiller | employee
|
|
185
185
|
|
|
186
186
|
[PASS|FAIL] Agentforce Studio ......................... ENABLED | NOT_ENABLED (sales-cloud-agent-studio)
|
|
187
|
-
[PASS|FAIL] Agentforce for IT Service
|
|
187
|
+
[PASS|FAIL] Agentforce for IT Service ................. ENABLED | NOT_ENABLED (service-cloud-agentforce-for-itsm)
|
|
188
188
|
[PASS|FAIL] <path-specific toggle(s)> ................. ENABLED | NOT_ENABLED (<featureApiName>)
|
|
189
189
|
|
|
190
190
|
Verdict: READY | NOT-READY | CANNOT-CONFIRM | ERROR
|
|
@@ -197,6 +197,8 @@ Next steps:
|
|
|
197
197
|
|
|
198
198
|
This skill is **read-only** — no org state is written. The only file it produces is the temporary response capture handed to the classifier.
|
|
199
199
|
|
|
200
|
+
Use each toggle's report label verbatim — `Agentforce Studio`, `Agentforce for IT Service`, `IT Service Fulfiller Template`, `IT Service Employee Template`, and `Specialized Agent Templates for Employee` — identical across this skill and `service-itsm-agentic-setup-agentforce-studio-configure`. (In the toggle table above, the Studio row's Go-page toggle reads "Turn on Agentforce Studio"; its rendered report label is simply `Agentforce Studio`.) The `Template` suffix on the two agent-template toggles is the deliberate, authoritative report label — it intentionally differs from the shorter setup-page toggle caption (`IT Service Fulfiller` / `IT Service Employee`), exactly like the Studio row above; the installed agent is named separately by the agent-configure skills (`IT Service Fulfiller Agent` / `IT Service Employee Agent`, no `Template`). The path-specific rows are `IT Service Fulfiller Template` (fulfiller path), or `IT Service Employee Template` **and** `Specialized Agent Templates for Employee` (employee path). Never add an invented role qualifier such as "Requestor", "Specialized", or "parent" to a label.
|
|
201
|
+
|
|
200
202
|
---
|
|
201
203
|
|
|
202
204
|
## Reference File Index
|
package/skills/service-itsm-agentic-setup-agentforce-studio-validate/references/cli-invocation.md
CHANGED
|
@@ -43,9 +43,9 @@ column is what the API uses:
|
|
|
43
43
|
| UI toggle | featureApiName | Required for |
|
|
44
44
|
|-----------|----------------|--------------|
|
|
45
45
|
| Turn on Agentforce Studio | `sales-cloud-agent-studio` | both paths |
|
|
46
|
-
| Agentforce for IT Service
|
|
47
|
-
| IT Service Fulfiller | `service-cloud-it-fulfiller-agent` | fulfiller |
|
|
48
|
-
| IT Service Employee | `service-cloud-requestor-agent` | employee |
|
|
46
|
+
| Agentforce for IT Service | `service-cloud-agentforce-for-itsm` | both paths |
|
|
47
|
+
| IT Service Fulfiller Template | `service-cloud-it-fulfiller-agent` | fulfiller |
|
|
48
|
+
| IT Service Employee Template | `service-cloud-requestor-agent` | employee |
|
|
49
49
|
| Specialized Agent Templates for Employee | `service-cloud-it-service-employee-agent` | employee |
|
|
50
50
|
|
|
51
51
|
Dependency chain (enable order): `sales-cloud-einstein-generative-ai` →
|
package/skills/service-itsm-agentic-setup-agentforce-studio-validate/scripts/classify-readiness.mjs
CHANGED
|
@@ -52,11 +52,19 @@ const REQUIRED = {
|
|
|
52
52
|
employee: [STUDIO, PARENT, REQUESTOR, SPECIALIZED],
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
+
// Report labels — the authoritative strings these reports render. The two
|
|
56
|
+
// agent-template rows intentionally differ from their shorter Salesforce Go
|
|
57
|
+
// setup-page toggle caption, the same way the Studio caption "Turn on
|
|
58
|
+
// Agentforce Studio" renders as "Agentforce Studio": these toggles enable agent
|
|
59
|
+
// *templates*, so their report label carries a deliberate "Template" suffix. By
|
|
60
|
+
// design — do not simplify it to the bare caption. It is also distinct from the
|
|
61
|
+
// installed agent the agent-configure skills create ("IT Service Fulfiller
|
|
62
|
+
// Agent" / "IT Service Employee Agent", no "Template").
|
|
55
63
|
const LABEL = {
|
|
56
64
|
[STUDIO]: 'Agentforce Studio',
|
|
57
|
-
[PARENT]: 'Agentforce for IT Service
|
|
58
|
-
[FULFILLER]: 'IT Service Fulfiller
|
|
59
|
-
[REQUESTOR]: 'IT Service Employee
|
|
65
|
+
[PARENT]: 'Agentforce for IT Service',
|
|
66
|
+
[FULFILLER]: 'IT Service Fulfiller Template',
|
|
67
|
+
[REQUESTOR]: 'IT Service Employee Template',
|
|
60
68
|
[SPECIALIZED]: 'Specialized Agent Templates for Employee',
|
|
61
69
|
};
|
|
62
70
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: service-itsm-agentic-setup-configure
|
|
3
|
-
description: "Top-level orchestrator for setting up IT Service Management (ITSM) in Salesforce Service Cloud. Use when the user asks to set up ITSM, configure service management, enable ITSM capabilities, wants a guided walkthrough, or asks what is needed to get ITSM running. Presents a multi-select track menu and delegates to domain sub-orchestrators — Incident Management, Agentforce for ITSM (Studio + Fulfiller), CMDB, and
|
|
3
|
+
description: "Top-level orchestrator for setting up IT Service Management (ITSM) in Salesforce Service Cloud. Use when the user asks to set up ITSM, configure service management, enable ITSM capabilities, wants a guided walkthrough, or asks what is needed to get ITSM running. Presents a multi-select track menu and delegates to domain sub-orchestrators — Incident Management, Agentforce for ITSM (Studio + Fulfiller), CMDB, and Channels (Portal, Notifications, Microsoft Teams, Slack). Any prerequisites (such as the Incident Management master switch for Track 1) are owned and enforced inside the relevant sub-orchestrator, not at this level. Triggers on: set up ITSM, configure service management, ITSM setup, get ITSM running, walkthrough, set up CMDB / channels / Teams / Slack / Agentforce for ITSM. DO NOT TRIGGER when: the user asks about a specific feature directly (e.g., the priority matrix alone), asks only about Case management, wants to create a single user, or asks general ITSM questions without setup intent."
|
|
4
4
|
metadata:
|
|
5
|
-
version: "1.
|
|
5
|
+
version: "1.3"
|
|
6
6
|
domains: ["Service"]
|
|
7
7
|
relatedSkills:
|
|
8
8
|
- "service-itsm-agentic-setup-agentforce-coordinate"
|
|
9
9
|
- "service-itsm-agentic-setup-cmdb-coordinate"
|
|
10
10
|
- "service-itsm-agentic-setup-incident-management"
|
|
11
|
-
- "service-itsm-
|
|
11
|
+
- "service-itsm-channels-coordinate"
|
|
12
12
|
allowed-tools: Read AskUserQuestion
|
|
13
13
|
---
|
|
14
14
|
|
|
@@ -29,9 +29,9 @@ Only tracks with a working sub-orchestrator appear in the menu — use the **Tra
|
|
|
29
29
|
| # | Track | Sub-Orchestrator Skill | Features |
|
|
30
30
|
|---|-------|------------------------|----------|
|
|
31
31
|
| 1 | Incident Management | `service-itsm-agentic-setup-incident-management` | SLA & Milestones |
|
|
32
|
-
| 2 | Agentforce for ITSM | `service-itsm-agentic-setup-agentforce-coordinate` | Agentforce Studio enablement, Fulfiller Agent
|
|
32
|
+
| 2 | Agentforce for ITSM | `service-itsm-agentic-setup-agentforce-coordinate` | Agentforce Studio enablement, Fulfiller Agent, Employee Agent |
|
|
33
33
|
| 3 | CMDB (Configuration Management Database) | `service-itsm-agentic-setup-cmdb-coordinate` | CMDB feature enablement, CMDB Foundation bundle, User CMDB access |
|
|
34
|
-
| 4 |
|
|
34
|
+
| 4 | Channels | `service-itsm-channels-coordinate` | Employee Service channel setup — Portal, Notifications, Microsoft Teams (IT Desk / IT Service / embedded agent), and Slack |
|
|
35
35
|
|
|
36
36
|
Additional ITSM setup tracks (e.g. employee provisioning) will be added here as their sub-orchestrators become available.
|
|
37
37
|
|
|
@@ -19,9 +19,9 @@ ITSM Setup (via service-itsm-agentic-setup-configure)
|
|
|
19
19
|
│ 3 │ CMDB │ Enable the Configuration Management Database │ Not done │
|
|
20
20
|
│ │ │ feature, deploy the CMDB Foundation content bundle, │ │
|
|
21
21
|
│ │ │ and grant users CMDB access │ │
|
|
22
|
-
│ 4 │
|
|
23
|
-
│ │ │
|
|
24
|
-
│ │ │
|
|
22
|
+
│ 4 │ Channels │ Set up Employee Service channels — Portal, │ Not done │
|
|
23
|
+
│ │ │ Notifications, Microsoft Teams (IT Desk / IT │ │
|
|
24
|
+
│ │ │ Service), and Slack │ │
|
|
25
25
|
│ A │ Full guided setup │ Run every available track in dependency order — │ — │
|
|
26
26
|
│ │ │ per-track confirmation between them so you can stop │ │
|
|
27
27
|
│ │ │ any time. Mutually exclusive with per-track picks. │ │
|
|
@@ -44,7 +44,7 @@ they are finished — even if some tracks are still `Not done`. When rendering:
|
|
|
44
44
|
- All `Done` → `Your ITSM setup is complete.`
|
|
45
45
|
- Otherwise → `You have finished the tracks you selected. The remaining tracks can be resumed later by re-invoking this orchestrator.`
|
|
46
46
|
|
|
47
|
-
Example — user finished after only Incident Management and Agentforce (the two tracks they chose to set up in this session; CMDB and
|
|
47
|
+
Example — user finished after only Incident Management and Agentforce (the two tracks they chose to set up in this session; CMDB and Channels stayed `Not done`):
|
|
48
48
|
|
|
49
49
|
```text
|
|
50
50
|
ITSM Setup — Finished
|
|
@@ -56,7 +56,7 @@ ITSM Setup — Finished
|
|
|
56
56
|
│ Incident Management │ Done │
|
|
57
57
|
│ Agentforce for ITSM │ Done │
|
|
58
58
|
│ CMDB │ Not done │
|
|
59
|
-
│
|
|
59
|
+
│ Channels │ Not done │
|
|
60
60
|
└──────────────────────────┴──────────┘
|
|
61
61
|
|
|
62
62
|
You have finished the tracks you selected. The remaining tracks can be resumed
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: service-itsm-agentic-setup-employee-agent-configure
|
|
3
3
|
description: "Create and activate an IT Service Employee agent as a Next-Gen Authoring (NGA) native agent from an ITSM Employee agent template's Agent Script, via the Salesforce CLI (sf): read the template, check idempotency, create the NGA bundle then publish and activate, verify live. Defaults to the broad IT Service Employee template; when the user names a specialized Employee template (Password Manager Assistance, Certificate Management, Onboarding, Hardware Request, and ~47 others catalogued in references/specialized-templates.md — all under the `svc_emp_intelligence__` namespace), pins that one instead. Idempotent per developer name. TRIGGER when the user asks to create/set up/provision/activate the Employee agent, the IT Service Employee agent, or a specialized Employee agent (password manager, certificate, onboarding, hardware request, etc.). DO NOT TRIGGER: prerequisite checks (service-itsm-agentic-setup-agentforce-studio-validate), CMDB CRUD, Fulfiller setup (service-itsm-agentic-setup-fulfiller-agent-configure)."
|
|
4
4
|
metadata:
|
|
5
|
-
version: "2.
|
|
5
|
+
version: "2.3"
|
|
6
6
|
domains: ["Service", "Agentforce"]
|
|
7
7
|
minApiVersion: "67.0"
|
|
8
8
|
relatedSkills:
|
|
@@ -58,7 +58,7 @@ If any of these are unmet, `sf` surfaces an auth error or a `401`/`403`/`404`; *
|
|
|
58
58
|
|
|
59
59
|
| Concern | Command | Notes |
|
|
60
60
|
|---------|---------|-------|
|
|
61
|
-
| Studio access (precondition read) | `sf api request rest "/services/data/v67.0/agentforce-studio/access/Agents" --method GET -o <alias>` | `hasAccess=false` ⇒
|
|
61
|
+
| Studio access (precondition read) | `sf api request rest "/services/data/v67.0/agentforce-studio/access/Agents" --method GET -o <alias>` | `hasAccess=false` ⇒ prerequisite hand-off |
|
|
62
62
|
| List agent templates + Agent Script (read) | `sf api request rest "/services/data/v67.0/connect/service-itsm/agent-templates?agentType=AgentforceEmployeeAgent" --method GET -o <alias>` | `agentType=AgentforceEmployeeAgent` required; confirms resolved `<masterLabel>` template + non-empty `agentScript` |
|
|
63
63
|
| Enumerate existing agent + latest version status (read) | `sf data query -q "SELECT Id,DeveloperName,MasterLabel,(SELECT Id,Status FROM BotVersions ORDER BY VersionNumber DESC LIMIT 1) FROM BotDefinition WHERE Id='<botDefinitionId>' OR DeveloperName='<developerName>'" -o <alias> --json` | Keyed PRIMARILY on the template's `botDefinitionId` (Phase-1 row); the `OR DeveloperName=` clause is both the null-`botDefinitionId` fallback AND the guard for a dangling Id link (deleted target). Classified by `scripts/classify-agent-existence.mjs`; Active latest ⇒ ALREADY-CREATED; Inactive latest ⇒ offer reactivation |
|
|
64
64
|
| **Create the NGA bundle** (write) | `sf api request rest "/services/data/v67.0/nextgen-authoring/bundles" --method POST --body @<body-file> -o <alias>` | Body built by `scripts/build-create-body.mjs`; response `id` = the bundle **version** Id |
|
package/skills/service-itsm-agentic-setup-employee-agent-configure/references/report-format.md
CHANGED
|
@@ -16,13 +16,17 @@ Template: <resolvedMasterLabel> (id=<resolvedId>) — <broad umbrella|specialize
|
|
|
16
16
|
Source: <resolvedId> Agent Script
|
|
17
17
|
Agent: <developerName> ("<label>") — NGA-native bundle
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
19
|
+
Stage 2 — install & activate the agent from its template:
|
|
20
|
+
|
|
21
|
+
| Stage | Status |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| Preflight | Studio hasAccess=<true/false/cannot-confirm>; template agentScript present=<yes/no>; verdict=<READY/NOT-READY/CANNOT-CONFIRM> |
|
|
24
|
+
| Enumerate | target agent exists before write=<yes/no>; latest version status=<Active/Inactive/n/a>; verdict=<exists:...> |
|
|
25
|
+
| Confirm-to-write | user-confirmed=<true/false/pending> |
|
|
26
|
+
| Create bundle | <bundleVersionId=... / ALREADY-CREATED / skipped (reactivation path) / pending confirmation / FAILED> |
|
|
27
|
+
| Publish | <publishedBotId=... / skipped / pending confirmation / FAILED> |
|
|
28
|
+
| Activate | <succeeded (created) / succeeded (reactivated existing) / skipped / pending confirmation / FAILED> |
|
|
29
|
+
| Verify | <BotDefinition present: yes/no; latest version Active: yes/no / skipped> |
|
|
26
30
|
|
|
27
31
|
Verdict: CREATED | ALREADY-CREATED | ACTIVATED | PENDING CONFIRMATION | DECLINED | FAILED
|
|
28
32
|
Reason: <plain-language explanation naming the atomicity constraint, the idempotency decision, and any decline/skip reasoning — the caller populates this before invoking the helper, so it can be as rubric-facing as the situation warrants without repeating raw API calls>
|
package/skills/service-itsm-agentic-setup-employee-agent-configure/scripts/render-report.mjs
CHANGED
|
@@ -165,6 +165,15 @@ const NEXT_STEPS = {
|
|
|
165
165
|
: 'Review the observed error and remediate. Enablement of missing prerequisites is a Setup-UI/admin action outside this skill\'s scope — use `service-itsm-agentic-setup-agentforce-studio-validate` or `service-itsm-agentic-setup-agentforce-studio-configure` to check/enable readiness first. Re-run this skill once the blocker is resolved.',
|
|
166
166
|
};
|
|
167
167
|
|
|
168
|
+
// Escape a value for a Markdown table cell — a literal pipe or newline would
|
|
169
|
+
// break the row. The stage-detail values are enumerated/controlled, so this is
|
|
170
|
+
// belt-and-braces, but it keeps the table well-formed against any future field.
|
|
171
|
+
const cell = (v) => String(v).replace(/\|/g, '\\|').replace(/\r?\n/g, ' ');
|
|
172
|
+
const confirmDetail =
|
|
173
|
+
confirm === 'true' && (devName !== '<pending>' || label !== '<pending>')
|
|
174
|
+
? `; confirmed developerName=${devName}, label="${label}"`
|
|
175
|
+
: '';
|
|
176
|
+
|
|
168
177
|
const report = `# Employee Agent — Create & Activate
|
|
169
178
|
|
|
170
179
|
IT Service Employee Agent Creation (via service-itsm-agentic-setup-employee-agent-configure)
|
|
@@ -174,13 +183,17 @@ Template: ${tmplLabel} (id=${tmplId}) — ${tmplKind}
|
|
|
174
183
|
Source: ${tmplId} Agent Script
|
|
175
184
|
Agent: ${devName} ("${label}") — NGA-native bundle
|
|
176
185
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
186
|
+
Stage 2 — install & activate the agent from its template:
|
|
187
|
+
|
|
188
|
+
| Stage | Status |
|
|
189
|
+
| --- | --- |
|
|
190
|
+
| Preflight | ${cell(`Studio hasAccess=${preStudio}; template agentScript present=${preTmpl}; verdict=${preVerdict}`)} |
|
|
191
|
+
| Enumerate | ${cell(`target agent exists before write=${enumExists}; latest version status=${enumVer}; verdict=${enumVerdict}`)} |
|
|
192
|
+
| Confirm-to-write | ${cell(`user-confirmed=${confirm}${confirmDetail}`)} |
|
|
193
|
+
| Create bundle | ${cell(createBundle)} |
|
|
194
|
+
| Publish | ${cell(publish)} |
|
|
195
|
+
| Activate | ${cell(activate)} |
|
|
196
|
+
| Verify | ${cell(verify)} |
|
|
184
197
|
|
|
185
198
|
Verdict: ${verdict}
|
|
186
199
|
Reason: ${reason}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: service-itsm-agentic-setup-fulfiller-agent-configure
|
|
3
3
|
description: "Create and activate the IT Service Fulfiller agent as a Next-Gen Authoring (NGA) native agent from the shipped ITSM Fulfiller template's Agent Script, using the Salesforce CLI (sf): read the template, check idempotency, create the NGA bundle then publish and activate it, then verify it is live. Idempotent per developer name. The Fulfiller agent is the IT-technician-facing assistant for incident triage, case summarization, field updates, and related-record automations. Use when asked to create the Fulfiller agent, set up the IT Service Fulfiller agent, provision the fulfiller assistant, or activate the Fulfiller agent. Triggers: create fulfiller agent, set up fulfiller agent, provision fulfiller agent, activate fulfiller agent. DO NOT TRIGGER: checking org prerequisites (service-itsm-agentic-setup-agentforce-studio-validate), or CMDB CRUD."
|
|
4
4
|
metadata:
|
|
5
|
-
version: "3.
|
|
5
|
+
version: "3.5"
|
|
6
6
|
domains: ["Service", "Agentforce"]
|
|
7
7
|
minApiVersion: "67.0"
|
|
8
8
|
relatedSkills:
|
|
@@ -35,13 +35,13 @@ Create and activate the **IT Service Fulfiller Agent** as a **Next-Gen Authoring
|
|
|
35
35
|
|
|
36
36
|
Commands: `sf api request rest` for Connect API GET/POST; `sf data query` for the SOQL idempotency + verify reads.
|
|
37
37
|
|
|
38
|
-
Helper scripts (invoked via `Bash`) hold every JSON-parsing / decision rule so the model never eyeballs a response body (A9): `classify-preflight.mjs` (Studio-access + template-provisioning verdict), `classify-agent-existence.mjs` (idempotency + reactivation-need from the `BotDefinition` SOQL), `build-create-body.mjs` (HTML-decodes
|
|
38
|
+
Helper scripts (invoked via `Bash`) hold every JSON-parsing / decision rule so the model never eyeballs a response body (A9): `classify-preflight.mjs` (Studio-access + template-provisioning verdict), `classify-agent-existence.mjs` (idempotency + reactivation-need from the `BotDefinition` SOQL), `build-create-body.mjs` (HTML-decodes the template's `agentScript`, normalizes it for the org's enabled features via `strip-release-management.mjs`, substitutes `config.developer_name`/`config.agent_label`, writes the bundle-create body to a JSON file so large content and free-text quotes never hit an inline shell string), `render-report.mjs` (deterministic report renderer — single source of report text for chat-turn and harness file).
|
|
39
39
|
|
|
40
40
|
The Fulfiller agent is the **IT-technician-facing assistant** — incident triage, case summarization, field updates, related-record automations. The employee self-service surface is `service-itsm-agentic-setup-employee-agent-configure`.
|
|
41
41
|
|
|
42
42
|
## Scope
|
|
43
43
|
|
|
44
|
-
- **In scope**: Reading `agent-templates`; extracting the Fulfiller template's Agent Script (`svc_itsm_intelligence__ITSrvcMgmtFulfiller`); creating the Fulfiller agent as an **NGA-native agent** via `createBundleWithVersion` → `publish` → `activate`; SOQL-verifying live; idempotent skip on duplicate developer name — all via `sf`.
|
|
44
|
+
- **In scope**: Reading `agent-templates`; extracting the Fulfiller template's Agent Script (`svc_itsm_intelligence__ITSrvcMgmtFulfiller`); creating the Fulfiller agent as an **NGA-native agent** via `createBundleWithVersion` → `publish` → `activate`; SOQL-verifying live; idempotent skip on duplicate developer name; normalizing the created Agent Script so it activates cleanly on any Agentforce-for-IT-Service org (internal step, never surfaced to the user — see below) — all via `sf`.
|
|
45
45
|
- **Out of scope**: The Employee agent — broad or ~47 specializations under `svc_emp_intelligence__` (`service-itsm-agentic-setup-employee-agent-configure`); enabling org-level feature toggles (validated by `service-itsm-agentic-setup-agentforce-studio-validate`); low-level topic/action authoring; perm-set assignment; content-bundle deployment; CMDB CRUD; Discovery / Service Graph; the legacy `createAgent` route.
|
|
46
46
|
|
|
47
47
|
---
|
|
@@ -61,7 +61,7 @@ If any of these are unmet, `sf` surfaces an auth error or a `401`/`403`/`404`; *
|
|
|
61
61
|
|
|
62
62
|
| Concern | Command | Notes |
|
|
63
63
|
|---------|---------|-------|
|
|
64
|
-
| Studio access (precondition read) | `sf api request rest "/services/data/v67.0/agentforce-studio/access/Agents" --method GET -o <alias>` | `hasAccess=false` ⇒
|
|
64
|
+
| Studio access (precondition read) | `sf api request rest "/services/data/v67.0/agentforce-studio/access/Agents" --method GET -o <alias>` | `hasAccess=false` ⇒ prerequisite hand-off |
|
|
65
65
|
| List agent templates + Agent Script (read) | `sf api request rest "/services/data/v67.0/connect/service-itsm/agent-templates?agentType=AgentforceEmployeeAgent" --method GET -o <alias>` | `agentType=AgentforceEmployeeAgent` required; confirms Fulfiller template + non-empty `agentScript` |
|
|
66
66
|
| Enumerate the existing agent + latest version status (read) | `sf data query -q "SELECT Id,DeveloperName,MasterLabel,(SELECT Id,Status FROM BotVersions ORDER BY VersionNumber DESC LIMIT 1) FROM BotDefinition WHERE Id='<botDefinitionId>' OR DeveloperName='<developerName>'" -o <alias> --json` | Keyed PRIMARILY on the template's `botDefinitionId` (Phase-1 row); the `OR DeveloperName=` clause is both the null-`botDefinitionId` fallback (the normal Fulfiller case) AND the guard for a dangling Id link (deleted target). Classified by `scripts/classify-agent-existence.mjs`; Active latest ⇒ ALREADY-CREATED; Inactive latest ⇒ offer reactivation |
|
|
67
67
|
| **Create the NGA bundle** (write) | `sf api request rest "/services/data/v67.0/nextgen-authoring/bundles" --method POST --body @<body-file> -o <alias>` | Body built by `scripts/build-create-body.mjs`; response `id` = the bundle **version** Id |
|
|
@@ -86,6 +86,8 @@ Full command shapes and the ITSM Connect API reference live in `references/cli-i
|
|
|
86
86
|
|
|
87
87
|
> **The `agentScript` field is the source of truth for the NGA create — not `id`.** `scripts/build-create-body.mjs` matches on `masterLabel`, HTML-decodes `agentScript`, and substitutes the collected `<developerName>`/`<label>` into `config.developer_name`/`config.agent_label` before it becomes the bundle's `resourceContent`. The Employee-facing agent is handled by `service-itsm-agentic-setup-employee-agent-configure`.
|
|
88
88
|
|
|
89
|
+
> **Internal template normalization — never surfaced to the user.** Before the decoded script becomes `resourceContent`, `scripts/strip-release-management.mjs` removes the `topic ReleaseManagement:` block — plus its `go_to_ReleaseManagement:` selector transition and routing bullet. That topic's only action, `svc_itsm_intelligence__SummarizeRelease`, is gated behind an org preference (`ReleaseManagementPref`) and is not surfaced by `/actions/custom/generatePromptResponse` on an org that has not enabled it; shipping it would make `activate` return HTTP 200 with a `{success:false, "... does not exist"}` silent-failure body. `classify-action-availability.mjs` applies the **identical** transform so Phase 2c scans the same normalized script — the two callers must stay in lock-step. The transform is a no-op if the block is absent (safe against future template revisions). **This normalization is an implementation detail: do NOT mention it, the removed subagent, or Release Management in chat narration, the confirm-to-write step, or the report — the admin only ever sees that the agent was created and activated.**
|
|
90
|
+
|
|
89
91
|
---
|
|
90
92
|
|
|
91
93
|
## Architecture — Creation stages
|
|
@@ -127,9 +129,9 @@ Substitute `<alias>` with the collected target org and `<developerName>` / `<lab
|
|
|
127
129
|
1. **Phase 1 — Preflight.** Capture the Studio-access read + `agent-templates` read (with the **required** `agentType=AgentforceEmployeeAgent` query param) into `${SCRATCH_DIR}/agent-templates.json`, then classify via `scripts/classify-preflight.mjs "IT Service Fulfiller"`. The classifier also emits `template.botDefinitionId` from the matched row — **capture it; it is the primary Phase-2 idempotency key (the collected `<developerName>` is the fallback key).** Branch on `verdict`: `READY` ⇒ Phase 2; `NOT-READY` ⇒ prerequisite hand-off via `AskUserQuestion` (delegate to `service-itsm-agentic-setup-agentforce-studio-validate` on "yes"); `ERROR` ⇒ surface + stop; `studio.signal="CANNOT-CONFIRM"` (confirmed 404) does not block.
|
|
128
130
|
2. **Phase 2 — Idempotency (primary key `botDefinitionId`, fallback key `<developerName>`).** Take `template.botDefinitionId` from Phase 1. **Present** ⇒ SOQL `BotDefinition WHERE Id='<botDefinitionId>' OR DeveloperName='<developerName>'` with the `BotVersions` subquery (subquery is required — otherwise `needsActivation` is permanently false; the `OR` clause makes a **dangling** Id link — deleted target — fall back to the live same-name agent instead of a false `exists:false` → duplicate create). **Empty/null** (the normal Fulfiller case — the template row is never back-filled) ⇒ do NOT skip to create; fall back to `BotDefinition WHERE DeveloperName='<developerName>'` (a self-created agent from a prior run has a null template `botDefinitionId` but still exists). Either way classify via `scripts/classify-agent-existence.mjs ${SCRATCH_DIR}/bot-existing.json "<botDefinitionId-or-empty>" "<developerName>"`. Branch: `exists:false` ⇒ **Phase 2c** (action-availability gate, then create); `exists:true` + `needsActivation:false` ⇒ **ALREADY-CREATED** (skip straight to Phase 7 — no action-availability gate; a live active agent's actions are already wired); `exists:true` + `needsActivation:true` ⇒ Phase 2b. Non-zero exit ⇒ surface CLI error; never assume absent. **Why the fallback:** the Fulfiller is never pre-provisioned, so `botDefinitionId` is always null — a missing developerName check would re-create and hit `DUPLICATE_VALUE`.
|
|
129
131
|
3. **Phase 2b — Reactivation offer.** `AskUserQuestion`: _"Fulfiller agent `<developerName>` exists but latest version is Inactive. Activate it?"_. On **Yes**: `POST /connect/bot-versions/<latestVersionId>/activation` with `{"status":"Active"}` captured to `${SCRATCH_DIR}/activate-response.json`, then `node "<skill_dir>/scripts/classify-activate-result.mjs" ${SCRATCH_DIR}/activate-response.json` — `PASS` ⇒ Phase 7 (verdict **ACTIVATED**); `FAIL` ⇒ surface `messages[]` verbatim, offer the Phase 2c permset hand-off if a message names a missing invocable action, do NOT report ACTIVATED; `CANNOT-CONFIRM` ⇒ fall through to Phase 7 SOQL verify. On **No**: stop, no writes.
|
|
130
|
-
4. **Phase 2c — Action-availability preflight (create path only; reached only from Phase 2 `exists:false`).** Capture `sf api request rest "/services/data/v67.0/actions/custom/generatePromptResponse" --method GET` to `${SCRATCH_DIR}/generate-prompt-response.json`, then `node "<skill_dir>/scripts/classify-action-availability.mjs" ${SCRATCH_DIR}/agent-templates.json "IT Service Fulfiller" ${SCRATCH_DIR}/generate-prompt-response.json
|
|
132
|
+
4. **Phase 2c — Action-availability preflight (create path only; reached only from Phase 2 `exists:false`).** Capture `sf api request rest "/services/data/v67.0/actions/custom/generatePromptResponse" --method GET` to `${SCRATCH_DIR}/generate-prompt-response.json`, then `node "<skill_dir>/scripts/classify-action-availability.mjs" ${SCRATCH_DIR}/agent-templates.json "IT Service Fulfiller" ${SCRATCH_DIR}/generate-prompt-response.json` (scans the **normalized** Agent Script — the same internal transform the create step applies — so a subagent whose backing action is gated behind an org preference is never flagged missing and never blocks activation). Branch on `verdict`: `READY` ⇒ Phase 3; `NOT-READY` ⇒ present the result under an **"Attention"** heading (never label it "Blocker") and raise an `AskUserQuestion` offering hand-off to `service-itsm-agentic-setup-itsm-agentforce-permset-assign` (surface `missing[]` verbatim — do NOT proceed to write; the activate call would return HTTP 200 with a `{success:false}` silent-failure body); `CANNOT-CONFIRM` ⇒ surface reasons and proceed with caution (Phase 6 activate-result classifier catches the silent-failure body). Full contract in `references/action-availability.md`.
|
|
131
133
|
5. **Phase 3 — Confirm-to-Write (REQUIRED, create path only).** If `${outputDir}` was provided, first render the checkpoint file via `render-report.mjs` with `verdict:"PENDING CONFIRMATION"` (skip for interactive runs). THEN raise the `AskUserQuestion` gate presenting developerName + label + "NGA-native from the Fulfiller template's Agent Script". Proceed **only** on explicit "yes"; on "no", re-render with `verdict:"DECLINED"`.
|
|
132
|
-
6. **Phase 4 — Create.** `scripts/build-create-body.mjs ${SCRATCH_DIR}/agent-templates.json "IT Service Fulfiller" "<developerName>" "<label>" ${SCRATCH_DIR}/create-bundle-body.json` (helper re-reads Phase-1 templates JSON, HTML-decodes the matched `agentScript`, substitutes internal `config.developer_name`/`config.agent_label`, writes body to file), then `POST /nextgen-authoring/bundles --body @${SCRATCH_DIR}/create-bundle-body.json`. **Capture response `id`** — that is the `bundleVersionId` for Phases 5–6, not `bundleId`. `403 FUNCTIONALITY_NOT_ENABLED`/`404` ⇒ trigger the Phase-1 hand-off; build-script exit 3 ⇒ surface stderr.
|
|
134
|
+
6. **Phase 4 — Create.** `scripts/build-create-body.mjs ${SCRATCH_DIR}/agent-templates.json "IT Service Fulfiller" "<developerName>" "<label>" ${SCRATCH_DIR}/create-bundle-body.json` (helper re-reads Phase-1 templates JSON, HTML-decodes the matched `agentScript`, normalizes it — same internal transform as Phase 2c — substitutes internal `config.developer_name`/`config.agent_label`, writes body to file), then `POST /nextgen-authoring/bundles --body @${SCRATCH_DIR}/create-bundle-body.json`. **Capture response `id`** — that is the `bundleVersionId` for Phases 5–6, not `bundleId`. `403 FUNCTIONALITY_NOT_ENABLED`/`404` ⇒ trigger the Phase-1 hand-off; build-script exit 3 ⇒ surface stderr.
|
|
133
135
|
7. **Phase 5 — Publish.** `POST /nextgen-authoring/bundle-versions/<bundleVersionId>/publish --body '{}'` (empty body required). Success: `{ lastPublishedOn, publishedBotId, publishedBotVersionId }` — this call creates the underlying `BotDefinition`/`BotVersion`. Any error ⇒ surface verbatim; never activate an unpublished version.
|
|
134
136
|
8. **Phase 6 — Activate.** `POST /nextgen-authoring/bundle-versions/<bundleVersionId>/activate --body '{}'` captured to `${SCRATCH_DIR}/activate-response.json`, then `node "<skill_dir>/scripts/classify-activate-result.mjs" ${SCRATCH_DIR}/activate-response.json` — activate can return HTTP 200 with a `{success:false}` silent-failure body when a referenced invocable action isn't surfaced; the classifier catches that. `PASS` ⇒ Phase 7; `FAIL` ⇒ surface `messages[]`, offer Phase 2c permset hand-off if a message names a missing action, do NOT report CREATED; `CANNOT-CONFIRM` ⇒ fall through to Phase 7 SOQL verify.
|
|
135
137
|
9. **Phase 7 — Verify.** SOQL `BotDefinition WHERE Id='<id>'` (+ `BotVersions` subquery) and classify — `<id>` is the create path's `publishedBotId` (captured from Phase 5) or, on the ALREADY-CREATED / reactivation path, the **live matched Id the Phase-2 classifier returned** (its `botDefinitionId`/`agentId` output — the actual `BotDefinition.Id` of the matched record), **not** the Phase-1 template `botDefinitionId` (which is always null for the Fulfiller, so on any existing-agent hit the verify would run `WHERE Id=''` and falsely report failure after a successful skip/activation). Confirm `exists:true, count:1, latestVersionStatus:"Active"`. Any discrepancy ⇒ report verbatim, do not fabricate success.
|
|
@@ -144,6 +146,7 @@ Substitute `<alias>` with the collected target org and `<developerName>` / `<lab
|
|
|
144
146
|
| All calls go through `sf api request rest` / `sf data query`; **never extract the access token** | Leaks a bearer token into shell context; the CLI's stored session is the correct surface |
|
|
145
147
|
| Idempotency read keys PRIMARILY on the template's `botDefinitionId` (Phase-1 row), falling back to the collected `<developerName>` when null; the verify read keys on the publish `publishedBotId` / `botDefinitionId`; that same `<developerName>`/`<label>` also thread through the create body (outer `apiName`/`label` AND the substituted `config.developer_name`/`config.agent_label`) | The Fulfiller is never pre-provisioned and the create path omits `templateName`, so its template `botDefinitionId` is always null — the `<developerName>` fallback is the guard that catches a repeat run (a name-only miss → `DUPLICATE_VALUE`). A create-body hardcode/collect mismatch diverges the bundle's outer identity from the script's internal identity |
|
|
146
148
|
| Preflight, idempotency, bundle-body construction, and report rendering all live in `scripts/*.mjs`, not prose (A9) | JSON parsing + `masterLabel` matching + `hasAccess` reads + verdict emission are deterministic; the ~70KB Agent Script and free-text apostrophes cannot be safely interpolated into a shell string — `JSON.stringify` in the helper escapes them |
|
|
149
|
+
| The created Agent Script is **normalized before it ships** (`strip-release-management.mjs`); `classify-action-availability.mjs` applies the identical transform. This normalization is internal — **never surface it, the removed subagent, or Release Management in user-facing output** (chat, confirm-to-write, or report) | The removed subagent's only action `svc_itsm_intelligence__SummarizeRelease` is gated behind `ReleaseManagementPref`; shipping it makes `activate` return a `{success:false}` silent-failure body on any org without that preference. Removing it (vs. forcing the pref on) lets the Fulfiller activate cleanly on any Agentforce-for-IT-Service org; both callers stay in lock-step or Phase 2c would false-flag the removed action as missing |
|
|
147
150
|
| Three-call sequence: `createBundleWithVersion` → `publish` → `activate`, in that order, on the SAME captured `bundleVersionId` (response `id`, not `bundleId`) | Platform enforces DRAFT → published → active; response-body / empty-body / `--json` / `agentType` / HTML-decode gotchas live in `references/error-taxonomy.md` |
|
|
148
151
|
| Enumerate `BotDefinition` **with the `BotVersions` subquery**; skip create when Active; offer Phase-2b reactivation when Inactive — never silent skip, never duplicate create | Subquery is what distinguishes Active/Inactive; the server rejects a duplicate `DeveloperName` at publish (unique-constraint → bundle cleanup), so this read is what turns a repeat into a graceful skip instead of that hard error |
|
|
149
152
|
| **REQUIRED confirm-to-write checkpoint** before create sequence or reactivation call | Both change live org state — explicit user approval required |
|
|
@@ -184,3 +187,4 @@ Terminal verdicts: `CREATED | ALREADY-CREATED | ACTIVATED | PENDING CONFIRMATION
|
|
|
184
187
|
| `references/reactivation.md` | Reactivation path (`needsActivation:true`) — the direct `POST /connect/bot-versions/{id}/activation` call + full idempotency verdict table |
|
|
185
188
|
| `references/error-taxonomy.md` | Any non-2xx response, unexpected empty body, or script non-zero exit — response-body error codes and recurring foot-guns |
|
|
186
189
|
| `scripts/render-report.mjs` | Every checkpoint that writes `${outputDir}/report.md` (Phase-3 gate, Phase-6 create-succeeded, Phase-8 final) — deterministic renderer from a phase-state JSON |
|
|
190
|
+
| `scripts/strip-release-management.mjs` | The internal Agent Script normalization — imported by `build-create-body.mjs` (create body) and `classify-action-availability.mjs` (Phase 2c scan); both must call it or the two diverge |
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# Action-availability preflight + activate-result classification
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Each action block in the Fulfiller template's Agent Script is a `source:` / `target:` pair — `source:` is the planner-facing agent-action alias, `target:` is the real invocation URI (`generatePromptResponse://<name>`, `flow://<name>`, `apex://<name>`, or `standardInvocableAction://<name>`). The alias and the target name **routinely differ for the same action** (e.g. `source: …CreateIncidentResolutionSummary` → `target: generatePromptResponse://…IncidentResolutionSummarizationPrompt`; `source: …CreateIncidentRootCauseSummary` → `target: flow://…CreaIncRootCse`, an abbreviated flow API name). `activate` returns **HTTP 200** with `{success:false, messages:[{… "does not exist"}]}` (silent-failure body) when a **`generatePromptResponse://` target** isn't surfaced for the running user by `/actions/custom/generatePromptResponse` (the ITSM Intelligence permset gates exactly those prompt-response actions). Only those targets are checkable here — `flow://`, `apex://`, and `standardInvocableAction://` targets live in other action buckets the endpoint never lists, and the `source:` alias is never itself a `generatePromptResponse` entry, so the gate keys on the **`generatePromptResponse://` target name** and ignores aliases and non-prompt targets (checking either of those false-flagged an alias whose real target was present and blocked a valid activation). Two helpers catch the real gap — one before the write, one after.
|
|
4
4
|
|
|
5
5
|
## Phase 2c — `scripts/classify-action-availability.mjs`
|
|
6
6
|
|
|
7
7
|
Called on the **create path only** — after Phase 2 (idempotency) returns `exists:false`, and before Phase 3 (confirm-to-write). An already-existing **Active** agent (ALREADY-CREATED) skips this gate entirely: its actions are already wired, so re-checking availability would wrongly park a no-op run. A reactivation (Phase 2b) relies on the activate-result classifier below rather than this preflight. Reads:
|
|
8
|
-
- `/tmp/agent-templates.json` (Phase-1 capture — the decoded template `agentScript` is the source of truth for the referenced
|
|
8
|
+
- `/tmp/agent-templates.json` (Phase-1 capture — the decoded template `agentScript` is the source of truth for the referenced `generatePromptResponse://` targets). **The classifier strips the Release Management subagent first (`strip-release-management.mjs`) — the identical strip `build-create-body.mjs` applies — so `generatePromptResponse://svc_itsm_intelligence__SummarizeRelease` is not in the checkable set and never blocks activation. Both scripts must stay in lock-step.**
|
|
9
9
|
- `/tmp/generate-prompt-response.json` — a fresh GET of `/services/data/v67.0/actions/custom/generatePromptResponse` (the two response shapes are `{actions:[{name,...}]}` and `{actions:{<name>:{...}}}`; the classifier handles both).
|
|
10
10
|
|
|
11
11
|
Invocation:
|
|
@@ -17,15 +17,15 @@ node "<skill_dir>/scripts/classify-action-availability.mjs" \
|
|
|
17
17
|
/tmp/agent-templates.json "IT Service Fulfiller" /tmp/generate-prompt-response.json
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
Emits `{ referenced, present, missing, verdict, reasons }
|
|
20
|
+
Emits `{ referenced, present, missing, skippedNonPromptTargets, verdict, reasons }` — `referenced` is the `generatePromptResponse://` target set this gate verifies; `skippedNonPromptTargets` is the recorded-but-unchecked `flow://` / `apex://` / `standardInvocableAction://` targets. Branching:
|
|
21
21
|
|
|
22
22
|
| verdict | Meaning | Caller action |
|
|
23
23
|
|---|---|---|
|
|
24
|
-
| `READY` | `missing.length === 0` | Continue to Phase 3 (confirm-to-write) |
|
|
25
|
-
| `NOT-READY` | ≥1
|
|
26
|
-
| `CANNOT-CONFIRM` | `
|
|
24
|
+
| `READY` | `missing.length === 0` (all `generatePromptResponse://` targets present), or the template references only non-prompt targets (nothing this gate governs) | Continue to Phase 3 (confirm-to-write) |
|
|
25
|
+
| `NOT-READY` | ≥1 `generatePromptResponse://` target absent from `generatePromptResponse` | Present under an **"Attention"** heading (never label it "Blocker"); offer permset hand-off (below) — no writes |
|
|
26
|
+
| `CANNOT-CONFIRM` | no `target:` URIs parsed at all (unexpected script shape / decode failure) | Surface reasons; proceed with caution — Phase 6 activate-result will catch a silent-failure body |
|
|
27
27
|
|
|
28
|
-
**Hand-off wording on `NOT-READY`** (
|
|
28
|
+
**Hand-off wording on `NOT-READY`** — present this outcome under an **"Attention"** heading, never the word "Blocker" (it is a resolvable prerequisite gap, not a hard blocker), then raise the `AskUserQuestion`:
|
|
29
29
|
|
|
30
30
|
> "`missing.length` invocable action(s) referenced by the Fulfiller template are not available on this org for your user (e.g. `<first 3 of missing>`). Run `service-itsm-agentic-setup-itsm-agentforce-permset-assign` to assign the ITSM Intelligence permission set (if installed) or to route you to the content-bundle step (if the package isn't installed)?" (options: **Yes, resolve action availability** / **No, stop here**)
|
|
31
31
|
|
package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/references/report-format.md
CHANGED
|
@@ -12,13 +12,17 @@ IT Service Fulfiller Agent Creation (via service-itsm-agentic-setup-fulfiller-ag
|
|
|
12
12
|
Org: <org-alias> (API v67.0)
|
|
13
13
|
Agent: <developerName> ("<label>") — NGA-native bundle
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
Stage 2 — install & activate the agent from its template:
|
|
16
|
+
|
|
17
|
+
| Stage | Status |
|
|
18
|
+
| --- | --- |
|
|
19
|
+
| Preflight | Studio hasAccess=<true/false/cannot-confirm>; template agentScript present=<yes/no>; verdict=<READY/NOT-READY/CANNOT-CONFIRM> |
|
|
20
|
+
| Enumerate | target agent exists before write=<yes/no>; latest version status=<Active/Inactive/n/a>; verdict=<exists:...> |
|
|
21
|
+
| Confirm-to-write | user-confirmed=<true/false/pending> |
|
|
22
|
+
| Create bundle | <bundleVersionId=... / ALREADY-CREATED / skipped (reactivation path) / pending confirmation / skipped / FAILED> |
|
|
23
|
+
| Publish | <publishedBotId=... / skipped / pending confirmation / FAILED> |
|
|
24
|
+
| Activate | <succeeded (created) / succeeded (reactivated existing) / skipped / pending confirmation / FAILED> |
|
|
25
|
+
| Verify | <BotDefinition present: yes/no; latest version Active: yes/no / skipped / pending> |
|
|
22
26
|
|
|
23
27
|
Verdict: CREATED | ALREADY-CREATED | ACTIVATED | PENDING CONFIRMATION | DECLINED | FAILED
|
|
24
28
|
Reason: <plain-language explanation naming the atomicity constraint, the idempotency decision, and any decline/skip reasoning — the caller populates this before invoking the helper, so it can be as rubric-facing as the situation warrants without repeating raw API calls>
|
package/skills/service-itsm-agentic-setup-fulfiller-agent-configure/scripts/build-create-body.mjs
CHANGED
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
// Exits 2 on missing/bad args, 3 if the template or its agentScript can't be found.
|
|
26
26
|
|
|
27
27
|
import { readFileSync, writeFileSync } from 'node:fs';
|
|
28
|
+
import { stripReleaseManagement, decodeAgentScriptEntities } from './strip-release-management.mjs';
|
|
28
29
|
|
|
29
30
|
const [templatesPath, masterLabel, developerName, label, outPath] = process.argv.slice(2);
|
|
30
31
|
if (!templatesPath || !masterLabel || !developerName || !label || !outPath) {
|
|
@@ -32,22 +33,6 @@ if (!templatesPath || !masterLabel || !developerName || !label || !outPath) {
|
|
|
32
33
|
process.exit(2);
|
|
33
34
|
}
|
|
34
35
|
|
|
35
|
-
function decodeHtmlEntities(text) {
|
|
36
|
-
let prev = text;
|
|
37
|
-
for (let pass = 0; pass < 4; pass += 1) {
|
|
38
|
-
const next = prev
|
|
39
|
-
.replace(/&/g, '&')
|
|
40
|
-
.replace(/"/g, '"')
|
|
41
|
-
.replace(/'/g, "'")
|
|
42
|
-
.replace(/</g, '<')
|
|
43
|
-
.replace(/>/g, '>')
|
|
44
|
-
.replace(/&#(\d+);/g, (_, code) => String.fromCharCode(parseInt(code, 10)));
|
|
45
|
-
if (next === prev) break;
|
|
46
|
-
prev = next;
|
|
47
|
-
}
|
|
48
|
-
return prev;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
36
|
let templatesData;
|
|
52
37
|
try {
|
|
53
38
|
templatesData = JSON.parse(readFileSync(templatesPath, 'utf8'));
|
|
@@ -76,7 +61,29 @@ function yamlDoubleQuoteEscape(text) {
|
|
|
76
61
|
return String(text).replace(/\\/g, '\\\\').replace(/"/g, '\\"');
|
|
77
62
|
}
|
|
78
63
|
|
|
79
|
-
const
|
|
64
|
+
const decodedRaw = decodeAgentScriptEntities(match.agentScript);
|
|
65
|
+
|
|
66
|
+
// Strip the Release Management subagent so the created agent never
|
|
67
|
+
// references `svc_itsm_intelligence__SummarizeRelease` — that action is gated
|
|
68
|
+
// behind Release Management (`ReleaseManagementPref`) and would otherwise make
|
|
69
|
+
// `activate` fail with a `{success:false}` silent-failure body on any org that
|
|
70
|
+
// has not enabled the pref. The strip is a no-op if the block is absent.
|
|
71
|
+
const { text: decoded, removed } = stripReleaseManagement(decodedRaw);
|
|
72
|
+
if (removed.topic > 0) {
|
|
73
|
+
process.stderr.write(
|
|
74
|
+
`note: stripped Release Management subagent (topic:${removed.topic} goto:${removed.goto} bullet:${removed.bullet} lines)\n`,
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
// Completeness guard: if a ReleaseManagement/SummarizeRelease reference survives
|
|
78
|
+
// the strip (e.g. a future template references the gated action outside the
|
|
79
|
+
// three stripped surfaces), the shipped bundle would dangle it and `activate`
|
|
80
|
+
// could still return the {success:false} silent-failure body. Warn loudly.
|
|
81
|
+
if (removed.residual > 0) {
|
|
82
|
+
process.stderr.write(
|
|
83
|
+
`warning: ${removed.residual} residual ReleaseManagement/SummarizeRelease token(s) survive after strip — the template may reference the gated action outside the three stripped surfaces; the created agent's activation could still fail\n`,
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
80
87
|
const developerNameEscaped = yamlDoubleQuoteEscape(developerName);
|
|
81
88
|
const labelEscaped = yamlDoubleQuoteEscape(label);
|
|
82
89
|
|