anomalyco / anomalyco/opencode
bug: undefined in v1 permission metadata breaks GET /permission
@rekram1-node is already working on this.
Since Jul 26, 2026.
- Dominant language
- TypeScript
- Stars
- 209k
- Forks
- 27.5k
- PR merge metrics
- PR metrics pending
Description
Description
Five v1 tools write absent optional inputs into permission metadata as undefined. Encoding the GET /permission response then fails, so one pending request makes the entire listing unreadable. Reported as HTTP 400 on v1.17.18, still present on dev at 7534d235.
Flat:
packages/opencode/src/tool/glob.ts:34—pathpackages/opencode/src/tool/grep.ts:45—path,includepackages/opencode/src/tool/webfetch.ts:46—timeoutpackages/opencode/src/tool/websearch.ts:125—numResults,livecrawl,type,contextMaxCharacters
Nested: packages/opencode/src/tool/apply_patch.ts:201 sets movePath: change.movePath inside metadata.files[], undefined for every add, delete, and non-move update.
Writing path: params.path creates the key holding undefined instead of omitting it. Metadata is Schema.Record(Schema.String, Schema.Unknown), and Unknown encodes through Schema.Json, whose guard rejects undefined and recurses into objects and arrays:
Expected JSON value, got undefined
at [0]["metadata"]["path"]
Expected JSON value, got [{"filePath":"a.ts","type":"update","patch":"Index: a.ts","movePath":undefined}]
at [0]["metadata"]["files"]
The fix needs two parts. Strip undefined where the pending request is built at packages/opencode/src/permission/index.ts:92 for the four flat tools, and omit movePath at its construction site, since a top level strip cannot reach inside metadata.files[]. Neither half alone is sufficient; I checked by encoding Schema.Array(PermissionV1.Request) with both metadata shapes.
v1 counterpart of #37650. Originally reported by @su-351917 in #38617 and in https://github.com/anomalyco/opencode/issues/37650#issuecomment-5066496918.
Happy to open a PR.
OpenCode version
v1.17.18 as reported; code confirmed present on dev at 7534d235
Steps to reproduce
- Configure permissions to ask.
- Call
globwithout the optionalpath, or apply any ordinary patch withapply_patch. - While the permission is pending, request
GET /permission.
The endpoint fails to encode its response instead of returning the pending list.
Operating System
Linux, as reported by @su-351917
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.