Skip to content

Commit 36b51ca

Browse files
authored
Merge branch 'dev' into opencode-remote-voice
2 parents 776e61d + 434d82b commit 36b51ca

211 files changed

Lines changed: 69053 additions & 34594 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/docs-locale-sync.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ on:
99

1010
jobs:
1111
sync-locales:
12-
if: github.actor != 'opencode-agent[bot]'
12+
if: false
13+
#if: github.actor != 'opencode-agent[bot]'
1314
runs-on: blacksmith-4vcpu-ubuntu-2404
1415
permissions:
1516
contents: write
@@ -34,7 +35,7 @@ jobs:
3435
- name: Compute changed English docs
3536
id: changes
3637
run: |
37-
FILES=$(git diff --name-only "${{ github.event.before }}" "${{ github.sha }}" -- 'packages/web/src/content/docs/*.mdx' || true)
38+
FILES=$(git diff --name-only "${{ github.event.before }}" "${{ github.sha }}" -- ':(glob)packages/web/src/content/docs/*.mdx' || true)
3839
if [ -z "$FILES" ]; then
3940
echo "has_changes=false" >> "$GITHUB_OUTPUT"
4041
echo "No English docs changed in push range"

.github/workflows/nix-hashes.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@ on:
1717
- "patches/**"
1818
- ".github/workflows/nix-hashes.yml"
1919

20+
concurrency:
21+
group: ${{ github.workflow }}-${{ github.ref }}
22+
cancel-in-progress: true
23+
2024
jobs:
2125
# Native runners required: bun install cross-compilation flags (--os/--cpu)
2226
# do not produce byte-identical node_modules as native installs.

.github/workflows/test.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ jobs:
100100
run: bun --cwd packages/app test:e2e:local
101101
env:
102102
CI: true
103+
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
104+
OPENCODE_E2E_MODEL: opencode/claude-haiku-4-5
105+
OPENCODE_E2E_REQUIRE_PAID: "true"
103106
timeout-minutes: 30
104107

105108
- name: Upload Playwright artifacts

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ target
2525

2626
# Local dev files
2727
opencode-dev
28+
UPCOMING_CHANGELOG.md
2829
logs/
2930
*.bun-build
3031
tsconfig.tsbuildinfo

.opencode/command/changelog.md

Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,46 @@
11
---
2-
model: opencode/kimi-k2.5
2+
model: opencode/gpt-5.4
33
---
44

5-
create UPCOMING_CHANGELOG.md
6-
7-
it should have sections
8-
9-
```
10-
## TUI
11-
12-
## Desktop
13-
14-
## Core
15-
16-
## Misc
17-
```
18-
19-
fetch the latest github release for this repository to determine the last release version.
20-
21-
find each PR that was merged since the last release
22-
23-
for each PR spawn a subagent to summarize what the PR was about. focus on user facing changes. if it was entirely internal or code related you can ignore it. also skip docs updates. each subagent should append its summary to UPCOMING_CHANGELOG.md into the appropriate section.
5+
Create `UPCOMING_CHANGELOG.md` from the structured changelog input below.
6+
If `UPCOMING_CHANGELOG.md` already exists, ignore its current contents completely.
7+
Do not preserve, merge, or reuse text from the existing file.
8+
9+
The input already contains the exact commit range since the last non-draft release.
10+
The commits are already filtered to the release-relevant packages and grouped into
11+
the release sections. Do not fetch GitHub releases, PRs, or build your own commit list.
12+
The input may also include a `## Community Contributors Input` section.
13+
14+
Before writing any entry you keep, inspect the real diff with
15+
`git show --stat --format='' <hash>` or `git show --format='' <hash>` so you can
16+
understand the actual code changes and not just the commit message (they may be misleading).
17+
Do not use `git log` or author metadata when deciding attribution.
18+
19+
Rules:
20+
21+
- Write the final file with sections in this order:
22+
`## Core`, `## TUI`, `## Desktop`, `## SDK`, `## Extensions`
23+
- Only include sections that have at least one notable entry
24+
- Keep one bullet per commit you keep
25+
- Skip commits that are entirely internal, CI, tests, refactors, or otherwise not user-facing
26+
- Start each bullet with a capital letter
27+
- Prefer what changed for users over what code changed internally
28+
- Do not copy raw commit prefixes like `fix:` or `feat:` or trailing PR numbers like `(#123)`
29+
- Community attribution is deterministic: only preserve an existing `(@username)` suffix from the changelog input
30+
- If an input bullet has no `(@username)` suffix, do not add one
31+
- Never add a new `(@username)` suffix from `git show`, commit authors, names, or email addresses
32+
- If no notable entries remain and there is no contributor block, write exactly `No notable changes.`
33+
- If no notable entries remain but there is a contributor block, omit all release sections and return only the contributor block
34+
- If the input contains `## Community Contributors Input`, append the block below that heading to the end of the final file verbatim
35+
- Do not add, remove, rewrite, or reorder contributor names or commit titles in that block
36+
- Do not derive the thank-you section from the main summary bullets
37+
- Do not include the heading `## Community Contributors Input` in the final file
38+
- Focus on writing the least words to get your point across - users will skim read the changelog, so we should be precise
39+
40+
**Importantly, the changelog is for users (who are at least slightly technical), they may use the TUI, Desktop, SDK, Plugins and so forth. Be thorough in understanding flow on effects may not be immediately apparent. e.g. a package upgrade looks internal but may patch a bug. Or a refactor may also stabilise some race condition that fixes bugs for users. The PR title/body + commit message will give you the authors context, usually containing the outcome not just technical detail**
41+
42+
<changelog_input>
43+
44+
!`bun script/raw-changelog.ts $ARGUMENTS`
45+
46+
</changelog_input>

.opencode/plugins/tui-smoke.tsx

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/** @jsxImportSource @opentui/solid */
2-
import { useKeyboard, useTerminalDimensions } from "@opentui/solid"
2+
import { useKeyboard, useTerminalDimensions, type JSX } from "@opentui/solid"
33
import { RGBA, VignetteEffect } from "@opentui/core"
44
import type {
55
TuiKeybindSet,
@@ -615,7 +615,7 @@ const Modal = (props: {
615615
)
616616
}
617617

618-
const home = (input: Cfg): TuiSlotPlugin => ({
618+
const home = (api: TuiPluginApi, input: Cfg) => ({
619619
slots: {
620620
home_logo(ctx) {
621621
const map = ctx.theme.current
@@ -649,6 +649,36 @@ const home = (input: Cfg): TuiSlotPlugin => ({
649649
</box>
650650
)
651651
},
652+
home_prompt(ctx, value) {
653+
const skin = look(ctx.theme.current)
654+
type Prompt = (props: {
655+
workspaceID?: string
656+
hint?: JSX.Element
657+
placeholders?: {
658+
normal?: string[]
659+
shell?: string[]
660+
}
661+
}) => JSX.Element
662+
if (!("Prompt" in api.ui)) return null
663+
const view = api.ui.Prompt
664+
if (typeof view !== "function") return null
665+
const Prompt = view as Prompt
666+
const normal = [
667+
`[SMOKE] route check for ${input.label}`,
668+
"[SMOKE] confirm home_prompt slot override",
669+
"[SMOKE] verify api.ui.Prompt rendering",
670+
]
671+
const shell = ["printf '[SMOKE] home prompt\n'", "git status --short", "bun --version"]
672+
const Hint = (
673+
<box flexShrink={0} flexDirection="row" gap={1}>
674+
<text fg={skin.muted}>
675+
<span style={{ fg: skin.accent }}></span> smoke home prompt
676+
</text>
677+
</box>
678+
)
679+
680+
return <Prompt workspaceID={value.workspace_id} hint={Hint} placeholders={{ normal, shell }} />
681+
},
652682
home_bottom(ctx) {
653683
const skin = look(ctx.theme.current)
654684
const text = "extra content in the unified home bottom slot"
@@ -706,8 +736,8 @@ const block = (input: Cfg, order: number, title: string, text: string): TuiSlotP
706736
},
707737
})
708738

709-
const slot = (input: Cfg): TuiSlotPlugin[] => [
710-
home(input),
739+
const slot = (api: TuiPluginApi, input: Cfg): TuiSlotPlugin[] => [
740+
home(api, input),
711741
block(input, 50, "Smoke above", "renders above internal sidebar blocks"),
712742
block(input, 250, "Smoke between", "renders between internal sidebar blocks"),
713743
block(input, 650, "Smoke below", "renders below internal sidebar blocks"),
@@ -848,7 +878,7 @@ const tui: TuiPlugin = async (api, options, meta) => {
848878
])
849879

850880
reg(api, value, keys)
851-
for (const item of slot(value)) {
881+
for (const item of slot(api, value)) {
852882
api.slots.register(item)
853883
}
854884
}

0 commit comments

Comments
 (0)