Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

SandboxApplyPatchTool splits patch lines with str.splitlines(), so a form feed or 
 in a line breaks Add/Update File

Open Beginner friendly
#5,349 2 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

@abhishekacharya200 is already working on this.

Since Oct 11, 2026.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
78/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
python
Domain
tooling

Research direction

Start with _parse_apply_patch_input in src/agents/sandbox/capabilities/tools/apply_patch_tool.py and compare its line splitting with the Lark grammar, which ends lines at LF. Then inspect agents/apply_diff.py, which also splits on "\n". Verify that Add File content preserves the listed characters and that the Update File repro changes const n = 1 to const n = 2.

Written by the indexing model from the issue text.

Description

Please read this first
  • Have you read the docs? Agents SDK docs
  • Have you searched for related issues? Others may have faced similar issues.
Describe the bug

SandboxApplyPatchTool parses the freeform patch with raw_input.splitlines() (_parse_apply_patch_input in src/agents/sandbox/capabilities/tools/apply_patch_tool.py). str.splitlines() also breaks at \v, \f, \x1c-\x1e, \x85, \u2028, \u2029 and a bare \r. The tool's own Lark grammar only ends a line at LF: add_line: "+" /(.*)/ LF and change_line: ("+" | "-" | " ") /(.*)/ LF. agents/apply_diff.py also splits on "\n".

So a patch the grammar accepts is rejected when any line contains one of those characters. For example, a form feed between sections of a Python or C file, or a \u2028 inside a JS string or pasted text:

  • *** Add File: fails with Invalid Add File line: <rest of the line>, and the file is not created.
  • *** Update File: turns the rest of the line into an unprefixed diff line, and apply_diff fails with Invalid Line: <rest of the line>. This happens even when the character is only in a context line.

Splitting the envelope on "\n", as the grammar and apply_diff do, makes both cases work. In the repro below, the same hunk applies cleanly once it is split that way.

Debug information
  • Agents SDK version: main at 125efa0 (0.23.1)
  • Python version: 3.12.3
  • Operating system: Linux
  • Model and model provider: n/a (the parser is called directly)
  • Does the issue reproduce with the latest Agents SDK release? Yes. v0.23.1 has the same splitlines() call and grammar; I ran the repro on main (125efa0).
  • Does the issue occur consistently or intermittently? Consistently
'+page one\x0cpage two' -> Invalid Add File line: page two
'+const s = "a\u2028b";' -> Invalid Add File line: b";
'+x\x85y' -> Invalid Add File line: y
parsed diff: '@@\n const s = "a\nb";\n-const n = 1;\n+const n = 2;\n'
apply_diff -> Invalid Line: b";
'const s = "a\u2028b";\nconst n = 2;\n'
Repro steps
from agents.apply_diff import apply_diff
from agents.sandbox.capabilities.tools import SandboxApplyPatchTool
from agents.testing import scripted_sandbox_session

tool = SandboxApplyPatchTool(session=scripted_sandbox_session())

# 1. Add File: the grammar's add_line is "+" /(.*)/ LF, so these lines are valid input.
for line in ["+page one\fpage two", '+const s = "a\u2028b";', "+x\x85y"]:
    patch = f"*** Begin Patch\n*** Add File: notes.txt\n{line}\n*** End Patch\n"
    try:
        tool.parse_custom_input(patch)
        print(ascii(line), "-> parsed")
    except ValueError as e:
        print(ascii(line), "->", e)

# 2. Update File whose context line contains U+2028.
original = 'const s = "a\u2028b";\nconst n = 1;\n'
patch = (
    "*** Begin Patch\n*** Update File: app.js\n@@\n"
    ' const s = "a\u2028b";\n-const n = 1;\n+const n = 2;\n*** End Patch\n'
)
(op,) = tool.parse_custom_input(patch)
print("parsed diff:", ascii(op.diff))
try:
    apply_diff(original, op.diff)
except ValueError as e:
    print("apply_diff ->", e)

# The same hunk, split on "\n" only, applies cleanly.
print(ascii(apply_diff(original, '@@\n const s = "a\u2028b";\n-const n = 1;\n+const n = 2;\n')))
Expected behavior

The three Add File patches create files whose content keeps the form feed, \u2028 and \x85. The Update File patch changes const n = 1; to const n = 2;, which is what apply_diff produces when the hunk is split on "\n" only.

Dominant language
Python
Stars
29.9k
Forks
4.8k
Avg merge
1d 3m
Merged PRs (30d)
213

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from openai/openai-agents-python

All issues in openai/openai-agents-python

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.