anomalyco / anomalyco/opencode

bug: undefined in v1 permission metadata breaks GET /permission

Open
#38,912 1 comment 0 reactions 1 assignee View on GitHub

@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:34path
  • packages/opencode/src/tool/grep.ts:45path, include
  • packages/opencode/src/tool/webfetch.ts:46timeout
  • packages/opencode/src/tool/websearch.ts:125numResults, 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
  1. Configure permissions to ask.
  2. Call glob without the optional path, or apply any ordinary patch with apply_patch.
  3. 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

Open the contributing guide

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.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.