Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
656 commits
Select commit Hold shift + click to select a range
7ae5133
feat(plugins): let plugins transform and render timeline items (#3940)
boudra Aug 27, 2026
3377997
(feat): Open Child Folders as Apps (port from conductor) (#3615)
caikovsky Aug 27, 2026
8e0af11
feat(plugin): add host-rendered Icon component (#3903)
omercnet Aug 27, 2026
12e3acd
fix(plugins): restore native plugin setup flows (#3942)
boudra Aug 27, 2026
2d78969
Add steering support for ACP providers that indicate support (#3921)
smagnuso Aug 27, 2026
cda441d
fix(app): prevent composer height flash after settings (#3943)
boudra Aug 27, 2026
a8734a9
Update project licensing (#3944)
boudra Aug 27, 2026
96cb70f
Restore rewound prompts immediately on iOS (#3946)
boudra Aug 27, 2026
5c7d62d
revert(acp): restore prior turn handling
boudra Aug 27, 2026
b6641d7
docs(changelog): prepare 0.7.0-beta.1
boudra Aug 27, 2026
1860a6f
chore(release): cut 0.7.0-beta.1
boudra Aug 27, 2026
1fc5250
fix: update lockfile signatures and Nix hash [skip ci]
paseo-bot[bot] Aug 27, 2026
e69cfcc
fix(app): idle composer shows only action row (no input mimicry); dro…
ddvnguyen Aug 28, 2026
f044217
chore: restamp workspace versions to 0.6.1-hydra-e69cfcc99 (match HEAD)
ddvnguyen Aug 28, 2026
c3a6f2d
feat(app/pwa): installable PWA + install button on Paseo Home
ddvnguyen Aug 28, 2026
c08de47
fix(app): reduce composer bottom padding (inputAreaContainer 2→1, inp…
ddvnguyen Aug 28, 2026
a7254ad
chore: restamp workspace versions to match HEAD
ddvnguyen Aug 28, 2026
989bdbc
feat(app/pwa): show install button even before beforeinstallprompt fires
ddvnguyen Aug 28, 2026
1d62c92
feat(app/pwa): theme tokens + click-to-help dialog
ddvnguyen Aug 28, 2026
7284167
fix(app): focused composer stays single-pill height; bottom margin 0,…
ddvnguyen Aug 28, 2026
01e39bd
chore: restamp workspace versions
ddvnguyen Aug 28, 2026
9d1a665
fix(app/header): pin screen header to top on web
ddvnguyen Aug 28, 2026
045c5b4
fix(app): restore thin bottom margin on composer (1x spacing[1] ~= 4px)
ddvnguyen Aug 28, 2026
315e589
chore: restamp workspace versions
ddvnguyen Aug 28, 2026
5e7f488
fix(app/pwa + server): keyboard shift on web + manifest MIME
ddvnguyen Aug 28, 2026
9d32ad7
fix(app): composer paddingBottom 1->2 (~8px)
ddvnguyen Aug 28, 2026
686e8a4
chore: restamp workspace versions
ddvnguyen Aug 28, 2026
ae72ddb
fix(app): restore upstream inputWrapper padding (xs:2/md:4 vertical, …
ddvnguyen Aug 28, 2026
bfd38f6
chore: restamp workspace versions
ddvnguyen Aug 28, 2026
8dfec64
fix(app): restore upstream composer padding (inputAreaContainer padBo…
ddvnguyen Aug 28, 2026
93dffdb
chore: restamp workspace versions
ddvnguyen Aug 28, 2026
dd77c12
fix(app): reserve text-input space when idle so action row position i…
ddvnguyen Aug 28, 2026
4178f3b
chore: restamp workspace versions
ddvnguyen Aug 28, 2026
bd7482c
fix(app): revert idle space reservation, set inputAreaContainer paddi…
ddvnguyen Aug 28, 2026
2b9f59d
chore: restamp workspace versions
ddvnguyen Aug 28, 2026
4fdd721
feat(app): remove PWA install button from home pages
ddvnguyen Aug 28, 2026
2cdfff0
fix(app): composer inputAreaContainer minHeight 75→52 (idle pill ~44p…
ddvnguyen Aug 28, 2026
610059e
chore: restamp workspace versions
ddvnguyen Aug 28, 2026
2daebdc
chore(constants): no-op (FOOTER_HEIGHT still 75, composer uses local …
ddvnguyen Aug 28, 2026
e198683
merge upstream v0.7.0-beta.1 into sync/upstream-0.7.0-beta.1-2026-08-28
ddvnguyen Aug 28, 2026
2fa2a08
chore: restamp to 0.7.0-beta.1-hydra-2daebdc55 (post-merge)
ddvnguyen Aug 28, 2026
c91caef
fix(app): strip any build-metadata suffix in getNativeReleaseVersion …
ddvnguyen Aug 28, 2026
b7b0c90
chore: restamp after native-release-version fix
ddvnguyen Aug 28, 2026
14142f8
fix(constants): revert FOOTER_HEIGHT 52→75 (regression from 2daebdc55)
ddvnguyen Aug 28, 2026
2983d3c
chore: restamp after FOOTER_HEIGHT revert
ddvnguyen Aug 28, 2026
a7d4881
feat(app/mobile-panels): add web-only back-swipe gesture
ddvnguyen Aug 28, 2026
ed5d337
feat(app/composer): focused minHeight 1→1.5 lines (36+16=52 desktop, …
ddvnguyen Aug 28, 2026
447a381
chore: restamp
ddvnguyen Aug 28, 2026
a501e1e
feat(sdk): expose a session's commands and full snapshot on the agent…
gpambrozio Aug 28, 2026
9a436ed
feat(app/composer): focused minHeight = MIN_INPUT_HEIGHT (1 line exac…
ddvnguyen Aug 28, 2026
cbeecde
chore: restamp
ddvnguyen Aug 28, 2026
4291446
revert(app/composer): focused mode back to upstream defaults
ddvnguyen Aug 28, 2026
e10d95b
chore: restamp
ddvnguyen Aug 28, 2026
69ded4d
fix(app/composer): mobile web textarea minHeight 30 (was 46)
ddvnguyen Aug 28, 2026
0fc89ef
chore: restamp
ddvnguyen Aug 28, 2026
fe803f6
Let plugins contribute contextual composer pills (#3956)
boudra Aug 28, 2026
fb67d2c
Keep the daemon responsive during Git queue pressure (#3945)
boudra Aug 28, 2026
51a435d
feat(app): find workspaces by PR/MR number in the command center (#3008)
cleiter Aug 28, 2026
3d69b0f
fix(app): render markdown verbatim instead of substituting characters…
cleiter Aug 28, 2026
cbd2430
tune(app/composer+stream): 3 polish passes
ddvnguyen Aug 28, 2026
b04ad38
chore: restamp
ddvnguyen Aug 28, 2026
a1ed5a8
Stop PR status polling from rate-limiting your entire GitHub account …
dezchai Aug 28, 2026
deb846e
Let plugins use Paseo modals, icons, and toasts (#3967)
boudra Aug 28, 2026
0b1aee5
fix(app/pwa): restore touch scroll on Android - pull-to-refresh: only…
ddvnguyen Aug 28, 2026
b680bd1
fix(app/pwa): scroll + modal + sidebar + timestamp toggle
ddvnguyen Aug 28, 2026
25eb322
fix(app): prevent archived workspaces returning from cache (#3975)
boudra Aug 28, 2026
d9f28fc
fix(app): history scroll + model modal on mobile web
ddvnguyen Aug 28, 2026
23debf3
fix(server): honor configured commit signing (#3976)
paseo-bot[bot] Aug 28, 2026
1c9ecca
fix(app/model-sheet): text alignment in sheet controls
ddvnguyen Aug 28, 2026
42b6d99
Wait for in-flight dictation commits before finishing (#3968)
boudra Aug 28, 2026
7ea4288
Keep restored workspaces out of reconciliation loops (#3987)
boudra Aug 28, 2026
6676648
Connect to remote daemons over SSH (#3989)
boudra Aug 28, 2026
ed628ff
feat(app): add workspace actions to the command center (#3013)
cleiter Aug 28, 2026
510074f
docs: add v0.7.0-beta.2 changelog
boudra Aug 28, 2026
4e60c28
chore(release): cut 0.7.0-beta.2
boudra Aug 28, 2026
3c6e4e3
feat(highlight): support Astro source files (#3997)
boudra Aug 28, 2026
693280d
fix(app): keep commits above the safe area (#4005)
boudra Aug 28, 2026
463415a
fix(providers): tolerate slow Pi and OMP RPC startup (#4008)
boudra Aug 28, 2026
43eb5d8
chore: restamp workspace versions
ddvnguyen Aug 29, 2026
3ad218e
feat(app): add UI zoom and text line-height settings
ddvnguyen Aug 29, 2026
7080648
docs(website): publish terms and privacy policies (#4030)
boudra Aug 29, 2026
aeb240b
fix(server): batch cold-start PR status polls (#4025)
boudra Aug 29, 2026
e31e7cc
Merge remote-tracking branch 'upstream/main' into mobile-ui-zoom-line…
ddvnguyen Aug 29, 2026
0f635c6
chore: merge upstream/main + stamp hydra version for mobile build
ddvnguyen Aug 29, 2026
6aec5a4
feat: hydra version branding for mobile app
ddvnguyen Aug 29, 2026
d9b1827
chore: migrate EAS project to ddv0623 account
ddvnguyen Aug 29, 2026
66965ee
feat(app): ui zoom scales UI fonts, wider line-height range, revert c…
ddvnguyen Aug 29, 2026
1ecb098
chore: re-sync workspace versions
ddvnguyen Aug 29, 2026
53dda22
fix: line-height 0.05 step display, fix EAS keystore path
ddvnguyen Aug 29, 2026
c9f1db3
feat(app): add spacingScale, revert chatbox to upstream, fix display
ddvnguyen Aug 29, 2026
5d008af
feat(app): add reset defaults button to Appearance settings
ddvnguyen Aug 29, 2026
d8a94eb
fix: reduce MIN_INPUT_HEIGHT to 26px for mobile and desktop
ddvnguyen Aug 29, 2026
6c813d1
fix(app): keep chat synchronized with keyboard (#4044)
boudra Aug 29, 2026
1d4c3a2
feat(plugin): add host navigation capabilities for plugin surfaces (#…
omercnet Aug 29, 2026
b6bfded
Fix archived agent navigation and recovery (#4033)
boudra Aug 29, 2026
650f3ca
Reuse OpenCode helpers across ordinary agent sessions (#4009)
boudra Aug 29, 2026
eef9be8
feat(app): add zoomable image previews (#4032)
boudra Aug 29, 2026
a88aa49
fix(quota): show Grok unified-billing usage as a weekly window (#4029)
Lite-G Aug 29, 2026
63587a9
feat(server): establish semantic session permissions (#3981)
boudra Aug 29, 2026
0dad1d7
fix(app): use popout scrolling on iPad desktop (#3992)
yzim Aug 29, 2026
86ef468
fix(app): make image lightbox gestures work on Android (#4049)
boudra Aug 29, 2026
b82a4e2
chore: add .easignore to reduce EAS upload size
ddvnguyen Aug 30, 2026
24d86a1
fix: exclude bun.lock from EAS upload, HR margin uses spacing token
ddvnguyen Aug 30, 2026
d792f7a
fix: tighter composer spacing, markdown elements use theme.spacing
ddvnguyen Aug 30, 2026
b7a059d
feat: compact markdown spacing + tighter inputWrapper gap
ddvnguyen Aug 30, 2026
18e79e0
fix: force npm install on EAS (bun 1.2 can't parse lockfileVersion 2)
ddvnguyen Aug 30, 2026
b0d1cb7
fix: remove bun.lock before EAS build to force npm
ddvnguyen Aug 30, 2026
47d5677
Merge remote-tracking branch 'upstream/main' into mobile-ui-zoom-line…
ddvnguyen Aug 30, 2026
c9c9da4
chore: bump to 0.7.0-beta.2-hydra
ddvnguyen Aug 30, 2026
6d2f11c
Merge v0.7.0-beta.2 release tag
ddvnguyen Aug 30, 2026
7ff4976
feat(app): UI zoom step to 1% for finer control
ddvnguyen Aug 30, 2026
2618686
fix(app): stabilize image lightbox gestures (#4064)
boudra Aug 30, 2026
9113542
fix(dictation): finalize recordings with abandoned partials (#4065)
boudra Aug 30, 2026
8cf5942
fix(app): keep web composer focused after submit (#4067)
boudra Aug 30, 2026
6688c92
fix(app): stop calling new agent work reopened (#4068)
boudra Aug 30, 2026
ce335de
Make Paseo tool calls readable (#4066)
boudra Aug 30, 2026
5e561f8
fix(android): release communication route after dictation (#4069)
boudra Aug 30, 2026
b1050d9
feat(cli): simplify Hub login and export triggers (#4050)
boudra Aug 30, 2026
8533c5c
fix(app): keep expanded composer above keyboard (#4051)
boudra Aug 30, 2026
adf80a9
Keep Hub daemon access explicit (#4088)
boudra Aug 30, 2026
375e9b3
feat(website): rebuild homepage product mockups
boudra Aug 30, 2026
fa53ba8
feat(website): refine responsive product mockups
boudra Aug 30, 2026
73a5e6c
feat(website): expand homepage product story
boudra Aug 30, 2026
f2f9308
docs(website): refresh product comparisons
boudra Aug 30, 2026
aca7dbf
chore: rebuild Paseo-Mobile from LKG 7ff4976e6, new hydra version format
ddvnguyen Aug 30, 2026
e142a09
Merge remote-tracking branch 'upstream/main' into Paseo-Mobile-UI
ddvnguyen Aug 30, 2026
35587ba
chore: sync workspace versions after merging upstream/main
ddvnguyen Aug 30, 2026
7c171a6
fix(app): sticky header under Android keyboard, fullscreen sheets und…
ddvnguyen Aug 30, 2026
3ab77c0
chore: sync workspace versions
ddvnguyen Aug 30, 2026
5a3b724
docs: fix TEST deploy runbook ordering bug, document grayscale branding
ddvnguyen Aug 30, 2026
04be805
fix(app): replace JS keyboard-pan hack with interactive-widget=resize…
ddvnguyen Aug 30, 2026
c90a97f
chore: sync workspace versions
ddvnguyen Aug 30, 2026
0d647bc
fix(app): preserve interactive-widget=resizes-content in runtime view…
ddvnguyen Aug 31, 2026
ed10000
chore: sync workspace versions
ddvnguyen Aug 31, 2026
7605eb7
docs: fix TEST branding runbook — status favicons were never actually…
ddvnguyen Aug 31, 2026
b03e568
fix(app): zoom-compensate mobile panel overlay (Changes/Files/agent-l…
ddvnguyen Aug 31, 2026
7f0f780
chore: sync workspace versions
ddvnguyen Aug 31, 2026
d30d924
fix(app): correct mobile-panel zoom fix — cancel zoom instead of comp…
ddvnguyen Aug 31, 2026
a4677d7
chore: sync workspace versions
ddvnguyen Aug 31, 2026
6b5971b
fix(app): match composer pill background to app background
ddvnguyen Aug 31, 2026
e0e9d1b
chore: sync workspace versions
ddvnguyen Aug 31, 2026
b0fe4ef
docs: add v0.7.0-beta.3 changelog
boudra Aug 31, 2026
fcd81f5
chore(release): carry forward 0.7.0-beta.2 version
boudra Aug 31, 2026
474c7b8
feat(app): decimal font sizes and independent icon-size setting
ddvnguyen Aug 31, 2026
aabcd0b
chore: sync workspace versions
ddvnguyen Aug 31, 2026
95f4eb7
chore(release): cut 0.7.0-beta.3
boudra Aug 31, 2026
f35d860
fix: update lockfile signatures and Nix hash [skip ci]
paseo-bot[bot] Aug 31, 2026
4a3e6de
Increase mobile content text to 16px (#4111)
boudra Aug 31, 2026
11e76f6
fix(server): resume agents cleanly after failed turns
boudra Aug 31, 2026
63923fd
Keep Android timeline still when tapping text (#4090)
boudra Aug 31, 2026
74a377f
fix(server): keep daemon alive when JSONL RPC stdin hits EPIPE (#4048)
Elliotwu-7 Aug 31, 2026
1694828
fix(opencode): show child session prompts (#4055)
mcowger Aug 31, 2026
185ab3f
docs: prepare v0.7.0 changelog
boudra Aug 31, 2026
c56638e
chore(release): cut 0.7.0
boudra Aug 31, 2026
22463bb
fix: update lockfile signatures and Nix hash [skip ci]
paseo-bot[bot] Aug 31, 2026
ecec332
feat(pi): add active-turn steering via native steer RPC (#3752)
mcowger Aug 31, 2026
8eea863
feat(deploy): decouple web UI from daemon — standalone static bundle …
ddvnguyen Aug 31, 2026
6085fbd
refactor(deploy): collapse to single paseo-app on :6969
ddvnguyen Sep 1, 2026
be23cab
ci: add manual pipeline — build + Android + deploy stages
ddvnguyen Sep 1, 2026
76e7297
feat(app): add contentSpacingScale for markdown/HTML spacing control
ddvnguyen Sep 1, 2026
2676d2d
docs: manifest name 'Paseo TEST' → 'Paseo Hub' in branding section
ddvnguyen Sep 1, 2026
afca090
fix(deploy): Caddyfile manifest matcher — .webmanifest → .json
ddvnguyen Sep 1, 2026
11bacaf
fix(test): add missing contentSpacingScale to makeInput default
ddvnguyen Sep 1, 2026
017ee8d
fix: prevent composer height change from firing on every onLayout
ddvnguyen Sep 1, 2026
0c38749
fix(server): rewind paginated Codex threads (#4119)
boudra Sep 1, 2026
1d5d955
fix(ci): build @getpaseo/plugin before server in manual pipeline Stage 1
ddvnguyen Sep 1, 2026
49d6812
fix(android): implement double-back-to-exit pattern
ddvnguyen Sep 1, 2026
9248852
fix(ci): wire build-hydra job output to the step that actually sets t…
ddvnguyen Sep 1, 2026
4c86d90
fix(mobile): render ask-question form in bottom sheet on compact widths
ddvnguyen Sep 1, 2026
2ae2694
fix(mobile): prevent label character-per-line wrapping in settings rows
ddvnguyen Sep 1, 2026
77bb153
fix(mobile): pin Save/Reset buttons in system prompt dialog footer
ddvnguyen Sep 1, 2026
480ba83
fix(ci): fix persisted-build steps that assumed node_modules/.git pre…
ddvnguyen Sep 1, 2026
34046e2
fix(ci): hardlink-persist node_modules instead of per-job npm ci
ddvnguyen Sep 1, 2026
4107be6
fix(ci): hardlink-persist ALL node_modules trees, not just root
ddvnguyen Sep 1, 2026
a8a6174
feat(ci): parallelize deploy stages, deprioritize Android to run last
ddvnguyen Sep 1, 2026
bf398d1
Rename production variant to 'Paseo Hub' with packageId sh.paseo.hub
ddvnguyen Sep 1, 2026
28449b3
Update app icons to match Paseo Hub branding
ddvnguyen Sep 1, 2026
5caa863
Restrict Android build to arm64-v8a ABI only
ddvnguyen Sep 1, 2026
74f1e1e
fix: render html-ish content (details, br, inline images) in chat mes…
ddvnguyen Sep 1, 2026
61d335d
fix: unify Paseo Hub branding across PWA/web/Android icons
ddvnguyen Sep 1, 2026
c537bd2
fix(version): restore -hydra fork identifier in root version
ddvnguyen Sep 1, 2026
f236333
fix(version): move fork identifier out of package.json into the stamp…
ddvnguyen Sep 1, 2026
bf00e8d
fix(version): rename fork identifier suffix from -hydra to -hub
ddvnguyen Sep 1, 2026
80b88c7
fix(ci): prune old persisted builds to prevent NTFS inode exhaustion
ddvnguyen Sep 1, 2026
3ac71ab
fix(ci): tolerate empty builds/hydra dir in prune step
ddvnguyen Sep 1, 2026
67b81fb
fix: stamp sw.js CACHE_VERSION with build commit hash
ddvnguyen Sep 1, 2026
d5edc8d
fix: stamp sw.js CACHE_VERSION from package.json, not git rev-parse
ddvnguyen Sep 1, 2026
7df6870
fix: read app workspace version for sw.js stamping, not root
ddvnguyen Sep 1, 2026
849117e
fix(branding): unify favicon status variants to Paseo Hub light blue
ddvnguyen Sep 1, 2026
1870a7a
feat(ci): create tag + GitHub Release on Android build success
ddvnguyen Sep 1, 2026
480d4fe
fix(android): regenerate adaptive foreground to match PWA icon quality
ddvnguyen Sep 1, 2026
0050cb1
feat(app): debug conversation spacing toggle (red/pink)
ddvnguyen Sep 1, 2026
07125d2
Let Git plugins prepare themselves during installation (#4158)
boudra Sep 1, 2026
7ea9286
fix(app): keep agents running when image viewer closes (#4161)
boudra Sep 1, 2026
deb1247
feat(app): tint tool block gaps blue in debug mode
ddvnguyen Sep 1, 2026
8fe2f36
feat(app): tools block gaps use Content Spacing; Spacing shows as per…
ddvnguyen Sep 1, 2026
95575ad
fix(omp): honor configured timeout while waiting for ready (#4143)
Juns-g Sep 1, 2026
f348eac
ci: use bun 1.4 for builds, drop npm cache on self-hosted
ddvnguyen Sep 1, 2026
06ebd35
fix(app): prevent Android crash from LinkPreview context and polish a…
ddvnguyen Sep 1, 2026
6a10e9c
fix(ci): make Android tags unique and preserve stamped versions in pe…
ddvnguyen Sep 1, 2026
06fae60
Prevent oversized assistant messages from crashing the timeline (#4166)
boudra Sep 1, 2026
23d53b9
ci: revert bun setup to unblock, keep npm cache fix
ddvnguyen Sep 1, 2026
59661f2
Eliminate recurring cross-platform CI flakes (#4171)
boudra Sep 1, 2026
dd5e8f9
Fix graceful daemon shutdown on Windows (#4168)
boudra Sep 1, 2026
640b456
docs: add 0.7.1 changelog
boudra Sep 1, 2026
3e59adb
Add Claude Fable 5.1 to the model catalog (#4179)
boudra Sep 1, 2026
ba54575
Show completion times for hidden-prompt turns (#4170)
boudra Sep 1, 2026
3998ea1
Keep large diffs responsive across web and mobile (#4174)
boudra Sep 1, 2026
8dd4da6
Keep mobile streaming and panel motion stable under JS stalls (#4190)
boudra Sep 1, 2026
e9612df
docs: add 0.7.2 changelog
boudra Sep 1, 2026
9400a49
chore(release): cut 0.7.2
boudra Sep 2, 2026
78f7796
fix: update lockfile signatures and Nix hash [skip ci]
paseo-bot[bot] Sep 2, 2026
cefd8e0
merge: sync Paseo-Mobile-UI with upstream/main v0.7.2 (78f7796eb)
ddvnguyen Sep 2, 2026
d5f917f
chore: migrate Paseo-Mobile-UI to pnpm
ddvnguyen Sep 2, 2026
1449378
fix(sync): use workspace:* for private deps under pnpm (was * for npm)
ddvnguyen Sep 2, 2026
6d1afce
fix(pnpm): keep all workspace deps as workspace:* for frozen-lockfile
ddvnguyen Sep 2, 2026
4a94ae7
fix(pnpm): approve allowed builds for frozen install
ddvnguyen Sep 2, 2026
fb2b41b
fix(ci): move gradle cache to ext4 and use hoisted node-linker for NT…
ddvnguyen Sep 2, 2026
6ea584b
fix(android): clean corrupted gradle journal cache before assembleRel…
ddvnguyen Sep 2, 2026
6ef5c74
fix(android): add explicit metro-resolver dep for pnpm isolated hoisting
ddvnguyen Sep 2, 2026
32a2efb
feat(ci): dist-only pnpm artifact (1 inode, 50M) for hydra deploys
ddvnguyen Sep 2, 2026
8c7a7e2
fix(ci): remove unbound PNPM_HOME variable in deploy TEST/PROD
ddvnguyen Sep 2, 2026
1b32f82
fix(ci): deploy all @getpaseo/* dists to TEST/PROD (protocol, client,…
ddvnguyen Sep 2, 2026
77753da
fix(app): assistant block gap follows contentSpacingScale via StyleSh…
ddvnguyen Sep 2, 2026
780ec4e
fix(ci): use setup-java/setup-android for durable Android builds
ddvnguyen Sep 2, 2026
003438b
fix(app): hoist babel-preset-expo for Android bundling
ddvnguyen Sep 2, 2026
d67a6f5
fix(release): keep releases draft until manifests are ready (#4201)
boudra Sep 2, 2026
de8535c
Customize top-level sidebar items (#4203)
boudra Sep 2, 2026
4aab00f
fix(desktop): use CLI shim for packaged Linux installs (#4207)
boudra Sep 2, 2026
49784fa
Keep Changes and working diff comparisons in sync (#4199)
boudra Sep 2, 2026
cd36469
perf(ci): remove setup-node pnpm cache for self-hosted runner (1m30s …
ddvnguyen Sep 2, 2026
e34aea2
feat(plugins): add live timeline rows and client slash commands
boudra Sep 2, 2026
708f926
fix(server): disable repository fsmonitor commands (#4208)
boudra Sep 2, 2026
77aff0f
fix(app): stabilize Mermaid streaming lifecycle (#4210)
boudra Sep 2, 2026
ff0171c
Make agent tab tooltips compact and informative (#4214)
boudra Sep 2, 2026
7838b53
Show self-hosted and hosted Hub plans (#4213)
boudra Sep 2, 2026
1c96026
feat(providers): add Gajae Code to the ACP provider catalog (#3471)
Yeachan-Heo Sep 2, 2026
ac085d5
Make import session one tap away and make the sheet find your session…
boudra Sep 2, 2026
d4841b6
fix(website): detect the visitor platform during SSR (#4222)
boudra Sep 2, 2026
fa1f01e
feat(app): add fullscreen viewer for Mermaid diagrams on web (#4107)
gengjiawen Sep 2, 2026
53d824a
feat(plugins): split client and server plugin entries (#4206)
boudra Sep 2, 2026
2d8ff6f
Restore copy actions in web diffs (#4229)
boudra Sep 2, 2026
f75dff2
Require explicit setup for fork pull requests (#4215)
boudra Sep 2, 2026
7178583
Stop Settings navigation from retaining closed views (#4228)
boudra Sep 2, 2026
a835136
Let CLI host selection work globally (#4238)
boudra Sep 2, 2026
ce07732
fix(diff): keep file headers synchronized while scrolling (#4240)
boudra Sep 2, 2026
20ecdee
docs(plugins): version breaking API guides (#4245)
boudra Sep 2, 2026
eb75381
feat(hub): expose provider catalogs to executions (#4242)
boudra Sep 2, 2026
d3233c9
chore(sync): merge upstream/main eb75381 into Paseo-hub
ddvnguyen Sep 3, 2026
87494c3
fix(app): restore Hub appearance scales after upstream merge
ddvnguyen Sep 3, 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
  •  
  •  
  •  
8 changes: 2 additions & 6 deletions .agents/skills/release-beta/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
---
name: release-beta
description: Cut a beta release of Paseo. Use when the user says "release beta", "cut a beta", "ship a beta", "beta release", or "/release-beta". Betas are release candidates on the beta channel — they carry an in-place changelog entry, don't move the website download target, and publish npm only on the beta dist-tag.
description: Cut a beta release of Paseo. Use when the user says "release beta", "cut a beta", "ship a beta", "beta release", or "/release-beta".
user-invocable: true
---

# Release beta

Read `docs/release.md` in the Paseo repo and follow the **Beta flow** section end-to-end. Run the **Beta release** completion checklist at the bottom of that doc.

During preparation, classify the previous-stable-to-`HEAD` diff as patch or minor and show the target version and rationale to the user. Agents never select a major version autonomously.

Each beta updates an in-place `CHANGELOG.md` entry (`## X.Y.Z-beta.N`) that gets overwritten at promotion, and npm publishes only on the explicit `beta` dist-tag.
Follow the **Beta flow** and **Beta release** completion checklist in `docs/release.md` end-to-end.
6 changes: 1 addition & 5 deletions .agents/skills/release-stable/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,4 @@ user-invocable: true

# Release stable

Read `docs/release.md` in the Paseo repo and follow the **Standard release (stable)** flow if cutting fresh, or the **Beta flow** promotion step if promoting an existing beta. Run the **Stable release (or promotion)** completion checklist at the bottom of that doc.

For a fresh release, classify the previous-stable-to-`HEAD` diff as patch or minor and show the target version and rationale to the user. Agents never select a major version autonomously.

The doc covers the changelog, pre-release sanity check, and post-release babysit pattern. Don't skip steps.
Follow the applicable flow and the **Stable release (or promotion)** completion checklist in `docs/release.md` end-to-end.
21 changes: 21 additions & 0 deletions .easignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Exclude non-app packages and docs from EAS upload
packages/cli/
packages/desktop/
packages/relay/
packages/website/
packages/protocol/
packages/plugin/
packages/highlight/
packages/expo-two-way-audio/
scripts/
docs/
.github/
.dev/
*.md
.gitignore
.easignore

# EAS cloud runner has bun 1.2 which can't read lockfileVersion 2 (bun 1.4+).
# Exclude bun.lock so EAS falls back to npm with package-lock.json.
bun.lock
bun.lockb
2 changes: 1 addition & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Closes #

### Reasoning

<!-- A short description of the reasoning of this change in your own words. What was wrong, and how do you hope this PR fixes it. If you can't explain this briefly, the PR is probably too big. This description must be grounded in real user flows and framed as value provider to Paseo users. -->
<!-- A short description of the reasoning of this change in your own words. What was wrong, and how do you hope this PR fixes it. If you can't explain this briefly, the PR is probably too big. This description must be grounded in real user flows and framed as value provided to Paseo users. -->

### Goals

Expand Down
58 changes: 51 additions & 7 deletions .github/workflows/android-apk-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,14 @@ env:
SOURCE_TAG: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || github.ref_name }}

jobs:
publish-android-apk:
ensure-release:
permissions:
contents: write
packages: read
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
sparse-checkout: scripts
ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || github.ref }}

- name: Resolve release tag
Expand All @@ -43,7 +41,7 @@ jobs:
run: |
set -euo pipefail

if gh release view "$RELEASE_TAG" --repo "${{ github.repository }}" >/dev/null 2>&1; then
if node scripts/github-release.mjs --repo "${{ github.repository }}" --tag "$RELEASE_TAG" >/dev/null 2>&1; then
exit 0
fi

Expand All @@ -52,6 +50,7 @@ jobs:
--repo "${{ github.repository }}"
--title "Paseo $RELEASE_TAG"
--notes ""
--draft
)

if [[ "$IS_PRERELEASE" == "true" ]]; then
Expand All @@ -60,8 +59,26 @@ jobs:

if ! gh "${release_args[@]}"; then
echo "Release creation raced with another workflow; continuing."
node scripts/github-release.mjs --repo "${{ github.repository }}" --tag "$RELEASE_TAG" >/dev/null
fi

publish-android-apk:
needs: [ensure-release]
permissions:
contents: write
packages: read
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || github.ref }}

- name: Resolve release tag
shell: bash
run: node scripts/emit-release-env.mjs --source-tag "$SOURCE_TAG" >> "$GITHUB_ENV"

- name: Setup Node
uses: actions/setup-node@v4
with:
Expand All @@ -84,11 +101,37 @@ jobs:
- name: Build Android APK on EAS
id: eas_build
shell: bash
env:
EAS_ANDROID_KEYSTORE_BASE64: ${{ secrets.EAS_ANDROID_KEYSTORE_BASE64 }}
EAS_ANDROID_KEYSTORE_PASSWORD: ${{ secrets.EAS_ANDROID_KEYSTORE_PASSWORD }}
EAS_ANDROID_KEY_ALIAS: ${{ secrets.EAS_ANDROID_KEY_ALIAS }}
EAS_ANDROID_KEY_PASSWORD: ${{ secrets.EAS_ANDROID_KEY_PASSWORD }}
run: |
set -euo pipefail

# Strip bun.lock from the repo so EAS doesn't try bun install.
# EAS detects bun workspace from bun.lock before .easignore applies.
rm -f bun.lock bun.lockb

cd packages/app

# Write keystore INSIDE the project so EAS uploads it to cloud
echo "$EAS_ANDROID_KEYSTORE_BASE64" | base64 -d > .release.keystore
cat > credentials.json <<CREDS
{
"android": {
"keystore": {
"keystorePath": ".release.keystore",
"keystorePassword": "$EAS_ANDROID_KEYSTORE_PASSWORD",
"keyAlias": "$EAS_ANDROID_KEY_ALIAS",
"keyPassword": "$EAS_ANDROID_KEY_PASSWORD"
}
}
}
CREDS

build_json="$(npx eas build --platform android --profile production-apk --non-interactive --wait --json)"
rm -f credentials.json .release.keystore
echo "$build_json" > "$RUNNER_TEMP/eas-build.json"

build_id="$(jq -r 'if type == "array" then .[0].id // empty else .id // empty end' "$RUNNER_TEMP/eas-build.json")"
Expand Down Expand Up @@ -117,7 +160,7 @@ jobs:
exit 1
fi

asset_name="paseo-${RELEASE_TAG}-android.apk"
asset_name="hydra-paseo-${RELEASE_TAG}-android.apk"
asset_path="$RUNNER_TEMP/$asset_name"

curl --fail --location --output "$asset_path" "$artifact_url"
Expand All @@ -129,4 +172,5 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release upload "$RELEASE_TAG" "${{ steps.artifact.outputs.asset_path }}" --clobber --repo "${{ github.repository }}"
release_lookup="$(node scripts/github-release.mjs --repo "${{ github.repository }}" --tag "$RELEASE_TAG")"
gh release upload "$release_lookup" "${{ steps.artifact.outputs.asset_path }}" --clobber --repo "${{ github.repository }}"
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ jobs:
filters: .github/ci-paths.yml

- name: Validate CI contracts
run: node --test scripts/ci-workflow.test.mjs scripts/daemon-launch-contract.test.mjs
run: node --test scripts/ci-workflow.test.mjs scripts/daemon-launch-contract.test.mjs scripts/sync-fdroid-changelogs.test.mjs

format:
name: format
Expand Down Expand Up @@ -348,12 +348,12 @@ jobs:
timeout-minutes: 10
run: npx playwright install chromium

- name: Build app dependencies
run: npm run build:app-deps

- name: Build server stack
run: npm run build:server

- name: Build native app dependency
run: npm run build --workspace=@getpaseo/expo-two-way-audio

- name: Install agent CLIs for provider tests
run: node scripts/npm-retry.mjs install -g @anthropic-ai/claude-code @openai/codex@0.105.0 opencode-ai

Expand Down
71 changes: 64 additions & 7 deletions .github/workflows/desktop-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ jobs:
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if gh release view "$RELEASE_TAG" --repo "${{ github.repository }}" > /dev/null 2>&1; then
if node scripts/github-release.mjs --repo "${{ github.repository }}" --tag "$RELEASE_TAG" > /dev/null 2>&1; then
echo "Release $RELEASE_TAG already exists, skipping creation"
else
prerelease_flag=""
Expand All @@ -86,8 +86,10 @@ jobs:
--repo "${{ github.repository }}" \
--title "Paseo $RELEASE_TAG" \
--notes "" \
--draft \
$prerelease_flag || {
echo "Release creation raced with another workflow; continuing."
node scripts/github-release.mjs --repo "${{ github.repository }}" --tag "$RELEASE_TAG" > /dev/null
}
fi

Expand Down Expand Up @@ -191,7 +193,8 @@ jobs:
echo "::error::No release artifacts found in $release_dir"
exit 1
fi
gh release upload "$RELEASE_TAG" "${files[@]}" --clobber --repo "${{ github.repository }}"
release_lookup="$(node scripts/github-release.mjs --repo "${{ github.repository }}" --tag "$RELEASE_TAG")"
gh release upload "$release_lookup" "${files[@]}" --clobber --repo "${{ github.repository }}"

- name: Upload desktop artifacts to workflow
if: env.SHOULD_PUBLISH != 'true'
Expand Down Expand Up @@ -299,7 +302,8 @@ jobs:
echo "::error::No release artifacts found in $release_dir"
exit 1
fi
gh release upload "$RELEASE_TAG" "${files[@]}" --clobber --repo "${{ github.repository }}"
release_lookup="$(node scripts/github-release.mjs --repo "${{ github.repository }}" --tag "$RELEASE_TAG")"
gh release upload "$release_lookup" "${files[@]}" --clobber --repo "${{ github.repository }}"

- name: Upload desktop artifacts to workflow
if: env.SHOULD_PUBLISH != 'true'
Expand Down Expand Up @@ -404,7 +408,8 @@ jobs:
echo "::error::No release artifacts found in $release_dir"
exit 1
fi
gh release upload "$RELEASE_TAG" "${files[@]}" --clobber --repo "${{ github.repository }}"
release_lookup="$(node scripts/github-release.mjs --repo "${{ github.repository }}" --tag "$RELEASE_TAG")"
gh release upload "$release_lookup" "${files[@]}" --clobber --repo "${{ github.repository }}"

- name: Upload desktop artifacts to workflow
if: env.SHOULD_PUBLISH != 'true'
Expand All @@ -424,7 +429,7 @@ jobs:

finalize-rollout:
needs: [publish-macos, publish-linux, publish-windows]
if: ${{ always() && (needs.publish-macos.result == 'success' || needs.publish-macos.result == 'skipped') && (needs.publish-linux.result == 'success' || needs.publish-linux.result == 'skipped') && (needs.publish-windows.result == 'success' || needs.publish-windows.result == 'skipped') && (github.event_name != 'workflow_dispatch' || github.event.inputs.publish != 'false') }}
if: ${{ always() && (github.event_name != 'workflow_dispatch' || github.event.inputs.publish != 'false') }}
permissions:
contents: write
runs-on: ubuntu-latest
Expand Down Expand Up @@ -480,7 +485,7 @@ jobs:
name: windows-manifest
path: release-manifests/windows-manifest

- name: Assemble and upload stamped manifests
- name: Assemble manifests and publish release
if: env.IS_SMOKE_TAG != 'true'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Expand All @@ -491,6 +496,33 @@ jobs:
manifests_dir="$PWD/final"
mkdir -p "$manifests_dir"

expected_manifests=(
"${RELEASE_CHANNEL}-mac.yml"
"${RELEASE_CHANNEL}-linux.yml"
"${RELEASE_CHANNEL}.yml"
)
release_lookup="$(node ../scripts/github-release.mjs --repo "${{ github.repository }}" --tag "$RELEASE_TAG" --cleanup-duplicates)"
existing_assets="$(gh release view "$release_lookup" --repo "${{ github.repository }}" --json assets --jq '.assets[].name')"
for manifest_name in "${expected_manifests[@]}"; do
if grep -Fxq "$manifest_name" <<< "$existing_assets"; then
case "$manifest_name" in
"${RELEASE_CHANNEL}-mac.yml") platform_result="${{ needs.publish-macos.result }}" ;;
"${RELEASE_CHANNEL}-linux.yml") platform_result="${{ needs.publish-linux.result }}" ;;
"${RELEASE_CHANNEL}.yml") platform_result="${{ needs.publish-windows.result }}" ;;
esac
if [[ "$platform_result" =~ ^(success|skipped)$ ]]; then
gh release download "$release_lookup" \
--repo "${{ github.repository }}" \
--pattern "$manifest_name" \
--dir "$manifests_dir"
else
gh release delete-asset "$release_lookup" "$manifest_name" \
--repo "${{ github.repository }}" \
--yes
fi
fi
done

if [[ "${{ needs.publish-macos.result }}" == "success" ]]; then
manifest_name="${RELEASE_CHANNEL}-mac.yml"
node ../scripts/merge-mac-manifest.mjs \
Expand All @@ -515,6 +547,7 @@ jobs:
fi
timestamp="$(date -u +"%Y-%m-%dT%H:%M:%S.000Z")"
node ../scripts/stamp-rollout.mjs --release-date "$timestamp" --rollout-hours "$ROLLOUT_HOURS" "${files[@]}"
# shellcheck disable=SC2016
ROLLOUT_HOURS_EXPECTED="$ROLLOUT_HOURS" RELEASE_DATE_EXPECTED="$timestamp" node -e '
const yaml = require("js-yaml");
const fs = require("fs");
Expand All @@ -536,4 +569,28 @@ jobs:
}
}
' "${files[@]}"
gh release upload "$RELEASE_TAG" "${files[@]}" --clobber --repo "${{ github.repository }}"
gh release upload "$release_lookup" "${files[@]}" --clobber --repo "${{ github.repository }}"

failed_builds=()
[[ "${{ needs.publish-macos.result }}" =~ ^(success|skipped)$ ]] || failed_builds+=(macOS)
[[ "${{ needs.publish-linux.result }}" =~ ^(success|skipped)$ ]] || failed_builds+=(Linux)
[[ "${{ needs.publish-windows.result }}" =~ ^(success|skipped)$ ]] || failed_builds+=(Windows)
if (( ${#failed_builds[@]} > 0 )); then
echo "::error::Desktop builds did not complete for ${failed_builds[*]}; the release remains a draft"
exit 1
fi

missing_manifests=()
for manifest_name in "${expected_manifests[@]}"; do
[[ -f "$manifests_dir/$manifest_name" ]] || missing_manifests+=("$manifest_name")
done
if (( ${#missing_manifests[@]} > 0 )); then
echo "::error::Missing updater manifests: ${missing_manifests[*]}; the release remains a draft"
exit 1
fi

publish_args=(release edit "$release_lookup" --tag "$RELEASE_TAG" --draft=false --repo "${{ github.repository }}")
if [[ "$IS_PRERELEASE" == "true" ]]; then
publish_args+=(--prerelease)
fi
gh "${publish_args[@]}"
1 change: 1 addition & 0 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ on:
- "packages/client/**"
- "packages/expo-two-way-audio/**"
- "packages/highlight/**"
- "packages/plugin/**"
- "packages/protocol/**"
- "packages/relay/**"
- "packages/server/**"
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/nix-update-hash.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ on:
- "package.json"
- "package-lock.json"
- "packages/highlight/**"
- "packages/plugin/**"
- "packages/server/**"
- "packages/relay/**"
- "packages/cli/**"
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/nix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ on:
- "packages/app/**"
- "packages/expo-two-way-audio/**"
- "packages/highlight/**"
- "packages/plugin/**"
- "packages/protocol/**"
- "packages/client/**"
- "packages/server/**"
Expand Down
Loading
Loading