mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-21 08:22:20 +02:00
## Thinking Path > - Paperclip is the open source app people use to manage AI agents for work. > - Agents use the API fallback when dedicated tools cannot express an operation. > - Large responses can be read in bounded text windows. > - The declared schema rejects windows larger than 24576 bytes. > - The runner hid the rejected field behind a generic semantic tool error. > - This pull request returns safe schema locations and the accepted byte range. > - Agents can correct a call without guessing or changing route permissions. ## Linked Issues or Issue Description Refs: #16868, which added repair guidance for task monitor arguments. **What happened?** A native call_api request with responseText.limitBytes set to 60000 returned invalid_tool_call with no field or size guidance. The declared 4..24576 byte range already matches the server validator. The missing repair guidance is in the runner bridge. **Expected behavior** Reject invalid input before dispatch. Show bounded schema locations and the accepted window range. Do not echo submitted values or unknown field names. A corrected request can reuse the rejected call ID. **Steps to reproduce** 1. Use the generated call_api tool contract to request a GET text window with limitBytes 60000. 2. Read the semantic tool error. Before this fix, it contains only a generic rejection. 3. Retry with limitBytes 16000. The corrected call must be admitted. **Paperclip version or commit** Reproduced on master5739a53f5f. **Deployment mode** Built from source. This affects the native runner bridge. ## What Changed - Add call_api to the existing provider-safe schema guidance path. - Name the text-window byte range and pagination field. - Exercise the actual generated production schema through the provider bridge and its error result. - Keep private values, unknown property names, authorization errors and response-size limits unchanged. - Document the response window and repair behavior. ## Verification - Red: api_window_rejection_explains_limits_and_allows_corrected_call failed on master because the provider error did not name responseText.limitBytes. - Green: the same regression passes with a corrected same-ID call, unknown-key privacy checks and unchanged authorization rejection. - Passed: the existing runner-api.test.ts suite, 1935 tests, including server window validation before dispatch. - Passed: all 394 Runner core Rust unit tests, cargo fmt --check and the generated protocol manifest check. The focused test also passed after extraction into its own Rust test module. - Greptile: 5/5 with no actionable issues on the final head95d65e1646. - The first CI release-registry run found that a compile-time test fixture was outside the release-cache input set. The fixture now reads the same generated schema at test runtime. The Rust regression and all 10 runner-release-crate-cache tests pass after that repair. - This pure error mapping adds no dependency calls, provider retries or network work. No live provider or staging deployment was needed. - Full current-head CI passed, including repository typecheck, tests, build, Runner verification, canary and browser suites. At95d65e1646there are 56 successful and four skipped checks. The separate Paperclip Review bot completed with a neutral check and a 5/5 static assessment with no findings. It did not run current-head Rust, full repository or live-provider tests; its older local cache run is not counted as current-head test evidence. No check remains pending or failed. No local full-suite or full-build pass is claimed. ## Risks - Feedback must not disclose submitted values. The regression checks private values and unknown field names, a 512-byte bound and unchanged generic authorization errors. - Guidance names the current byte range. The regression uses the generated production schema so a contract change must keep this repair guidance accurate. ## Model Used OpenAI Codex, GPT-6 family, with reasoning, tool use and code execution. The exact runtime model suffix and context window are not exposed to this session. ## Checklist - [x] I have included a thinking path that traces from project context to this change - [x] I have specified the model used (with version and capability details) - [x] I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work - [x] I have searched GitHub for duplicate or related PRs and linked them above - [x] I have either (a) linked existing issues with `Fixes: #` / `Closes #` / `Refs #` OR (b) described the issue in-PR following the relevant issue template - [x] I have not referenced internal/instance-local Paperclip issues or links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip` URLs) - [x] My branch name describes the change (e.g. `docs/...`, `fix/...`) and contains no internal Paperclip ticket id or instance-derived details - [x] I have run tests locally and they pass - [x] I have added or updated tests where applicable - [x] I have updated relevant documentation to reflect my changes - [x] I have considered and documented any risks above - [x] All Paperclip CI gates are green - [x] Greptile is 5/5 with no open P2s, recommendations, or follow-ups - [x] I will address all Greptile and reviewer comments before requesting merge --------- Co-authored-by: Paperclip <noreply@paperclip.ing>