Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
b552669
client/settings: one JSONC loader, a section per bay, one sidebar order
Codestz Oct 3, 2026
2956587
client/design: an empty block is its heading and none yet
Codestz Oct 3, 2026
34d2937
client/server: toolAfter, the same finished call on both OpenCodes
Codestz Oct 3, 2026
fa4ac24
Doctor and Trust read settings through the shared loader
Codestz Oct 3, 2026
a20212e
Trail core: the store, safe links, trail_add's checks and what the ag…
Codestz Oct 3, 2026
7c01b5a
Trail views: the sidebar block, /trail's rows and the preview CLI
Codestz Oct 3, 2026
9c046a7
Review: binaries read as bytes, described, compared, previewed and op…
Codestz Oct 3, 2026
4c19223
Review: two edits more than 2,000 lines apart are two edits, not a re…
Codestz Oct 3, 2026
509198d
Review: thinner decode slices, and the README says what a binary card…
Codestz Oct 3, 2026
96fb378
bun.lock: the trail workspace
Codestz Oct 3, 2026
8e00dc9
client/design: warnRows — a settings notice wraps in a sidebar and ke…
Codestz Oct 3, 2026
43b83d4
Status: the sidebar table is the default, settings come from `status`…
Codestz Oct 3, 2026
e3697e7
Trust: draw its settings notices as `!` rows, not only log them
Codestz Oct 3, 2026
9a40855
Updater: read updater.updateCheck through the client loader; ui.updat…
Codestz Oct 3, 2026
cfd1bf2
Shell: settings from the shell section, present when empty, and no sh…
Codestz Oct 3, 2026
30b551f
Subagents: settings from files, every row names its agent, [?] Keys
Codestz Oct 3, 2026
9371591
Review: settings from the review section of the files
Codestz Oct 3, 2026
58b507f
Subagents: no rows, no box — an empty one took a row of sidebar space
Codestz Oct 3, 2026
7376dca
client/design: warnRows keeps up to five rows, so a 24-cell sidebar s…
Codestz Oct 3, 2026
3bf8cba
Trail: both halves — trail_add, trail_list, the guidance and the safe…
Codestz Oct 3, 2026
74cc3c0
Bundle, doctor, release and pack-check: Trail is a bay
Codestz Oct 3, 2026
9714d82
Trail: the measurement — a fake gh pr create, and a real turn that mu…
Codestz Oct 3, 2026
529d9dd
Doctor: Trail's halves, and modules under old names are only notices
Codestz Oct 3, 2026
f07909f
Trail: a link you add shows in the sidebar at once
Codestz Oct 3, 2026
0f589a6
Trail: its README — what it is, no setup, the sidebar, /trail, the to…
Codestz Oct 3, 2026
233feed
Site: Trail on the landing page and its docs page
Codestz Oct 3, 2026
7d6abc7
Trail measurement: a branch whose change matches its message, so the …
Codestz Oct 3, 2026
772f8e3
/cockpit-setup: one command for every bay, briefing the agent with th…
Codestz Oct 3, 2026
5f6a9d3
Review: settings notices as a ! row in the pane, in place of the head…
Codestz Oct 3, 2026
de3de32
Status: /status-setup briefs through client's briefAgent — from home …
Codestz Oct 3, 2026
9169d38
Status docs: OpenCode 2 names its Context block opencode.sidebar.cont…
Codestz Oct 3, 2026
e8d19f7
Smoke: Trail installed and checked, /cockpit-setup and /status-setup,…
Codestz Oct 3, 2026
54af472
CHANGELOG: 0.9.0 under Unreleased — Trail, /cockpit-setup, one settin…
Codestz Oct 3, 2026
4ccb4a3
README: Trail, the Configuration reference, /cockpit-setup, /status-s…
Codestz Oct 3, 2026
1f5a71f
Site: Configuration is the settings reference; status pages on the st…
Codestz Oct 3, 2026
c4e4fe9
/statusline: the rename rides on the toast that says the brief went o…
Codestz Oct 3, 2026
c5fce45
Trail measurement: a turn that never opened the PR measures nothing —…
Codestz Oct 3, 2026
0f57313
Smoke: the agent turn and Trail's measurement are bounded and get no …
Codestz Oct 3, 2026
421a305
/cockpit-setup: a shipped skill, a cockpit_settings tool and a one-li…
Codestz Oct 3, 2026
05a3505
/status-setup: the status-setup skill, shipped with Status's new agen…
Codestz Oct 3, 2026
5340d64
status-setup: preview with the copy that came with the install, not t…
Codestz Oct 3, 2026
8d1b974
Smoke: /cockpit-setup and /status-setup are shipped commands that loa…
Codestz Oct 3, 2026
db4c9ec
Docs: /cockpit-setup and /status-setup load shipped skills — or just ask
Codestz Oct 3, 2026
c6cadb9
Status: the sidebar table counts what is uncommitted and drops the tu…
Codestz Oct 3, 2026
90e50b1
Status: override changes a preset's rows by name and keeps the rest
Codestz Oct 3, 2026
e94e23d
Status preview: --config reads as the TUI does, --surface, and debug …
Codestz Oct 3, 2026
6e3133d
status-setup: a row or two is an override, and the file is previewed …
Codestz Oct 3, 2026
1ab6b70
Status preview: --config - reads the candidate on stdin, as the file …
Codestz Oct 3, 2026
23ea02a
status-setup previews with this install's copy: cockpit_settings name…
Codestz Oct 3, 2026
bc2b0c9
Status: OpenCode 2's MCP status is read from its tag, and the sidebar…
Codestz Oct 4, 2026
afbaac0
Status #34: regression tests through the adapter, a cut that keeps th…
Codestz Oct 4, 2026
9d36bcc
/cockpit-setup: an opt-in second phase that tunes Cockpit to how you …
Codestz Oct 4, 2026
4af342a
OpenCode 2's background service keeps old plugin code: dev:install re…
Codestz Oct 4, 2026
ba74f47
README and CHANGELOG: restart OpenCode 2's service after updating; th…
Codestz Oct 4, 2026
3a54976
cockpit-setup tune: examples are shapes with blanks, and the tools re…
Codestz Oct 4, 2026
2489635
CHANGELOG: #34 under Fixed; the setup skills' own preview is part of …
Codestz Oct 4, 2026
4c44f7f
One Cockpit-wide line: where the user sees what the agent made, from …
Codestz Oct 4, 2026
c0e03b3
Guidance: reuse a running dev server, short shell names, trail_list b…
Codestz Oct 4, 2026
e2b07f4
Measurements: a real turn shows Shell's and Review's guidance change …
Codestz Oct 4, 2026
a8915ec
Smoke: the Status table flags a broken MCP server and not a healthy o…
Codestz Oct 4, 2026
a1121a8
CHANGELOG: where the agent points you, the guidance changes, and the …
Codestz Oct 4, 2026
18af60a
Bundle test: every install carries both setup tools, cockpit_settings…
Codestz Oct 4, 2026
d698a1d
Status: the sidebar table is headed Status, like every Cockpit block …
Codestz Oct 4, 2026
2502c7d
Subagents: one agent column per block, so every title starts in the s…
Codestz Oct 4, 2026
5975045
Trail: the time column says when (now, 12m ago), not a bare age under…
Codestz Oct 4, 2026
504b330
Smoke: Trail's measurement passes on two of three runs (--pass), and …
Codestz Oct 4, 2026
0260ec9
CHANGELOG: Subagents' titles line up and finished rows say only how l…
Codestz Oct 4, 2026
0516d1f
Trail: /trail lists only what was recorded — the found-not-recorded l…
Codestz Oct 4, 2026
55b7d6c
Keys: Subagents ctrl+x d, the shell console ctrl+x j, Review's placem…
Codestz Oct 4, 2026
0e6773b
Subagents: the agent column is up to eight cells, so general, explore…
Codestz Oct 4, 2026
de72b1f
OpenCode 2: a window says when the background service still runs an o…
Codestz Oct 4, 2026
d325df5
cockpit_settings and doctor list each bay's own notices: "Notices: no…
Codestz Oct 4, 2026
8938441
CHANGELOG: the stray previews line joins its bullet; the table is hea…
Codestz Oct 4, 2026
d5e2fc2
READMEs for 0.9: every default key, OpenCode 2's service restart, rea…
Codestz Oct 4, 2026
9606504
Site for 0.9: service restart on OpenCode 2, /cockpit-setup's tune ph…
Codestz Oct 4, 2026
f7faf03
set-version: pin plain entries in a plugins list too, so cli.json exa…
Codestz Oct 4, 2026
03c383b
Setup: setup.ts splits into setup/ by concern, briefAgent moves to cl…
Codestz Oct 4, 2026
8e3935b
JSONC: one parser — the Updater reads config through client's ./jsonc
Codestz Oct 4, 2026
1070789
Bays: one list and one plugin-entry reader for the settings, the bund…
Codestz Oct 4, 2026
d7148f5
Keys: every bay binds its default keys from client/catalog, and keeps…
Codestz Oct 4, 2026
1841d67
Dead code: sidebarOrder/sidebarList, loadStatusConfig, Status's own c…
Codestz Oct 4, 2026
2e870a9
Trail: the interface's one closure splits into paint, actions and dialog
Codestz Oct 4, 2026
919c942
Settings: the old-names detection moves to settings/old-names.ts
Codestz Oct 4, 2026
1d51a32
Opener: one opener in client/opener for Trail's links and Review's im…
Codestz Oct 4, 2026
642f9c9
Dependencies: @opencode-ai/plugin 1.18.33, @babel/core and @babel/pre…
Codestz Oct 4, 2026
44f8f68
Smoke: build and pack under a lock — two runs side by side shipped a …
Codestz Oct 4, 2026
7d8663e
record.ts: OpenCode 2 takes — a packed install, --standalone, and who…
Codestz Oct 4, 2026
dba1395
Trail: a real recording — the agent records its PR on its own, and /t…
Codestz Oct 4, 2026
21fe984
session tape: dockOpen lives under shell since 0.9
Codestz Oct 4, 2026
087d12f
Trail's recording on the page: the README shows the GIF, the landing …
Codestz Oct 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ jobs:
# Dependency order; already-published versions are skipped so reruns are safe.
# Dependency order matters: the bundle depends on every bay, so a bay missing from
# this list publishes a bundle whose dependency does not exist (the 0.1.0 incident).
for dir in protocol daemon client shell status review updater subagents trust opencode; do
for dir in protocol daemon client shell status review updater subagents trail trust opencode; do
name=$(jq -r .name "packages/$dir/package.json")
version=$(jq -r .version "packages/$dir/package.json")
if npm view "$name@$version" version >/dev/null 2>&1; then
Expand Down
197 changes: 197 additions & 0 deletions CHANGELOG.md

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,8 +156,9 @@ must carry explicit types or stay module-private, or `tsc` cannot name them in d
1. `packages/<feature>` named `@opencode-cockpit/<feature>`, exporting `./server` and/or `./tui`
whose default export is a plugin built from factories (`create<Feature>Server`,
`create<Feature>Tui`) that accept a `source` label and start with `claimFeature`.
2. Add it to `FEATURES` in `packages/opencode/src/features.ts` and call its factories in the
bundle's `server.ts` / `tui.ts`.
2. Add it to `BAYS` in `packages/client/src/settings.ts` — the bundle's `FEATURES`, the settings
file and doctor all read that one list — and call its factories in the bundle's `server.ts` /
`tui.ts`.
3. Add the directory to `PACKAGES` in `scripts/pack-check.ts` and to the publish loop in
`.github/workflows/release.yml`, before `opencode`.
4. A brand-new npm package cannot use Trusted Publishing until it exists. Before its first release,
Expand Down
302 changes: 275 additions & 27 deletions README.md

Large diffs are not rendered by default.

59 changes: 45 additions & 14 deletions bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file added media/trail.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added media/trail.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
"dev:install": "bun run build && bun scripts/dev-install.ts"
},
"devDependencies": {
"@babel/core": "7.28.0",
"@babel/preset-typescript": "7.27.1",
"@babel/core": "7.29.7",
"@babel/preset-typescript": "7.29.7",
"@biomejs/biome": "2.5.14",
"@types/bun": "^1.4.2",
"@xterm/addon-serialize": "^0.14.0",
Expand Down
7 changes: 7 additions & 0 deletions packages/client/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,13 @@ Subpaths, for bays:
| `@opencode-cockpit/client/server` | `ServerHost`, `dualServer`, `composeParts` — the agent half, the same way |
| `@opencode-cockpit/client/log` | `createLog`, `Log` — the shared `cockpit.log`; `COCKPIT_DEBUG=1` for detail |
| `@opencode-cockpit/client/feature` | the duplicate-load guard on its own |
| `@opencode-cockpit/client/settings` | `baySettings`, `loadSettings` — the one loader every bay reads `config.json` and `.cockpit.json` through, with its `!` notices |
| `@opencode-cockpit/client/catalog` | every setting Cockpit reads, with its type and default, and each bay's default keys and commands |
| `@opencode-cockpit/client/checks` | every notice the bays draw, for `cockpit_settings` and doctor |
| `@opencode-cockpit/client/setup` | `/cockpit-setup`: the `cockpit_settings` and `cockpit_conventions` tools and the `cockpit-setup` skill (in `skills/`) |
| `@opencode-cockpit/client/sidebar` | where a bay's block sits, from the top-level `sidebar` list |
| `@opencode-cockpit/client/design`, `/elements` | the tones, glyphs, key rows and empty blocks every bay draws with |
| `@opencode-cockpit/client/service` | OpenCode 2: whether its background service runs an older Cockpit than this window |

## Requirements

Expand Down
43 changes: 42 additions & 1 deletion packages/client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,52 @@
"./design": {
"types": "./types/design.d.ts",
"default": "./dist/design.js"
},
"./elements": {
"types": "./types/elements.d.ts",
"default": "./dist/elements.js"
},
"./settings": {
"types": "./types/settings.d.ts",
"default": "./dist/settings.js"
},
"./catalog": {
"types": "./types/catalog.d.ts",
"default": "./dist/catalog.js"
},
"./setup": {
"types": "./types/setup.d.ts",
"default": "./dist/setup.js"
},
"./brief": {
"types": "./types/brief.d.ts",
"default": "./dist/brief.js"
},
"./jsonc": {
"types": "./types/jsonc.d.ts",
"default": "./dist/jsonc.js"
},
"./plugin-entries": {
"types": "./types/plugin-entries.d.ts",
"default": "./dist/plugin-entries.js"
},
"./opener": {
"types": "./types/opener.d.ts",
"default": "./dist/opener.js"
},
"./checks": {
"types": "./types/checks.d.ts",
"default": "./dist/checks.js"
},
"./service": {
"types": "./types/service.d.ts",
"default": "./dist/service.js"
}
},
"files": [
"dist",
"types",
"skills",
"README.md",
"LICENSE"
],
Expand All @@ -60,7 +101,7 @@
},
"dependencies": {
"@opencode-cockpit/protocol": "workspace:*",
"@opencode-ai/plugin": "1.18.31"
"@opencode-ai/plugin": "1.18.33"
},
"devDependencies": {
"@opencode-cockpit/daemon": "workspace:*",
Expand Down
Loading
Loading