Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
516 commits
Select commit Hold shift + click to select a range
ea3ec43
style: 优化中文字体显示
pallyoung Apr 28, 2026
d83e483
feat: 将字体文件本地化,移除 Google Fonts CDN 依赖
pallyoung Apr 28, 2026
9408955
fix: 修复终端 ring buffer 内存泄漏并提升输出正确性
pallyoung Apr 29, 2026
784db0c
Tune stream buffering and warning logs
pallyoung Apr 29, 2026
2ab1923
fix: 修复session标题提取逻辑,从终端输出缓冲区解析用户输入
pallyoung Apr 29, 2026
5a73fd5
docs: 新增服务端终端解析优化设计文档
pallyoung Apr 29, 2026
0eb317e
docs: 补充 Master Grid 尺寸策略章节
pallyoung Apr 29, 2026
f24c276
docs: Git 分支切换功能设计文档
pallyoung Apr 29, 2026
a7cff0d
docs: Git 分支切换功能实现计划
pallyoung Apr 29, 2026
d103be2
WIP: propagate submitted terminal text for session titles
pallyoung Apr 30, 2026
6545704
WIP: add branch quick pick and remote branch checkout
pallyoung Apr 30, 2026
f4f4026
diamond: ignore OSC sequences in submitted terminal text
pallyoung Apr 30, 2026
490e555
perf: 修复 RingBuffer.tail() 的 O(size) 内存分配问题
pallyoung Apr 30, 2026
c6dadac
refactor: 简化终端流协议为单帧 v2 格式,增加 replay UI 状态机
pallyoung Apr 30, 2026
2409c24
fix: 防止终端 panel 切换导致 session 内容重复/清空
pallyoung Apr 30, 2026
4a60a8d
docs: add provider CLI auto-install design spec
pallyoung Apr 30, 2026
e0ecff4
docs: refine provider install spec examples
pallyoung Apr 30, 2026
fef03e7
fix startup auth and workspace routing
pallyoung Apr 30, 2026
099cc4e
docs: add provider CLI auto-install implementation plan
pallyoung Apr 30, 2026
8970e3a
feat: add provider install metadata contracts
pallyoung Apr 30, 2026
baf2820
fix: align provider install metadata spec
pallyoung Apr 30, 2026
12e1023
refactor: extract provider install metadata types
pallyoung Apr 30, 2026
bb8d561
feat(server): add provider runtime status checks
pallyoung Apr 30, 2026
9194575
fix(server): tighten runtime status dependency checks
pallyoung Apr 30, 2026
5655331
fix(server): probe installer command availability
pallyoung Apr 30, 2026
9b5c814
fix(server): correct unsupported runtime readiness
pallyoung Apr 30, 2026
60c03f9
test(server): decouple runtime status fixtures
pallyoung Apr 30, 2026
acd5d81
feat(server): add provider install manager
pallyoung Apr 30, 2026
eec3597
fix(server): harden provider install manager snapshots
pallyoung Apr 30, 2026
9e5e353
fix(server): align preflight install failures with steps
pallyoung Apr 30, 2026
fd384de
docs: add mobile-friendly full adaptation design
pallyoung Apr 30, 2026
69eec80
Add provider CLI install launcher flow
pallyoung Apr 30, 2026
81d5396
docs: add mobile phase 4a design spec
pallyoung May 1, 2026
818d907
docs: add mobile phase 4a implementation plan
pallyoung May 1, 2026
d0f353b
feat: checkpoint mobile shell phases 0 to 3
pallyoung May 1, 2026
955d643
test: add mobile settings navigation coverage
pallyoung May 1, 2026
0d7e2da
test: tighten mobile settings navigation scaffolding
pallyoung May 1, 2026
7749ce3
feat: add mobile settings navigation stack
pallyoung May 1, 2026
0adf35e
refactor: simplify settings mobile navigation state
pallyoung May 1, 2026
fbf1b79
feat: adapt mobile page-level secondary surfaces
pallyoung May 1, 2026
1f5ba27
docs: add mobile phase 4b1 design spec
pallyoung May 1, 2026
3a8cd4a
docs: add mobile phase 4b1 implementation plan
pallyoung May 1, 2026
d674ba4
test: cover mobile workspace secondary surfaces
pallyoung May 1, 2026
70b2f34
test: tighten mobile workspace surface scaffolds
pallyoung May 1, 2026
ae48622
feat: adapt workspace and worktree mobile surfaces
pallyoung May 1, 2026
90f87b8
fix: preserve default mobile sheet kicker
pallyoung May 1, 2026
78136fe
test: cover mobile supervisor objective flow
pallyoung May 1, 2026
62349a2
docs: add mobile phase 4b2 design spec
pallyoung May 1, 2026
fc735db
docs: add mobile phase 4b2 implementation plan
pallyoung May 1, 2026
463b2f6
test: cover mobile command palette sheet flow
pallyoung May 1, 2026
66543cc
feat: adapt command palette for mobile sheets
pallyoung May 1, 2026
b14520e
style: refine mobile command palette layout
pallyoung May 1, 2026
4851dbf
docs: add mobile phase 4b3 design and plan
pallyoung May 1, 2026
06104f4
test: cover mobile notification surfaces
pallyoung May 1, 2026
bb28a18
feat: adapt mobile notification surfaces
pallyoung May 1, 2026
b89c384
style: refine mobile notification layout
pallyoung May 1, 2026
66cf836
feat: move mobile supervisor objective flow into sheet detail
pallyoung May 1, 2026
4cdb83d
feat: recover mobile connections on foreground resume
pallyoung May 1, 2026
6c97f85
style: compact landscape mobile shell layout
pallyoung May 1, 2026
3cc8826
style: tune mobile shell micro interactions
pallyoung May 1, 2026
bc55ee6
feat: tighten cli runtime command parsing
pallyoung May 1, 2026
f36c1b5
perf: enable websocket compression for terminal streams
pallyoung May 1, 2026
0a8d0fe
test: isolate phase1 playwright sandbox setup
pallyoung May 1, 2026
b4239aa
test: refresh phase1 acceptance assertions
pallyoung May 1, 2026
bbc7f87
fix: repair mobile shell regressions
pallyoung May 1, 2026
b1cc857
refactor(web): split app and feature atoms
pallyoung May 1, 2026
aeb5a12
refactor(workspace): move bootstrap and shared workspace views into f…
pallyoung May 1, 2026
923786b
refactor(agent-panes): replace custom pane events with explicit actions
pallyoung May 1, 2026
33d59a1
refactor(workspace): extract file tree actions and shared view
pallyoung May 1, 2026
eee99b9
refactor(workspace): extract git actions and shared git views
pallyoung May 1, 2026
c9b4144
refactor(workspace): extract launch/worktree/observer/branch shared v…
pallyoung May 1, 2026
3bdc20c
refactor(terminal-panel): extract terminal actions and shared termina…
pallyoung May 1, 2026
b55d45b
refactor(code-editor): extract code editor actions and shared host view
pallyoung May 1, 2026
30f0102
refactor(supervisor): move supervisor hooks and views into feature ac…
pallyoung May 1, 2026
d8f1d2b
refactor(workspace): introduce shared screen model and wire desktop view
pallyoung May 1, 2026
b34c1a9
refactor(shells): reduce mobile shell to route and chrome wiring
pallyoung May 1, 2026
6389f00
fix(web): repair responsive layout regressions
pallyoung May 1, 2026
3e2fb20
fix(web): finish shared view migration leftovers
pallyoung May 1, 2026
afaa0ae
chore(web): remove compatibility re-exports after migration
pallyoung May 1, 2026
9712029
fix(web): refine mobile session layout and controls
pallyoung May 2, 2026
6d4ccc9
fix(web): restore mobile supervisor entry
pallyoung May 2, 2026
b33afe0
fix(web): move mobile supervisor badge into session header
pallyoung May 2, 2026
c0e8c15
fix(web): enable mobile touch scrolling in xterm
pallyoung May 2, 2026
2e34b62
fix(web): restore mobile xterm touch scrolling
pallyoung May 2, 2026
ca006f3
feat(web): polish mobile shell and complete i18n coverage
pallyoung May 2, 2026
5e6a7bf
chore(git): ignore local superpowers state
pallyoung May 2, 2026
d34ccbc
feat(web): add mobile workspace close action
pallyoung May 2, 2026
aa3b6db
feat(web): simplify workspace launch flow
pallyoung May 2, 2026
82e0eed
Add workspace file search
pallyoung May 2, 2026
ec6cd94
Remove git diff preview mode
pallyoung May 2, 2026
8f5da71
Fix git status refresh for metadata changes
pallyoung May 2, 2026
19922ee
Reduce default xterm font size
pallyoung May 2, 2026
91ee85a
Add workspace pane layout persistence design
pallyoung May 2, 2026
0f75b9b
Persist workspace pane layout across desktop and mobile
pallyoung May 2, 2026
4c22869
Fix mobile session hydrate race
pallyoung May 2, 2026
172b7fd
Fix direct workspace auth cookie parsing
pallyoung May 2, 2026
ff6b669
Use server auth sessions for workspace access
pallyoung May 2, 2026
1c6c7f7
feat(web): lazy hydrate desktop terminal replay
pallyoung May 2, 2026
9e1047a
feat(cli): add open command and restart handling
pallyoung May 2, 2026
30c50f6
fix(web): stabilize terminal lazy hydration
pallyoung May 2, 2026
b2d18ac
Fix pane layout ratio persistence
pallyoung May 3, 2026
44070cc
feat(terminal): snapshot agent panes on hard reload
pallyoung May 3, 2026
6c8d132
Merge branch 'feature/terminal-snapshot-reload' into feature/refactor-ts
pallyoung May 3, 2026
932c4b0
Fix terminal replay reconnect edge cases
pallyoung May 3, 2026
4190cba
refactor(storage): migrate sqlite driver to node:sqlite
pallyoung May 3, 2026
d5bbbda
fix(server): harden workspace watcher lifecycle
pallyoung May 3, 2026
680f107
fix(cli): align packaged runtime dependencies
pallyoung May 3, 2026
b953121
chore(server): remove unused anthropic sdk
pallyoung May 3, 2026
9be3783
chore(deps): upgrade workspace dependencies
pallyoung May 3, 2026
a109e20
fix(web): defer websocket until auth completes
pallyoung May 3, 2026
6f3d69b
fix(server): redirect unauthenticated app routes
pallyoung May 3, 2026
06fe8da
fix(web): avoid auto-opening mobile git diff
pallyoung May 3, 2026
aaf8711
fix(server): tighten production runtime defaults
pallyoung May 3, 2026
dd3e130
feat(web): add git status summary to file panel
pallyoung May 3, 2026
708fdd1
style(web): adjust shared component layout styles
pallyoung May 3, 2026
92be3a0
fix(cli): declare server runtime deps
pallyoung May 3, 2026
b8fb732
docs: add mobile select sheet unification design
pallyoung May 3, 2026
ca69473
fix(cli): accept version subcommand
pallyoung May 3, 2026
8d221f3
docs: add mobile select sheet unification plan
pallyoung May 3, 2026
8a76459
feat(web): add shared mobile select sheet
pallyoung May 3, 2026
004dcf0
fix(web): align mobile select sheet scaffold API
pallyoung May 3, 2026
3737220
fix(web): harden mobile select sheet interactions
pallyoung May 3, 2026
3582529
docs: add terminal file paste & drop upload design
pallyoung May 3, 2026
c03d094
refactor(web): unify mobile terminal selector
pallyoung May 3, 2026
2f032e8
docs: shorten upload TTL from 14d to 72h
pallyoung May 3, 2026
223ce5e
fix(web): improve mobile select sheet a11y
pallyoung May 3, 2026
36d2b80
refactor(web): unify remaining mobile select flows
pallyoung May 3, 2026
9c40ba0
fix(web): resolve mobile select sheet regressions
pallyoung May 3, 2026
0beafed
test(web): cover mixed-result branch create flow
pallyoung May 3, 2026
33c2dbc
merge: mobile select sheet unification into refactor-ts
pallyoung May 3, 2026
83bb55c
Refine mobile agent session sheet
pallyoung May 3, 2026
253df4e
Fix terminal reconnect recovery replay
pallyoung May 3, 2026
c189eee
fix(build): isolate runtime artifacts and restore runtime config plum…
pallyoung May 3, 2026
5bca9fd
refactor(server): remove hook-driven session plumbing
pallyoung May 3, 2026
081caa1
Merge branch 'feature/pty-driven-state-hooks-removal' into feature/re…
pallyoung May 3, 2026
d6c7baa
fix: monorepo packages should use src for dev, dist for publish
May 3, 2026
66985e5
Handle terminal creation failures visibly
May 3, 2026
f137a56
Fix macOS node-pty spawn helper recovery
May 3, 2026
c963a6a
fix: remove failed or closed sessions cleanly
May 3, 2026
2552f78
fix(web): align xterm scrollbar with app theme
May 4, 2026
4c97d1b
refactor(settings): remove provider header from settings page
May 4, 2026
817ee9b
fix(server): show diff for untracked files
May 4, 2026
996d134
fix(web): restore editor header action alignment
May 4, 2026
cdb3677
feat(web): support save shortcut in file editor
May 4, 2026
d2bd958
fix(web): align git diff preview chrome and labels
May 4, 2026
fe17b26
fix mobile session status badge wrapping
May 4, 2026
272d0f5
fix supervisor entry label and alignment
May 4, 2026
f9ca4be
remove duplicate settings section titles
May 4, 2026
f8e8dfa
fix(web): close git diff back to session content
May 4, 2026
7a72b3a
fix(web): remove mobile git diff close button
May 4, 2026
96c063f
Improve git auth prompts and credential handling
May 4, 2026
62b07f4
docs(spec): add provider settings tabs design
pallyoung May 4, 2026
546c07a
Align git row status metadata
pallyoung May 4, 2026
164aa8e
fix(workspace): synchronize git and file refresh state
May 4, 2026
2dad55f
Prevent brute-force password guessing from bypassing auth controls
pallyoung May 4, 2026
37531d5
Fix git status parsing for deleted unicode paths
pallyoung May 4, 2026
0555c86
Remove obsolete planning and acceptance docs from the tree
pallyoung May 4, 2026
0006961
Clarify notification capability in settings
pallyoung May 4, 2026
f8607cf
Refine provider settings navigation
pallyoung May 4, 2026
17a7419
Harden auth and git runtime behavior
pallyoung May 4, 2026
751e92b
Fix terminal Ctrl+V paste handling
pallyoung May 4, 2026
1b74ec6
Improve topbar panel toggle states
pallyoung May 4, 2026
2895d98
Fix provider config editor layout
pallyoung May 4, 2026
c98275d
Fix notification status warning styling
pallyoung May 4, 2026
638516b
Refine web routing fallback and add frontend 404
pallyoung May 4, 2026
50964a3
Unify mobile page header component
pallyoung May 4, 2026
e3443c0
docs: 新增用户帮助文档系统并完善 README
pallyoung May 4, 2026
4e97282
chore: rename frontend auth route from /auth to /login to avoid colli…
pallyoung May 4, 2026
37b4a71
Refine mobile session completion notifications
pallyoung May 4, 2026
b27289f
Expand untracked git status entries
pallyoung May 4, 2026
8640aac
feat: add terminal file paste upload
pallyoung May 4, 2026
b5e4548
chore(cli): update repository metadata
pallyoung May 4, 2026
9d11286
fix(cli): declare multipart runtime dependency
pallyoung May 4, 2026
d555dc9
fix(cli): sync multipart runtime dependency lockfile
pallyoung May 4, 2026
a0d9d86
chore: add .build to gitignore
May 4, 2026
6c64f90
chore: update pnpm workspace and lock files
May 4, 2026
fc00f23
Fix session notification output sanitization
May 4, 2026
3bcf83e
docs: add mobile terminal soft keybar design spec
May 4, 2026
e04d06c
fix(session): refine terminal input activity handling
May 5, 2026
aaa67bc
refactor(protocol): drop legacy system input activity
May 5, 2026
6bcaf6d
fix(web): harden websocket url resolution
May 5, 2026
49b962e
refactor(server): remove sqlite migration compatibility chain
May 5, 2026
c085a7b
chore(server): clean up lingering ts build errors
May 5, 2026
65e67cd
feat(terminal): add mobile soft keybar
May 5, 2026
faf4326
Merge branch 'feature/mobile-terminal-soft-keybar' into feature/refac…
May 5, 2026
22bb336
fix(web): move mobile terminal keybar to top
May 5, 2026
b3786df
fix(server): clean up workspace close resources
May 5, 2026
cc66b46
docs: add biome lint rollout design spec
May 5, 2026
787d165
chore: stabilize biome baseline commands
May 5, 2026
0881a70
chore: stabilize biome baseline commands
May 5, 2026
1fb673f
docs: add biome lint rollout implementation plan
May 5, 2026
059a508
docs: document biome quality workflow
May 5, 2026
ff29877
docs(spec): define shell snapshot-first recovery
May 5, 2026
07d2622
docs: clarify quality command usage
May 5, 2026
7050392
docs: clarify repo-wide biome command scope
May 5, 2026
7b47644
ci: add biome quality workflow
May 5, 2026
2aee39e
chore: add husky biome pre-commit hook
May 5, 2026
eb88c26
chore: harden husky pre-commit hook
May 5, 2026
834fb70
chore: harden biome husky hook safety
May 5, 2026
be3c01b
chore: clear low-risk unused-variable diagnostics
May 5, 2026
84ffbfd
test(server): remove explicit any from dependency builders
May 5, 2026
78b75de
test(web): remove explicit any from ws and supervisor mocks
May 5, 2026
a7f8c90
refactor(server): tighten remaining biome explicit-any boundaries
May 5, 2026
c89660e
test: clear remaining explicit-any lint warnings
May 5, 2026
300f871
style(e2e): align biome formatting baseline
May 5, 2026
f472801
style(cli): normalize biome formatting and imports
May 5, 2026
cdee959
style(core): align biome formatting and exports
May 5, 2026
03828ec
style(providers): align biome formatting baseline
May 5, 2026
fa85e41
style(server): align biome formatting baseline
May 5, 2026
6a17513
style(web): align biome formatting baseline
May 5, 2026
8f85daf
test(web): align suites with current command contracts
May 5, 2026
92c0dc7
fix(hooks): block partial-staged biome rewrites
May 5, 2026
4589922
Merge branch 'feature/biome-lint-rollout' into feature/refactor-ts
May 5, 2026
1430c63
docs: remove completed biome rollout plan
May 5, 2026
073639d
refactor(terminal): unify shell recovery on snapshots
May 5, 2026
1e3d323
Refine mobile terminal soft key bar
pallyoung May 5, 2026
dfe299f
Fix notification titles to use session title
pallyoung May 5, 2026
20dcfe3
fix(session): gate running state on submit
pallyoung May 5, 2026
f80f9e3
merge: session state submit-only gating
pallyoung May 5, 2026
fb5047d
fix(web): unify terminal scrollbar styling
pallyoung May 5, 2026
d0332f1
docs: improve README with clearer introduction, browser access highli…
pallyoung May 5, 2026
038445e
improve mobile xterm touch scrolling
pallyoung May 5, 2026
43ea071
docs: add workspace fullscreen design
pallyoung May 5, 2026
ec62d50
feat: add workspace fullscreen controller
pallyoung May 5, 2026
2fa8350
feat: add desktop workspace fullscreen toggle
pallyoung May 5, 2026
5f1e069
feat: add mobile workspace fullscreen toggle
pallyoung May 5, 2026
b60764d
fix: prioritize fullscreen escape over focus mode
pallyoung May 5, 2026
1876813
fix: simplify session completion notifications
pallyoung May 5, 2026
dbbf4b1
Merge branch 'feature/workspace-fullscreen' into feature/refactor-ts
pallyoung May 5, 2026
5a8336c
fix terminal fit after desktop refresh
pallyoung May 5, 2026
a1681f7
fix(web): restore debounced terminal resize after hydration
pallyoung May 5, 2026
2c15bd2
docs(prd): sync zh-CN product document for refactor-ts
pallyoung May 5, 2026
92ba46b
docs: refresh PRD in zh and en
May 6, 2026
002693c
fix(web): restore mobile supervisor sheet objective state
May 6, 2026
502db90
docs: refresh readme positioning and add chinese version
May 6, 2026
80f0a75
Fix frontend login route cleanup
May 6, 2026
56fed2c
chore(ci): revamp release flow and remove legacy hook bridge
May 6, 2026
eaa5b2c
fix(server): avoid double-finishing stopped sessions
May 6, 2026
9c292ad
fix(cli): harden runtime version and launch handling
May 6, 2026
316a65f
chore(ts): align package configs and test formatting
May 6, 2026
4fbb8a9
refactor(server): re-read session state after terminal close
May 6, 2026
1872e48
Improve CLI startup failure log surfacing
May 6, 2026
801344a
Add configurable supervisor evaluation timeout
May 6, 2026
129b5f2
fix(web): harden terminal ws reconnect recovery
May 6, 2026
432ff25
Merge branch 'fix/terminal-reconnect-replay' into feature/refactor-ts
May 6, 2026
116057b
Refine supervisor timeout setting layout
pallyoung May 6, 2026
3038b10
test(web): format xterm host reconnect specs
pallyoung May 6, 2026
b72d511
ci: setup pnpm before node cache
pallyoung May 6, 2026
0f08090
fix(web): avoid window timer dependency in session close polling
pallyoung May 6, 2026
deb6598
style(web): use direct timers in session close polling
pallyoung May 6, 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
  •  
  •  
  •  
2 changes: 0 additions & 2 deletions .cargo/config.toml

This file was deleted.

10 changes: 10 additions & 0 deletions .changeset/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Changesets

This repository uses Changesets to maintain the CLI release PR and changelog.

Current policy:

- Normal PRs may omit a changeset.
- If a PR should be released, add a changeset for `@spencer-kit/coder-studio`.
- Internal workspace changes that affect the CLI should still be described under the CLI package.
- Non-CLI packages are currently internal-only and must not be targeted by changesets.
19 changes: 8 additions & 11 deletions .changeset/config.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
{
"$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json",
"changelog": "@changesets/cli/changelog",
"$schema": "https://unpkg.com/@changesets/config@3.1.4/schema.json",
"changelog": [
"@changesets/changelog-github",
{
"repo": "spencerkit/coder-studio"
}
],
"commit": false,
"fixed": [],
"linked": [
[
"@spencer-kit/coder-studio",
"@spencer-kit/coder-studio-linux-x64",
"@spencer-kit/coder-studio-darwin-arm64",
"@spencer-kit/coder-studio-darwin-x64",
"@spencer-kit/coder-studio-win32-x64"
]
],
"linked": [],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
Expand Down
35 changes: 0 additions & 35 deletions .github/workflows/changesets.yml

This file was deleted.

135 changes: 32 additions & 103 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,120 +1,49 @@
name: CI

on:
pull_request:
push:
branches:
- main
pull_request:

permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
group: ci-${{ github.event_name }}-${{ github.ref }}
cancel-in-progress: true

jobs:
version-consistency:
name: Version Consistency
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- run: pnpm install --no-frozen-lockfile
- run: pnpm version:check
verify:
name: Lint, test, and build
runs-on: ubuntu-latest
permissions:
contents: read

cli-cross-platform:
name: CLI Unit (${{ matrix.os }})
runs-on: ${{ matrix.os }}
needs: version-consistency
strategy:
fail-fast: false
matrix:
os:
- ubuntu-22.04
- macos-latest
- windows-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- run: pnpm install --no-frozen-lockfile
- run: pnpm test:cli
- name: Checkout repository
uses: actions/checkout@v4

transport-windows-smoke:
name: Transport Windows Smoke
runs-on: windows-2022
needs: version-consistency
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: Install Windows GNU target
run: rustup target add x86_64-pc-windows-gnu
- uses: Swatinem/rust-cache@v2
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
workspaces: apps/server -> .build/server/target
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- run: pnpm install --no-frozen-lockfile
- run: npx playwright install chromium
# Pin this smoke to windows-2022 because windows-latest currently tracks
# windows-2025 and GitHub-hosted windows-2025 does not reliably provide WSL.
- run: pnpm test:smoke:windows:transport -- --skip-wsl-preflight
version: 10.33.2
run_install: false

verify-linux:
name: Verify Linux Runtime
runs-on: ubuntu-22.04
needs: version-consistency
env:
CODER_STUDIO_START_TIMEOUT_MS: 45000
CODER_STUDIO_RUST_TARGET: x86_64-unknown-linux-musl
steps:
- uses: actions/checkout@v4
- name: Install Linux build dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential \
curl \
file \
musl-tools \
xvfb \
wget
- uses: dtolnay/rust-toolchain@stable
- name: Setup Node.js
uses: actions/setup-node@v4
with:
components: rustfmt, clippy
- name: Install Linux musl target
run: rustup target add x86_64-unknown-linux-musl
- uses: Swatinem/rust-cache@v2
with:
workspaces: apps/server -> .build/server/target
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: pnpm
- run: pnpm install --no-frozen-lockfile
- run: pnpm test:cli
- run: cargo fmt --manifest-path apps/server/Cargo.toml --all --check
- run: cargo clippy --manifest-path apps/server/Cargo.toml --all-targets -- -D warnings
- run: cargo check --manifest-path apps/server/Cargo.toml
- run: cargo test --manifest-path apps/server/Cargo.toml
- run: pnpm pack:local
- run: xvfb-run -a pnpm test:smoke
- run: npx playwright install --with-deps chromium
- run: xvfb-run -a pnpm test:e2e:release
- uses: actions/upload-artifact@v4
if: success()
with:
name: release-artifacts-linux
path: .artifacts/*
node-version: "24"
cache: "pnpm"

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Validate changesets metadata
run: pnpm changeset:validate

- name: Run lint
run: pnpm ci:lint

- name: Run tests
run: pnpm ci:test

- name: Run production build
run: pnpm ci:build
106 changes: 106 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
name: Publish CLI

on:
workflow_dispatch:
inputs:
npm_tag:
description: "npm dist-tag to publish under"
required: true
default: "latest"
type: string

concurrency:
group: publish-cli
cancel-in-progress: false

jobs:
publish:
name: Publish CLI package
runs-on: ubuntu-latest
permissions:
contents: write

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Ensure publish runs from main
run: |
if [ "${GITHUB_REF_NAME}" != "main" ]; then
echo "Publish workflow must run from main" >&2
exit 1
fi

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.33.2
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "24"
cache: "pnpm"
registry-url: "https://registry.npmjs.org"

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Ensure there are no pending release changesets
run: |
pending_changesets=$(find .changeset -maxdepth 1 -type f -name '*.md' ! -name 'README.md')
if [ -n "${pending_changesets}" ]; then
echo "Pending changesets exist. Merge the generated release PR before publishing." >&2
echo "${pending_changesets}" >&2
exit 1
fi

- name: Run release validation
run: pnpm ci:release:validate

- name: Read CLI version
id: release
run: |
version=$(node --input-type=module -e "import { readFileSync } from 'node:fs'; console.log(JSON.parse(readFileSync('packages/cli/package.json', 'utf8')).version)")
if [ -z "${version}" ]; then
echo "Failed to determine CLI version" >&2
exit 1
fi
echo "version=${version}" >> "${GITHUB_OUTPUT}"
echo "tag=v${version}" >> "${GITHUB_OUTPUT}"

- name: Ensure release tag does not already exist
run: |
if git rev-parse --verify --quiet "refs/tags/${{ steps.release.outputs.tag }}" >/dev/null; then
echo "Release tag ${{ steps.release.outputs.tag }} already exists" >&2
exit 1
fi

- name: Publish CLI to npm
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
if [ -z "${NODE_AUTH_TOKEN}" ]; then
echo "NPM_TOKEN secret is required for publishing" >&2
exit 1
fi
pnpm publish:cli -- --publish --no-build --tag "${{ inputs.npm_tag }}"

- name: Create and push release tag
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git tag "${{ steps.release.outputs.tag }}"
git push origin "${{ steps.release.outputs.tag }}"

- name: Create GitHub release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release create "${{ steps.release.outputs.tag }}" \
--title "@spencer-kit/coder-studio ${{ steps.release.outputs.version }}" \
--generate-notes \
--verify-tag
51 changes: 51 additions & 0 deletions .github/workflows/release-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Release PR

on:
push:
branches:
- main

concurrency:
group: release-pr-${{ github.ref }}
cancel-in-progress: true

jobs:
release-pr:
name: Create or update release PR
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 10.33.2
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "24"
cache: "pnpm"

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Validate changesets metadata
run: pnpm changeset:validate

- name: Create or update release PR
uses: changesets/action@v1
with:
version: pnpm version-packages
commit: "release: version packages"
title: "release: version packages"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Loading
Loading