Skip to content
Merged
Show file tree
Hide file tree
Changes from 140 commits
Commits
Show all changes
146 commits
Select commit Hold shift + click to select a range
181b5f6
refactor(prompt): use Provider service in effect layers (#20167)
kitlangton Apr 1, 2026
7532d99
test: finish HTTP mock processor coverage (#20372)
kitlangton Apr 1, 2026
ca376a4
chore: update nix node_modules hashes
opencode-agent[bot] Apr 1, 2026
c8ecd64
test(app): add mock llm e2e fixture (#20375)
kitlangton Apr 1, 2026
506dd75
electron: port mergeShellEnv logic from tauri (#20192)
Brendonovich Apr 1, 2026
1df5ad4
app: try to hide autofill popups in prompt input (#20197)
Brendonovich Apr 1, 2026
47a6761
fix(session): add keyboard support to question dock (#20439)
nexxeln Apr 1, 2026
a3a6cf1
feat(comments): support file mentions (#20447)
nexxeln Apr 1, 2026
9a1c9ae
test(app): route prompt e2e through mock llm (#20383)
kitlangton Apr 1, 2026
44f8301
perf(review): defer offscreen diff mounts (#20469)
nexxeln Apr 1, 2026
5fd833a
refactor: standardize InstanceState variable name to state (#20267)
kitlangton Apr 1, 2026
d58004a
fall back to first agent if last used agent is not available
thdxr Apr 1, 2026
38d2276
test(e2e): isolate prompt tests with per-worker backend (#20464)
kitlangton Apr 1, 2026
0a125e5
chore: generate
opencode-agent[bot] Apr 1, 2026
897d83c
refactor(init): tighten AGENTS guidance (#20422)
nexxeln Apr 1, 2026
a9c85b7
refactor(shell): use Effect ChildProcess for shell command execution …
kitlangton Apr 1, 2026
2f405da
refactor: use Effect services instead of async facades in provider, a…
kitlangton Apr 1, 2026
ef538c9
chore: generate
opencode-agent[bot] Apr 1, 2026
f9e71ec
chore: update nix node_modules hashes
opencode-agent[bot] Apr 1, 2026
d1e0a46
Update VOUCHED list
github-actions[bot] Apr 1, 2026
c559af5
test(app): migrate more e2e suites to isolated backend (#20505)
kitlangton Apr 1, 2026
c619cae
fix(account): coalesce concurrent console token refreshes (#20503)
kitlangton Apr 1, 2026
f3f728e
test(app): fix isolated backend follow-ups (#20513)
kitlangton Apr 1, 2026
d7481f4
wip: zen
fwang Apr 1, 2026
c9326fc
refactor: replace BunProc with Npm module using @npmcli/arborist (#18…
thdxr Apr 1, 2026
eabf3ca
zen: sync
fwang Apr 1, 2026
880c0a7
fix: normalize filepath in FileTime to prevent Windows path mismatch …
JosXa Apr 1, 2026
cc30bfc
resolve subpath only packages for plugins (#20555)
kommander Apr 1, 2026
fa96cb9
Fix selection expansion by retaining focused input selections during …
Hona Apr 1, 2026
1fcfb69
feat: add new provider plugin hook for resolving models and sync mode…
rekram1-node Apr 1, 2026
f7f41dc
fix(tui): apply scroll configuration uniformly across all scrollboxes…
Hona Apr 1, 2026
802d165
chore(tui): clean up scroll config follow-up (#20561)
Hona Apr 1, 2026
48db7cf
fix(opencode): batch snapshot revert without reordering (#20564)
kitlangton Apr 1, 2026
d9d4f89
fix(test): auto-acknowledge tool-result follow-ups in mock LLM server…
kitlangton Apr 1, 2026
4214ae2
chore: generate
opencode-agent[bot] Apr 1, 2026
26fb6b8
refactor: add Effect-returning versions of MessageV2 functions (#20374)
kitlangton Apr 1, 2026
e4ff1ea
refactor(bash): use Effect ChildProcess for bash tool execution (#20496)
kitlangton Apr 1, 2026
854484b
chore: generate
opencode-agent[bot] Apr 1, 2026
f6fd43e
Refactor plugin/config loading, add theme-only plugin package support…
kommander Apr 1, 2026
92f8e03
fix(test): use effect helper in snapshot race test (#20567)
kitlangton Apr 2, 2026
b1c0748
refactor(revert): yield SessionSummary.Service directly (#20541)
kitlangton Apr 2, 2026
c526caa
fix: show model display name in message footer and transcript (#20539)
kitlangton Apr 2, 2026
8a8f7b3
flock npm.add (#20557)
kommander Apr 2, 2026
00d6841
fix(account): refresh console tokens before expiry (#20558)
kitlangton Apr 2, 2026
0cad775
chore: add User-Agent headers for Cloudflare providers (#20538)
mchenco Apr 2, 2026
e148b31
fix(build): replace require() with dynamic import() in cross-spawn-sp…
kitlangton Apr 2, 2026
789d86f
chore: generate
opencode-agent[bot] Apr 2, 2026
df1c6c9
tui: add consent dialog when sharing for the first time (#20525)
rekram1-node Apr 2, 2026
a09b086
test(app): block real llm calls in e2e prompts (#20579)
kitlangton Apr 2, 2026
0bae38c
refactor(instruction): migrate to Effect service pattern (#20542)
kitlangton Apr 2, 2026
2e8e278
fix(cli): use simple logo in CLI (#20585)
kitlangton Apr 2, 2026
733a3bd
fix(core): prevent agent loop from stopping after tool calls with Ope…
valenvivaldi Apr 2, 2026
5daf2fa
fix(session): compaction agent responds in same language as conversat…
aaron-he-zhu Apr 2, 2026
916afb5
refactor(account): share token freshness helper (#20591)
kitlangton Apr 2, 2026
336d28f
fix(cli): restore colored help logo (#20592)
kitlangton Apr 2, 2026
d66e6dc
feat(opencode): Add Venice AI package as dependency (#20570)
dpuyosa Apr 2, 2026
ebaa99a
chore: generate
opencode-agent[bot] Apr 2, 2026
811c7e2
cli: update usage exceeded error
fwang Apr 2, 2026
a6f524c
chore: update nix node_modules hashes
opencode-agent[bot] Apr 2, 2026
0f48899
fix(node): set OPENCODE_CHANNEL during build (#20616)
Brendonovich Apr 2, 2026
db93891
zen: friendly trial ended message
fwang Apr 2, 2026
d540d36
refactor: simplify solid reactivity across app and web (#20497)
nexxeln Apr 2, 2026
327f625
use solid-primitives/resize-observer across web code (#20613)
Brendonovich Apr 2, 2026
69d047a
cleanup event listeners with solid-primitives/event-listener (#20619)
Brendonovich Apr 2, 2026
ec3ae17
chore: update nix node_modules hashes
opencode-agent[bot] Apr 2, 2026
23c8656
refactor: split up models.dev and config model definitions to prevent…
rekram1-node Apr 2, 2026
57a5236
chore: generate
opencode-agent[bot] Apr 2, 2026
291a857
feat: add optional messageID to ShellInput (#20657)
noamzbr Apr 2, 2026
159ede2
chore: generate
opencode-agent[bot] Apr 2, 2026
510a1e8
ignore: fix typecheck in dev (#20702)
rekram1-node Apr 2, 2026
c3dfd08
fix(format): use biome format instead of check to prevent import remo…
BYK Apr 2, 2026
10ca1ac
tweak: add abort signal timeout to the github copilot model fetch to …
rekram1-node Apr 2, 2026
93a1393
Add MiMo-V2 models to Go UI and docs (#20709)
MrMushrooooom Apr 2, 2026
3faabda
refactor(format): update formatter interface to return command from e…
thdxr Apr 2, 2026
c4b3971
app: unify auto scroll ref handling (#20716)
Brendonovich Apr 2, 2026
92e820f
go: add mimo
fwang Apr 2, 2026
966d9cf
electron: add basic context menu for inspect element (#20723)
Brendonovich Apr 2, 2026
7e32f80
feat: add macOS managed preferences support for enterprise MDM deploy…
lennyvaknine43 Apr 2, 2026
f0a9ebf
chore: generate
opencode-agent[bot] Apr 2, 2026
1989704
feat(acp): Add messageID and emit user_message_chunk on prompt/comman…
noamzbr Apr 2, 2026
3638911
chore: generate
opencode-agent[bot] Apr 2, 2026
c3ef69c
test(app): add a golden path for mocked e2e prompts (#20593)
kitlangton Apr 2, 2026
f151c66
chore: update nix node_modules hashes
opencode-agent[bot] Apr 2, 2026
ae7b49b
docs(effect): refresh migration status (#20665)
kitlangton Apr 2, 2026
b5b5f7e
test(opencode): remove temporary e2e url repro (#20729)
kitlangton Apr 2, 2026
6dfb304
refactor(app): unexport internal e2e helpers (#20730)
kitlangton Apr 2, 2026
f549fde
test(app): emit junit artifacts for playwright (#20732)
kitlangton Apr 2, 2026
5e1b513
refactor(todo): effectify session todo (#20595)
kitlangton Apr 2, 2026
29f7dc0
Adds TUI prompt traits, refs, and plugin slots (#20741)
kommander Apr 2, 2026
bf26c08
chore: update nix node_modules hashes
opencode-agent[bot] Apr 2, 2026
6e1400f
dialog aware prompt cursor (#20753)
kommander Apr 2, 2026
7f45943
fix(opencode): honor model limit.input overrides (#16306)
ykswang Apr 3, 2026
8942fc2
refactor(effect): prune unused facades (#20748)
kitlangton Apr 3, 2026
38014fe
fix: rm dynamic part from bash tool description again to restore cach…
rekram1-node Apr 3, 2026
8e9e79d
refactor(share): effectify share next (#20596)
kitlangton Apr 3, 2026
eb6f1da
fix: call models.dev once instead of twice on start (#20765)
Hona Apr 3, 2026
81d3ac3
fix: prevent Tool.define() wrapper accumulation on object-defined too…
jpcarranza94 Apr 3, 2026
8daeacc
chore: generate
opencode-agent[bot] Apr 3, 2026
aa2239d
add automatic heap snapshots for high-memory cli processes (#20788)
thdxr Apr 3, 2026
e89527c
feat: Send x-session-affinity and x-parent-session-id headers (#20744)
kflansburg Apr 3, 2026
7b8dc80
fix(sdk): handle Windows opencode spawn and shutdown (#20772)
Hona Apr 3, 2026
500dcfc
chore: update nix node_modules hashes
opencode-agent[bot] Apr 3, 2026
b969066
electron: better menus (#20878)
Brendonovich Apr 3, 2026
6359d00
fix(core): fix restoring earlier messages in a reverted chain (#20780)
natewill Apr 3, 2026
c307505
fix(session): delay jump-to-bottom button (#20853)
nexxeln Apr 3, 2026
2002f08
fix(prompt): unmount model controls in shell mode (#20886)
nexxeln Apr 3, 2026
3deee3a
fix(session): disable todo dock auto-scroll (#20840)
nexxeln Apr 3, 2026
9d57f21
feat(ui): redesign modified files section in session turn (#20348)
nexxeln Apr 3, 2026
fbfa148
fix(app): hide default session timestamps (#20892)
nexxeln Apr 3, 2026
7994dce
refactor(effect): resolve built tools through the registry (#20787)
kitlangton Apr 3, 2026
263dcf7
fix: restore prompt focus after footer selection (#20841)
nexxeln Apr 3, 2026
35350b1
feat: restore git-backed review modes (#20845)
nexxeln Apr 3, 2026
a4e75a0
chore: generate
opencode-agent[bot] Apr 3, 2026
a32ffab
fix(app): show correct submit icon when typing follow up
adamdotdevin Apr 3, 2026
ae7e2eb
chore(app): remove queued follow-ups for now
adamdotdevin Apr 3, 2026
f2d4ced
refactor(effect): build todowrite tool from Todo service (#20789)
kitlangton Apr 3, 2026
c72642d
test(ci): publish unit reports in actions (#20547)
kitlangton Apr 3, 2026
fff9863
chore: rm models snapshot (#20929)
rekram1-node Apr 3, 2026
a5ec741
notes on v2 (#20941)
kommander Apr 3, 2026
650d0db
chore: generate
opencode-agent[bot] Apr 3, 2026
59ca454
refactor(provider): stop custom loaders using facades (#20776)
kitlangton Apr 4, 2026
288eb04
perf(opencode): batch snapshot diffFull blob reads (#20752)
kitlangton Apr 4, 2026
00fa68b
fix(ci): create JUnit output dirs before tests (#20959)
kitlangton Apr 4, 2026
cc50b77
release: v1.3.14
Apr 4, 2026
bcafd7a
refactor: kilo compat for v1.3.14
imanolmzd-svg Apr 13, 2026
6d224ad
resolve merge conflicts
imanolmzd-svg Apr 13, 2026
7fb55e4
refactor: align kilo codebase with opencode v1.3.14 upstream
imanolmzd-svg Apr 13, 2026
615dcc7
fix(cli): restore kilo branding in terminal wordmark
imanolmzd-svg Apr 13, 2026
bfec6b7
Merge branch 'main' into imanolmaiztegui/kilo-opencode-v1.3.14
catrielmuller Apr 13, 2026
5cf5838
feat(i18n): add session review and diff UI translation keys across al…
imanolmzd-svg Apr 13, 2026
17b7f68
style(vscode): fix indentation and formatting in legacy migration and…
imanolmzd-svg Apr 13, 2026
2e62d22
docs(kilo-docs): update source links for copilot plugin and config re…
imanolmzd-svg Apr 13, 2026
39d25be
chore(source-links): exclude GitHub Copilot API from extracted URLs
imanolmzd-svg Apr 13, 2026
3ce74d2
fix: bun lock
catrielmuller Apr 13, 2026
d333e5f
fix: turbo naming
catrielmuller Apr 13, 2026
9eef72a
fix: git identity
catrielmuller Apr 13, 2026
da8f05e
fix: core tests
catrielmuller Apr 14, 2026
a860796
Merge branch 'main' into imanolmaiztegui/kilo-opencode-v1.3.14
catrielmuller Apr 14, 2026
8983b31
refactor: update bun
catrielmuller Apr 14, 2026
ac99bb5
fix: test workflow
catrielmuller Apr 14, 2026
98d60f1
fix: test workflow concurrency
catrielmuller Apr 14, 2026
52583cd
fix: test workflow
catrielmuller Apr 14, 2026
a372104
refactor: disable filewatcher on windows
catrielmuller Apr 14, 2026
d7515f6
refactor: fix prompt / config tests
catrielmuller Apr 14, 2026
528ec93
refactor: fix home test config mocks
catrielmuller Apr 14, 2026
1606d64
fix: kilo models test
catrielmuller Apr 14, 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
  •  
  •  
  •  
42 changes: 38 additions & 4 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ concurrency:

permissions:
contents: read
# checks: write // kilocode_change
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WARNING: Removing checks: write disables the JUnit check report

mikepenz/action-junit-report@v6 creates or updates a GitHub check run by default, and its own action metadata/README explicitly requires checks: write unless you switch it to annotate_only. With this permission commented out, the Publish unit reports step can no longer publish the unit test check for PRs, so test results stop surfacing in the workflow checks.


jobs:
unit:
Expand Down Expand Up @@ -42,11 +43,42 @@ jobs:

- name: Configure git identity
run: |
git config --global user.email "bot@opencode.ai"
git config --global user.name "opencode"
git config --global user.email "kilo-maintainer[bot]@users.noreply.github.com"
git config --global user.name "kilo-maintainer[bot]"

- name: Cache Turbo
uses: actions/cache@v4
with:
path: node_modules/.cache/turbo
key: turbo-${{ runner.os }}-${{ hashFiles('turbo.json', '**/package.json') }}-${{ github.sha }}
restore-keys: |
turbo-${{ runner.os }}-${{ hashFiles('turbo.json', '**/package.json') }}-
turbo-${{ runner.os }}-

- name: Run unit tests
run: bun turbo test
run: bun turbo test:ci
env:
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: ${{ runner.os == 'Windows' && 'true' || 'false' }}

- name: Publish unit reports
if: always()
uses: mikepenz/action-junit-report@v6
with:
report_paths: packages/*/.artifacts/unit/junit.xml
check_name: "unit results (${{ matrix.settings.name }})"
detailed_summary: true
include_time_in_summary: true
fail_on_failure: false

- name: Upload unit artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: unit-${{ matrix.settings.name }}-${{ github.run_attempt }}
include-hidden-files: true
if-no-files-found: ignore
retention-days: 7
path: packages/*/.artifacts/unit/junit.xml

e2e:
# kilocode_change - disabled: packages/app is not actively maintained
Expand Down Expand Up @@ -109,16 +141,18 @@ jobs:
KILO_DISABLE_SESSION_INGEST: "true"
KILO_E2E_REQUIRE_PAID: "true"
# kilocode_change end
PLAYWRIGHT_JUNIT_OUTPUT: e2e/junit-${{ matrix.settings.name }}.xml
timeout-minutes: 30

- name: Upload Playwright artifacts
if: failure()
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-${{ matrix.settings.name }}-${{ github.run_attempt }}
if-no-files-found: ignore
retention-days: 7
path: |
packages/app/e2e/junit-*.xml
packages/app/e2e/test-results
packages/app/e2e/playwright-report

Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,7 @@ tsconfig.tsbuildinfo

# Kilo
.kilo/plans/*upstream-merge-report-*.md

# Test Artifacts
packages/app/.artifacts/
packages/opencode/.artifacts/
31 changes: 31 additions & 0 deletions .kilo/package-lock.json

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

31 changes: 31 additions & 0 deletions .kilocode/package-lock.json

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

60 changes: 53 additions & 7 deletions .opencode/plugins/tui-smoke.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -653,31 +653,77 @@ const home = (api: TuiPluginApi, input: Cfg) => ({
const skin = look(ctx.theme.current)
type Prompt = (props: {
workspaceID?: string
visible?: boolean
disabled?: boolean
onSubmit?: () => void
hint?: JSX.Element
right?: JSX.Element
showPlaceholder?: boolean
placeholders?: {
normal?: string[]
shell?: string[]
}
}) => JSX.Element
if (!("Prompt" in api.ui)) return null
const view = api.ui.Prompt
if (typeof view !== "function") return null
const Prompt = view as Prompt
type Slot = (
props: { name: string; mode?: unknown; children?: JSX.Element } & Record<string, unknown>,
) => JSX.Element | null
const ui = api.ui as TuiPluginApi["ui"] & { Prompt: Prompt; Slot: Slot }
const Prompt = ui.Prompt
const Slot = ui.Slot
const normal = [
`[SMOKE] route check for ${input.label}`,
"[SMOKE] confirm home_prompt slot override",
"[SMOKE] verify api.ui.Prompt rendering",
"[SMOKE] verify prompt-right slot passthrough",
]
const shell = ["printf '[SMOKE] home prompt\n'", "git status --short", "bun --version"]
const Hint = (
const hint = (
<box flexShrink={0} flexDirection="row" gap={1}>
<text fg={skin.muted}>
<span style={{ fg: skin.accent }}>•</span> smoke home prompt
</text>
</box>
)

return <Prompt workspaceID={value.workspace_id} hint={Hint} placeholders={{ normal, shell }} />
return (
<Prompt
workspaceID={value.workspace_id}
hint={hint}
right={
<box flexDirection="row" gap={1}>
<Slot name="home_prompt_right" workspace_id={value.workspace_id} />
<Slot name="smoke_prompt_right" workspace_id={value.workspace_id} label={input.label} />
</box>
}
placeholders={{ normal, shell }}
/>
)
},
home_prompt_right(ctx, value) {
const skin = look(ctx.theme.current)
const id = value.workspace_id?.slice(0, 8) ?? "none"
return (
<text fg={skin.muted}>
<span style={{ fg: skin.accent }}>{input.label}</span> home:{id}
</text>
)
},
session_prompt_right(ctx, value) {
const skin = look(ctx.theme.current)
return (
<text fg={skin.muted}>
<span style={{ fg: skin.accent }}>{input.label}</span> session:{value.session_id.slice(0, 8)}
</text>
)
},
smoke_prompt_right(ctx, value) {
const skin = look(ctx.theme.current)
const id = typeof value.workspace_id === "string" ? value.workspace_id.slice(0, 8) : "none"
const label = typeof value.label === "string" ? value.label : input.label
return (
<text fg={skin.muted}>
<span style={{ fg: skin.accent }}>{label}</span> custom:{id}
</text>
)
},
home_bottom(ctx) {
const skin = look(ctx.theme.current)
Expand Down
Loading
Loading