mirror of
https://github.com/lobehub/lobehub.git
synced 2026-09-20 04:56:13 +08:00
150f3fd8e1
* ✨ feat(acceptance): run each Task's Acceptance inside its own run A Task's Acceptance could only ever be evidenced by a text-only turn after the run finished, so every delivery landed as prose no matter how visual the criterion was. - goal-dispatched Tasks are no longer forbidden from running their Acceptance - the evidence tool resolves the run from its own operation, so a main run (which has no parentOperationId) can submit at all - listCriteria lets a builder read criterion ids that are minted at run start - the post-run evidence turn is skipped once in-run evidence exists - screenshot/video evidence must reference a real artifact, never prose - the browser screenshot is stored as a file and exposed on state.images, matching what the heterogeneous pipeline already does for tool_result images Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * 🐛 fix(browser): name the stored screenshot id in the tool result `state` reaches the model as image parts, not text, so a builder could see its own screenshot without ever learning the file id it has to cite. Also skip the upload when the capture itself failed, and map the media type to a real filename extension. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * 🐛 fix(acceptance): address Codex review on the in-Task evidence path - listCriteria waits out the fire-and-forget plan instantiation instead of answering NO_ACCEPTANCE_PLAN to a builder that asks first thing - the post-run turn is skipped only when every required criterion (and each evidence type it declares) is already covered, not on the first row - the stored screenshot URL replaces dataUrl as the renderable field, so a server-proxied capture still shows in chat - the screenshot file is created under the resolved content workspace Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * 🐛 fix(acceptance): let a caption ride alongside a cited artifact Requiring exactly one of content/documentId/fileId made a live builder that had captured a screenshot AND wanted to describe it get rejected; it then dropped the fileId and resubmitted prose with the file id written into the text — the text-only outcome this path exists to prevent. Only the two references are mutually exclusive now. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * 🐛 fix(device-gateway): surface a device failure that carries no content A device that fails with nothing to say — an api it has no handler for, a handler that threw before writing output — reports `content: ''`, and `typeof '' === 'string'` short-circuited the error fallback. The failure then reached the model as an empty, successful-looking result: observed live as a builder calling `screenshot` fifteen times over eight minutes against a device with no browser handler, reading nothing back each time while the device log recorded FAIL for every one. Every other failure path in this client puts the failure text in `content`. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>