Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
101 commits
Select commit Hold shift + click to select a range
133b1eb
sync release versions for v2.1.1 [skip ci]
Oct 20, 2026
50c5fce
chore(function): remove remaining share endpoints (#57328)
thdxr Oct 20, 2026
89d996c
fix(core): keep locations with running sessions or background jobs (#…
jlongster Oct 20, 2026
a62028d
feat(console): add hCaptcha to enterprise form (#57439)
vimtor Oct 20, 2026
5916014
refactor(console): remove Jev spam scoring from enterprise form (#57446)
vimtor Oct 20, 2026
772e2ae
chore(console): remove legacy Console leftovers from the website (#57…
vimtor Oct 20, 2026
c8e2e1e
fix(core): reuse recent Console config checks for rejected inference …
thdxr Oct 20, 2026
3b593dd
fix(codemode): run each job to completion (#54276)
RhysSullivan Oct 20, 2026
0718864
feat(console): restore fail-open Jev spam scoring on the enterprise f…
vimtor Oct 20, 2026
a13c48b
fix(ai): send expires_after.anchor for OpenAI realtime client secrets…
kitlangton Oct 20, 2026
d898c04
feat(core): add experimental.location_idle_timeout (#57476)
rekram1-node Oct 20, 2026
3fdb13b
fix(stats): retry failed syncs instead of waiting an hour (#57516)
adamdotdevin Oct 20, 2026
2cb963c
docs(console): add Muse Wonder 1.0
fwang Oct 20, 2026
4424391
fix(install): create ~/.zshrc when it's missing so opencode lands on …
kitlangton Oct 20, 2026
db1fbe8
fix(desktop): upgrade Electron to 44.9.1 (#57533)
opencode-agent[bot] Oct 20, 2026
a9fa57b
feat(core): typed free-limit error with reset time (#57146)
kitlangton Oct 20, 2026
552f867
chore: update nix node_modules hashes
opencode-agent[bot] Oct 20, 2026
f2a3414
chore(infra): delete legacy share storage (#57548)
thdxr Oct 20, 2026
86a0950
feat(tui): show free-limit notice, recall prompt, and skip failure to…
kitlangton Oct 20, 2026
5c3891e
fix(app): restore free-tier usage limit dialog, timeline line, and pr…
kitlangton Oct 20, 2026
5fa426f
chore(core): refresh bundled models.dev snapshot
opencode-agent[bot] Oct 21, 2026
adcda1b
feat(tui): restore animated Go upsell modal on free usage limit (#57471)
kitlangton Oct 21, 2026
7d3752c
fix(core): send legacy console.opencode.ai credentials to opencode.ai…
thdxr Oct 21, 2026
80b8762
fix(core): forward retryAfterMs across provider session errors (#57589)
rekram1-node Oct 21, 2026
dbe08dd
fix(tui): only show location unavailable when the server reports it m…
rekram1-node Oct 21, 2026
aadd4d8
feat(core): add OPENCODE_DISABLE_FREE_MODELS to hide free models (#57…
thdxr Oct 21, 2026
0ceeb24
chore(cli): update opentunnel client (#57287)
rekram1-node Oct 21, 2026
aae5214
chore: update nix node_modules hashes
opencode-agent[bot] Oct 21, 2026
678e49d
refactor(ai): remove unused WebSocket jsonTransport (#57611)
rekram1-node Oct 21, 2026
6843fb7
refactor(ai): reuse JsonObject, ProviderMetadata, and responseHttp ac…
rekram1-node Oct 21, 2026
c600cdd
refactor(ai,core): drop redundant typeof check on endpoint.baseURL (#…
rekram1-node Oct 21, 2026
5c52626
fix(core): generate titles at the lowest model variant (#51939)
rekram1-node Oct 21, 2026
51626ee
refactor(ai): tighten EvaluationRequest typing and deduplicate reques…
rekram1-node Oct 21, 2026
cc996ee
refactor(ai): deduplicate JSON, record, and URL query helpers (#57604)
rekram1-node Oct 21, 2026
35a2cf3
refactor(ai): replace loose Schema.Unknown and catch-all union checks…
rekram1-node Oct 21, 2026
4b50f5c
sync release versions for v2.1.2 [skip ci]
Oct 21, 2026
8c60f94
refactor(ai): use typed choice.usage in openai-chat parser (#57596)
rekram1-node Oct 21, 2026
b991ba8
refactor(ai): remove redundant runtime type checks on schema-decoded …
rekram1-node Oct 21, 2026
c9b5a9f
refactor(ai): remove dead option/schema helpers and use knownString (…
rekram1-node Oct 21, 2026
17ebb66
chore(function): remove exchange_github_app_token_with_pat route (#57…
thdxr Oct 21, 2026
15adc3d
fix(core): send only changed entries in instruction updates (#57626)
rekram1-node Oct 21, 2026
94bc566
fix(core): keep unsupported MCP media out of tool attachments (#57640)
rekram1-node Oct 21, 2026
c3b613c
fix(core): resolve relative directories during V1 migration (#57618)
MohammadAlMasalmeh Oct 21, 2026
d2812d1
fix(core): tighten session title prompt (#57648)
rekram1-node Oct 21, 2026
a2cb1c4
refactor(ai): use OpenAIChat assistant hook and drop OpenRouterBody c…
rekram1-node Oct 21, 2026
79fd806
feat(server): list experimental voice models (#57194)
kitlangton Oct 21, 2026
4d59657
fix(console): remove free model daily request quota from Go FAQ (#57663)
opencode-agent[bot] Oct 21, 2026
3a1f9a9
docs(go): end Step 5 Preview usage promotion (#57718)
opencode-agent[bot] Oct 21, 2026
681156c
chore(core): refresh bundled models.dev snapshot
opencode-agent[bot] Oct 21, 2026
578d422
ci: remove the /review workflow (#57796)
jlongster Oct 21, 2026
9141363
ci: scope pr-management down to the contributor label (#57795)
jlongster Oct 21, 2026
c3712e0
ci: remove the duplicate-issues workflow (#57793)
jlongster Oct 21, 2026
b2f83b5
ci: remove the /oc workflow from this repository (#57798)
jlongster Oct 21, 2026
0c6be86
chore(function): remove unauthenticated feishu bridge route (#57792)
opencode-agent[bot] Oct 21, 2026
f7577a1
feat(server): start hosted GPT-Live on the connected OpenCode Console…
adamdotdevin Oct 21, 2026
f9098c9
fix(function): scope GitHub App installation token to the verified re…
thdxr Oct 21, 2026
870ab9d
fix(core): let configured provider baseURL override catalog model end…
opencode-agent[bot] Oct 21, 2026
002d7bd
fix(app): stop following the timeline end while dragging the scrollba…
jlongster Oct 21, 2026
ab249a9
fix(ai): skip non-cacheable content parts when placing cache breakpoi…
rekram1-node Oct 21, 2026
93bf002
refactor(core): reuse shared isRecord and stringify helpers (#57826)
rekram1-node Oct 21, 2026
9c8e9e4
refactor(core): remove unused NamedError, ConfigErrorV1, and iife hel…
rekram1-node Oct 21, 2026
2fde77c
feat(app): animate the Go upsell hero in the free-limit dialog (#57694)
kitlangton Oct 21, 2026
3108505
docs(console): add Flint 40B Free (#57862)
opencode-agent[bot] Oct 21, 2026
d75c6b9
docs(www): fix GPT 6.1 Sol cached read price (#57865)
opencode-agent[bot] Oct 21, 2026
8a360e1
docs(cli): document the opencode debug subcommands (#57861)
oke3 Oct 21, 2026
d10692e
docs: describe agent creation without the removed CLI command (#57419)
aniruddhaadak80 Oct 21, 2026
0c8e7a9
fix(core): preserve Permission.Error in FileAccess.Interface (#57823)
rekram1-node Oct 21, 2026
bddf534
refactor(core): remove redundant DeepMutable wrappers and casts in in…
rekram1-node Oct 21, 2026
e37f1a0
refactor(ai): use Schema Json codec in toolResultText and forward Bed…
rekram1-node Oct 21, 2026
863ea41
refactor(ai): type Bedrock event-stream frames without casts or runti…
rekram1-node Oct 21, 2026
6dfc681
refactor(core): avoid redundant decode and re-branding in session inb…
rekram1-node Oct 21, 2026
a7a508b
refactor(ai-sdk): decode JSON body record in one pass and tighten opt…
rekram1-node Oct 21, 2026
2e5a4de
refactor(core): tighten pty, plugin, question, and snapshot types and…
rekram1-node Oct 21, 2026
3260ec7
fix(core): map legacy apply_patch permissions to edit (#57900)
rekram1-node Oct 21, 2026
e98ab91
refactor(core): drop redundant String casts on Model.Ref in to-llm-me…
rekram1-node Oct 21, 2026
6709f56
fix(core): give compaction summaries the same output limit as normal …
rekram1-node Oct 21, 2026
e441daf
fix(cli): move the Windows service port out of the WSL mirrored range…
neriousy Oct 21, 2026
c2736fc
feat(app): highlight code with @pierre/highlights instead of Shiki (#…
Hona Oct 21, 2026
f0200df
chore: update nix node_modules hashes
opencode-agent[bot] Oct 21, 2026
7456ad8
chore(core): refresh bundled models.dev snapshot
opencode-agent[bot] Oct 22, 2026
7012c9d
refactor(core): avoid redundant payload decoding in session inbox and…
rekram1-node Oct 22, 2026
c87f6b7
fix(core): validate compaction keepID with SessionMessage.ID schema (…
rekram1-node Oct 22, 2026
b6c0327
refactor(core): drop redundant reconstructions in rpc and project (#5…
rekram1-node Oct 22, 2026
9496ff8
refactor(core): replace unused runtime input schemas with types in fi…
rekram1-node Oct 22, 2026
6a5f15a
fix(core): ignore unsupported agent colors (#57910)
rekram1-node Oct 22, 2026
1b1ad48
refactor(core): drop dead checks and redundant branding in tool plugi…
rekram1-node Oct 22, 2026
eeb9124
refactor(core): tighten worktree strategy and pty schemas and decode …
rekram1-node Oct 22, 2026
cef9718
refactor(core): drop redundant branding and re-validation across sess…
rekram1-node Oct 22, 2026
cfcf754
refactor(core): drop redundant decoding and branding in config, agent…
rekram1-node Oct 22, 2026
d26b612
refactor(core): tighten publish-llm-event types and hoist NativeWindo…
rekram1-node Oct 22, 2026
248bfbe
refactor(core): validate codemode fetch display args and drop unused …
rekram1-node Oct 22, 2026
c93aaae
fix(tui): degrade gracefully when fs.watch fails (#51536)
ANSHSINGH050404 Oct 22, 2026
4d120d4
fix(stats): include Go Plus usage (#58075)
adamdotdevin Oct 22, 2026
f7d5b6f
fix(app): paste plain text when renaming session tabs (#58036)
opencode-agent[bot] Oct 22, 2026
da87177
fix(desktop): stop RPM build-id links conflicting with other Electron…
opencode-agent[bot] Oct 22, 2026
37d9737
chore: bump Bun to 1.4.4 (#58087)
opencode-agent[bot] Oct 22, 2026
0d8ae9b
chore(upstream): sync v2.1.3 (37d973754ba)
marius-kilocode Oct 23, 2026
021d6b3
Merge remote-tracking branch 'origin/v2' into sync-v2-1-3
marius-kilocode Oct 23, 2026
80b53bc
docs(migration): baseline for v2.1.3
marius-kilocode Oct 23, 2026
d75e693
Merge remote-tracking branch 'origin/v2' into sync-v2-1-3
marius-kilocode Oct 23, 2026
5c251c1
docs(migration): update v2.1.3 baseline after merging v2
marius-kilocode Oct 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,64 @@

Release notes for OpenCode V2, newest first.

## v2.1.2 — 2026-10-21

### Highlights

- **Clear Free-Limit Recovery**: When your free messages run out, Desktop and the TUI now show the reset time, restore your submitted prompt, and offer direct upgrade or model-switching actions instead of a generic error. ([#57466](https://github.com/anomalyco/opencode/pull/57466), [#57467](https://github.com/anomalyco/opencode/pull/57467), [#57471](https://github.com/anomalyco/opencode/pull/57471))
- **Hide Free Models**: Set `OPENCODE_DISABLE_FREE_MODELS=1` or `true` to remove zero-cost models from OpenCode and OpenCode Go catalogs, defaults, and fallbacks. ([#57478](https://github.com/anomalyco/opencode/pull/57478))
- **Configurable Location Unloading**: Set `experimental.location_idle_timeout` to a duration such as `"4 hours"`, or to `false`, to control when inactive location services unload. ([#57476](https://github.com/anomalyco/opencode/pull/57476))
- **Reliable Fresh Installs**: The installer now creates `~/.zshrc` or Fish’s `config.fish` when missing, adds OpenCode to `PATH`, and tells you to run `exec $SHELL`. ([#57348](https://github.com/anomalyco/opencode/pull/57348))

### Core

#### Improvements

- Added `OPENCODE_DISABLE_FREE_MODELS` for hiding free OpenCode and OpenCode Go models. ([#57478](https://github.com/anomalyco/opencode/pull/57478))
- Added `experimental.location_idle_timeout`, accepting a duration string or `false`. ([#57476](https://github.com/anomalyco/opencode/pull/57476))

#### Bug fixes

- Fixed fresh zsh and Fish installations not adding OpenCode to `PATH` when their configuration file did not exist. ([#57348](https://github.com/anomalyco/opencode/pull/57348))
- Kept locations loaded while sessions are waiting for input, running long tools, or owning background jobs. ([#57416](https://github.com/anomalyco/opencode/pull/57416))
- Fixed legacy `console.opencode.ai` credentials not being forwarded to `opencode.ai/console`. ([#57588](https://github.com/anomalyco/opencode/pull/57588))
- Reused recent Console configuration checks when inference is rejected, avoiding unnecessary repeated checks. ([#57465](https://github.com/anomalyco/opencode/pull/57465))

### TUI

#### Improvements

- Added an inline free-limit notice with the reset time and `/connect` and `/models` actions, while restoring the submitted prompt when the composer is empty. ([#57467](https://github.com/anomalyco/opencode/pull/57467))
- Restored the animated “Free limit reached” OpenCode Go dialog with **Subscribe**, **Dismiss**, and **Don’t show again** actions. ([#57471](https://github.com/anomalyco/opencode/pull/57471))

#### Bug fixes

- Stopped showing redundant failure notifications when the free-message limit is reached. ([#57467](https://github.com/anomalyco/opencode/pull/57467))
- Only shows “location unavailable” when the server explicitly reports the location as missing. ([#57594](https://github.com/anomalyco/opencode/pull/57594))

### Desktop

#### Bug fixes

- Restored the free-limit dialog, reset-time timeline notice, and submitted prompt after free usage is exhausted. Subscribing to OpenCode Go now updates the current session’s model instead of opening another draft. ([#57466](https://github.com/anomalyco/opencode/pull/57466))

### SDK

#### Improvements

- Added `retryAfterMs` to structured session errors so clients can display provider-supplied retry timing. ([#57146](https://github.com/anomalyco/opencode/pull/57146))

#### Bug fixes

- Fixed retry timing being dropped from quota, rate-limit, and provider-internal session errors. ([#57589](https://github.com/anomalyco/opencode/pull/57589))
- Fixed OpenAI realtime client-secret requests by supplying the required `expires_after.anchor`.

### Extensions

#### Bug fixes

- Fixed Code Mode async jobs interleaving in the middle of statements and losing writes, while preserving concurrent tool calls. Thanks [@RhysSullivan](https://github.com/RhysSullivan)! ([#54276](https://github.com/anomalyco/opencode/pull/54276))

## v2.1.0 — 2026-10-20

### Highlights
Expand Down
81 changes: 37 additions & 44 deletions bun.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion bunfig.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
exact = true
# Only install newly resolved package versions published at least 3 days ago.
minimumReleaseAge = 259200
minimumReleaseAgeExcludes = ["@ai-sdk/amazon-bedrock", "@ai-sdk/anthropic", "@brendonovich/vite-plugin-opencode", "@kitlangton/solid-motion", "@opencode/sdk", "@opencode-ai/pty", "@opencode-ai/pty-darwin-arm64", "@opencode-ai/pty-darwin-x64", "@opencode-ai/pty-linux-arm64-gnu", "@opencode-ai/pty-linux-arm64-musl", "@opencode-ai/pty-linux-x64-gnu", "@opencode-ai/pty-linux-x64-musl", "@opencode-ai/pty-win32-arm64", "@opencode-ai/pty-win32-x64", "@opentui/core", "@opentui/core-darwin-arm64", "@opentui/core-darwin-x64", "@opentui/core-linux-arm64", "@opentui/core-linux-arm64-musl", "@opentui/core-linux-x64", "@opentui/core-linux-x64-musl", "@opentui/core-win32-arm64", "@opentui/core-win32-x64", "@opentui/keymap", "@opentui/solid", "@opentunnel/client", "@opentunnel/protocol", "gitlab-ai-provider", "opencode-gitlab-auth", "@ff-labs/fff-node", "@ff-labs/fff-bun", "@ff-labs/fff-bin-darwin-arm64", "@ff-labs/fff-bin-darwin-x64", "@ff-labs/fff-bin-linux-arm64-gnu", "@ff-labs/fff-bin-linux-arm64-musl", "@ff-labs/fff-bin-linux-x64-gnu", "@ff-labs/fff-bin-linux-x64-musl", "@ff-labs/fff-bin-win32-arm64", "@ff-labs/fff-bin-win32-x64", "@pierre/diffs", "@pierre/theming", "app-builder-lib", "dmg-builder", "electron", "electron-builder", "electron-publish", "blume", "mermaid"]
minimumReleaseAgeExcludes = ["@ai-sdk/amazon-bedrock", "@ai-sdk/anthropic", "@brendonovich/vite-plugin-opencode", "@kitlangton/solid-motion", "@opencode/sdk", "@opencode-ai/pty", "@opencode-ai/pty-darwin-arm64", "@opencode-ai/pty-darwin-x64", "@opencode-ai/pty-linux-arm64-gnu", "@opencode-ai/pty-linux-arm64-musl", "@opencode-ai/pty-linux-x64-gnu", "@opencode-ai/pty-linux-x64-musl", "@opencode-ai/pty-win32-arm64", "@opencode-ai/pty-win32-x64", "@opentui/core", "@opentui/core-darwin-arm64", "@opentui/core-darwin-x64", "@opentui/core-linux-arm64", "@opentui/core-linux-arm64-musl", "@opentui/core-linux-x64", "@opentui/core-linux-x64-musl", "@opentui/core-win32-arm64", "@opentui/core-win32-x64", "@opentui/keymap", "@opentui/solid", "@opentunnel/client", "@opentunnel/protocol", "gitlab-ai-provider", "opencode-gitlab-auth", "@ff-labs/fff-node", "@ff-labs/fff-bun", "@ff-labs/fff-bin-darwin-arm64", "@ff-labs/fff-bin-darwin-x64", "@ff-labs/fff-bin-linux-arm64-gnu", "@ff-labs/fff-bin-linux-arm64-musl", "@ff-labs/fff-bin-linux-x64-gnu", "@ff-labs/fff-bin-linux-x64-musl", "@ff-labs/fff-bin-win32-arm64", "@ff-labs/fff-bin-win32-x64", "@pierre/diffs", "@pierre/highlights", "@pierre/theming", "app-builder-lib", "dmg-builder", "electron", "electron-builder", "electron-publish", "blume", "mermaid", "bun-types"]

[test]
root = "./do-not-run-tests-from-root"
4 changes: 2 additions & 2 deletions github/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -119,15 +119,15 @@ To test locally:
MODEL=anthropic/claude-sonnet-4-20250514 \
ANTHROPIC_API_KEY=sk-ant-api03-1234567890 \
GITHUB_RUN_ID=dummy \
MOCK_TOKEN=github_pat_1234567890 \
TOKEN=github_pat_1234567890 \
MOCK_EVENT='{"eventName":"issue_comment",...}' \
bun /path/to/opencode/github/index.ts
```

- `MODEL`: The model used by opencode. Same as the `MODEL` defined in the GitHub workflow.
- `ANTHROPIC_API_KEY`: Your model provider API key. Same as the keys defined in the GitHub workflow.
- `GITHUB_RUN_ID`: Dummy value to emulate GitHub action environment.
- `MOCK_TOKEN`: A GitHub personal access token. This token is used to verify you have `admin` or `write` access to the test repo. Generate a token [here](https://github.com/settings/personal-access-tokens).
- `TOKEN`: A GitHub personal access token with write access to the test repo, used directly for GitHub API calls. Generate a token [here](https://github.com/settings/personal-access-tokens).
- `MOCK_EVENT`: Mock GitHub event payload (see templates below).
- `/path/to/opencode`: Path to your cloned opencode repo. `bun /path/to/opencode/github/index.ts` runs your local version of `opencode`.

Expand Down
32 changes: 9 additions & 23 deletions github/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,6 @@ function useEnvShare() {
function useEnvMock() {
return {
mockEvent: process.env["MOCK_EVENT"],
mockToken: process.env["MOCK_TOKEN"],
}
}

Expand All @@ -343,8 +342,7 @@ function useEnvGithubToken() {
}

function isMock() {
const { mockEvent, mockToken } = useEnvMock()
return Boolean(mockEvent || mockToken)
return Boolean(useEnvMock().mockEvent)
}

function isPullRequest() {
Expand All @@ -367,29 +365,17 @@ function useShareUrl() {
}

async function getAccessToken() {
const { repo } = useContext()

const envToken = useEnvGithubToken()
if (envToken) return envToken
if (isMock()) throw new Error("TOKEN is required when running with MOCK_EVENT")

let response
if (isMock()) {
response = await fetch("https://api.opencode.ai/exchange_github_app_token_with_pat", {
method: "POST",
headers: {
Authorization: `Bearer ${useEnvMock().mockToken}`,
},
body: JSON.stringify({ owner: repo.owner, repo: repo.repo }),
})
} else {
const oidcToken = await core.getIDToken("opencode-github-action")
response = await fetch("https://api.opencode.ai/exchange_github_app_token", {
method: "POST",
headers: {
Authorization: `Bearer ${oidcToken}`,
},
})
}
const oidcToken = await core.getIDToken("opencode-github-action")
const response = await fetch("https://api.opencode.ai/exchange_github_app_token", {
method: "POST",
headers: {
Authorization: `Bearer ${oidcToken}`,
},
})

if (!response.ok) {
const responseJson = (await response.json()) as { error?: string }
Expand Down
17 changes: 17 additions & 0 deletions install
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,7 @@ fi
install_legacy_shim


path_added=false
add_to_path() {
local config_file=$1
local command=$2
Expand All @@ -375,6 +376,7 @@ add_to_path() {
elif [[ -w $config_file ]]; then
echo -e "\n# opencode" >> "$config_file"
echo "$command" >> "$config_file"
path_added=true
print_message info "${MUTED}Successfully added ${NC}opencode ${MUTED}to \$PATH in ${NC}$config_file"
else
print_message warning "Manually add the directory to $config_file (or similar):"
Expand Down Expand Up @@ -416,6 +418,18 @@ if [[ "$no_modify_path" != "true" ]]; then
fi
done

# A new Mac has no ~/.zshrc, so create the shell's main config file rather than leaving opencode off PATH.
if [[ -z $config_file ]]; then
case $current_shell in
zsh) new_config_file="${ZDOTDIR:-$HOME}/.zshrc" ;;
fish) new_config_file="$HOME/.config/fish/config.fish" ;;
*) new_config_file="" ;;
esac
if [[ -n $new_config_file ]] && mkdir -p "$(dirname "$new_config_file")" 2>/dev/null && touch "$new_config_file" 2>/dev/null; then
config_file=$new_config_file
fi
fi

if [[ -z $config_file ]]; then
print_message warning "No config file found for $current_shell. You may need to manually add to PATH:"
print_message info " export PATH=$INSTALL_DIR:\$PATH"
Expand Down Expand Up @@ -459,6 +473,9 @@ echo -e ""
echo -e ""
echo -e "${MUTED}OpenCode includes free models, to start:${NC}"
echo -e ""
if [[ $path_added == "true" ]]; then
echo -e "exec \$SHELL ${MUTED}# Reload PATH (or open a new terminal)${NC}"
fi
echo -e "cd <project> ${MUTED}# Open directory${NC}"
echo -e "opencode ${MUTED}# Run command${NC}"
echo -e ""
Expand Down
37 changes: 35 additions & 2 deletions migration-tracking/technical-notes/baseline/pinned-v2-baseline.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,43 @@
# Pinned upstream v2 baseline

Status: living. Refreshed 2026-10-23 on the `v2.1.1` sync branch `sync-v2-1-1`, synced to upstream `v2.1.1`. The base moves with every upstream sync (plan A4), so re-measure after each sync. The 2026-10-16 capture at `v2.0.30` and the 2026-10-11 capture at the initial base are kept below as previous captures. The 2026-08-13 capture at `76dbaf20` (old branch `johnnyeric/v2-baseline`) survives in git history only.
Status: living. Refreshed 2026-10-23 on the `v2.1.3` sync branch `sync-v2-1-3`, synced to upstream `v2.1.3` (the sync includes `v2.1.2`). The base moves with every upstream sync (plan A4), so re-measure after each sync. The `v2.1.1` capture (2026-10-23), the 2026-10-16 capture at `v2.0.30` and the 2026-10-11 capture at the initial base are kept below as previous captures. The 2026-08-13 capture at `76dbaf20` (old branch `johnnyeric/v2-baseline`) survives in git history only.

This file records the upstream release `origin/v2` is synced to, the validation commands that this tree defines, and the result of running them. Compare any failing check against this file, and against `origin/v2` before your change, before you attribute it to a change (`migration-context.md`, Conventions).

## Current capture: `v2.1.1` (2026-10-23)
## Current capture: `v2.1.3` (2026-10-23)

### Refs

| Ref | SHA | Date | Note |
|---|---|---|---|
| Sync branch (measured) | `021d6b31848` | 2026-10-23 | `sync-v2-1-3`: the `v2.1.3` sync merge `0d8ae9be328` plus `origin/v2` `2af82eef6a8` (#15405). After the later merge of `origin/v2` `aa7d29226e4` (#15345, #15407) at `d75e69380b1`, `check`, the generated-file checks, the Kilo checks and the `tui` (1,604), `plugin` (9), `kilo-plugin` (188) and `kilo-cli` (62) tests were run again and pass |
| Current upstream base | `37d973754ba6cc31732f93421c0c18b675841573` | 2026-10-22 | Release commit of `v2.1.3` (parent of the tag) |
| `upstream/dev` at capture | `2a3e7c0f349` | 2026-10-23 | 72 commits past the current base. Lag: 1 release (`v2.1.4`) |

Measured with `bun migration-tracking/technical-notes/script/v2-baseline.ts --checks` in a clean detached worktree outside the repository. Toolchain: bun 1.4.4 (the new `packageManager`), node v25.2.1, macOS 26.6 arm64, macOS bash 3.2, `rg` on PATH (Homebrew), login shell fish. `origin/v2` `2af82eef6a8` was measured with the same script (`--only test`) and bun 1.4.2.

### Results

| Check | Result | Detail |
|---|---|---|
| `install`, `check` (`bun run check`), effect simplification lint and rule tests | pass | `bun.lock` unchanged. `check`: 28/28 turbo tasks, oxlint 209 warnings, 0 errors |
| `test` (`bun turbo test --continue --force`, isolated) | **fail** | 25/26 tasks pass, 4 min 8 s. `@opencode/core`: 6,732 pass, 13 fail (`origin/v2`: 6,693 pass, the same 13 fail). All other packages pass, for example `@opencode/cli` 339, `@opencode/tui` 1,601, `@opencode/server` 87, `@kilocode/gateway-core` 104, `@kilocode/kilo-plugin` 188, `@kilocode/kilo-cli` 62 |
| `client`, `www`, `protocol` `check:generated` | pass | No drift |
| `sdk-verify-package`, `codemode-publish-dry-run` | pass | |
| CLI build, binary version, service smoke | pass | |
| Kilo build, host smoke, CLI startup ratchet | pass | |
| Workflow allowlist, annotations, shared patches, progress map, Kilo import rule | pass | Shared patches: 46 files, 334 marked and 39 unmarked lines against `37d973754ba` (at `d75e69380b1`) |
| Node build and smoke | not run | CI pins Node 26.4.0; this host has v25.2.1 |
| `lint:effect-patterns` | **fail** | 27 errors, unchanged. Not run by CI |

### Current reds

The 13 `@opencode/core` cases of the `v2.1.1` capture, unchanged. The failure set is identical on `origin/v2` `2af82eef6a8` (before the sync) on this host. None is attributable to the sync or to a Kilo change.

1. **macOS bash 3.2, 7 cases:** `ShellTool conditional process substitution` (4), `ShellTool compound syntax approval compatibility` (2), `real-shell compound syntax > bash` (1). Green on Linux CI.
2. **Login shell, 6 cases:** `Session.shell > …` (`packages/core/test/session-shell.test.ts`) times out when `SHELL` is fish. With `SHELL=/bin/zsh` the file passes (9 pass).

## Previous capture: `v2.1.1` (2026-10-23)

### Refs

Expand Down
6 changes: 3 additions & 3 deletions nix/hashes.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"nodeModules": {
"x86_64-linux": "sha256-XWwlhjvmCdt68mIHTUQsmDO/lBzrYjO34/3tob3d1tA=",
"aarch64-linux": "sha256-/310R94wlUd6rSDE9PJFf1FVXSyS6hAan8zi2NqEj4k=",
"aarch64-darwin": "sha256-0NZH0SXQ7e64wiCy2C9sKlygrr41fqe7JRoBLD8rRIg="
"x86_64-linux": "sha256-y9Zr4/sIxFh5i/6AYl/1N9PzdFBfPnyXEyjqW/idPes=",
"aarch64-linux": "sha256-4JBTGcwS4GsfSSvnKvcBR/6aCBghTwUSRz+E8lsQpO4=",
"aarch64-darwin": "sha256-hn62idpf73/uW+nCLLO5hhn/HTwwdV2NmmkqNTqo+2g="
}
}
12 changes: 6 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
"$schema": "https://json.schemastore.org/package.json",
"name": "opencode",
"description": "AI-powered development tool",
"version": "2.1.0",
"version": "2.1.2",
"private": true,
"type": "module",
"packageManager": "bun@1.4.2",
"packageManager": "bun@1.4.4",
"scripts": {
"dev": "bun script/dev-isolated.ts",
"dev:live": "sh -c 'OPENCODE_TUI_CHANNEL=dev OPENCODE_PASSWORD=\"$(opencode service get password)\" exec bun run dev \"$@\" --server \"$(opencode service status)\"' --",
Expand Down Expand Up @@ -50,7 +50,7 @@
"@effect/platform-node-shared": "4.0.1",
"@effect/sql-sqlite-bun": "4.0.1",
"@npmcli/arborist": "9.4.0",
"@types/bun": "1.4.0",
"@types/bun": "1.4.3",
"@types/cross-spawn": "6.0.6",
"@octokit/rest": "22.0.0",
"@hono/standard-validator": "0.2.0",
Expand All @@ -59,7 +59,6 @@
"@opentui/keymap": "0.6.6",
"@opentui/solid": "0.6.6",
"@tanstack/solid-virtual": "3.13.37",
"@shikijs/stream": "4.4.3",
"@standard-schema/spec": "1.1.0",
"ulid": "3.0.1",
"@kobalte/core": "0.13.13",
Expand All @@ -70,7 +69,8 @@
"@tsconfig/node22": "22.0.2",
"@tsconfig/bun": "1.0.9",
"@cloudflare/workers-types": "4.20251008.0",
"@pierre/diffs": "1.5.1",
"@pierre/diffs": "1.6.1",
"@pierre/highlights": "0.2.0",
"@solid-primitives/event-listener": "2.4.6",
"@solid-primitives/media": "2.3.6",
"@solid-primitives/resize-observer": "2.2.0",
Expand Down Expand Up @@ -164,7 +164,7 @@
"@effect/platform-node-shared": "catalog:",
"@types/bun": "catalog:",
"@types/node": "catalog:",
"bun-types": "1.4.2",
"bun-types": "1.4.4",
"effect": "catalog:",
"open": "11.0.4",
"solid-js": "catalog:"
Expand Down
2 changes: 1 addition & 1 deletion packages/ai/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"$schema": "https://json.schemastore.org/package.json",
"version": "2.1.0",
"version": "2.1.2",
"name": "@opencode/ai",
"type": "module",
"license": "MIT",
Expand Down
Loading
Loading