Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
494 commits
Select commit Hold shift + click to select a range
058823b
feat(dispatch): compact turns, usage-report queries, and the missing …
bobleer Aug 2, 2026
b30b067
feat(dispatch): inline image attachments on submit and follow-up turns
bobleer Aug 2, 2026
8c9dc35
feat(dispatch): project subagent sessions through the job event log
bobleer Aug 2, 2026
de38dcd
refactor(dispatch): single-source the wire contract; picker offers on…
bobleer Aug 2, 2026
c3ddc40
perf(build): make Tokio features crate-owned
limityan Aug 2, 2026
b915c23
fix(flow-chat): stabilize turn navigation during virtualization
wsp1911 Aug 2, 2026
d3999c8
fix(dispatch): polish user-facing setup UX
bobleer Aug 2, 2026
6ab6b44
Fix FlowChat initial projection horizontal shift
wsp1911 Aug 2, 2026
6434a9b
feat(cli): add runtime-backed shell mode
limityan Aug 2, 2026
2b5a4fe
fix(flowchat): use best-effort alignment for turn navigation
wsp1911 Aug 2, 2026
d17b6f4
refactor(dispatch): install only published releases; flatten target s…
bobleer Aug 2, 2026
cc13a72
fix(web): stop a stale model-migration notice from reverting the pick…
bobleer Aug 2, 2026
2ebb333
feat(extensions): accept Claude command permission hints
limityan Aug 2, 2026
578f51b
perf(build): close Core feature dependency profiles
limityan Aug 2, 2026
71942a3
Merge remote-tracking branch 'upstream/main' into dev2
wsp1911 Aug 2, 2026
e7e896a
perf(build): isolate core service capability profiles
limityan Aug 2, 2026
aaef036
fix(flow-chat): suspend geometry updates for inactive viewports
wsp1911 Aug 2, 2026
d3a9404
Merge remote-tracking branch 'upstream/main' into dev2
wsp1911 Aug 2, 2026
7d6fc06
fix(flow-chat): correct viewport callback dependencies
wsp1911 Aug 2, 2026
63d1522
Merge pull request #1978 from wsp1911/dev2
wsp1911 Aug 2, 2026
52271fb
feat(runtime): unify active-turn steering across clients
limityan Aug 2, 2026
e44faa2
perf(build): isolate services-core capability profiles
limityan Aug 2, 2026
c6d40ef
perf(ci): stabilize Rust validation critical path
limityan Aug 2, 2026
a113c46
feat(cli): preserve prompt continuity across sessions
limityan Aug 2, 2026
e6afd83
test(core): stabilize external source discovery timing
limityan Aug 2, 2026
3e50228
perf(ci): isolate core test targets by owner
limityan Aug 2, 2026
08ee370
feat(flow-chat): add recursive agent session tree
wsp1911 Aug 2, 2026
a3d2527
feat(flow-chat): add recursive agent session tree
wsp1911 Aug 2, 2026
abb9be4
perf(skills): cache standard user source discovery
limityan Aug 2, 2026
332518a
feat(opencode): unify local config source ordering
limityan Aug 2, 2026
2541693
refactor(mcp): converge runtime lifecycle ownership
limityan Aug 2, 2026
9032463
chore: clean up turn navigation fix plan
wsp1911 Aug 3, 2026
39f387b
feat(appearance): add typed package runtime and surface contracts
kev1n77 Aug 1, 2026
d1cca78
feat(appearance): persist selection and bootstrap desktop startup
kev1n77 Aug 1, 2026
4f57320
feat(settings): manage appearance packages and selection
kev1n77 Aug 1, 2026
d129e1e
feat(appearance): project rendering across embedded surfaces
kev1n77 Aug 1, 2026
e91fae0
refactor(web): migrate workbench surfaces to appearance contracts
kev1n77 Aug 1, 2026
874cf0b
refactor(flow-chat): adopt appearance surface contracts
kev1n77 Aug 1, 2026
9906c21
refactor(theme): remove superseded web theme runtime
kev1n77 Aug 1, 2026
ea8bd53
test(appearance): enforce contracts and add end-to-end coverage
kev1n77 Aug 1, 2026
848da2f
fix(appearance): prevent background flash on window focus
kev1n77 Aug 2, 2026
6df2bf7
Merge pull request #1948 from kev1n77/fmy/skin-system
kev1n77 Aug 3, 2026
059bdf8
feat(flow-chat): keep background commands accessible when idle
wsp1911 Aug 3, 2026
765e11e
refactor(mcp): converge OAuth integration ownership
limityan Aug 3, 2026
b897a90
feat(flow-chat): keep background commands accessible when idle
wsp1911 Aug 3, 2026
b00994c
Add canonical reasoning presets and session overlays
wsp1911 Aug 3, 2026
2f5ef04
feat(mcp): honor external lifecycle timeouts
limityan Aug 3, 2026
a16e78c
perf(build): converge Reqwest on Rustls
limityan Aug 3, 2026
5a47b60
feat: integrate models.dev reasoning catalogs
wsp1911 Aug 3, 2026
d600583
feat(flow-chat): add reasoning preset controls
wsp1911 Aug 3, 2026
68d1a12
refactor(chat ui): optimize thinking block expand/collapse logic and …
Aug 3, 2026
77fe74b
feat: complete reasoning preset delivery surfaces
wsp1911 Aug 3, 2026
78e1841
feat(skills): bundle BitFun skin authoring skill
kev1n77 Aug 3, 2026
57a3070
fix(dispatch): reopen the observer drain gate when a follow-up is acc…
bobleer Aug 3, 2026
4d68f45
fix(agent): resolve context window on session creation
wgqqqqq Aug 3, 2026
1ecb46a
fix(ai): apply models.dev reasoning presets at runtime
wsp1911 Aug 3, 2026
6939ca2
fix(ai): fail closed for untrusted reasoning endpoints
wsp1911 Aug 3, 2026
bdc9c29
Merge pull request #1995 from kev1n77/fmy/skin-system
kev1n77 Aug 3, 2026
81c44fe
Merge pull request #1997 from wgqqqqq/fix/remote-session-context-window
GCWing Aug 3, 2026
03b2c7c
fix(session): preserve reasoning presets in persisted summaries
wsp1911 Aug 3, 2026
6256cba
feat(cli): add read-only subagent session navigation
limityan Aug 3, 2026
53c8c02
perf(build): isolate built-in agent prompt content
limityan Aug 3, 2026
f5ee552
fix(ai): refresh models.dev catalog in active UI
wsp1911 Aug 3, 2026
3ab2ca3
feat(instructions): activate path-scoped rules after reads
limityan Aug 3, 2026
1182c96
test(agent): stabilize persisted shell turn settlement
limityan Aug 3, 2026
f94d666
fix(remote-connect): support reasoning preset selection
wsp1911 Aug 3, 2026
ec89f2d
fix(runtime): register local command turn port for session surface
wsp1911 Aug 3, 2026
68c168a
fix(flow-chat): reconcile usage reports with persisted turn identity
wsp1911 Aug 3, 2026
2bb095d
perf(test): consolidate agent runtime contract targets
limityan Aug 3, 2026
7e12532
fix(config): validate canonical reasoning presets on backend
wsp1911 Aug 3, 2026
cae834d
chore(deps): adopt tao 0.36.0
wsp1911 Aug 3, 2026
815a294
fix(flow-chat): close slash picker when trigger is removed
wsp1911 Aug 3, 2026
6681f67
fix(release): add models.dev license and provenance
wsp1911 Aug 3, 2026
66bf87f
fix(ai): preserve protected Gemini fields across reasoning patches
wsp1911 Aug 3, 2026
35fe222
perf(cli): stabilize subagent inspection and dispatch portability
limityan Aug 3, 2026
c71239d
fix: canonicalize invalid session reasoning presets
wsp1911 Aug 3, 2026
fe2351f
perf(test): isolate runtime test support and CLI contracts
limityan Aug 3, 2026
4c62d28
feat: add Skin marketplace with shared GitHub account
bobleer Aug 3, 2026
2f90bf0
fix(dispatch): persist reasoning presets across recovery
wsp1911 Aug 3, 2026
aef3b4f
fix(ai): implement adapter reasoning preset fallbacks
wsp1911 Aug 3, 2026
eac5ce6
fix(models-dev): harden catalog source and cache updates
wsp1911 Aug 3, 2026
3f8e5e6
fix(relay): route China deploys through mirrors (#2010)
bobleer Aug 3, 2026
213b32b
fix: restore shared market web sessions
bobleer Aug 3, 2026
1c169e9
perf(build): isolate CLI Core capability closure
limityan Aug 3, 2026
ca94825
feat(extensions): activate external primary agent profiles
limityan Aug 3, 2026
993ffb8
feat(relay): deploy from prebuilt multi-arch image (#2013)
bobleer Aug 4, 2026
dbb4590
feat(app-server) add app server
zvzuola Jul 27, 2026
3c5ba1c
fix(app-server): update cancellation contract fixture
zvzuola Aug 3, 2026
d29cbda
feat: add manual Skin market submissions (#2017)
bobleer Aug 4, 2026
3898775
fix(agent): reconcile system prompt guidance
nonoqing Aug 4, 2026
19ec75f
fix(skin-market): add desktop and website links (#2018)
bobleer Aug 4, 2026
c4a8b40
Merge remote-tracking branch 'upstream/main' into codex/sync-upstream…
nonoqing Aug 4, 2026
aaf8fbb
refactor(ai): remove legacy thinking configuration fields
wsp1911 Aug 4, 2026
061024f
Merge pull request #2022 from nonoqing/main
nonoqing Aug 4, 2026
d808eb7
fix(chat ui): 修复聊天界面滚动异常和滚动指示器计算问题
Aug 4, 2026
5157b86
feat: add Skin market moderation controls
bobleer Aug 4, 2026
d93b3ea
refactor(runtime): move permission planning to runtime owner
limityan Aug 4, 2026
b91511c
fix(flow-chat): align reasoning selector hover shape
wsp1911 Aug 4, 2026
ae8c22e
perf(market): serve cached image variants (#2024)
bobleer Aug 4, 2026
cf886ab
fix(build): bound cargo target cache generations (#2025)
bobleer Aug 4, 2026
14e39be
refactor(ai): compile reasoning presets as provider actions
wsp1911 Aug 4, 2026
ea2b3de
fix(market): keep account menu above modal content (#2026)
bobleer Aug 4, 2026
1c66f4b
fix(reasoning): prevent duplicate singleton preset actions
wsp1911 Aug 4, 2026
49baac8
docs(readme): lead with the product, not the positioning (#2027)
bobleer Aug 4, 2026
27aa2e7
fix(ui): prevent anchored overlays from clipping (#2029)
bobleer Aug 4, 2026
7f9bcf3
chore: ignore local .design directory (#2030)
bobleer Aug 4, 2026
08c2eea
feat(settings): redesign model reasoning configuration
wsp1911 Aug 4, 2026
0d86357
feat(ai): integrate models.dev provider catalog
wsp1911 Aug 4, 2026
8d27679
feat(ai): make models.dev authoritative for built-in provider catalogs
wsp1911 Aug 5, 2026
613866b
fix(release): mirror website Windows installer
bobleer Aug 5, 2026
0f7be24
fix: preserve relay ssh config search results
wgqqqqq Aug 5, 2026
9bf5178
Merge pull request #2055 from bobleer/bob/mirror-windows-installer
bobleer Aug 5, 2026
5d783dd
feat(dispatch): bootstrap SSH targets with account daemon
bobleer Aug 5, 2026
9bddc6f
Merge pull request #2061 from bobleer/bob/dispatch-one-click-bootstrap
bobleer Aug 5, 2026
e78207b
docs(readme): lead with Mini Apps and self-hosted device control
bobleer Aug 5, 2026
022371c
feat(cli): add mcp add subcommand with interactive wizard
ldc111 Aug 5, 2026
9aec0b9
docs(readme): show the Mini Apps gallery
bobleer Aug 5, 2026
ab86c95
Merge branch 'GCWing:main' into main
ldc111 Aug 5, 2026
f53d6ca
feat(ai): add GLM and DeepSeek reasoning support
wsp1911 Aug 5, 2026
feea83d
Clarify reasoning preset sources in chat selector
wsp1911 Aug 5, 2026
54caee2
docs(readme): add a scannable feature table above the pitch
bobleer Aug 5, 2026
ec05df5
Merge pull request #2056 from wgqqqqq/fix/relay-ssh-config-search
wgqqqqq Aug 5, 2026
ca40b16
docs(readme): rewrite the tagline
bobleer Aug 5, 2026
98541e2
Merge remote-tracking branch 'upstream/main' into dev2
wsp1911 Aug 5, 2026
4dec75a
feat(release): deploy latest binaries with mirror fallback
bobleer Aug 5, 2026
cf75aea
docs(readme): use an English Mini Apps capture in README.md
bobleer Aug 5, 2026
0250374
perf(auth): reduce default Argon2 memory cost
wgqqqqq Aug 5, 2026
78faae9
Merge pull request #2067 from bobleer/bob/latest-release-fallback
bobleer Aug 5, 2026
dc7e9bc
chore(release): bump version to 0.2.16
wgqqqqq Aug 5, 2026
623a6a6
Merge remote-tracking branch 'upstream/main' into dev2
wsp1911 Aug 5, 2026
f00d232
feat(cli): add app server to cli
zvzuola Aug 4, 2026
6931ee4
docs(architecture): address app server review feedback
zvzuola Aug 5, 2026
aa3421a
Merge pull request #2069 from wgqqqqq/feat/reduce-account-kdf-memory
wgqqqqq Aug 5, 2026
6597449
Merge remote-tracking branch 'upstream/main' into dev2
wsp1911 Aug 5, 2026
d670179
Merge pull request #2070 from wsp1911/dev2
wsp1911 Aug 5, 2026
d07c2db
Merge pull request #2072 from wgqqqqq/chore/bump-version-0.2.16
wgqqqqq Aug 5, 2026
18e66fe
feat(ai): add TokenDance provider
bobleer Aug 5, 2026
e14bf0e
fix(build): sync app server lock versions
bobleer Aug 5, 2026
e5053cb
Merge pull request #2074 from bobleer/bob/add-tokendance-provider
bobleer Aug 5, 2026
b6c88b2
fix(config): remove the phantom glow box behind chrome-less settings …
bobleer Aug 5, 2026
3e49ef4
Merge pull request #2075 from bobleer/bob/bitfun-worktree-background-…
bobleer Aug 5, 2026
3b534c4
docs(external-sources): harden app connection design
limityan Aug 5, 2026
ceeab95
feat(ai): support OpenCode Zen and Go subscriptions
bobleer Aug 5, 2026
16c1bcf
Merge pull request #2076 from bobleer/bob/opencode-zen-go-subscription
bobleer Aug 5, 2026
4b1c756
fix(flow-chat): center the worktree toggle label against its checkbox
bobleer Aug 5, 2026
f763890
feat(settings): make the preset provider picker a dense searchable list
bobleer Aug 5, 2026
e794b6d
feat(nav): add a dismissible GitHub star invite to the nav footer
bobleer Aug 5, 2026
2511b01
fix(ci): eliminate CLI and websocket test flakes
bobleer Aug 5, 2026
5fb854a
Merge pull request #2080 from bobleer/bob/fix-ci-flakes
bobleer Aug 5, 2026
7940676
fix(flow-chat): separate turn ordinals from storage indexes
wsp1911 Aug 5, 2026
8175ba5
fix(flow-chat): keep completed round footers below transcript
wsp1911 Aug 5, 2026
6897c01
feat(assistant): allow users to choose the primary assistant
wsp1911 Aug 5, 2026
e6d5c64
fix(flow-chat): restore mode switching and prevent footer gaps
wsp1911 Aug 5, 2026
1fcbe22
feat(assistant): add assistant session picker
wsp1911 Aug 5, 2026
ab4f7b9
fix(web-ui): remove GitHub Star dismiss button
bobleer Aug 6, 2026
0015d3f
test(cli): wait for idle before sending exit shortcut
wsp1911 Aug 6, 2026
6ff0912
Merge pull request #2090 from bobleer/bob/remove-github-star-dismiss
bobleer Aug 6, 2026
677951c
fix(welcome): show today/yesterday by calendar day for recent workspaces
Aug 3, 2026
c9281f0
feat: add DeepResearch support to session tools
wsp1911 Aug 6, 2026
adb47a1
fix(welcome): handle future workspace access dates
wsp1911 Aug 6, 2026
0bd28f9
fix(flow-chat): restore context usage display after session hydration
Aug 5, 2026
973f6a9
fix(flow-chat): persist exact last request usage for startup display
Aug 5, 2026
474b5e9
fix(desktop): recover from WebView2 process failures
limityan Aug 6, 2026
8fe67c5
Merge pull request #2064 from ldc111/main
wgqqqqq Aug 6, 2026
57ec198
fix(cli): harden mcp add configuration
wgqqqqq Aug 6, 2026
bd9f12f
fix(flow-chat): refresh context usage display right after compression…
Aug 5, 2026
3d3f42c
Merge pull request #2099 from wgqqqqq/fix/cli-mcp-add-safety
wgqqqqq Aug 6, 2026
707c099
future: add startup --agent --model --session --continue flags
lyf150 Aug 6, 2026
de98372
docs: tighten promotion claims and onboarding
bobleer Aug 6, 2026
3ecc752
fix(session): recover corrupt session indexes
bobleer Aug 6, 2026
47bad6a
Merge pull request #2103 from bobleer/bob/promotion-readiness
bobleer Aug 6, 2026
6a09d10
Merge pull request #2105 from bobleer/bob/fix-corrupt-session-index-r…
bobleer Aug 6, 2026
4db7f7e
docs: expose quick start and security links
bobleer Aug 6, 2026
8996c20
docs: add safe GitHub social preview candidate
bobleer Aug 6, 2026
1cdeb5b
docs: explain how to verify release downloads
bobleer Aug 6, 2026
1f1ac9e
Merge pull request #2108 from bobleer/bob/readme-quickstart-security
bobleer Aug 6, 2026
e1dbe2a
Merge pull request #2112 from bobleer/bob/release-verification-guide
bobleer Aug 6, 2026
04010fd
docs: replace unverifiable vibe-coding percentage
bobleer Aug 6, 2026
bd47cc5
Merge pull request #2114 from bobleer/bob/readme-ai-disclosure
bobleer Aug 6, 2026
97a4afa
fix(review): restore CodeReview/DeepReview session creation and turns
Aug 6, 2026
a28bc4a
refactor(review): add CODE_REVIEW_AGENT_TYPE constant for review agen…
Aug 6, 2026
81525d8
fix(review): honor explicit Local routes when resolving review sessio…
Aug 6, 2026
7bcb29e
fix(installer): align AI config and add CI compilation check
wsp1911 Aug 6, 2026
87c436b
feat(agent): read documents with anydoc
bobleer Aug 6, 2026
f9612f1
Merge pull request #2096 from lyf840360987/main
kev1n77 Aug 6, 2026
4c29eb5
Merge pull request #2118 from bobleer/bob/anydoc-read-tool
bobleer Aug 6, 2026
840fd50
fix(skills): remove redistribution-restricted builtins
bobleer Aug 6, 2026
5e98e44
Merge pull request #2119 from bobleer/bob/remove-restricted-builtin-s…
bobleer Aug 6, 2026
7371141
fix(ppt-live): inherit model and preserve PDF text
bobleer Aug 6, 2026
758c567
Merge pull request #2121 from bobleer/bob/fix-ppt-live-controls-pdf
bobleer Aug 6, 2026
3dbf4d9
Merge pull request #2098 from YodonTan/fix/token-usage-display-on-sta…
GCWing Aug 6, 2026
e99b206
feat(harmonyos): improve adaptive chat and file preview
wgqqqqq Aug 3, 2026
2fded8d
fix(harmonyos): refine compact navigation and remote presentation
wgqqqqq Aug 5, 2026
f2e4938
fix(harmonyos): dismiss stale retry actions
wgqqqqq Aug 5, 2026
51cb803
feat(harmonyos): refine remote session creation and controls
wgqqqqq Aug 6, 2026
38c289c
refactor(harmonyos): unify Local and Remote conversation shells
wgqqqqq Aug 6, 2026
7695402
fix(session): make context usage persistence authoritative
bobleer Aug 6, 2026
7799117
Merge pull request #2101 from wgqqqqq/feat/mobile-agent-chat
wgqqqqq Aug 6, 2026
b69f345
Merge pull request #2125 from bobleer/bob/fix-context-usage-persistence
bobleer Aug 6, 2026
e640aa4
fix(desktop): persist early startup diagnostics
wsp1911 Aug 6, 2026
7510896
docs: add current CLI TUI screenshot
bobleer Aug 6, 2026
202071f
Merge pull request #2143 from GCWing/bob/cli-tui-screenshot
bobleer Aug 6, 2026
df6593d
fix(release): publish versioned manual installer metadata
kev1n77 Aug 6, 2026
9f23d22
fix(desktop): use production app version in about dialog
kev1n77 Aug 6, 2026
9b3848e
fix(updater): install Windows updates silently
kev1n77 Aug 6, 2026
6aa5f12
fix(review): allow ReviewFixer as a review session primary agent
Aug 6, 2026
c4a301e
test(review): harden ReviewFixer primary resolution guards
Aug 6, 2026
58d89b2
fix(ci): disable implicit pnpm cache in shell checks
kev1n77 Aug 7, 2026
9dadf89
Merge pull request #2145 from kev1n77/fmy/installer
kev1n77 Aug 7, 2026
8450da4
chore(skills): sync create-bitfun-skin
kev1n77 Aug 7, 2026
5bfd15a
feat(skin-market): show submitter GitHub account in review
bobleer Aug 7, 2026
5733f25
fix(release): move the mirror out of the website dist
bobleer Aug 7, 2026
38bbe17
Merge pull request #2149 from kev1n77/fmy/installer
kev1n77 Aug 7, 2026
353d7ff
fix(web-ui): prevent file mention picker positioning regression
wsp1911 Aug 7, 2026
e03d7cf
fix(skin-market): stop the market dialog from resizing while loading
bobleer Aug 7, 2026
af0c906
fix(skin-market): register the new market parts in the Appearance con…
bobleer Aug 7, 2026
132717f
fix(config): recover startup from incompatible model settings
wsp1911 Aug 6, 2026
9ec4000
fix(desktop): prevent Windows debug startup stack overflow
wsp1911 Aug 7, 2026
053fc04
fix(web): generate app-server protocol bindings in CI
wsp1911 Aug 7, 2026
9dff7e0
fix(dispatch): stop PTY teardown from killing one-click CLI installs
bobleer Aug 7, 2026
9c3d23d
fix(dispatch): give every job of one workspace its own target worktree
bobleer Aug 7, 2026
11004ce
fix(web-ui): restore MCP deletion and voice input
wgqqqqq Aug 7, 2026
634bd59
fix(dispatch): bound, anchor and clean up the target's remote fetch
bobleer Aug 7, 2026
a714114
Merge pull request #2158 from wgqqqqq/fix/mcp-delete-voice-input
wgqqqqq Aug 7, 2026
3ef23d1
feat(external-sources): improve application connection experience
limityan Aug 7, 2026
aebded0
fix(external-sources): harden application connection UI
limityan Aug 7, 2026
3e6f79b
fix(external-sources): register application appearance parts
limityan Aug 7, 2026
6b4f5cd
refactor(app-server): own TUI management service
zvzuola Aug 6, 2026
8d5a69f
refactor(tui): phase 4.2 [迁移外部来源接口]
zvzuola Aug 6, 2026
5c9aa6c
refactor(tui): phase 4.3 [迁移 Hook 管理接口]
zvzuola Aug 6, 2026
822ce19
refactor(tui): phase 4.4 [迁移账户同步接口]
zvzuola Aug 6, 2026
f97a8e6
refactor(tui): phase 4.5 [迁移 Worktree 接口]
zvzuola Aug 6, 2026
50f45bc
refactor(tui): phase 4.6 [收敛外部集成边界]
zvzuola Aug 6, 2026
98fc825
feat(config): models-dev provider and model dropdowns in reasoning pr…
guan Aug 7, 2026
5ad079b
feat(config): expose and manage the full models.dev reasoning catalog
wsp1911 Aug 8, 2026
ac64499
feat(web): 收敛外部 AI 应用接入的默认体验
limityan Aug 8, 2026
5f3e9e1
fix(external-sources): restore safe settings behavior
limityan Aug 8, 2026
b4c82b8
fix(config): rebind logic and default preset handling in reasoning pr…
guan Aug 8, 2026
e846d86
feat(permission): scope the tool permission mode to each session
wsp1911 Aug 8, 2026
447a0a3
feat(external-sources): add application connection control plane
limityan Aug 8, 2026
792459b
fix(external-sources): simplify application setup UX
limityan Aug 8, 2026
92a6203
chore(i18n): unify copy wording in zh-CN and zh-TW locale
liao-zh Aug 9, 2026
8a5dbaa
Merge pull request #2172 from liao-zh/main
GCWing Aug 9, 2026
95a9e41
Merge remote-tracking branch 'upstream/main' into wc/rebase
SWangHash Aug 9, 2026
557bd9b
fix: repair post-merge build regressions
SWangHash Aug 10, 2026
49f3eb7
fix(frontend): restore footer actions and add Rust-free build option
SWangHash Aug 10, 2026
808aaca
fix(workspace): native drag ghost with drag-state safety nets
Aug 7, 2026
f03fc29
fix(workspace): shorten drag-stuck fallback to 1.5s and reset on drag…
Aug 7, 2026
8280a45
fix(workspace): add mousemove safety net that never interrupts active…
Aug 7, 2026
7dee5a9
fix(workspace): suppress hover-show elements during drag to prevent s…
Aug 7, 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
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
10 changes: 10 additions & 0 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# ts-rs (Rust -> TypeScript) export configuration.
# `cargo test --features ts` (or the frontend `gen:types` script) emits `.ts`
# files into the directory below. Generated types are NOT committed (see
# `.gitignore`); the `prebuild` step regenerates them locally and in CI.
# See docs/plans/step1-ts-rs-integration.md.
[env]
TS_RS_EXPORT_DIR = { value = "src/web-ui/src/generated/api", relative = true }
# Map i64/u64 to `number` (not `bigint`) so generated types match the existing
# frontend convention (timestamps are `number` ms throughout the web UI).
TS_RS_LARGE_INT = "number"
38 changes: 38 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#**
# Line-ending policy.
#
# Git for Windows defaults to `core.autocrlf=true`, which rewrites every text
# file to CRLF on checkout. Two BitFun paths break silently when that happens:
#
# 1. `src/apps/relay-server/*.sh` is embedded into the Desktop binary with
# `include_str!` and uploaded verbatim to the relay host. A CR turns each
# blank line into `$'\r': command not found`, and `set -e` aborts the
# one-click deploy on the first one.
# 2. Rust raw string literals (`r#"..."#`) that hold remote bash carry the
# checkout's CRLF into the generated scripts the same way.
#
# Force LF for everything that has to run on a POSIX host, regardless of where
# it was checked out. Windows-only scripts (`*.ps1`) are left alone — PowerShell
# reads LF fine and pinning them would churn every non-Windows working tree.
#**

*.sh text eol=lf
*.bash text eol=lf
*.rs text eol=lf
*.py text eol=lf
*.mjs text eol=lf
*.cjs text eol=lf

# models.dev provenance hashes exact redistributed bytes. Keep these assets
# stable across checkout platforms so the offline release check is reproducible.
src/crates/services/services-integrations/assets/models-dev.json text eol=lf
src/crates/services/services-integrations/assets/models-dev.LICENSE.txt text eol=lf
src/crates/services/services-integrations/assets/models-dev.provenance.json text eol=lf

Dockerfile text eol=lf
Dockerfile.* text eol=lf
*.Dockerfile text eol=lf
.dockerignore text eol=lf
docker-compose.yml text eol=lf
docker-compose.*.yml text eol=lf
Caddyfile text eol=lf
177 changes: 125 additions & 52 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,81 @@ permissions:
contents: read

jobs:
# ── Shell deploy assets: LF endings + syntax ───────────────────────
# Relay one-click deploy embeds these scripts into the Desktop binary and
# uploads them verbatim to a Linux host, where a single CR aborts the deploy
# with `$'\r': command not found`. .gitattributes pins LF; this is the guard.
shell-scripts:
name: Shell Deploy Scripts
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v5

- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version-file: package.json
package-manager-cache: false

- name: Reject CRLF in shell and deploy assets
run: |
bad=$(git ls-files -z \
'*.sh' '*.bash' 'Dockerfile' 'Dockerfile.*' '*.Dockerfile' 'Caddyfile' \
'docker-compose.yml' 'docker-compose.*.yml' \
| xargs -0 -r grep -lU $'\r' || true)
if [ -n "$bad" ]; then
echo "::error::CRLF line endings found; these must stay LF (see .gitattributes):"
echo "$bad"
exit 1
fi
echo "All shell and deploy assets are LF-only."

- name: bash -n every tracked shell script
run: |
rc=0
while IFS= read -r -d '' f; do
bash -n "$f" || { echo "::error file=$f::bash syntax error"; rc=1; }
done < <(git ls-files -z '*.sh' '*.bash')
exit "$rc"

- name: Verify release and version-generation contracts
run: node --test scripts/tauri-release-manifest.test.mjs scripts/linux-binaries-manifest.test.mjs scripts/version-generation.test.mjs

- name: Verify minisign download fallback
run: |
set -euo pipefail
test_root="$(mktemp -d)"
trap 'rm -rf "$test_root"' EXIT
mkdir -p "$test_root/stubs"
printf '#!/usr/bin/env bash\nexit 1\n' >"$test_root/stubs/sudo"
chmod +x "$test_root/stubs/sudo"

PATH="$test_root/stubs:/usr/bin:/bin" \
RUNNER_TEMP="$test_root" \
BITFUN_SIGNING_KEY="YQ==" \
bash scripts/sign-release-assets.sh "$test_root/missing-asset"

"$test_root/bitfun-minisign-0.12/bin/minisign" -v

# ── CLI: independent tests ─────────────────────────────────────────
cli-test:
name: CLI Tests (ubuntu-latest)
runs-on: ubuntu-latest
name: CLI Tests (${{ matrix.os }})
runs-on: ${{ matrix.os }}
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
cache_key: ubuntu
- os: macos-15
cache_key: macos
steps:
- uses: actions/checkout@v5

- name: Install Linux system dependencies
if: runner.os == 'Linux'
shell: bash
run: |
sudo apt-get update
Expand All @@ -44,23 +110,37 @@ jobs:

- uses: dtolnay/rust-toolchain@stable

- name: Generate dependency lockfile
run: cargo generate-lockfile

- uses: swatinem/rust-cache@v2
with:
shared-key: "cli-ci-v2-ubuntu"
shared-key: "cli-ci-v2-${{ matrix.cache_key }}"
cache-bin: false
save-if: ${{ github.event_name != 'pull_request' }}
# PRs restore trusted caches but never publish merge-ref artifacts.
save-if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
cache-on-failure: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}

- name: Run CLI and ACP tests on macOS
if: runner.os == 'macOS'
run: cargo test --locked -p bitfun-cli -p bitfun-acp

- name: Run CLI, ACP, SDK Host, and agent runtime tests
run: cargo test --locked -p bitfun-cli -p bitfun-acp -p bitfun-sdk-host -p bitfun-sdk-host-app -p bitfun-agent-runtime
- name: Run CLI, ACP, and agent runtime tests
if: runner.os == 'Linux'
run: cargo test --locked -p bitfun-cli -p bitfun-acp -p bitfun-agent-runtime

- name: Run SDK Host tests
if: runner.os == 'Linux'
run: cargo test --locked -p bitfun-sdk-host -p bitfun-sdk-host-app

- name: Run SDK Host terminal cleanup regressions
if: runner.os == 'Linux'
run: |
cargo test --locked -p terminal-core shutdown_returns_only_after_process_exit_is_confirmed -- --test-threads=1
cargo test --locked -p terminal-core shutdown_evicts_a_process_whose_controller_already_confirmed_exit -- --test-threads=1
cargo test --locked -p terminal-core background_only_binding_is_owned_by_the_session -- --test-threads=1

# ── Rust: build check ─────────────────────────────────────────────
rust-build-check:
name: Rust Build Check (${{ matrix.os }})
runs-on: ${{ matrix.os }}
needs: frontend-build
env:
# Keep the workspace check plus desktop test profiles within hosted-runner disk limits.
CARGO_INCREMENTAL: "0"
Expand All @@ -76,20 +156,11 @@ jobs:
steps:
- uses: actions/checkout@v5

- name: Setup OpenSSL (Windows, prebuilt)
if: runner.os == 'Windows'
shell: pwsh
run: ./scripts/ci/setup-openssl-windows.ps1

- name: Download frontend build artifacts
uses: actions/download-artifact@v7
with:
name: frontend-dist
path: dist

- name: Create mobile-web dist directory (workaround for Tauri)
# Tauri code generation only requires its configured resource roots to
# exist during check/test; distributable assets remain frontend-build's owner.
- name: Create Tauri resource directories
shell: bash
run: mkdir -p src/mobile-web/dist
run: mkdir -p dist src/mobile-web/dist

- name: Install Linux system dependencies (Tauri)
if: runner.os == 'Linux'
Expand Down Expand Up @@ -124,37 +195,26 @@ jobs:

- uses: dtolnay/rust-toolchain@stable

- name: Generate dependency lockfile
run: cargo generate-lockfile

- uses: swatinem/rust-cache@v2
with:
shared-key: "ci-check-v3-${{ runner.os }}-no-cargo-bin-v1"
cache-bin: false
# PR caches are scoped to merge refs; main pushes own shared cache refreshes.
save-if: ${{ github.event_name != 'pull_request' }}
# PR caches are scoped to merge refs; trusted main pushes own shared
# refreshes and retain completed dependency builds after late test failures.
save-if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
cache-on-failure: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}

- name: Check compilation
run: cargo check --locked --workspace

- name: Run SDK Host terminal cleanup regressions
# This PR changes only the PTY/session shutdown path required by
# connection-scoped Session cleanup. Keep the gate scoped to those
# regressions instead of adopting unrelated terminal command tests.
run: |
cargo test --locked -p terminal-core shutdown_returns_only_after_process_exit_is_confirmed -- --test-threads=1
cargo test --locked -p terminal-core shutdown_evicts_a_process_whose_controller_already_confirmed_exit -- --test-threads=1
cargo test --locked -p terminal-core background_only_binding_is_owned_by_the_session -- --test-threads=1

- name: Run standalone SDK Host process smokes
run: cargo test --locked -p bitfun-sdk-host-app --test process_initialization --test stdio_process

- name: Run Windows ConPTY CLI smoke test
# The installer is intentionally excluded from the root Cargo workspace,
# so the workspace check above cannot catch drift in its shared Rust APIs.
- name: Check installer compilation
if: runner.os == 'Windows'
run: cargo test --locked -p bitfun-cli --test terminal_process_contracts
run: cargo check --manifest-path BitFun-Installer/src-tauri/Cargo.toml

- name: Run core and desktop Rust tests
run: cargo test --locked -p bitfun-core -p bitfun-desktop
- name: Run core and desktop library tests
run: cargo test --locked -p bitfun-core -p bitfun-desktop --lib

# These crates own platform-sensitive behavior that is not exercised by
# testing bitfun-core/bitfun-desktop alone. Keep their focused contract
Expand All @@ -167,7 +227,27 @@ jobs:
run: cargo test --locked -p bitfun-relay-service

- name: Run subscription authentication tests
run: cargo test --locked -p bitfun-ai-adapters --features subscription-auth subscription_auth
run: cargo test --locked -p bitfun-ai-adapters --features subscription-auth --lib subscription_auth

# File watching is backed by a different OS API on every platform
# (ReadDirectoryChangesW / FSEvents / inotify), so watch registration
# regressions surface per-OS. The suite is behind a non-default feature
# and would otherwise never run anywhere.
#
# macOS is excluded: this suite already fails there before any of this
# branch's changes (the debounce/atomic-rename contracts time out under
# FSEvents coalescing), which is worth fixing separately rather than
# blocking unrelated work.
- name: Run file watch contract tests
if: runner.os != 'macOS'
run: cargo test --locked -p bitfun-services-integrations --no-default-features --features file-watch --test file_watch_contracts

# Search tools resolve paths and symlinks directly, which also differs
# across platforms. Scoped to the search module: the glob tests in this
# crate fail on Windows independently of this branch (walk-root
# derivation treats separators differently) and need their own fix.
- name: Run search tool tests
run: "cargo test --locked -p tool-runtime --lib search::"

# ── Frontend: build ────────────────────────────────────────────────
frontend-build:
Expand Down Expand Up @@ -240,10 +320,3 @@ jobs:

- name: Build mobile web
run: pnpm run build:mobile-web

- name: Upload frontend build artifacts
uses: actions/upload-artifact@v6
with:
name: frontend-dist
path: dist
retention-days: 1
21 changes: 21 additions & 0 deletions .github/workflows/cli-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,10 @@ jobs:
- name: Build CLI (Unix)
if: runner.os != 'Windows'
shell: bash
env:
# Keep the CLI self-updater and SSH installer on the same embedded
# minisign trust root used by the Desktop updater.
BITFUN_RELEASE_PUBKEY: ${{ secrets.TAURI_UPDATER_PUBKEY }}
run: |
set -euo pipefail
cargo build --release \
Expand Down Expand Up @@ -168,6 +172,19 @@ jobs:
run: |
./scripts/cli/package-windows.ps1 -Version $env:VERSION -Target $env:TARGET

- name: Sign CLI archive and checksum (macOS)
if: runner.os == 'macOS'
shell: bash
env:
BITFUN_SIGNING_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
BITFUN_SIGNING_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
BITFUN_SIGNING_PUBKEY: ${{ secrets.TAURI_UPDATER_PUBKEY }}
run: |
set -euo pipefail
bash scripts/sign-release-assets.sh \
"${{ steps.stage.outputs.archive }}" \
"${{ steps.stage.outputs.checksum }}"

- name: Upload artifact
uses: actions/upload-artifact@v6
with:
Expand All @@ -176,6 +193,8 @@ jobs:
path: |
${{ steps.stage.outputs.archive || steps.stage-windows.outputs.archive }}
${{ steps.stage.outputs.checksum || steps.stage-windows.outputs.checksum }}
bitfun-cli-*.tar.gz.sig
bitfun-cli-*.tar.gz.sha256.sig

# ── Aggregate and upload to GitHub Release ─────────────────────────
upload-release-assets:
Expand Down Expand Up @@ -227,6 +246,8 @@ jobs:
files: |
cli-release-assets/bitfun-cli-*.tar.gz
cli-release-assets/bitfun-cli-*.tar.gz.sha256
cli-release-assets/bitfun-cli-*.tar.gz.sig
cli-release-assets/bitfun-cli-*.tar.gz.sha256.sig
cli-release-assets/bitfun-cli-*.zip
cli-release-assets/bitfun-cli-*.zip.sha256
cli-release-assets/SHA256SUMS
Expand Down
Loading
Loading