Skip to content

Commit cd3a58a

Browse files
author
Ryan Vogel
committed
Merge remote-tracking branch 'origin/dev' into opencode-remote-voice
# Conflicts: # bun.lock
2 parents a5614f9 + 2002f08 commit cd3a58a

296 files changed

Lines changed: 74346 additions & 7372 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/VOUCHED.td

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ adamdotdevin
1111
-agusbasari29 AI PR slop
1212
ariane-emory
1313
-atharvau AI review spamming literally every PR
14+
-borealbytes
1415
-danieljoshuanazareth
1516
-danieljoshuanazareth
1617
edemaine
@@ -21,8 +22,10 @@ jayair
2122
kitlangton
2223
kommander
2324
-opencode2026
25+
-opencodeengineer bot that spams issues
2426
r44vc0rp
2527
rekram1-node
28+
-robinmordasiewicz
2629
-spider-yamet clawdbot/llm psychosis, spam pinging the team
2730
thdxr
28-
-OpenCodeEngineer bot that spams issues
31+
-toastythebot

.github/workflows/test.yml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ jobs:
4747
4848
- name: Run unit tests
4949
run: bun turbo test
50+
env:
51+
# Bun 1.3.11 intermittently crashes on Windows during test teardown
52+
# inside the native @parcel/watcher binding. Unit CI does not rely on
53+
# the live watcher backend there, so disable it for that platform.
54+
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}
5055

5156
e2e:
5257
name: e2e (${{ matrix.settings.name }})
@@ -100,18 +105,17 @@ jobs:
100105
run: bun --cwd packages/app test:e2e:local
101106
env:
102107
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"
108+
PLAYWRIGHT_JUNIT_OUTPUT: e2e/junit-${{ matrix.settings.name }}.xml
106109
timeout-minutes: 30
107110

108111
- name: Upload Playwright artifacts
109-
if: failure()
112+
if: always()
110113
uses: actions/upload-artifact@v4
111114
with:
112115
name: playwright-${{ matrix.settings.name }}-${{ github.run_attempt }}
113116
if-no-files-found: ignore
114117
retention-days: 7
115118
path: |
119+
packages/app/e2e/junit-*.xml
116120
packages/app/e2e/test-results
117121
packages/app/e2e/playwright-report

.opencode/plugins/tui-smoke.tsx

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -653,31 +653,77 @@ const home = (api: TuiPluginApi, input: Cfg) => ({
653653
const skin = look(ctx.theme.current)
654654
type Prompt = (props: {
655655
workspaceID?: string
656+
visible?: boolean
657+
disabled?: boolean
658+
onSubmit?: () => void
656659
hint?: JSX.Element
660+
right?: JSX.Element
661+
showPlaceholder?: boolean
657662
placeholders?: {
658663
normal?: string[]
659664
shell?: string[]
660665
}
661666
}) => 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
667+
type Slot = (
668+
props: { name: string; mode?: unknown; children?: JSX.Element } & Record<string, unknown>,
669+
) => JSX.Element | null
670+
const ui = api.ui as TuiPluginApi["ui"] & { Prompt: Prompt; Slot: Slot }
671+
const Prompt = ui.Prompt
672+
const Slot = ui.Slot
666673
const normal = [
667674
`[SMOKE] route check for ${input.label}`,
668675
"[SMOKE] confirm home_prompt slot override",
669-
"[SMOKE] verify api.ui.Prompt rendering",
676+
"[SMOKE] verify prompt-right slot passthrough",
670677
]
671678
const shell = ["printf '[SMOKE] home prompt\n'", "git status --short", "bun --version"]
672-
const Hint = (
679+
const hint = (
673680
<box flexShrink={0} flexDirection="row" gap={1}>
674681
<text fg={skin.muted}>
675682
<span style={{ fg: skin.accent }}></span> smoke home prompt
676683
</text>
677684
</box>
678685
)
679686

680-
return <Prompt workspaceID={value.workspace_id} hint={Hint} placeholders={{ normal, shell }} />
687+
return (
688+
<Prompt
689+
workspaceID={value.workspace_id}
690+
hint={hint}
691+
right={
692+
<box flexDirection="row" gap={1}>
693+
<Slot name="home_prompt_right" workspace_id={value.workspace_id} />
694+
<Slot name="smoke_prompt_right" workspace_id={value.workspace_id} label={input.label} />
695+
</box>
696+
}
697+
placeholders={{ normal, shell }}
698+
/>
699+
)
700+
},
701+
home_prompt_right(ctx, value) {
702+
const skin = look(ctx.theme.current)
703+
const id = value.workspace_id?.slice(0, 8) ?? "none"
704+
return (
705+
<text fg={skin.muted}>
706+
<span style={{ fg: skin.accent }}>{input.label}</span> home:{id}
707+
</text>
708+
)
709+
},
710+
session_prompt_right(ctx, value) {
711+
const skin = look(ctx.theme.current)
712+
return (
713+
<text fg={skin.muted}>
714+
<span style={{ fg: skin.accent }}>{input.label}</span> session:{value.session_id.slice(0, 8)}
715+
</text>
716+
)
717+
},
718+
smoke_prompt_right(ctx, value) {
719+
const skin = look(ctx.theme.current)
720+
const id = typeof value.workspace_id === "string" ? value.workspace_id.slice(0, 8) : "none"
721+
const label = typeof value.label === "string" ? value.label : input.label
722+
return (
723+
<text fg={skin.muted}>
724+
<span style={{ fg: skin.accent }}>{label}</span> custom:{id}
725+
</text>
726+
)
681727
},
682728
home_bottom(ctx) {
683729
const skin = look(ctx.theme.current)

0 commit comments

Comments
 (0)