Skip to content

Commit d4ec936

Browse files
authored
Merge branch 'dev' into feature/add-maple-ai-provider
2 parents 33178e6 + 4b7abc0 commit d4ec936

391 files changed

Lines changed: 26821 additions & 8564 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/actions/setup-bun/action.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ runs:
66
- name: Mount Bun Cache
77
uses: useblacksmith/stickydisk@v1
88
with:
9-
key: ${{ github.repository }}-bun-cache
9+
key: ${{ github.repository }}-bun-cache-${{ runner.os }}
1010
path: ~/.bun
1111

1212
- name: Setup Bun

.github/workflows/test.yml

Lines changed: 46 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,45 @@ on:
77
pull_request:
88
workflow_dispatch:
99
jobs:
10-
test:
11-
name: test (${{ matrix.settings.name }})
10+
unit:
11+
name: unit (linux)
12+
runs-on: blacksmith-4vcpu-ubuntu-2404
13+
defaults:
14+
run:
15+
shell: bash
16+
steps:
17+
- name: Checkout repository
18+
uses: actions/checkout@v4
19+
with:
20+
token: ${{ secrets.GITHUB_TOKEN }}
21+
22+
- name: Setup Bun
23+
uses: ./.github/actions/setup-bun
24+
25+
- name: Configure git identity
26+
run: |
27+
git config --global user.email "[email protected]"
28+
git config --global user.name "opencode"
29+
30+
- name: Run unit tests
31+
run: bun turbo test
32+
33+
e2e:
34+
name: e2e (${{ matrix.settings.name }})
35+
needs: unit
1236
strategy:
1337
fail-fast: false
1438
matrix:
1539
settings:
1640
- name: linux
1741
host: blacksmith-4vcpu-ubuntu-2404
1842
playwright: bunx playwright install --with-deps
19-
workdir: .
20-
command: |
21-
git config --global user.email "[email protected]"
22-
git config --global user.name "opencode"
23-
bun turbo test
2443
- name: windows
25-
host: windows-latest
44+
host: blacksmith-4vcpu-windows-2025
2645
playwright: bunx playwright install
27-
workdir: packages/app
28-
command: bun test:e2e:local
2946
runs-on: ${{ matrix.settings.host }}
47+
env:
48+
PLAYWRIGHT_BROWSERS_PATH: 0
3049
defaults:
3150
run:
3251
shell: bash
@@ -43,87 +62,10 @@ jobs:
4362
working-directory: packages/app
4463
run: ${{ matrix.settings.playwright }}
4564

46-
- name: Set OS-specific paths
47-
run: |
48-
if [ "${{ runner.os }}" = "Windows" ]; then
49-
printf '%s\n' "OPENCODE_E2E_ROOT=${{ runner.temp }}\\opencode-e2e" >> "$GITHUB_ENV"
50-
printf '%s\n' "OPENCODE_TEST_HOME=${{ runner.temp }}\\opencode-e2e\\home" >> "$GITHUB_ENV"
51-
printf '%s\n' "XDG_DATA_HOME=${{ runner.temp }}\\opencode-e2e\\share" >> "$GITHUB_ENV"
52-
printf '%s\n' "XDG_CACHE_HOME=${{ runner.temp }}\\opencode-e2e\\cache" >> "$GITHUB_ENV"
53-
printf '%s\n' "XDG_CONFIG_HOME=${{ runner.temp }}\\opencode-e2e\\config" >> "$GITHUB_ENV"
54-
printf '%s\n' "XDG_STATE_HOME=${{ runner.temp }}\\opencode-e2e\\state" >> "$GITHUB_ENV"
55-
else
56-
printf '%s\n' "OPENCODE_E2E_ROOT=${{ runner.temp }}/opencode-e2e" >> "$GITHUB_ENV"
57-
printf '%s\n' "OPENCODE_TEST_HOME=${{ runner.temp }}/opencode-e2e/home" >> "$GITHUB_ENV"
58-
printf '%s\n' "XDG_DATA_HOME=${{ runner.temp }}/opencode-e2e/share" >> "$GITHUB_ENV"
59-
printf '%s\n' "XDG_CACHE_HOME=${{ runner.temp }}/opencode-e2e/cache" >> "$GITHUB_ENV"
60-
printf '%s\n' "XDG_CONFIG_HOME=${{ runner.temp }}/opencode-e2e/config" >> "$GITHUB_ENV"
61-
printf '%s\n' "XDG_STATE_HOME=${{ runner.temp }}/opencode-e2e/state" >> "$GITHUB_ENV"
62-
fi
63-
64-
- name: Seed opencode data
65-
if: matrix.settings.name != 'windows'
66-
working-directory: packages/opencode
67-
run: bun script/seed-e2e.ts
68-
env:
69-
OPENCODE_DISABLE_SHARE: "true"
70-
OPENCODE_DISABLE_LSP_DOWNLOAD: "true"
71-
OPENCODE_DISABLE_DEFAULT_PLUGINS: "true"
72-
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: "true"
73-
OPENCODE_TEST_HOME: ${{ env.OPENCODE_TEST_HOME }}
74-
XDG_DATA_HOME: ${{ env.XDG_DATA_HOME }}
75-
XDG_CACHE_HOME: ${{ env.XDG_CACHE_HOME }}
76-
XDG_CONFIG_HOME: ${{ env.XDG_CONFIG_HOME }}
77-
XDG_STATE_HOME: ${{ env.XDG_STATE_HOME }}
78-
OPENCODE_E2E_PROJECT_DIR: ${{ github.workspace }}
79-
OPENCODE_E2E_SESSION_TITLE: "E2E Session"
80-
OPENCODE_E2E_MESSAGE: "Seeded for UI e2e"
81-
OPENCODE_E2E_MODEL: "opencode/gpt-5-nano"
82-
83-
- name: Run opencode server
84-
if: matrix.settings.name != 'windows'
85-
working-directory: packages/opencode
86-
run: bun dev -- --print-logs --log-level WARN serve --port 4096 --hostname 127.0.0.1 &
87-
env:
88-
OPENCODE_DISABLE_SHARE: "true"
89-
OPENCODE_DISABLE_LSP_DOWNLOAD: "true"
90-
OPENCODE_DISABLE_DEFAULT_PLUGINS: "true"
91-
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: "true"
92-
OPENCODE_TEST_HOME: ${{ env.OPENCODE_TEST_HOME }}
93-
XDG_DATA_HOME: ${{ env.XDG_DATA_HOME }}
94-
XDG_CACHE_HOME: ${{ env.XDG_CACHE_HOME }}
95-
XDG_CONFIG_HOME: ${{ env.XDG_CONFIG_HOME }}
96-
XDG_STATE_HOME: ${{ env.XDG_STATE_HOME }}
97-
OPENCODE_CLIENT: "app"
98-
99-
- name: Wait for opencode server
100-
if: matrix.settings.name != 'windows'
101-
run: |
102-
for i in {1..120}; do
103-
curl -fsS "http://127.0.0.1:4096/global/health" > /dev/null && exit 0
104-
sleep 1
105-
done
106-
exit 1
107-
108-
- name: run
109-
working-directory: ${{ matrix.settings.workdir }}
110-
run: ${{ matrix.settings.command }}
65+
- name: Run app e2e tests
66+
run: bun --cwd packages/app test:e2e:local
11167
env:
11268
CI: true
113-
OPENCODE_DISABLE_SHARE: "true"
114-
OPENCODE_DISABLE_LSP_DOWNLOAD: "true"
115-
OPENCODE_DISABLE_DEFAULT_PLUGINS: "true"
116-
OPENCODE_EXPERIMENTAL_DISABLE_FILEWATCHER: "true"
117-
OPENCODE_TEST_HOME: ${{ env.OPENCODE_TEST_HOME }}
118-
XDG_DATA_HOME: ${{ env.XDG_DATA_HOME }}
119-
XDG_CACHE_HOME: ${{ env.XDG_CACHE_HOME }}
120-
XDG_CONFIG_HOME: ${{ env.XDG_CONFIG_HOME }}
121-
XDG_STATE_HOME: ${{ env.XDG_STATE_HOME }}
122-
PLAYWRIGHT_SERVER_HOST: "127.0.0.1"
123-
PLAYWRIGHT_SERVER_PORT: "4096"
124-
VITE_OPENCODE_SERVER_HOST: "127.0.0.1"
125-
VITE_OPENCODE_SERVER_PORT: "4096"
126-
OPENCODE_CLIENT: "app"
12769
timeout-minutes: 30
12870

12971
- name: Upload Playwright artifacts
@@ -136,3 +78,18 @@ jobs:
13678
path: |
13779
packages/app/e2e/test-results
13880
packages/app/e2e/playwright-report
81+
82+
required:
83+
name: test (linux)
84+
runs-on: blacksmith-4vcpu-ubuntu-2404
85+
needs:
86+
- unit
87+
- e2e
88+
if: always()
89+
steps:
90+
- name: Verify upstream test jobs passed
91+
run: |
92+
echo "unit=${{ needs.unit.result }}"
93+
echo "e2e=${{ needs.e2e.result }}"
94+
test "${{ needs.unit.result }}" = "success"
95+
test "${{ needs.e2e.result }}" = "success"

.prettierignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
sst-env.d.ts
2-
desktop/src/bindings.ts
2+
packages/desktop/src/bindings.ts

AGENTS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
- To regenerate the JavaScript SDK, run `./packages/sdk/js/script/build.ts`.
22
- ALWAYS USE PARALLEL TOOLS WHEN APPLICABLE.
33
- The default branch in this repo is `dev`.
4+
- Local `main` ref may not exist; use `dev` or `origin/dev` for diffs.
45
- Prefer automation: execute requested actions without confirmation unless blocked by missing info or safety/irreversibility.
56

67
## Style Guide

README.bs.md

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
<p align="center">
2+
<a href="https://opencode.ai">
3+
<picture>
4+
<source srcset="packages/console/app/src/asset/logo-ornate-dark.svg" media="(prefers-color-scheme: dark)">
5+
<source srcset="packages/console/app/src/asset/logo-ornate-light.svg" media="(prefers-color-scheme: light)">
6+
<img src="packages/console/app/src/asset/logo-ornate-light.svg" alt="OpenCode logo">
7+
</picture>
8+
</a>
9+
</p>
10+
<p align="center">OpenCode je open source AI agent za programiranje.</p>
11+
<p align="center">
12+
<a href="https://opencode.ai/discord"><img alt="Discord" src="https://img.shields.io/discord/1391832426048651334?style=flat-square&label=discord" /></a>
13+
<a href="https://www.npmjs.com/package/opencode-ai"><img alt="npm" src="https://img.shields.io/npm/v/opencode-ai?style=flat-square" /></a>
14+
<a href="https://github.com/anomalyco/opencode/actions/workflows/publish.yml"><img alt="Build status" src="https://img.shields.io/github/actions/workflow/status/anomalyco/opencode/publish.yml?style=flat-square&branch=dev" /></a>
15+
</p>
16+
17+
<p align="center">
18+
<a href="README.md">English</a> |
19+
<a href="README.zh.md">简体中文</a> |
20+
<a href="README.zht.md">繁體中文</a> |
21+
<a href="README.ko.md">한국어</a> |
22+
<a href="README.de.md">Deutsch</a> |
23+
<a href="README.es.md">Español</a> |
24+
<a href="README.fr.md">Français</a> |
25+
<a href="README.it.md">Italiano</a> |
26+
<a href="README.da.md">Dansk</a> |
27+
<a href="README.ja.md">日本語</a> |
28+
<a href="README.pl.md">Polski</a> |
29+
<a href="README.ru.md">Русский</a> |
30+
<a href="README.bs.md">Bosanski</a> |
31+
<a href="README.ar.md">العربية</a> |
32+
<a href="README.no.md">Norsk</a> |
33+
<a href="README.br.md">Português (Brasil)</a> |
34+
<a href="README.th.md">ไทย</a> |
35+
<a href="README.tr.md">Türkçe</a>
36+
</p>
37+
38+
[![OpenCode Terminal UI](packages/web/src/assets/lander/screenshot.png)](https://opencode.ai)
39+
40+
---
41+
42+
### Instalacija
43+
44+
```bash
45+
# YOLO
46+
curl -fsSL https://opencode.ai/install | bash
47+
48+
# Package manageri
49+
npm i -g opencode-ai@latest # ili bun/pnpm/yarn
50+
scoop install opencode # Windows
51+
choco install opencode # Windows
52+
brew install anomalyco/tap/opencode # macOS i Linux (preporučeno, uvijek ažurno)
53+
brew install opencode # macOS i Linux (zvanična brew formula, rjeđe se ažurira)
54+
paru -S opencode-bin # Arch Linux
55+
mise use -g opencode # Bilo koji OS
56+
nix run nixpkgs#opencode # ili github:anomalyco/opencode za najnoviji dev branch
57+
```
58+
59+
> [!TIP]
60+
> Ukloni verzije starije od 0.1.x prije instalacije.
61+
62+
### Desktop aplikacija (BETA)
63+
64+
OpenCode je dostupan i kao desktop aplikacija. Preuzmi je direktno sa [stranice izdanja](https://github.com/anomalyco/opencode/releases) ili sa [opencode.ai/download](https://opencode.ai/download).
65+
66+
| Platforma | Preuzimanje |
67+
| --------------------- | ------------------------------------- |
68+
| macOS (Apple Silicon) | `opencode-desktop-darwin-aarch64.dmg` |
69+
| macOS (Intel) | `opencode-desktop-darwin-x64.dmg` |
70+
| Windows | `opencode-desktop-windows-x64.exe` |
71+
| Linux | `.deb`, `.rpm`, ili AppImage |
72+
73+
```bash
74+
# macOS (Homebrew)
75+
brew install --cask opencode-desktop
76+
# Windows (Scoop)
77+
scoop bucket add extras; scoop install extras/opencode-desktop
78+
```
79+
80+
#### Instalacijski direktorij
81+
82+
Instalacijska skripta koristi sljedeći redoslijed prioriteta za putanju instalacije:
83+
84+
1. `$OPENCODE_INSTALL_DIR` - Prilagođeni instalacijski direktorij
85+
2. `$XDG_BIN_DIR` - Putanja usklađena sa XDG Base Directory specifikacijom
86+
3. `$HOME/bin` - Standardni korisnički bin direktorij (ako postoji ili se može kreirati)
87+
4. `$HOME/.opencode/bin` - Podrazumijevana rezervna lokacija
88+
89+
```bash
90+
# Primjeri
91+
OPENCODE_INSTALL_DIR=/usr/local/bin curl -fsSL https://opencode.ai/install | bash
92+
XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bash
93+
```
94+
95+
### Agenti
96+
97+
OpenCode uključuje dva ugrađena agenta između kojih možeš prebacivati tasterom `Tab`.
98+
99+
- **build** - Podrazumijevani agent sa punim pristupom za razvoj
100+
- **plan** - Agent samo za čitanje za analizu i istraživanje koda
101+
- Podrazumijevano zabranjuje izmjene datoteka
102+
- Traži dozvolu prije pokretanja bash komandi
103+
- Idealan za istraživanje nepoznatih codebase-ova ili planiranje izmjena
104+
105+
Uključen je i **general** pod-agent za složene pretrage i višekoračne zadatke.
106+
Koristi se interno i može se pozvati pomoću `@general` u porukama.
107+
108+
Saznaj više o [agentima](https://opencode.ai/docs/agents).
109+
110+
### Dokumentacija
111+
112+
Za više informacija o konfiguraciji OpenCode-a, [**pogledaj dokumentaciju**](https://opencode.ai/docs).
113+
114+
### Doprinosi
115+
116+
Ako želiš doprinositi OpenCode-u, pročitaj [upute za doprinošenje](./CONTRIBUTING.md) prije slanja pull requesta.
117+
118+
### Gradnja na OpenCode-u
119+
120+
Ako radiš na projektu koji je povezan s OpenCode-om i koristi "opencode" kao dio naziva, npr. "opencode-dashboard" ili "opencode-mobile", dodaj napomenu u svoj README da projekat nije napravio OpenCode tim i da nije povezan s nama.
121+
122+
### FAQ
123+
124+
#### Po čemu se razlikuje od Claude Code-a?
125+
126+
Po mogućnostima je vrlo sličan Claude Code-u. Ključne razlike su:
127+
128+
- 100% open source
129+
- Nije vezan za jednog provajdera. Iako preporučujemo modele koje nudimo kroz [OpenCode Zen](https://opencode.ai/zen), OpenCode možeš koristiti s Claude, OpenAI, Google ili čak lokalnim modelima. Kako modeli napreduju, razlike među njima će se smanjivati, a cijene padati, zato je nezavisnost od provajdera važna.
130+
- LSP podrška odmah po instalaciji
131+
- Fokus na TUI. OpenCode grade neovim korisnici i kreatori [terminal.shop](https://terminal.shop); pomjeraćemo granice onoga što je moguće u terminalu.
132+
- Klijent/server arhitektura. To, recimo, omogućava da OpenCode radi na tvom računaru dok ga daljinski koristiš iz mobilne aplikacije, što znači da je TUI frontend samo jedan od mogućih klijenata.
133+
134+
---
135+
136+
**Pridruži se našoj zajednici** [Discord](https://discord.gg/opencode) | [X.com](https://x.com/opencode)

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<a href="README.ja.md">日本語</a> |
2828
<a href="README.pl.md">Polski</a> |
2929
<a href="README.ru.md">Русский</a> |
30+
<a href="README.bs.md">Bosanski</a> |
3031
<a href="README.ar.md">العربية</a> |
3132
<a href="README.no.md">Norsk</a> |
3233
<a href="README.br.md">Português (Brasil)</a> |

0 commit comments

Comments
 (0)