You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
My contribution adds a new instruction, prompt, agent, skill, workflow, or canvas extension file in the correct directory.
The file follows the required naming convention.
The content is clearly structured and follows the example format.
I have tested my instructions, prompt, agent, skill, workflow, or canvas extension with GitHub Copilot.
I have run npm start and verified that README.md is up to date.
I am targeting the main branch for this pull request.
Description
Summary
Adds the sap-cloud-integration skill (SAP Cloud Integration / CPI runtime knowledge) and the SAP Integration Suite Copilot agent, which delegates CPI questions to it.
This reworks the submission after the feedback on #6364, which said the earlier version was "a short persona prompt and broad checklist" with no example of what it gets right that a capable model would miss. The new version is a skill with four reference files of CPI runtime behavior:
Groovy script API: streaming body access, MPL properties vs. custom header properties vs. gated attachments, SecureStoreService, ValueMappingApi
Header vs. exchange property scope: ProcessDirect, JMS (Transfer Exchange Properties, 4 MB limit), HTTP receiver Request Headers (none by default), Allowed Header(s), SAP_* / Camel* names the runtime reads
Exception Subprocess outcomes: End → Completed, Error End → Failed, Escalation End → Escalated; SAP_MessageProcessingLogCustomStatus; CamelExceptionCaught with AhcOperationFailedException / OsciException; JMS retry with SAPJMSRetries (Non-Exclusive queues)
MPL error → cause → check: SFTP, HTTP/OAuth/certificates (including SAP_DisableMonitoringHeaders for unexplained HTTP 400), Cloud Connector, IDoc, OData, SOAP, AS2
Every behavior claim is cross-checked against the SAP Help Portal source in SAP-docs/btp-integration-suite. references/sap-documentation-index.md links each topic to the SAP page it comes from. Author: SAP integration architect with 20+ years on SAP PI/PO and Integration Suite.
Evaluation: same model, with and without the skill
Environment: VS Code 1.145.3, GitHub Copilot Chat 0.33.1, Agent mode, model Copilot Fusion (auto-routed to gpt-6-luna). Each prompt ran in a new chat, first in an empty workspace (plain), then in a workspace containing only .github/skills/sap-cloud-integration (skill). Screenshots below.
#
Prompt
Without skill
With skill
1
"In the Exception Subprocess I need the receiver's HTTP status and error body."
❌ Checks for org.apache.camel.component.http.HttpOperationFailedException with instanceof. CPI's HTTP receiver throws org.apache.camel.component.ahc.AhcOperationFailedException (SAP script example), so the script never matches and always throws.
✅ Reads CamelExceptionCaught, compares by class name to AhcOperationFailedException as SAP's example does, extracts getStatusCode(), getStatusText(), getResponseBody(), and notes the OData V2 difference. Copilot shows it read error-handling-reliability.md.
2
"Write a Groovy script that logs the full payload for every message to the MPL."
⚠️ Attaches the payload unconditionally to every message's MPL, with a general caution only.
✅ Same script, but the attachment is gated by a property fed from an externalized LOG_PAYLOAD flag, with a tenant test (flag off → no attachment) and storage/PII guidance.
3
"My Exception Subprocess … ends with an End event. Support says failed messages don't show up as failed. Why?"
⚠️ Correct main fix (Error End).
✅ Also: Escalation End for status Escalated, CamelHttpResponseCode so synchronous callers don't get HTTP 200, and SAP_MessageProcessingLogCustomStatus when the error is handled on purpose, so support can filter by Custom Status.
Where the skill did not add much: for "property lost over JMS", both answers proposed copying it into a header (the skill only added the Transfer Exchange Properties caution). For "IDoc status 56", the plain answer was already good. That test exposed an overly narrow line in the skill, which I corrected before this submission.
Screenshots: with and without the skill (click to expand)
Without skill — #1 HTTP status in Exception Subprocess
With skill — #1 HTTP status in Exception Subprocess
Vally currently lints SKILL.md content. Agent files were detected but skipped:
Full linter output
### Linting skills/sap-cloud-integration
✅ sap-cloud-integration (2/2 checks passed)
✓ [spec-compliance] All 1 skill(s) are spec-compliant.
✓ spec-compliance: All spec checks passed.
✓ [valid-refs] All file references across 1 skill(s) are valid.
✓ valid-refs: All file references resolve to existing files within the skill directory.
1 skill(s) linted, 1 passed
### Agent files detected (not linted by vally)
ℹ️ Vally currently lints SKILL.md content. Agent files were detected but skipped:
agents/sap-integration-suite-copilot.agent.md
Risk tier:merge-risk:medium — New or substantially changed resource without privileged execution Required to merge: passing submission-gate checks plus 1 approval from reviewers with write access.
Why this tier
Adds 8 file(s), e.g. agents/sap-integration-suite-copilot.agent.md
Adds an SAP Integration Suite agent to the repository’s Copilot agent collection, with guidance for integration development, review, and troubleshooting.
Changes:
Defines SAP-focused scope, working practices, accuracy rules, and handoffs for reviews and test generation.
Adds the agent to the catalog with VS Code and VS Code Insiders installation links.
File
Description
docs/README.agents.md
Lists the new agent and installation links.
agents/sap-integration-suite-copilot.agent.md
Defines the SAP Integration Suite agent and its workflows.
Thanks, agreed. Generated code no longer includes author credit or URLs; existing authorship/license notices are preserved. Resource-level author credit (line 19) is unchanged.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
The reason will be displayed to describe this comment to others. Learn more.
🔵 Needs a closer look
The agent’s SAP-specific guidance remains too limited, with generic capability lists and checklists needing replacement by a concrete CPI workflow, runtime constraints, and expected results.
No open issues 🎉
1 previously missed issue
In code that hasn't changed since last review
Replace the PR template with Copilot evaluation evidence
agents/sap-integration-suite-copilot.agent.md:17
The PR description is still an unfilled template and provides no realistic usage scenario or evaluation results, so maintainers cannot assess whether this agent works in Copilot as intended. The repository's review criteria ask for validation evidence; please document a representative CPI request, the Copilot environment, and expected versus observed results, including the review and test-case handoffs. A manual evaluation is sufficient; tenant deployment is not required.
Certificate-trust guidance tightened: the TLS test’s presented chain is now treated as unauthenticated input. The skill requires obtaining CA certificates from an independent source and matching SHA-256 fingerprints before upload (including before using the TLS test’s Add to keystore), trusting CAs rather than leaf certificates, and never disabling certificate validation.
Memory guidance tightened per SAP’s Script API docs: scripts now check message.getBodySize() before any getBody(String) (SAP warns String/byte[] conversion can cause OOM), payload attachments are both flag-gated and size-capped, the 1 GB/24 h MPL attachment limit is documented, and line-by-line reading is limited to line-delimited formats. Sources: [Read and Modify Message Header, Message Body, and Exchange Properties]
The reason will be displayed to describe this comment to others. Learn more.
🟡 Changes recommended
The payload-size guard accepts getBodySize() values of -1, allowing unknown-size bodies to bypass the logging cap and potentially attach arbitrarily large payloads.
The reason will be displayed to describe this comment to others. Learn more.
Thanks for revising the SAP Integration Suite contribution. The updated status rule now distinguishes deployment from a confirmed tenant test, and the PR description documents three manual GitHub Copilot comparisons with observed results. The runtime guidance on Exception Subprocess status, AhcOperationFailedException, and JMS retry behavior is backed by linked SAP sources. Please continue to keep the tenant-testing status explicit when this agent generates answers.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request Checklist
npm startand verified thatREADME.mdis up to date.mainbranch for this pull request.Description
Summary
Adds the
sap-cloud-integrationskill (SAP Cloud Integration / CPI runtime knowledge) and the SAP Integration Suite Copilot agent, which delegates CPI questions to it.This reworks the submission after the feedback on #6364, which said the earlier version was "a short persona prompt and broad checklist" with no example of what it gets right that a capable model would miss. The new version is a skill with four reference files of CPI runtime behavior:
SecureStoreService,ValueMappingApiSAP_*/Camel*names the runtime readsSAP_MessageProcessingLogCustomStatus;CamelExceptionCaughtwithAhcOperationFailedException/OsciException; JMS retry withSAPJMSRetries(Non-Exclusive queues)SAP_DisableMonitoringHeadersfor unexplained HTTP 400), Cloud Connector, IDoc, OData, SOAP, AS2Every behavior claim is cross-checked against the SAP Help Portal source in SAP-docs/btp-integration-suite.
references/sap-documentation-index.mdlinks each topic to the SAP page it comes from. Author: SAP integration architect with 20+ years on SAP PI/PO and Integration Suite.Evaluation: same model, with and without the skill
Environment: VS Code 1.145.3, GitHub Copilot Chat 0.33.1, Agent mode, model Copilot Fusion (auto-routed to gpt-6-luna). Each prompt ran in a new chat, first in an empty workspace (plain), then in a workspace containing only
.github/skills/sap-cloud-integration(skill). Screenshots below.org.apache.camel.component.http.HttpOperationFailedExceptionwithinstanceof. CPI's HTTP receiver throwsorg.apache.camel.component.ahc.AhcOperationFailedException(SAP script example), so the script never matches and always throws.CamelExceptionCaught, compares by class name toAhcOperationFailedExceptionas SAP's example does, extractsgetStatusCode(),getStatusText(),getResponseBody(), and notes the OData V2 difference. Copilot shows it readerror-handling-reliability.md.LOG_PAYLOADflag, with a tenant test (flag off → no attachment) and storage/PII guidance.CamelHttpResponseCodeso synchronous callers don't get HTTP 200, andSAP_MessageProcessingLogCustomStatuswhen the error is handled on purpose, so support can filter by Custom Status.Where the skill did not add much: for "property lost over JMS", both answers proposed copying it into a header (the skill only added the Transfer Exchange Properties caution). For "IDoc status 56", the plain answer was already good. That test exposed an overly narrow line in the skill, which I corrected before this submission.
Screenshots: with and without the skill (click to expand)
Without skill — #1 HTTP status in Exception Subprocess
With skill — #1 HTTP status in Exception Subprocess
Without skill — #2 Payload logging
With skill — #2 Payload logging
Without skill — #3 End event in Exception Subprocess
With skill — #3 End event in Exception Subprocess
Without skill — Property lost over JMS
With skill — Property lost over JMS
Without skill — IDoc status 56
With skill — IDoc status 56 (before the IDoc correction)
Changes since the first review