Skip to content

v0.0.2

Choose a tag to compare

@github-actions github-actions released this 12 Nov 09:10
· 41 commits to master since this release
39280ed

[0.0.2] - 2026-11-12

Added

  • The rpcCommits option, off by default. When a host turns it on, because it confirms each change on its own screen before it calls the RPC, the six commit tools are also tools RPC methods (write, send, share, delete, export and admin), so a script can commit a plan with { planId }. Plans stay single-use and bound to their session, agent and account, and access still decides each commit: at "ask-changes" the RPC refuses it. With the option off nothing changes: a commit method answers rpc.method_not_found.

  • Status names each interactive account's signed-in email (when Google has verified it) and Workspace domain (Google's hd; absent for a consumer account), read from the id_token of the sign-in and of each refresh, only when its claims check out: iss is Google's, aud is the OAuth client the sign-in used, and exp has not passed. gws_status and the status RPC carry them; /gws-status and the status dialog do not show them. A sign-in from before this release shows them once a token refresh returns an id_token, or after signing in again.

  • Status shows whether rpcCommits is on: rpcCommits in gws_status and the status RPC, and a Script commits row in /gws-status and the status dialog. When it is on, the row, gws_status (rpcCommitsUnguardedAgents) and each commit method's describe description name the agents without the default rules, whose scripts commit without asking; the status RPC names them in unguardedAgents.

  • calendar.today, a read-only method for Jelly's calendar, on an RPC named after the package (@joe-broadhead/opencode-gws), where Jelly calls a view's methods. It takes {} and answers { account, at, state, events }: today's entries on one account's primary calendar (the implicit default account, or else the first account that enables calendar), today being midnight to midnight in that calendar's own time zone, at most 50, not yet ended, each with its id, title, start, end, allDay, location and https links only. It reads through the plugin's own read path with the account's sign-in, never writes, never downloads gws, and returns no descriptions or guests. A reading is kept in memory for a minute, and when a later read fails its events of the same day come back as stale; an answer stays within 60 KB of JSON (Jelly refuses one over 64 KB) by leaving out its latest-starting events, which the audit counts as omitted on a calendar.today record; a read that takes more than eight seconds is abandoned; with nothing kept, it fails with the plugin's code, AUTH_REQUIRED when the account must sign in, or the new CALENDAR_UNAVAILABLE when no account enables calendar.

  • The jelly declaration names it: rpc declares calendar.today read-only under the existing gws.read permission, a Today Home tile (views/calendar.html, a sealed page with only the rpc grant) calls it, and nativeData points Jelly's native calendar at that tile's read (In Jelly).

Fixed

  • A commit's audit record carries caller: "rpc" when a script made it, as a script's reads and plans already did.

Known limits

  • Platforms. macOS (arm64, x64) and Linux (glibc, arm64, x64) only. Windows and musl have no release binary, so the tools refuse with GWS_UNAVAILABLE unless binary.path names a gws 0.22.5 executable.
  • Operations. The tools are the operations in the manifest generated from the pinned gws 0.22.5. A method that a later gws adds arrives with a plugin release, and gws_catalog lists only the manifest.
  • Services the default sign-in leaves out. Keep needs domain-wide delegation that a Workspace admin sets up, admin reports need a Workspace admin account, and Model Armor cannot run. A method that only a Chat app or a Classroom add-on can run (appOnly) fails with AUTH_SCOPE_MISSING under a Google sign-in.
  • Unverified OAuth apps. An External client left in Testing shows unverified-app warnings, and its refresh tokens expire after 7 days, so each account signs in again weekly.
  • A cancelled commit may have been applied. CANCELLED means the call stopped while gws ran. Check the state with gws_read before planning the change again.
  • Asks need an answerer. At access: "ask-changes", opencode run and scripts cannot answer a prompt, so a commit there needs an allow rule for it, or access: "all".
  • Output and time limits. A result that is too large stops with OUTPUT_LIMIT, and a slow call with TIMEOUT. Narrow the request with fields, a smaller page size, maxPages or maxItems.
  • Tested hosts. Tested on OpenCode 2.2.3, 2.2.4, 2.2.5 and 2.2.6. A later 2.2 release loads, and /gws-status marks it untested.
  • Audit lines can drop. The audit log is written off the call path, with a 100 ms budget per line. A write that stalls past it is abandoned: its line and any queued behind it are lost. The call's result is not affected. The sink then stops writing until the plugin reloads, and /gws-status shows that some audit records could not be saved.
  • Updates are not automatic for a Git install, and opencode plugin update and opencode plugin check do not work on one: to move to a newer release, remove the old entry and add the new tag.