opencode-navigator 0.26.0 → 0.27.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/CHANGELOG.md +15 -0
- package/HOST_API.md +113 -6
- package/LINT_COVERAGE.md +5 -0
- package/PROVIDERS.md +9 -0
- package/README.md +92 -6
- package/dist/{chunk-bv0nm1tj.js → chunk-dm1y8x49.js} +2 -1
- package/dist/gui-experimental.cjs +15659 -0
- package/dist/layout-preset-actions.js +37 -14
- package/dist/native-todo-setup.js +2 -1
- package/dist/navigator-updates.js +2 -2
- package/dist/onboarding.js +11 -4
- package/dist/project-profile.js +34 -38
- package/dist/provider-limits.js +207 -149
- package/dist/quick-actions-settings.js +1 -1
- package/dist/runtime-dependencies.json +4 -4
- package/dist/server.js +379 -0
- package/dist/sidebar-settings.js +37 -34
- package/dist/sidebar-shortcuts.js +1 -1
- package/dist/toolbar-settings.js +68 -20
- package/dist/tui.js +711 -613
- package/dist/upgrade-notes.js +1 -1
- package/package.json +27 -12
- /package/dist/{chunk-pwa1wzer.js → chunk-rrvwmnyh.js} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.27.1] - 2026-11-11
|
|
4
|
+
|
|
5
|
+
- Drag the Desktop mini-window by its header as well as its move handle, while keeping Dock a separate action. Match its surface and controls to OpenCode's light and dark themes.
|
|
6
|
+
- Use native Desktop switches and selectors for Skill trust and Todo configuration, and align multiline fields with the host theme and focus styles.
|
|
7
|
+
- Show a remaining-lifetime scale and time until expiry for banked reset credits with provider-supplied dates. Keep missing expiry explicit and prevent selecting expired credits for review.
|
|
8
|
+
|
|
9
|
+
## [0.27.0] - 2026-11-11
|
|
10
|
+
|
|
11
|
+
- Add an experimental OpenCode Desktop interface with a native panel, narrow-screen drawer, and opt-in in-app mini-window. Move, resize, reset and redock it with the mouse or keyboard while keeping the selected session and filters.
|
|
12
|
+
- Bring Search Everything, Skills, MCP groups and presets, Quick Actions, and customizable toolbar pins to Desktop. Share private favorites, trust decisions and preferences with local TUI instances without duplicating monitoring.
|
|
13
|
+
- Add native Desktop settings with scoped section controls, groups, reviewed presets and project profiles, portable import/export, a seven-slide setup guide, About, browsable release history and editable GitHub Bug reports.
|
|
14
|
+
- Keep superseded Desktop configuration reads from showing a false error after a newer refresh, while preserving genuine failures and retry guidance.
|
|
15
|
+
- Show verified provider/account quotas in Desktop with explicit account linking and separately confirmed banked resets. Keep remote sessions isolated from local accounts and preserve unresolved reset attempts across retries.
|
|
16
|
+
- Support OpenCode 1.19.5 and 2.2.6 while preserving both TUI adapters, existing settings, pinned-source updates and read-only legacy Todo archives.
|
|
17
|
+
|
|
3
18
|
## [0.26.0] - 2026-11-06
|
|
4
19
|
|
|
5
20
|
- Prevent background retries from accumulating cancellation listeners and preferences loading from waiting indefinitely on recovery markers.
|
package/HOST_API.md
CHANGED
|
@@ -1,12 +1,119 @@
|
|
|
1
1
|
# Public Host APIs And Remaining Gaps
|
|
2
2
|
|
|
3
|
-
Navigator supports only OpenCode **1.19.5** and **2.2.
|
|
3
|
+
Navigator supports only OpenCode **1.19.5** and **2.2.6**, the current stable
|
|
4
4
|
release in each major line. Published SDK declarations and real-host checks
|
|
5
5
|
define the boundary; internal host components are not plugin APIs.
|
|
6
6
|
|
|
7
|
+
## Approved Desktop Integration Contract
|
|
8
|
+
|
|
9
|
+
Desktop support uses the independent `./gui-experimental` entry available from
|
|
10
|
+
Navigator 0.27.0, not the TUI entrypoint. Earlier packages do not include this GUI.
|
|
11
|
+
The approved target is OpenCode Desktop 2.2.6, with TUI 1.19.5 and 2.2.6 kept
|
|
12
|
+
behind explicit adapters. The published 2.2.6 plugin package preserves every TUI
|
|
13
|
+
declaration from 2.2.5; its changed declarations are GUI-specific.
|
|
14
|
+
|
|
15
|
+
| Capability | Published Desktop contract | Navigator integration constraint |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| GUI loading | `./gui-experimental`, `@opencode/plugin/gui`, one CJS bundle through `gui/vite` | Load from global server configuration; a CLI-only plugin entry does not enable Desktop. Preserve the server plugin's historical identity. |
|
|
18
|
+
| Data and requests | Reactive session `server.data` and live `server.client` | Resolve the selected session's server on every operation; the plugin-level client is the desktop sidecar, not an arbitrary remote session. |
|
|
19
|
+
| Session identity | Host session keys include server identity; location can be unavailable during reconnect | Partition domain state and reject stale actions by server/session/location; never put credentials in cache keys. |
|
|
20
|
+
| Layout | Native side panels, host-controlled bottom placement, narrow drawers, panel-specific width | Use native containers first. The optional floating view is an in-app presentation of the same state, not a detached OS window. |
|
|
21
|
+
| Commands and composer | Native command registry and reactive routed composer/model | Map verified commands explicitly; never emulate GUI actions by fabricating terminal command events. |
|
|
22
|
+
| Dialogs and settings | Native nested dialogs, SettingsPage and settings/menu components | Share validation and action state, not terminal dialog renderers or focus loops. |
|
|
23
|
+
| Local operations | Desktop main, validated IPC, Node/Electron only in main | Renderer models have no filesystem, subprocess or token access. Preserve the existing private store and lock rather than copying preferences to GUI storage. |
|
|
24
|
+
| Remote operations | The selected server's public client and existing plugin RPC | Do not read local project files or use local provider credentials for a remote target. Missing server capabilities remain explicit. |
|
|
25
|
+
| Native windows | Public main context can inspect existing windows; no panel detach operation | Detached OS windows are outside this delivery. Do not mutate host DOM or use private app internals to simulate support. |
|
|
26
|
+
|
|
27
|
+
The GUI API is experimental. Browser Web is not a verified target in this cycle.
|
|
28
|
+
The renderer and headless models must remain independent of Electron so a later
|
|
29
|
+
Web adapter does not require a second implementation of product rules.
|
|
30
|
+
|
|
31
|
+
Verification uses an npm-style tarball in the official checksum-verified Linux
|
|
32
|
+
ARM64 Desktop 2.2.6 package under Xvfb. Native macOS/Windows and multiple live
|
|
33
|
+
Desktop windows are not claimed as real-host coverage; remote identity, independent
|
|
34
|
+
window leases and concurrent shared-store writes are synthetic contracts. The
|
|
35
|
+
unminified TUI remains limited to 360,000 bytes; the single-file GUI has its own
|
|
36
|
+
600,000-byte budget (about 554 kB at the stage-10 baseline).
|
|
37
|
+
|
|
38
|
+
Native Settings temporarily has no mounted session and may have no active tab.
|
|
39
|
+
Navigator retains only a previously observed public session reference still
|
|
40
|
+
confirmed by the public tab list, server and location; Home, closing that tab or
|
|
41
|
+
changing its target clears it. Settings/profile operations use that reference's
|
|
42
|
+
live client/cache rather than substituting the sidecar.
|
|
43
|
+
|
|
44
|
+
Private favorites, trust, presets, account bindings and reset attempts remain in
|
|
45
|
+
the established filesystem preferences store/lock via typed main IPC. Native GUI
|
|
46
|
+
storage holds presentation only. Explicit Reload flushes writes, refreshes private
|
|
47
|
+
preferences and selected-server configured defaults, and clears temporary layout
|
|
48
|
+
overrides. Project profiles use the selected server RPC with exact file previews
|
|
49
|
+
and stale-file checks; workspace-placed filesystems are rejected until the public
|
|
50
|
+
server contract provides a verified placement-aware atomic write operation.
|
|
51
|
+
|
|
52
|
+
GUI permission actions open native Settings. No supported Desktop startup/Home
|
|
53
|
+
interception or LSP status contract was found; those terminal capabilities are not
|
|
54
|
+
simulated. Revisit the gaps when equivalent public APIs become available. Changelog
|
|
55
|
+
browsing is independent of the one-time version claim used by startup notes.
|
|
56
|
+
|
|
57
|
+
On narrow Desktop windows, Navigator uses **More → Navigator**, the host's
|
|
58
|
+
native drawer. The floating view redocks when the viewport becomes narrow.
|
|
59
|
+
Desktop 2.2.6 keeps drawer opening in its own mobile navigation; Navigator does
|
|
60
|
+
not click or move host elements to force it open. Revisit automatic drawer
|
|
61
|
+
opening when the public layout API exposes that operation.
|
|
62
|
+
|
|
63
|
+
GUI forms use `ctx.ui.Switch`, `TextInput`, `Select`, `Button` and the native
|
|
64
|
+
Settings rows rather than importing or bundling `@opencode/ui`. Desktop 2.2.6's
|
|
65
|
+
public UI facade has no multiline input, progress bar, disclosure row, or bookmark
|
|
66
|
+
icon. Those focused semantic controls remain plugin-owned, using the host theme's
|
|
67
|
+
surface, text, focus and elevation tokens. Remove these fallbacks when equivalent
|
|
68
|
+
public controls preserve their multiline, expanded/selected and progress semantics.
|
|
69
|
+
|
|
70
|
+
The Desktop model controls use the verified 2.2.6 commands `model.choose` and
|
|
71
|
+
`model.variant.cycle`. These IDs are version-audited mappings, not portable
|
|
72
|
+
TUI command names; a rejected dispatch reports that the control is unavailable.
|
|
73
|
+
|
|
74
|
+
The isolated Desktop 2.2.6 host also has a native dialog-context defect: opening
|
|
75
|
+
its command palette after a plugin dialog in a session can fail with
|
|
76
|
+
`Command context must be used within a context provider`. The same minimal
|
|
77
|
+
fixture reproduces this with Navigator disabled; Home does not reproduce it.
|
|
78
|
+
Navigator does not patch host contexts. Interaction smokes keep this native-only
|
|
79
|
+
probe separate and exercise subsequent plugin commands through the public
|
|
80
|
+
`commands.run` API. Recheck this limitation on the next audited Desktop target.
|
|
81
|
+
|
|
82
|
+
Sources: [GUI plugins](https://opencode.ai/docs/build/plugins/gui),
|
|
83
|
+
[TUI plugins](https://opencode.ai/docs/build/plugins/cli),
|
|
84
|
+
[RPC](https://opencode.ai/docs/build/plugins/rpc), and the published
|
|
85
|
+
`@opencode/plugin@2.2.6` declaration archive, audited on 2026-11-10.
|
|
86
|
+
|
|
7
87
|
## Host-Owned Services
|
|
8
88
|
|
|
9
|
-
|
|
89
|
+
### Dependency audit limits
|
|
90
|
+
|
|
91
|
+
The candidate's frozen install and peer graph pass, but its security audit is
|
|
92
|
+
not clean. The supported 1.x plugin pins an older Effect beta and Zod; its Effect
|
|
93
|
+
graph also carries TOML denial-of-service advisories. The supported 2.x utility
|
|
94
|
+
package pins Glob and Minimatch versions with denial-of-service advisories.
|
|
95
|
+
Navigator does not force incompatible transitive-major overrides or suppress the
|
|
96
|
+
audit. Removal depends on compatible upstream fixes in the supported host graph;
|
|
97
|
+
review these advisories again before publication.
|
|
98
|
+
|
|
99
|
+
### Selected-server quota services
|
|
100
|
+
|
|
101
|
+
Desktop Codex reads and reset submissions run behind typed main-process IPC,
|
|
102
|
+
only for the host-verified `sameMachine` sidecar. Main rechecks the session
|
|
103
|
+
directory, live client, active connection and private account binding; it never
|
|
104
|
+
returns credentials or provider headers to the renderer. Remote sessions use
|
|
105
|
+
their selected server's quota RPC and never borrow the Desktop's local account.
|
|
106
|
+
Public session and quota-event locations expose only a directory, not a workspace
|
|
107
|
+
ID. Workspace requests retain explicit location guards, and quota observations
|
|
108
|
+
without sufficient workspace identity do not trigger an automatic read.
|
|
109
|
+
|
|
110
|
+
The ordinary Codex bucket is account-scoped even when `normalModelSlug` is null.
|
|
111
|
+
Missing reset-credit details do not erase the provider's available count. Reset
|
|
112
|
+
submission requires a separate confirmation and an authoritative persisted
|
|
113
|
+
attempt; uncertain retries retain its idempotency key. No credit is spent during
|
|
114
|
+
review, refresh or account linking.
|
|
115
|
+
|
|
116
|
+
| Capability | OpenCode 1.19.5 | OpenCode 2.2.6 |
|
|
10
117
|
| --- | --- | --- |
|
|
11
118
|
| Todo | Supported host Todo source/events | Public message cache, completed `todowrite` and revert boundary |
|
|
12
119
|
| Skills | Host discovery and prompt insertion | Native Skill cache and `experimental.session.skill` with exact ID |
|
|
@@ -52,10 +159,10 @@ justify bypassing a native API.
|
|
|
52
159
|
|
|
53
160
|
Both current hosts have isolated real-host checks. Historical installer fixtures
|
|
54
161
|
exercise migration only; they do not extend the supported host matrix.
|
|
55
|
-
The published 2.2.
|
|
56
|
-
|
|
162
|
+
The published 2.2.6 TUI declarations are identical to 2.2.5. OpenTUI 0.8 retains
|
|
163
|
+
the drawing-only paint-hook contract; renderer tests,
|
|
57
164
|
nested dialogs and frame-level typing probes run against the updated runtime.
|
|
58
|
-
Development uses Bun 1.4.4 and OpenTUI 0.8.
|
|
165
|
+
Development uses Bun 1.4.4 and OpenTUI 0.8.3, leaving Solid/OpenTUI external so the
|
|
59
166
|
host owns its runtime. The 1.x host ships older runtime modules; its actual smoke
|
|
60
167
|
must pass rather than injecting the development modules into it.
|
|
61
168
|
|
|
@@ -67,7 +174,7 @@ renderer/FFI support. CI and package verification use Node 26.12.1.
|
|
|
67
174
|
### Deliberate Compatibility Pins
|
|
68
175
|
|
|
69
176
|
- `web-tree-sitter` stays at **0.25.10**, the exact peer required by OpenTUI
|
|
70
|
-
0.8.
|
|
177
|
+
0.8.3. Upgrade it when the supported host runtime publishes a compatible peer
|
|
71
178
|
contract; the independent 0.27 line is not a compatible substitution.
|
|
72
179
|
- `typescript` is **6.0.3**, selected to match the complete published
|
|
73
180
|
`@st1ggy/linter-config` **10.0.0** preset. SonarJS and typescript-eslint JS
|
package/LINT_COVERAGE.md
CHANGED
|
@@ -12,6 +12,11 @@ beside their individual settings in `oxlint.config.ts`.
|
|
|
12
12
|
|
|
13
13
|
## Preserved Checks
|
|
14
14
|
|
|
15
|
+
- GUI-only overrides add native JSX accessibility checks for ARIA, labels/content,
|
|
16
|
+
keyboard parity and focusability while retaining every native plugin from the
|
|
17
|
+
published Solid preset. OpenTUI JSX is excluded from these HTML-specific rules.
|
|
18
|
+
Native host controls retain their own semantics; real Desktop keyboard checks
|
|
19
|
+
complement source linting.
|
|
15
20
|
- Native ESLint, TypeScript, import and Unicorn rules remain enabled.
|
|
16
21
|
- All published Solid, ESLint-core, import-x, stylistic, Unicorn, SonarJS and
|
|
17
22
|
typescript-eslint JS plugins remain enabled.
|
package/PROVIDERS.md
CHANGED
|
@@ -5,6 +5,15 @@ It never treats session token/cost totals as remaining provider quota. Subscript
|
|
|
5
5
|
windows, API rate limits, configured capacities, and monetary balances are different
|
|
6
6
|
measurements and are labelled separately.
|
|
7
7
|
|
|
8
|
+
The experimental Desktop entry shares quota normalization, refresh scheduling,
|
|
9
|
+
account binding and reset-attempt rules with TUI. Its renderer uses the selected
|
|
10
|
+
session's live server client/cache. Local Codex subprocess access is restricted to
|
|
11
|
+
typed Desktop-main IPC for a host-verified same-machine connection; remote or
|
|
12
|
+
unverified targets never borrow the Desktop's local account or binding. No tokens
|
|
13
|
+
or credential files are returned to the renderer. Remote provider reads use the
|
|
14
|
+
selected server's existing quota RPC. Missing capabilities and authentication
|
|
15
|
+
failures remain explicit rather than enabling an alternate credential reader.
|
|
16
|
+
|
|
8
17
|
The external provider contracts were rechecked on 2026-10-06; the public
|
|
9
18
|
OpenCode Console/Go contract was added on 2026-10-28. The runtime also includes providers from
|
|
10
19
|
the host catalog; an unrecognized provider gets an explicit unverified-source state
|
package/README.md
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# OpenCode Navigator
|
|
2
2
|
|
|
3
|
-
Search, navigate, and manage OpenCode sessions from the TUI
|
|
3
|
+
Search, navigate, and manage OpenCode sessions from the TUI, with an experimental
|
|
4
|
+
OpenCode Desktop interface. Navigator combines
|
|
4
5
|
Search Everything, task and subagent views, skills, MCP presets, and quick actions
|
|
5
6
|
with a configurable sidebar.
|
|
6
7
|
|
|
@@ -44,7 +45,7 @@ collapsed. Use `Save current layout as default` in sidebar settings to reuse the
|
|
|
44
45
|
current visible/hidden, expanded/collapsed, and ordering states in new sessions.
|
|
45
46
|
|
|
46
47
|
**Only the latest stable release in each major line is supported: OpenCode
|
|
47
|
-
1.19.5 and 2.2.
|
|
48
|
+
1.19.5 and 2.2.6.** Both have separate real-host checks. Older releases are not
|
|
48
49
|
part of the supported compatibility matrix. The 2.2 integration uses OpenTUI 0.8
|
|
49
50
|
and public host caches, events, keymap layers, and client APIs while retaining
|
|
50
51
|
the separate 1.x adapter. See [Host API boundaries](HOST_API.md) for remaining
|
|
@@ -52,7 +53,7 @@ capability gaps and removal conditions. On OpenCode 2, Navigator reads the same
|
|
|
52
53
|
the host sidebar, including completed `todowrite` calls and the current revert
|
|
53
54
|
boundary. Viewing Todo needs no Navigator server plugin. OpenCode 2.1 exposes
|
|
54
55
|
content and four statuses, without priorities or direct Todo CRUD. LSP is hidden on 2.x while retaining Subagents,
|
|
55
|
-
Skills, Quick Actions, MCP, Search, settings, and presets. All interface icons use Nerd Font glyphs by
|
|
56
|
+
Skills, Quick Actions, MCP, Search, settings, and presets. All TUI interface icons use Nerd Font glyphs by
|
|
56
57
|
default (Codicons for controls, keyboard symbols for hints, language logos for LSP). Use a Nerd Fonts v3
|
|
57
58
|
terminal font, or select **Settings → Behavior → Icon style → Text fallback**.
|
|
58
59
|
The switch applies to the entire interface, including Quick Actions, search
|
|
@@ -271,6 +272,74 @@ in a separate JSON file and set `OPENCODE_CONFIG` to its path **only when
|
|
|
271
272
|
launching OpenCode 2.x**. The TUI configuration in `cli.json` remains separate;
|
|
272
273
|
the OpenCode 1.x launch must not load Navigator's 2.x server plugin.
|
|
273
274
|
|
|
275
|
+
### Experimental OpenCode Desktop
|
|
276
|
+
|
|
277
|
+
Navigator 0.27.0 and newer also export `./gui-experimental` for **OpenCode Desktop
|
|
278
|
+
2.2.6**. This is not browser Web support or a detached operating-system window.
|
|
279
|
+
Earlier Navigator versions do not include the GUI export.
|
|
280
|
+
|
|
281
|
+
Desktop discovers the GUI from its **global server plugin configuration**,
|
|
282
|
+
`~/.config/opencode/opencode.json` (or the equivalent XDG location), not from
|
|
283
|
+
`cli.json` or `tui.json`. Merge its package entry with existing plugins rather
|
|
284
|
+
than replacing the configuration:
|
|
285
|
+
|
|
286
|
+
```jsonc
|
|
287
|
+
{
|
|
288
|
+
"$schema": "https://opencode.ai/config.json",
|
|
289
|
+
"plugins": [{ "package": "opencode-navigator" }],
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
For a pinned local installation, use its reviewed package directory instead of
|
|
294
|
+
the npm package name; that directory must include its runtime dependencies.
|
|
295
|
+
Do not add this v2 server package to a configuration shared with OpenCode 1.x;
|
|
296
|
+
keep the separate v2 launch configuration described above. The same package
|
|
297
|
+
contains independent TUI, server, RPC and GUI entries.
|
|
298
|
+
|
|
299
|
+
- Open **Open Navigator** from the command palette after selecting a session.
|
|
300
|
+
The native panel can be placed beside or below the chat with host controls.
|
|
301
|
+
Narrow windows use **More → Navigator**.
|
|
302
|
+
- Choose **Float** for an opt-in mini-window inside the application. It follows
|
|
303
|
+
the selected session, hides on Home and yields to native dialogs. Move, resize,
|
|
304
|
+
reset and redock controls support keyboard input too. Both placements share
|
|
305
|
+
one monitoring runtime and filters; switching does not duplicate polling.
|
|
306
|
+
Drag the mini-window by its header or move handle; Dock remains a separate
|
|
307
|
+
action. Its surface follows the current OpenCode theme.
|
|
308
|
+
- **Navigator settings** opens native Settings with Global/Worktree scope,
|
|
309
|
+
section controls, groups, trust, presets, portable/project profiles, About,
|
|
310
|
+
release history and reviewed Bug reports. **Reload preferences** imports
|
|
311
|
+
changes from other local Navigator instances explicitly.
|
|
312
|
+
- Favorites, trust, account bindings, reset attempts and presets use the existing
|
|
313
|
+
private preferences file and lock shared with local TUI instances. Only window
|
|
314
|
+
placement lives in the native GUI store. Project profiles and configuration
|
|
315
|
+
requests use the selected server, including remote servers.
|
|
316
|
+
- Todo is native and read-only; chat owns edits. Legacy Navigator tasks remain a
|
|
317
|
+
read-only archive. LSP and startup/Home interception are not exposed by this
|
|
318
|
+
Desktop contract. Permissions opens native host Settings rather than toggling
|
|
319
|
+
a simulated mode. Terminal fonts, corner masks and terminal shortcuts are not
|
|
320
|
+
GUI settings; Desktop does not need a Nerd Font or the corner font.
|
|
321
|
+
- Provider quotas retain verified account scope. Local Codex access requires a
|
|
322
|
+
verified same-machine connection; a remote session never borrows its credentials
|
|
323
|
+
or private binding. Banked resets always require separate confirmation.
|
|
324
|
+
|
|
325
|
+
The candidate is tested as an npm-style tarball in the official checksum-verified
|
|
326
|
+
Linux ARM64 Desktop package on Xvfb. Native macOS/Windows, browser Web and multiple
|
|
327
|
+
live Desktop windows are not claimed as real-host verification targets. Local,
|
|
328
|
+
remote and multi-consumer guards have separate synthetic contract tests.
|
|
329
|
+
See [Host API boundaries](HOST_API.md) for the native command-palette limitation.
|
|
330
|
+
The manual Prepare Release workflow generated and byte-verified all 29 GUI
|
|
331
|
+
captures using the real Desktop renderer on a virtual display. The terminal
|
|
332
|
+
gallery above is rendered separately through Ghostty.
|
|
333
|
+
|
|
334
|
+

|
|
335
|
+
|
|
336
|
+

|
|
337
|
+
|
|
338
|
+

|
|
339
|
+
|
|
340
|
+
See the [Desktop gallery](screenshots/README.md#experimental-desktop) for account
|
|
341
|
+
linking, quotas, reviewed resets, profiles, onboarding and Bug reports.
|
|
342
|
+
|
|
274
343
|
### Install the corner font
|
|
275
344
|
|
|
276
345
|
**Required for rounded multiline selections in Nerd Font mode.** Run the font
|
|
@@ -636,7 +705,10 @@ separate muted guidance.
|
|
|
636
705
|
|
|
637
706
|
The header's **Banked Resets** button appears when credits or an unresolved attempt
|
|
638
707
|
exist. It displays the provider's available count, optional credit
|
|
639
|
-
details, statuses, and expiry.
|
|
708
|
+
details, statuses, and expiry. In Desktop, dated credits show a shrinking
|
|
709
|
+
remaining-lifetime scale and time until expiry, calculated from the provider's
|
|
710
|
+
grant and expiry timestamps. Missing dates never produce a fabricated percentage;
|
|
711
|
+
expired credits cannot be selected for review. Selecting a credit first checks fresh eligibility
|
|
640
712
|
and opens a separate confirmation tied to the current account and model. Cancel
|
|
641
713
|
or Escape returns to the credit list without spending anything.
|
|
642
714
|
|
|
@@ -995,6 +1067,8 @@ Consumer installations retain upstream metadata; see [Host APIs](HOST_API.md).
|
|
|
995
1067
|
```sh
|
|
996
1068
|
bun run test
|
|
997
1069
|
bun run test:e2e
|
|
1070
|
+
bun run test:gui
|
|
1071
|
+
bun run test:e2e:gui
|
|
998
1072
|
bun run typecheck
|
|
999
1073
|
bun run lint
|
|
1000
1074
|
bun run lint:fix
|
|
@@ -1008,8 +1082,11 @@ bun run screenshots:verify
|
|
|
1008
1082
|
bun run check
|
|
1009
1083
|
```
|
|
1010
1084
|
|
|
1011
|
-
`bun run check` runs the
|
|
1012
|
-
|
|
1085
|
+
`bun run check` runs the TUI and browser-conditioned GUI tests, separate JSX
|
|
1086
|
+
typechecks, Oxlint, bundle-size guards, and Oxfmt. The unminified TUI bundle is
|
|
1087
|
+
limited to 360,000 bytes; the independent single-file GUI budget is 600,000 bytes
|
|
1088
|
+
(stage-10 measured baseline: about 554 kB). DOM accessibility checks apply only
|
|
1089
|
+
to GUI modules, never to terminal renderables.
|
|
1013
1090
|
Font generation is a separate development task: `bun run font:build` and
|
|
1014
1091
|
`bun run font:check` use `uv` and the pinned FontTools dependency. Users install
|
|
1015
1092
|
the already generated font; Python and FontTools are not needed at runtime.
|
|
@@ -1026,6 +1103,15 @@ requires Docker with Linux ARM64 support. These commands are available for harne
|
|
|
1026
1103
|
development; the committed release captures are generated by the manual
|
|
1027
1104
|
`Prepare Release` GitHub Actions workflow.
|
|
1028
1105
|
|
|
1106
|
+
That workflow also runs `bun run screenshots:gui` and
|
|
1107
|
+
`bun run screenshots:gui:verify`. They use the real packaged Desktop renderer on
|
|
1108
|
+
Xvfb, not Ghostty, with synthetic sessions, providers and reports. The second run
|
|
1109
|
+
compares the PNGs byte-for-byte. Fixed renderer and synthetic main clocks,
|
|
1110
|
+
full software rasterization and disabled capture-time animations stabilize scenes
|
|
1111
|
+
without stopping interaction timers or adding comparison tolerances. GUI
|
|
1112
|
+
capture commands reject non-CI invocation; ordinary Desktop smoke tests never
|
|
1113
|
+
take screenshots. New captures and their visual review remain a pre-release gate.
|
|
1114
|
+
|
|
1029
1115
|
## Publishing
|
|
1030
1116
|
|
|
1031
1117
|
Publishing is handled by `.github/workflows/publish.yml` when a GitHub Release
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
var SIDEBAR_SECTIONS=["limits","todo","subagents","skills","quick_actions","lsp","mcp"]
|
|
2
|
+
var QUICK_ACTION_IDS=["session.rename","session.timeline","session.copy","session.export","session.compact","session.list","session.new","session.fork","messages.copy","session.first","session.last","session.messages_last_user","session.message.next","session.message.previous","permission.mode"]
|
|
2
3
|
var SECTION_DEFINITIONS=[{name:"limits",label:"Limits"},{name:"todo",label:"Todo"},{name:"subagents",label:"Subagents"},{name:"skills",label:"Skills"},{name:"quick_actions",label:"Quick actions"},{name:"lsp",label:"LSP"},{name:"mcp",label:"MCP"}];
|
|
3
4
|
var MAX_LIMITS_REFRESH_MINUTES=Math.floor(2147483647 / 60000);
|
|
4
5
|
var PLUGIN_ID="opencode-navigator"
|
|
@@ -6,4 +7,4 @@ var TOGGLE_COMMAND=`${PLUGIN_ID}.toggle`
|
|
|
6
7
|
var FOCUS_COMMAND=`${PLUGIN_ID}.focus`
|
|
7
8
|
var SEARCH_COMMAND=`${PLUGIN_ID}.search`
|
|
8
9
|
var DEFAULT_SEARCH_KEY="ctrl+shift+k"
|
|
9
|
-
export{SIDEBAR_SECTIONS,SECTION_DEFINITIONS,PLUGIN_ID,DEFAULT_SEARCH_KEY}
|
|
10
|
+
export{SIDEBAR_SECTIONS,QUICK_ACTION_IDS,SECTION_DEFINITIONS,PLUGIN_ID,DEFAULT_SEARCH_KEY}
|