opencode-reviewer 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -12
- package/dist/tui.js +1741 -934
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -13,7 +13,7 @@ This plugin is meant to enable you to run sessions with less frequent input in a
|
|
|
13
13
|
|
|
14
14
|

|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Verified with OpenCode 1.18.35 on Linux.
|
|
17
17
|
|
|
18
18
|
## Install and config
|
|
19
19
|
|
|
@@ -50,7 +50,7 @@ OpenCode installs the [npm package](https://www.npmjs.com/package/opencode-revie
|
|
|
50
50
|
"attention": { "banner": true, "sound": true },
|
|
51
51
|
"unsafe": { "banner": true, "sound": true },
|
|
52
52
|
"question": { "banner": true, "sound": true },
|
|
53
|
-
"approved": { "banner": true, "sound":
|
|
53
|
+
"approved": { "banner": true, "sound": false },
|
|
54
54
|
"error": { "banner": true, "sound": true },
|
|
55
55
|
"ended": { "banner": true, "sound": true }
|
|
56
56
|
},
|
|
@@ -106,11 +106,11 @@ inclusive, fractions are invalid, and the maximum safe integer is
|
|
|
106
106
|
| `autoApprove` | boolean | `false` | Allow Safe reviews once automatically. Normally waits for completion, validation, rendering and the countdown, including behind this plugin's report history. |
|
|
107
107
|
| `fastMode` | boolean | `false` | Requires `autoApprove: true`. Approve a visible, front-of-queue request as soon as a Safe rating is parsed, bypassing the countdown. Respects `stream`; with `stream: false`, waits for the complete validated response. Finish the report and save it in the background after approval. |
|
|
108
108
|
| `extraCareful` | boolean | `true` | Include extra-careful guidance when `autoApprove` is enabled. Setting `false` omits that guidance without disabling automatic approval. |
|
|
109
|
-
| `autoApproveDelaySeconds` | integer | `15` | `0`–`3600` seconds. Positive values
|
|
109
|
+
| `autoApproveDelaySeconds` | integer | `15` | `0`–`3600` seconds. Positive values include an extra 200 ms initial grace; `0` skips the wait but retains rendering and eligibility checks. Ignored in fast mode. |
|
|
110
110
|
| `notify` | boolean | `true` | Master switch for desktop banners, sounds and reminders. `false` overrides all per-type controls. |
|
|
111
111
|
| `notifySound` | boolean | `true` | Master switch for notification audio. `false` silences every type and reminder without disabling enabled banners. |
|
|
112
112
|
| `staleReminderSeconds` | integer | `60` | `0` through the maximum safe integer, in seconds. `0` disables reminders; otherwise eligible pending human interactions repeat at this interval, limited to the native front-of-queue blocker per conversation. |
|
|
113
|
-
| `notifications` | object | All
|
|
113
|
+
| `notifications` | object | All banners enabled; all sounds enabled except `approved` | Keys: `attention`, `unsafe`, `question`, `approved`, `error`, `ended`. Each entry is an object with optional `banner` and `sound` booleans. Omitted types/fields retain their defaults; unknown types/fields are invalid. Controls also apply to reminders. |
|
|
114
114
|
| `notificationSoundDirectory` | string | Unset (bundled sounds) | Absolute, NUL-free path, at most 4096 string code units. Use the six notification type names as basenames: usable `.wav` first, then `.mp3`, then the corresponding bundled sound. |
|
|
115
115
|
| `formatRetries` | integer | `1` | `0`–`100` additional assessment-format correction attempts. `0` disables format corrections, not independent transport recovery. |
|
|
116
116
|
| `maxOutputTokens` | integer | `4096` | `1` through the maximum safe integer. Sent as `max_tokens` on every reviewer POST, including retries/corrections. Your provider/model enforces its supported output limit. |
|
|
@@ -131,6 +131,10 @@ The sidebar shows Safe, Unsafe, or Analysis unavailable. Explanations support
|
|
|
131
131
|
Markdown and scrolling. If the sidebar is hidden, use OpenCode's Show sidebar
|
|
132
132
|
command.
|
|
133
133
|
|
|
134
|
+
When browsing a direct subagent, the same front-of-queue review appears in a
|
|
135
|
+
right-hand panel at terminal widths of at least 120 columns. Its auto-approval
|
|
136
|
+
countdown can start there without returning to the parent conversation.
|
|
137
|
+
|
|
134
138
|
Skill-load review is enabled by default; set `skill` permissions to `ask` in
|
|
135
139
|
`opencode.json` to receive reviews. Its prompt requires both bounded risk and clear
|
|
136
140
|
relevance to the current work. A harmless but irrelevant skill is rated Unsafe.
|
|
@@ -184,8 +188,8 @@ or Cancel to leave the request manual. Hiding or covering the panel also cancels
|
|
|
184
188
|
that request's countdown, except when covered by this plugin's report history.
|
|
185
189
|
Cancel before using native Allow always or rejection
|
|
186
190
|
forms; those forms alone do not stop the countdown.
|
|
187
|
-
Positive countdowns
|
|
188
|
-
|
|
191
|
+
Positive countdowns add a 200 ms initial grace and then update on remaining-time
|
|
192
|
+
boundaries. A zero-second setting still approves without that grace.
|
|
189
193
|
|
|
190
194
|
`/reviewer-disable` and `/reviewer-enable` control the current conversation and its
|
|
191
195
|
descendants. The setting is saved for resume. Both commands are also in the command
|
|
@@ -291,11 +295,12 @@ terminal is focused:
|
|
|
291
295
|
with its own sound. Provisional streamed ratings never notify.
|
|
292
296
|
- **Agent has a question:** a pending agent question at the front of the native
|
|
293
297
|
input queue, with its own sound.
|
|
294
|
-
- **Reviewer approved a permission:**
|
|
298
|
+
- **Reviewer approved a permission:** a silent banner by default, sent after confirmed
|
|
295
299
|
automatic approval, including fast mode while its report is still streaming.
|
|
296
300
|
Positive and zero delays also notify on success; the countdown is silent.
|
|
297
|
-
Approval sounds are limited to
|
|
298
|
-
one every two seconds
|
|
301
|
+
Opt in with `notifications.approved.sound: true`. Approval sounds are limited to
|
|
302
|
+
one every two seconds, including delayed playback. Sounds from the same session
|
|
303
|
+
wait for the previous player to finish, so successive alerts do not overlap.
|
|
299
304
|
- **Session error:** an unrecovered session/provider failure, not a review failure.
|
|
300
305
|
- **Session ended:** a completed root-agent response, not a question/permission
|
|
301
306
|
pause or an explicit user interruption.
|
|
@@ -311,7 +316,7 @@ actionable position, restarting analysis or entering automatic approval cancels
|
|
|
311
316
|
pending attention delivery and reminders.
|
|
312
317
|
|
|
313
318
|
Each type's `banner` and `sound` can be controlled independently. For example,
|
|
314
|
-
`notifications.approved
|
|
319
|
+
`notifications.approved: { "banner": false, "sound": true }` enables approval sounds without banners;
|
|
315
320
|
`notifications.question.sound: false` keeps question banners silent. Set both to
|
|
316
321
|
`false` to disable that type. `notify: false` overrides all types and disables
|
|
317
322
|
reminders too; `notifySound: false` silences all types and their reminders.
|
|
@@ -319,7 +324,8 @@ Sound-only delivery does not require a desktop banner or delivery acknowledgemen
|
|
|
319
324
|
Invalid notification settings disable notification work without disabling reviews.
|
|
320
325
|
|
|
321
326
|
Pending permissions and questions repeat after `staleReminderSeconds`, measured
|
|
322
|
-
from initial dispatch, even if desktop delivery fails.
|
|
327
|
+
from actual initial dispatch, even if desktop delivery fails. Capacity waiting
|
|
328
|
+
does not start the reminder clock or replace an undelivered initial alert. Reminders replace their
|
|
323
329
|
previous banner and append **(Reminder)** to the event text, reusing the same
|
|
324
330
|
sound, icon, session heading and click target. Only the native front-of-queue
|
|
325
331
|
interaction per root conversation repeats: permissions precede questions, with
|
|
@@ -362,6 +368,18 @@ Audio is prepared before showing its banner and played from the normalized cache
|
|
|
362
368
|
with a low-latency buffer; preparation never blocks permission approval.
|
|
363
369
|
`stdbuf` makes delivery acknowledgements immediate instead of waiting for
|
|
364
370
|
`notify-send` to flush its output when the banner closes.
|
|
371
|
+
Delivery is bounded: up to 64 active tickets (48 routine), 256 waiting actionable
|
|
372
|
+
episodes, and 128 waiting routine events. A full routine backlog drops new
|
|
373
|
+
approval/error/completion events; already admitted events retain their exact
|
|
374
|
+
targets. Actionable attention/Unsafe/question work has priority, rotating among
|
|
375
|
+
roots; after eight actionable dispatches, waiting routine work gets a turn.
|
|
376
|
+
Each root has only its current actionable episode, and waiting reminders coalesce.
|
|
377
|
+
The process pool allows 24 children: 20 banners (16 routine), two players, one
|
|
378
|
+
withdrawal and one activation. Audio preparation has two actual-operation slots;
|
|
379
|
+
audio waiting is bounded to 64 requests. Cancellation and timeouts do not free
|
|
380
|
+
physical slots until their operations settle. Queued actionable work is canceled
|
|
381
|
+
when its request resolves or loses native queue ownership. Desktop/process
|
|
382
|
+
failures remain best-effort and do not delay permission approval.
|
|
365
383
|
Disable overlapping notification plugins to avoid duplicate alerts.
|
|
366
384
|
</details>
|
|
367
385
|
|
|
@@ -370,6 +388,12 @@ Disable overlapping notification plugins to avoid duplicate alerts.
|
|
|
370
388
|
Use Node.js 24.15.0+ within 24.x, or 22.22.2+ within 22.x, and npm.
|
|
371
389
|
Run `npm ci --ignore-scripts`, then `npm run check` for typechecking, source tests,
|
|
372
390
|
pure-helper tests and the build. `npm run test:helpers` runs the helper checks
|
|
373
|
-
without building or starting OpenCode. Pull-request CI checks both Node versions
|
|
391
|
+
without building or starting OpenCode. Pull-request CI checks both Node versions
|
|
392
|
+
and runs a separate representative Linux OpenCode 1.18.35 fixture profile.
|
|
393
|
+
After building, run `node scripts/test-runtime.mjs --profile ci` for that same
|
|
394
|
+
profile. Use `node scripts/test-runtime.mjs --list` for the complete runtime
|
|
395
|
+
inventory or `node scripts/test-runtime.mjs --plan --profile ci` for a
|
|
396
|
+
host-independent plan. Profiles select documented scenario/flag combinations;
|
|
397
|
+
interactive desktop checks and historical replays have separate prerequisites.
|
|
374
398
|
See [AGENTS.md](https://github.com/mightykatun/opencode-reviewer/blob/main/AGENTS.md)
|
|
375
399
|
for runtime tests and the tag-driven release process.
|