Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
e51eab5
fix: update packageManager to bun@1.3.4
anduimagui Dec 8, 2025
7c544e7
Merge remote-tracking branch 'upstream/dev' into dev
anduimagui Dec 11, 2025
4fb2bc5
Merge branch 'sst:dev' into dev
anduimagui Dec 12, 2025
dcb6e76
feat: add package-based agent loading from npm packages
anduimagui Dec 12, 2025
30183a2
docs: add comprehensive pull request template
anduimagui Dec 30, 2025
0a8a371
revert: change package manager version back to 1.3.3
anduimagui Dec 30, 2025
64f8e16
Merge remote-tracking branch 'upstream/dev' into feat/package-agent-l…
anduimagui Dec 30, 2025
07e548b
feat(ui): make file references clickable in session output
anduimagui Feb 26, 2026
0c8e691
fix(ui): restore singular project path helper name
anduimagui Feb 27, 2026
969de1e
Merge remote-tracking branch 'upstream/dev' into HEAD
anduimagui Feb 27, 2026
2fe9146
feat(session-modal): add standalone session triage app
anduimagui Feb 28, 2026
af832c3
feat(desktop): integrate all-session search modal
anduimagui Feb 28, 2026
cc47858
feat(opencode): add desktop command for opening desktop app
andrewm-esynergy Feb 28, 2026
7eda43f
test(app): cover worktree normalization and rename desktop cmd module
andrewm-esynergy Feb 28, 2026
d817cb6
Merge branch 'dev' into feat/cli-open-command
anduimagui Feb 28, 2026
7238d9f
merge local work: feat/package-agent-loading
anduimagui Feb 28, 2026
25c5a09
merge local work: feat/pull-request-template
anduimagui Feb 28, 2026
1338a96
merge local work: feat/desktop-clickable-file-links
anduimagui Feb 28, 2026
0d82a8d
merge local work: session-modal-experiment
anduimagui Feb 28, 2026
1d3f020
merge local work: opencode/crisp-mountain
anduimagui Feb 28, 2026
47d07dc
fix(config): guard agent merge in all-work branch
anduimagui Feb 28, 2026
d4c9abe
Merge remote-tracking branch 'upstream/dev' into local/all-work
anduimagui Feb 28, 2026
1c27676
Merge remote-tracking branch 'upstream/dev' into local/all-work
anduimagui Mar 1, 2026
4aa246b
Merge remote-tracking branch 'origin/feat/cli-open-command' into loca…
anduimagui Mar 1, 2026
82c0a6c
feat(desktop): add session rename menu shortcut
anduimagui Mar 1, 2026
2a1c4b2
docs: add screenshots for session rename PR
anduimagui Mar 1, 2026
35ea065
docs: remove PR screenshot assets
anduimagui Mar 1, 2026
503b359
Merge branch 'dev' into feat/desktop-rename-session-menu
anduimagui Mar 1, 2026
c7619fe
chore: add local PR template guard wrapper
anduimagui Mar 1, 2026
c9d6561
feat(app): add /copy session transcript command
anduimagui Mar 1, 2026
dd894c1
feat(desktop): wire session copy to native clipboard
anduimagui Mar 1, 2026
8873f81
refactor(util): share session transcript formatter
anduimagui Mar 1, 2026
d67b366
Merge remote-tracking branch 'upstream/dev' into local/all-work
anduimagui Mar 1, 2026
1fca43c
update dev cycle
anduimagui Mar 1, 2026
73b0696
feat(opencode): add desktop command for opening desktop app
andrewm-esynergy Feb 28, 2026
7060fb6
test(app): cover worktree normalization and rename desktop cmd module
andrewm-esynergy Feb 28, 2026
b849889
refactor(ui): extract markdown file reference parser
anduimagui Mar 1, 2026
115cc46
fix(ui): make tool file links keyboard-accessible
anduimagui Mar 1, 2026
83a1b3e
feat(ui): open clicked file refs in desktop default apps
anduimagui Mar 1, 2026
fc23e8e
fix(app): apply file-link line targets in in-app fallback
anduimagui Mar 1, 2026
19f41b4
feat(desktop): add session rename menu shortcut
anduimagui Mar 1, 2026
e6ef15b
docs: add screenshots for session rename PR
anduimagui Mar 1, 2026
d0e7fef
docs: remove PR screenshot assets
anduimagui Mar 1, 2026
6e76911
chore: add local PR template guard wrapper
anduimagui Mar 1, 2026
feceb4d
feat(app): add /copy session transcript command
anduimagui Mar 1, 2026
3f7f2b5
feat(desktop): wire session copy to native clipboard
anduimagui Mar 1, 2026
05e41e0
refactor(util): share session transcript formatter
anduimagui Mar 1, 2026
f628ab1
Update dialog-select-session.tsx
anduimagui Mar 1, 2026
4469c60
feat(project): support top-level icon config for workspaces
anduimagui Mar 1, 2026
32468eb
log updates
anduimagui Mar 3, 2026
d3668ab
feat(app): add jump-to-top and jump-to-bottom chat shortcuts
anduimagui Mar 4, 2026
d6edf2c
Merge branch 'dev' into opencode/jolly-river
anduimagui Mar 4, 2026
1c9f68f
feat(app): add pinned workspaces in sidebar
anduimagui Mar 4, 2026
aa7e2a0
test(app): stabilize workspace pin e2e on windows
anduimagui Mar 5, 2026
2dc0b39
test(app): dedupe workspace rows in pin e2e
anduimagui Mar 5, 2026
dd48a90
test(app): expand workspace pinning coverage
anduimagui Mar 5, 2026
ae495cc
test(app): harden workspace pinning e2e matching
anduimagui Mar 5, 2026
d10020a
Merge branch 'dev' into feat/sidebar-workspace-pinning
anduimagui Mar 5, 2026
fab91a0
fix(copy): add desktop rich copy modes and default to rich
anduimagui Mar 4, 2026
7b5998c
fix(copy): resolve typecheck issues in clipboard handlers
anduimagui Mar 4, 2026
5275451
fix(app): keep settings controls aligned on the right
anduimagui Mar 4, 2026
af12f9d
test(app): resolve project-scoped pin slug after switch
anduimagui Mar 5, 2026
5760f17
Merge branch 'dev' into feat/sidebar-workspace-pinning
anduimagui Mar 5, 2026
28481a2
feat(session): add desktop unarchive and archive undo flow
anduimagui Mar 5, 2026
4f02c4c
Merge remote-tracking branch 'upstream/dev' into opencode/lucky-eagle
anduimagui Mar 5, 2026
922b0b6
Merge branch 'dev' into feat/sidebar-workspace-pinning
anduimagui Mar 5, 2026
921a959
Merge branch 'dev' into opencode/lucky-eagle
anduimagui Mar 5, 2026
ac5e42d
feat(app): add in-app desktop clone project flow
anduimagui Mar 5, 2026
b42cec4
fix(preview): sanitize channel-derived versions for plugin installs
anduimagui Mar 5, 2026
54c0b9c
Merge branch 'dev' into opencode/desktop-workspace-semver-fix
anduimagui Mar 5, 2026
b4970d8
feat(app): add sidebar sub-project grouping
anduimagui Mar 5, 2026
0c7188c
Merge branch 'dev' into opencode/mighty-pixel-pr-clean
anduimagui Mar 5, 2026
359c4fd
Merge remote-tracking branch 'origin/dev' into opencode/brave-cactus
anduimagui Mar 5, 2026
c539c28
Merge remote-tracking branch 'upstream/dev' into opencode/brave-cactus
anduimagui Mar 5, 2026
0a58534
feat(ui): make file references clickable in session output
anduimagui Feb 26, 2026
de2def1
fix(ui): restore singular project path helper name
anduimagui Feb 27, 2026
89b05eb
refactor(ui): extract markdown file reference parser
anduimagui Mar 1, 2026
c77bd22
fix(ui): make tool file links keyboard-accessible
anduimagui Mar 1, 2026
984ef47
feat(ui): open clicked file refs in desktop default apps
anduimagui Mar 1, 2026
c664b40
fix(app): apply file-link line targets in in-app fallback
anduimagui Mar 1, 2026
93fff64
feat(app): add copy session id actions
anduimagui Mar 6, 2026
f5fd6c3
Merge branch 'dev' into feat/copy-session-id
anduimagui Mar 6, 2026
deb71d0
fix(app): remove session id slash command
anduimagui Mar 6, 2026
f2b61e9
feat(app): add favorite model cycling
anduimagui Mar 7, 2026
891372a
Merge remote-tracking branch 'upstream/dev' into opencode/brave-cactus
anduimagui Mar 7, 2026
da939a2
test(app): make project-switch workspace assertion resilient
anduimagui Mar 7, 2026
a150fdc
Merge branch 'dev' into opencode/brave-cactus
anduimagui Mar 7, 2026
b5a71ee
Merge origin/dev into opencode/lucky-eagle
anduimagui Mar 7, 2026
4618bc5
Revert "Merge origin/dev into opencode/lucky-eagle"
anduimagui Mar 7, 2026
09771c0
feat(app): add favorite model cycling
anduimagui Mar 7, 2026
c9cd2be
feat(app): add quick switch model pair
anduimagui Mar 7, 2026
9c9e0c3
Merge upstream/dev into opencode/lucky-eagle
anduimagui Mar 7, 2026
ae71807
Fix which module resolution for typecheck
anduimagui Mar 7, 2026
174b981
Merge branch 'dev' into opencode/lucky-eagle
anduimagui Mar 7, 2026
65136cc
Merge remote-tracking branch 'origin/feat/desktop-session-copy-transc…
anduimagui Mar 8, 2026
0abb445
Merge remote-tracking branch 'origin/opencode/jolly-river' into local…
anduimagui Mar 8, 2026
f1b464f
Merge remote-tracking branch 'origin/opencode/lucky-eagle' into local…
anduimagui Mar 8, 2026
fc7bee3
Merge remote-tracking branch 'origin/opencode/desktop-workspace-semve…
anduimagui Mar 8, 2026
f791f93
Merge remote-tracking branch 'origin/opencode/mighty-pixel-pr-clean' …
anduimagui Mar 8, 2026
21cd9db
Merge remote-tracking branch 'origin/opencode/brave-cactus' into loca…
anduimagui Mar 8, 2026
a27f547
Merge remote-tracking branch 'origin/feat/copy-session-id' into local…
anduimagui Mar 8, 2026
55ff928
Merge remote-tracking branch 'origin/feat/app-favorite-model-cycle' i…
anduimagui Mar 8, 2026
e12cac6
Merge remote-tracking branch 'origin/feat/desktop-clickable-file-link…
anduimagui Mar 8, 2026
eff2843
Merge remote-tracking branch 'origin/feat/desktop-rename-session-menu…
anduimagui Mar 8, 2026
8225b43
fix(ui,tui): normalize model picker fuzzy search
anduimagui Mar 9, 2026
da7edeb
chore(opencode): defer TUI model search normalization
anduimagui Mar 9, 2026
e9ac862
fix(app): focus terminal when panel opens via toggle shortcut
anduimagui Mar 9, 2026
cf0bad0
Merge branch 'dev' into fix/terminal-focus-on-toggle
anduimagui Mar 9, 2026
3df0da9
Merge remote-tracking branch 'upstream/dev' into fix/terminal-focus-o…
anduimagui Mar 10, 2026
e75d46b
fix(app): only refocus terminal on reopen
anduimagui Mar 10, 2026
7a8e381
Merge branch 'dev' into fix/terminal-focus-on-toggle
anduimagui Mar 10, 2026
46d9652
refactor(project): load icons from .opencode assets
anduimagui Mar 10, 2026
2958015
chore: restore github action package files
anduimagui Mar 10, 2026
54445cf
Merge branch 'dev' into feat/icon-loading-config-clean
anduimagui Mar 10, 2026
0ae0df5
Merge upstream/dev into opencode/glowing-otter
anduimagui Mar 10, 2026
3372013
Merge upstream/dev into opencode/mighty-pixel-pr-clean
anduimagui Mar 10, 2026
fe0524d
Fix subproject icon precedence — prefer directory icons over shared m…
anduimagui Mar 10, 2026
e92d710
Merge branch 'dev' into feat/icon-loading-config-clean
anduimagui Mar 11, 2026
d38658e
fix(app): restore session timeline actions
anduimagui Mar 11, 2026
329f6ed
Merge remote-tracking branch 'origin/dev' into local/all-work
anduimagui Mar 11, 2026
f9da46a
Merge remote-tracking branch 'origin/feat/icon-loading-config-clean' …
anduimagui Mar 11, 2026
e4123b0
Merge remote-tracking branch 'origin/fix/terminal-focus-on-toggle' in…
anduimagui Mar 11, 2026
887cd5f
Merge remote-tracking branch 'origin/opencode/tidy-wolf' into local/a…
anduimagui Mar 11, 2026
db90662
Merge remote-tracking branch 'origin/opencode/mighty-pixel-pr-clean' …
anduimagui Mar 11, 2026
123e904
Merge remote-tracking branch 'origin/feat/sidebar-workspace-pinning' …
anduimagui Mar 11, 2026
82a2c12
Merge remote-tracking branch 'origin/opencode/glowing-otter' into loc…
anduimagui Mar 11, 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
50 changes: 33 additions & 17 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,45 @@
### Issue for this PR
## Problem

Closes #
Briefly describe what this PR fixes. What was broken, confusing, or missing?

### Type of change
For simple fixes: one sentence is enough.
For complex features: explain the problem and why it matters.

- [ ] Bug fix
- [ ] New feature
- [ ] Refactor / code improvement
- [ ] Documentation
Closes #XXXX

### What does this PR do?
---

Please provide a description of the issue, the changes you made to fix it, and why they work. It is expected that you understand why your changes work and if you do not understand why at least say as much so a maintainer knows how much to value the PR.
## Changes

**If you paste a large clearly AI generated description here your PR may be IGNORED or CLOSED!**
**For simple fixes**: 1-2 bullet points maximum

### How did you verify your code works?
- Fix specific issue in `ComponentName`
- Add missing feature to `ModuleName`

### Screenshots / recordings
**For complex features**: concise breakdown

_If this is a UI change, please include a screenshot or recording._
- `file.ext`: What changed
- `file.ext`: What changed
- Add tests for coverage

### Checklist
---

- [ ] I have tested my changes locally
- [ ] I have not included unrelated changes in this PR
## Testing

_If you do not follow this template your PR will be automatically rejected._
```bash
# Test commands to verify this PR
bun test path/to/test.test.ts
# If applicable: run examples, manual testing steps, etc.
```

---

### Additional Context (only if needed)

**Breaking changes**: What users need to know and migration steps

**Performance impact**: Before/after metrics if relevant

**Configuration**: New options or defaults

**Design decisions**: Why this approach over alternatives
18 changes: 18 additions & 0 deletions bun.lock

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

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"packageManager": "bun@1.3.10",
"scripts": {
"dev": "bun run --cwd packages/opencode --conditions=browser src/index.ts",
"dev:desktop": "bun --cwd packages/desktop tauri dev",
"dev:desktop": "bun run --cwd packages/desktop predev && bun --cwd packages/desktop tauri dev",
"dev:web": "bun --cwd packages/app dev",
"dev:storybook": "bun --cwd packages/storybook storybook",
"typecheck": "bun turbo typecheck",
Expand Down
14 changes: 14 additions & 0 deletions packages/app/e2e/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
listItemKeyStartsWithSelector,
workspaceItemSelector,
workspaceMenuTriggerSelector,
workspacePinToggleSelector,
} from "./selectors"

export async function defocus(page: Page) {
Expand Down Expand Up @@ -711,3 +712,16 @@ export async function openWorkspaceMenu(page: Page, workspaceSlug: string) {
await expect(menu).toBeVisible()
return menu
}

export async function setWorkspacePinned(page: Page, workspaceSlug: string, enabled: boolean) {
const menu = await openWorkspaceMenu(page, workspaceSlug)
const toggle = menu.locator(workspacePinToggleSelector(workspaceSlug)).first()
await expect(toggle).toBeVisible()
const name = await toggle.textContent()
const pinned = (name ?? "").toLowerCase().includes("unpin")
if (pinned === enabled) {
await page.keyboard.press("Escape")
return
}
await toggle.click({ force: true })
}
Comment on lines +716 to +727
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Use a non-localized signal for workspace pinning.

Line 721 infers the current state from the menu label (includes("unpin")), so this helper will start failing as soon as the action text is reworded or localized. Returning immediately after Line 726 also leaves no explicit settle point for the UI. Prefer a stable attribute/test id for the pinned state and wait for that state to change.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/app/e2e/actions.ts` around lines 716 - 727, The helper
setWorkspacePinned infers pin state from localized label text
(name.includes("unpin")), which is brittle; update it to read a stable
attribute/test-id on the toggle returned by workspacePinToggleSelector (e.g.
aria-pressed, data-pinned or data-test-pinned) instead of parsing text, use
openWorkspaceMenu and the toggle locator to inspect that attribute to decide
whether to act, and when toggling call toggle.click({ force: true }) then
explicitly wait for the attribute to flip (using
expect(toggle).toHaveAttribute(...) or locator.waitFor with the new value)
before returning; only press Escape when no change was needed or after the state
has settled.

17 changes: 3 additions & 14 deletions packages/app/e2e/projects/projects-switch.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { base64Decode } from "@opencode-ai/util/encode"
import type { Page } from "@playwright/test"
import { test, expect } from "../fixtures"
import { defocus, createTestProject, cleanupTestProject, openSidebar, sessionIDFromUrl, waitSlug } from "../actions"
import { projectSwitchSelector, promptSelector, workspaceItemSelector, workspaceNewSessionSelector } from "../selectors"
import { projectSwitchSelector, promptSelector } from "../selectors"
import { dirSlug, resolveDirectory } from "../utils"

async function workspaces(page: Page, directory: string, enabled: boolean) {
Expand Down Expand Up @@ -90,19 +90,8 @@ test("switching back to a project opens the latest workspace session", async ({
const space = await resolveDirectory(dir)
const next = dirSlug(space)
trackDirectory(space)
await openSidebar(page)

const item = page.locator(`${workspaceItemSelector(next)}, ${workspaceItemSelector(raw)}`).first()
await expect(item).toBeVisible()
await item.hover()

const btn = page.locator(`${workspaceNewSessionSelector(next)}, ${workspaceNewSessionSelector(raw)}`).first()
await expect(btn).toBeVisible()
await btn.click({ force: true })

// A new workspace can be discovered via a transient slug before the route and sidebar
// settle to the canonical workspace path on Windows, so interact with either and assert
// against the resolved workspace slug.
// A new workspace can be discovered via a transient slug before the route settles to
// the canonical workspace path on Windows.
await waitSlug(page)
await expect(page).toHaveURL(new RegExp(`/${next}/session(?:[/?#]|$)`))

Expand Down
Loading
Loading