Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
886 commits
Select commit Hold shift + click to select a range
4762481
feat(desktop): agent companion pet dynamic window sizing (#597)
bobleer May 8, 2026
4bbe9d2
fix(desktop): tighten companion pet bubble width measurement (#598)
bobleer May 8, 2026
682c488
Merge pull request #596 from kev1n77/fmy/bugfix
GCWing May 8, 2026
be803ed
fix(web-ui): stop sticky workspace cards in NavPanel list
G-CWing May 8, 2026
25c625b
fix(web-ui): improve workspace row click targets and path tooltip
G-CWing May 8, 2026
2993c3c
Merge pull request #599 from GCWing/fix/nav-workspace-list-card-layout
GCWing May 8, 2026
ded1cbb
fix: avoid windows startup console flicker
wgqqqqq May 8, 2026
3f2a75a
Merge pull request #600 from wgqqqqq/workspace-search-flashgrep-multi…
wgqqqqq May 8, 2026
4661eab
fix(web-ui): tighten compact tool card headers for file ops
G-CWing May 8, 2026
610894f
fix(i18n): sync missing/extra keys across en-US, zh-CN, zh-TW locales
limityan May 7, 2026
935a9a4
feat(desktop,core): remote workspace tool context and snapshot/stream…
bobleer May 8, 2026
2b8d197
Merge pull request #603 from GCWing/fix/flow-chat-compact-tool-dense-…
GCWing May 8, 2026
e3a6c33
refactor(web-ui): apply dense-command on CompactToolCard wrapper
G-CWing May 8, 2026
252ad87
Merge pull request #604 from GCWing/fix/flow-chat-compact-tool-dense-…
GCWing May 8, 2026
783f38a
fix(deepseek-thinking): preserve empty reasoning blocks during replay
wsp1911 May 8, 2026
7510e64
feat(ai): support DeepSeek reasoning effort in OpenAI and Anthropic f…
wsp1911 May 8, 2026
175bb7c
Merge pull request #605 from wsp1911/main
GCWing May 8, 2026
651530b
fix(claw): add back placeholders in the claw mode system prompt
wsp1911 May 8, 2026
f80b2a9
fix: correct remote SSH command completion handling
wsp1911 May 8, 2026
7df0934
fix: suppress windows helper command popups
wgqqqqq May 8, 2026
53420c2
fix: restore remote connect command import on unix
wgqqqqq May 8, 2026
ace5bd2
refactor: use process wrapper for remote connect gateway detection
wgqqqqq May 8, 2026
63a7d54
feat(agentic,web-ui): user steering with pending queue and agent runt…
bobleer May 8, 2026
a0fffdb
Merge pull request #609 from wgqqqqq/workspace-search-flashgrep-multi…
GCWing May 8, 2026
33d565b
Merge pull request #608 from wsp1911/main
GCWing May 8, 2026
b36e7a1
feat(core, desktop): remote workspace identity for tools and subagent…
bobleer May 8, 2026
e1ec7bb
feat(web-ui): appearance settings tab, nav layout, chat input styles
G-CWing May 8, 2026
9ee1608
Merge pull request #612 from GCWing/gcwing/dev
GCWing May 8, 2026
530534c
fix(core, web-ui): session finishing sync, explicit skills, companion…
bobleer May 8, 2026
aef2177
fix flashgrep lifecycle cleanup
wgqqqqq May 8, 2026
3df9c9c
fix macos close lifecycle
wgqqqqq May 9, 2026
5799290
chore(core): bump builtin miniapp bundle versions (#616)
bobleer May 9, 2026
6274204
Merge pull request #615 from wgqqqqq/codex/fix-flashgrep-raii-lifecycle
GCWing May 9, 2026
a8b7ddd
chore(core, desktop, web-ui): remove Mermaid interactive editor
G-CWing May 9, 2026
5034c97
Merge pull request #617 from GCWing/chore/remove-mermaid-interactive-…
GCWing May 9, 2026
8f30e04
fix(web-ui, desktop): nav footer browser/insights; log::info in deskt…
G-CWing May 9, 2026
3070a69
Merge pull request #618 from GCWing/fix/nav-footer-browser-insights-menu
GCWing May 9, 2026
fca790b
feat(deep-research): add Pro mode 6-phase pipeline and ResearchSpecia…
nonoqing May 8, 2026
f254736
refactor(skills): isolate builtin skills in managed .system directory
wsp1911 May 9, 2026
402b830
feat(skills): refactor mode skill policy and resolution
wsp1911 May 9, 2026
597d3cd
feat(agentic,ai-adapters,web-ui): harden streaming tool arguments and…
bobleer May 9, 2026
7226e65
Merge pull request #620 from wsp1911/main
GCWing May 9, 2026
9f66dff
feat(web-ui): RAF-coalesce app state; polish flow-chat tool cards
G-CWing May 9, 2026
4fea605
feat(auto-update): add auto-update
kev1n77 Mar 27, 2026
1af3c4e
Fix companion activity ordering and permission prompts (#623)
bobleer May 9, 2026
6208e51
Merge pull request #622 from GCWing/fix/nav-footer-browser-insights-menu
GCWing May 9, 2026
54982e8
Merge pull request #624 from kev1n77/dev/auto-update
GCWing May 9, 2026
14b189a
Merge pull request #613 from nonoqing/yuyiqing/dev
GCWing May 9, 2026
6b7102a
fix(deep-review): simplify recovery actions
limityan May 9, 2026
78fb353
fix(deep-review): improve interrupted review recovery
limityan May 9, 2026
aeb9c32
fix(ai): preserve tool argument replay stability to avoid prompt cach…
wsp1911 May 9, 2026
0798de4
chore: bump version to 0.2.6
wgqqqqq May 9, 2026
25fb9d4
Merge pull request #626 from wgqqqqq/chore/bump-version-0.2.6
wgqqqqq May 9, 2026
d3499cb
fix(web-ui): poll cursor position for companion pet hover (#628)
bobleer May 9, 2026
bc9b21c
feat(web-ui): unify tool card status slot and processing indicator
G-CWing May 9, 2026
84b7b71
Merge pull request #627 from wsp1911/main
GCWing May 9, 2026
67b7b66
Merge pull request #629 from GCWing/fix/nav-footer-browser-insights-menu
GCWing May 9, 2026
76e9f85
feat(web-ui): refine TodoWrite card and widen compact header action type
G-CWing May 9, 2026
37294b4
Merge pull request #630 from GCWing/fix/nav-footer-browser-insights-menu
GCWing May 9, 2026
ab53746
feat(usage): add session usage report core
limityan May 10, 2026
4f643e4
feat(usage): add desktop usage report UI
limityan May 10, 2026
3063096
fix(desktop): avoid startup probes and trim bundles
limityan May 10, 2026
3e8dd95
docs(usage): document session usage boundaries
limityan May 10, 2026
e1574a7
feat: enhance browser control, screenshot, and tool system (#632)
bobleer May 10, 2026
f8b1742
Fix agent runtime concurrency and cancellation handling (#633)
bobleer May 10, 2026
792385d
fix: subagent timeout disable button not working due to serde format …
bobleer May 10, 2026
b43c0bc
fix(web-ui): handle failed dialog completion in flow chat and notific…
bobleer May 10, 2026
f89cef0
feat(web-ui): flow chat polish, workspace strip, quick actions settings
G-CWing May 10, 2026
a0b5042
Merge pull request #637 from GCWing/gcwing/dev
GCWing May 10, 2026
afb7001
feat(core): add AI experience quick actions to config types
G-CWing May 10, 2026
3888933
Merge pull request #638 from GCWing/gcwing/dev
GCWing May 10, 2026
a392c8c
fix(desktop): repair main window close on non-macOS and Windows proce…
G-CWing May 11, 2026
3093dab
fix(desktop): use log::info for macOS-only app_click logging
G-CWing May 11, 2026
0b26644
Merge pull request #639 from GCWing/gcwing/dev
GCWing May 11, 2026
47ae937
fix: support acp permission options
wgqqqqq May 11, 2026
815b671
fix: move acp permission helper out of component file
wgqqqqq May 11, 2026
65cc1f1
feat(installer): add install detection and uninstaller launch support
kev1n77 May 11, 2026
78a0e9d
fix(browser-control): accurate tab count, real browser detection, hid…
bobleer May 11, 2026
a5b2820
Merge pull request #642 from kev1n77/dev/auto-update
GCWing May 11, 2026
2aeeeaa
Merge pull request #641 from wgqqqqq/codex/acp-permission-options
GCWing May 11, 2026
80cd279
feat(ai-adapters,agentic): recover Write tool args truncated by max_t…
nonoqing May 11, 2026
0e0ab96
fix(flow-chat): prevent bottom spacer inflation (#644)
bobleer May 11, 2026
50205af
fix(flow-chat): align bottom scroll position (#647)
bobleer May 11, 2026
a17a653
fix(flow-chat): stop follow output jitter (#648)
bobleer May 11, 2026
5833db0
refactor: remove AI rules and memory modules
wsp1911 May 11, 2026
f0bb3bf
Merge pull request #643 from nonoqing/yuyiqing/dev
GCWing May 11, 2026
c2d4458
feat(desktop,web-ui,installer): Tokyo Night theme, tray, and settings…
G-CWing May 11, 2026
2be7806
Merge pull request #649 from GCWing/gcwing/dev
GCWing May 11, 2026
309c907
feat(web-ui): align Skills scene UI with Sparo layout
G-CWing May 11, 2026
f82fa72
Merge pull request #650 from GCWing/feat/skills-scene-ui-align-sparo
GCWing May 11, 2026
b3f6b84
fix: support remote flashgrep workspace search
wgqqqqq May 9, 2026
edec0f9
fix: route remote content search through workspace search
wgqqqqq May 9, 2026
f0a1b1a
refactor: unify flashgrep local and remote protocol
wgqqqqq May 9, 2026
2fddcc5
Update bundled flashgrep to v0.2.2
wgqqqqq May 10, 2026
2e026d9
Fix remote flashgrep binary refresh
wgqqqqq May 11, 2026
f939f25
chore: bump bundled flashgrep to v0.2.3
wgqqqqq May 11, 2026
b34b924
chore: bump bundled flashgrep to v0.2.4
wgqqqqq May 11, 2026
80d819f
Update bundled flashgrep search integration
wgqqqqq May 11, 2026
8c7a366
fix(agentic): make truncated Write recovery actionable end-to-end
nonoqing May 11, 2026
ffa8cc5
Merge pull request #653 from nonoqing/yuyiqing/dev
nonoqing May 11, 2026
9331162
fix markdown editor live refresh
wgqqqqq May 11, 2026
111c798
feat(usage): persist runtime report facts
limityan May 11, 2026
794839a
feat(usage): add report details and diff actions
limityan May 11, 2026
79304aa
feat(i18n): localize quick action labels
limityan May 11, 2026
d7f8826
refactor(core): establish P1 decomposition guardrails
limityan May 10, 2026
0866860
refactor(core): extract stream processing and runtime ports
limityan May 10, 2026
1c82a4e
refactor(core): tighten runtime port contracts
limityan May 10, 2026
ce18d43
fix(web-ui): harden session usage panel accessibility
limityan May 10, 2026
bf5c87e
feat(skills): add suite mode tab reset and grouped visibility controls
wsp1911 May 11, 2026
89ce51e
Merge pull request #652 from wgqqqqq/workspace-search-flashgrep-multi…
GCWing May 11, 2026
586ecb2
Merge pull request #654 from wgqqqqq/codex/live-markdown-editor-refresh
GCWing May 11, 2026
4e6a25d
Merge pull request #656 from wsp1911/main
GCWing May 11, 2026
8df7aa5
bump version to 0.2.7
wgqqqqq May 11, 2026
c141aee
fix(web-ui): open Write/Edit cards with resolved file paths
kev1n77 May 11, 2026
d109190
feat(deep-review): enforce adaptive review runtime
limityan May 10, 2026
a16bd34
feat(deep-review): add adaptive review orchestration UI
limityan May 9, 2026
4b57e8a
feat(deep-review): add capacity controls and cost plan
limityan May 9, 2026
179f3c0
feat(deep-review): add adaptive review runtime
limityan May 11, 2026
f77eefe
feat(web-ui): add adaptive deep review orchestration
limityan May 11, 2026
93b01fb
feat(usage): complete session usage report P1
limityan May 11, 2026
1dc8a92
refactor(core): harden runtime boundary contracts
limityan May 11, 2026
b76a3d0
refactor(core): form P2 owner crates
limityan May 11, 2026
847a1ce
feat(deep-review): add scoped evidence runtime
limityan May 11, 2026
623d72f
feat(web-ui): surface scoped deep review reports
limityan May 11, 2026
e4bb103
Merge pull request #658 from kev1n77/fmy/bugfix
GCWing May 11, 2026
937795a
feat(agent): generate Write tool body via plaintext follow-up
bobleer May 11, 2026
a5c619b
fix(web-ui): pet tap opens main window; persist in-progress turns onl…
G-CWing May 11, 2026
752c6be
Merge pull request #665 from GCWing/gcwing/dev
GCWing May 11, 2026
ff066af
Merge pull request #664 from bobleer/feat/write-tool-plaintext-genera…
GCWing May 11, 2026
a73f9f2
feat(deep-review): harden queue runtime controls
limityan May 11, 2026
4339208
feat(web-ui): refine deep review action workflows
limityan May 11, 2026
b71cb81
docs(deep-review): localize contributor guidance
limityan May 11, 2026
a327305
refactor(mcp): align tool naming with metadata-driven server resolution
wsp1911 May 11, 2026
a216ccd
refactor(dynamic-tools): align MCP tool metadata with dynamic provide…
wsp1911 May 12, 2026
a1834c6
fix(web-ui): stabilize review and ACP settings flows
limityan May 12, 2026
df3bd0d
fix(web-ui): clarify deep review queue waits
limityan May 12, 2026
144b9b0
fix: align MCP tool metadata fields and remove unused tool APIs
wsp1911 May 12, 2026
dc1b3f5
feat(agentic,web-ui): task tool UI, explore region, and session event…
G-CWing May 12, 2026
931d91a
fix(core): add ToolItemData subagent model fields in session_usage tests
G-CWing May 12, 2026
c6103ea
Merge pull request #672 from GCWing/gcwing/dev
GCWing May 12, 2026
a93635b
Sync local fixes: stream dedup, search remote/fallback, session rollb…
bobleer May 12, 2026
1e27ce9
feat(cli): update cli
kev1n77 May 12, 2026
07015b7
Merge pull request #677 from kev1n77/fmy/cli
GCWing May 12, 2026
df57917
fix(deep-review): clarify partial reviewer labels
limityan May 12, 2026
a07b17a
feat(acp): support remote built-in clients
wgqqqqq May 12, 2026
ee5be43
fix(flow-chat): restore ACP session state and permissions
wgqqqqq May 12, 2026
00ee9ee
fix(flow-chat): disable ACP queue steering
wgqqqqq May 12, 2026
c51b21c
fix: timeout stuck ACP client startup
wgqqqqq May 12, 2026
2e0e2dd
feat(agentic): add mode-scoped subagent visibility
wsp1911 May 12, 2026
faa32c1
fix(web): satisfy ssh remote hook deps
wgqqqqq May 12, 2026
e1f692c
refactor(core): move service integrations to owner crate
limityan May 12, 2026
5e4e6e3
test(core): enforce decomposition boundaries
limityan May 12, 2026
81c69aa
docs(core): update decomposition guardrails
limityan May 12, 2026
595de10
fix(agent): harden Anthropic streaming, retries, and execution paths …
bobleer May 12, 2026
a939a8e
Merge pull request #679 from wgqqqqq/codex/remote-acp-workspace-support
GCWing May 12, 2026
421e2d6
fix(core): stabilize task and skill prompt item ordering
wsp1911 May 12, 2026
87950db
fix(cli): Refine CLI migration and scope sessions to current project
kev1n77 May 12, 2026
b4817df
chore(cli): remove redundant preset themes
kev1n77 May 12, 2026
860a843
refactor(remote-ssh): move workspace identity helpers
limityan May 12, 2026
ee5d59c
refactor(mcp): extract pure contracts and harden registry
limityan May 12, 2026
39afcc6
Merge pull request #683 from kev1n77/fmy/cli
GCWing May 12, 2026
e2de3a0
chore(search): isolate flashgrep logs and bump bundle v0.2.7
wgqqqqq May 12, 2026
9a45437
Merge pull request #657 from wgqqqqq/codex/bump-version-0.2.7
wgqqqqq May 12, 2026
df35f6f
fix(cli): initialize terminal service during startup
kev1n77 May 12, 2026
f808b84
fix(cli): fix user question and model name display
kev1n77 May 12, 2026
e921f71
fix(desktop): agent companion pet resize safety and Windows UX (#687)
bobleer May 12, 2026
769de8d
Merge pull request #686 from kev1n77/fmy/cli
GCWing May 12, 2026
190a4ac
refactor(mcp): move auth config helpers to integrations
limityan May 12, 2026
7a192ea
refactor(mcp): move config helpers to integrations
limityan May 12, 2026
11e504d
fix(deep-review): stabilize recovery and capacity waits
limityan May 12, 2026
6672056
refactor(mcp): move remote protocol helpers to integrations
limityan May 12, 2026
e491491
fix(agentic): guard Write against overwrite, allow loop recovery, and…
bobleer May 13, 2026
05e768d
fix(web-ui): harden streamed params and pet activity
limityan May 13, 2026
79cc6ab
refactor(core): harden decomposition boundaries
limityan May 13, 2026
cb8bb98
fix(deep-review): refine review action bar UX
limityan May 12, 2026
03d6eba
Merge pull request #685 from wgqqqqq/codex/flashgrep-log-isolation
wgqqqqq May 13, 2026
12079c6
refactor(services): move integration runtime helpers
limityan May 13, 2026
742105f
fix(desktop): suppress context menu on agent companion pet, reorder A…
bobleer May 13, 2026
31690bb
fix(core): add logs for stuck subagent task completion
wsp1911 May 13, 2026
d238cb6
feat(logging): add sensitive diagnostic log preference
limityan May 13, 2026
4ec1383
refactor(mcp): move adapter runtime helpers to integrations
limityan May 13, 2026
b401d86
refactor(mcp): move runtime ownership to integrations
limityan May 13, 2026
3ba76c1
docs(architecture): add product surface contract guardrails
limityan May 13, 2026
d6445c0
fix(remote): route Git commands through SSH for remote workspaces
kev1n77 May 13, 2026
a12857e
Merge pull request #696 from kev1n77/fmy/bugfix
GCWing May 13, 2026
9a92325
feat(logging): add backend diagnostic log redactor
limityan May 13, 2026
954a4ee
refactor(remote-connect): add product surface contracts
limityan May 13, 2026
0428240
feat(deep-review): improve adaptive review launch flow
limityan May 13, 2026
6244895
fix(config): tolerate null mode config entries
wgqqqqq May 13, 2026
83b5bcf
test(config): fix null mode config regression import
wgqqqqq May 13, 2026
1e002ac
fix(deep-review): improve completion surface routing
limityan May 13, 2026
e64197a
refactor(core): move tool contracts into agent-tools
limityan May 13, 2026
b853282
refactor(core): move tool registry into agent-tools
limityan May 13, 2026
4f3ff36
fix(flow-chat): keep file change counts session-scoped
limityan May 13, 2026
fa3deb2
feat(ssh): stable connection IDs and session hydration after port cha…
bobleer May 13, 2026
c7b177d
Merge pull request #706 from wgqqqqq/codex/fix-mode-config-null-startup
GCWing May 13, 2026
e5e715d
feat: add on-demand tool spec discovery
wsp1911 May 13, 2026
0b51233
fix(web-ui): shortcut digit lookup, overrides, editor canvas inherita…
bobleer May 14, 2026
6a192a9
refactor(product-domains): externalize guarded domain helpers
limityan May 14, 2026
2613f8b
ci: avoid caching cargo bin in Rust checks
limityan May 14, 2026
647f1cd
feat(desktop): add system fullscreen mode
limityan May 14, 2026
8fba7e4
fix(lsp): skip didOpen when server is stopped
limityan May 14, 2026
8493c7b
fix(web-ui): new session workspace and session AI/pet config layout (…
bobleer May 14, 2026
c2f0703
feat(deep-research): consolidate to pure 6-phase pipeline with citati…
nonoqing May 14, 2026
fa89e21
Merge pull request #718 from nonoqing/yuyiqing/dev
nonoqing May 14, 2026
dc3ec69
fix acp tool diff fallback
wgqqqqq May 14, 2026
2c9357e
Fix search result rendering and context handling
wgqqqqq May 14, 2026
22c9b1c
fix remote workspace compatibility guards (#719)
bobleer May 14, 2026
64f7a28
feat(agents): support per-mode subagent availability management
wsp1911 May 14, 2026
82059f5
feat(config): default agent companion pet to panda preset (#721)
bobleer May 14, 2026
2a66824
Merge pull request #715 from wgqqqqq/codex/acp-tool-diff-fallback
GCWing May 14, 2026
2302e72
fix acp startup timeout
wgqqqqq May 14, 2026
7af6fd6
Merge pull request #722 from wgqqqqq/codex/acp-startup-timeout
GCWing May 14, 2026
604f74e
feat(update): download daily app updates in background
kev1n77 May 13, 2026
2e77ce3
chore(boundaries): guard latest-main runtime anchors
limityan May 14, 2026
6345a4d
fix file tool reliability (#724)
bobleer May 15, 2026
cc5dbbc
refactor(core): close services product owner boundaries
limityan May 15, 2026
f812fee
test(core): add semantic regression baselines
limityan May 15, 2026
34a4689
refactor(runtime): add remote runtime port baselines
limityan May 15, 2026
bc78dd9
bundle linux flashgrep in windows builds
wgqqqqq May 15, 2026
906077c
refactor(remote-connect): move tracker state to integrations
limityan May 15, 2026
03fb59e
Merge pull request #723 from kev1n77/dev/auto-update
GCWing May 15, 2026
5d70a3a
feat(cli): expose ACP server and external agent controls
kev1n77 May 14, 2026
e537727
test(remote-connect): add runtime migration snapshots
limityan May 15, 2026
9146fb3
fix(web-ui): drop noisy session model auto-migration toasts (#733)
bobleer May 15, 2026
dcaa5f4
Merge pull request #728 from wgqqqqq/codex/windows-bundle-linux-flash…
GCWing May 15, 2026
e2e83b5
fix(acp): prevent ACP write turns from hanging
kev1n77 May 14, 2026
24b76d0
refactor(remote-connect): move runtime policy helpers
limityan May 15, 2026
67ce587
fix(flow-chat): prevent card toggle while selecting text
kev1n77 May 15, 2026
ffeef5f
Merge pull request #737 from kev1n77/fmy/bugfix
GCWing May 15, 2026
2fc8aef
Merge pull request #731 from kev1n77/fmy/cli
GCWing May 15, 2026
aa3a739
feat(miniapp): add customization draft sandbox
limityan May 15, 2026
160080e
feat(miniapp): add customization chat workflow
limityan May 15, 2026
cd00af5
refactor(remote-connect): move wire poll contracts
limityan May 15, 2026
d58eb95
refactor(product-domains): move pure product parsing policies
limityan May 15, 2026
862738f
refactor(remote-connect): move tracker registry ownership
limityan May 15, 2026
d821c14
feat(miniapp): add built-in PR review inbox
limityan May 15, 2026
be287e1
fix(miniapp): refine PR review inbox behavior
limityan May 15, 2026
42722f3
locale: fix Nursery->Assistant, Office Session->Cowork Session
harryfan1985 May 15, 2026
43c4351
chore(web): add bundle analysis guardrails
limityan May 16, 2026
413c515
perf(web): narrow startup optional runtimes
limityan May 16, 2026
d615378
Merge pull request #745 from harryfan1985/main
GCWing May 16, 2026
2a31a79
feat(desktop): add review platform panel with core service and Tauri API
kev1n77 May 13, 2026
8e3bf9f
feat(web): link pull requests with review chat sessions
kev1n77 May 14, 2026
b50b843
feat(pr-page): support inner git platform
kev1n77 May 15, 2026
33bdd3d
fix(pr-page): fix: improve PR review panel reliability and launch con…
kev1n77 May 15, 2026
37a506a
feat(pr-page): open PR links in dedicated detail panel
kev1n77 May 16, 2026
527cb0d
feat: add review platform agent tool
kev1n77 May 16, 2026
58aa05c
feat(web): refine pull request detail context actions
kev1n77 May 16, 2026
59037b8
fix(review-platform): propagate remoteId through PR context and auto-…
kev1n77 May 18, 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
  •  
  •  
  •  
23 changes: 19 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,14 @@ name: CI
on:
pull_request:
branches: [main]
paths-ignore:
- '**/*.md'
- 'png/**'
push:
branches: [main]
paths-ignore:
- '**/*.md'
- 'png/**'

# Cancel previous runs on same branch/PR
concurrency:
Expand Down Expand Up @@ -66,20 +72,29 @@ jobs:
pkg-config \
libglib2.0-dev \
libgtk-3-dev \
libxdo-dev \
"$WEBKIT_PKG" \
"$APPINDICATOR_PKG" \
librsvg2-dev \
patchelf
patchelf \
libleptonica-dev \
libtesseract-dev \
tesseract-ocr \
tesseract-ocr-eng

- uses: dtolnay/rust-toolchain@stable

- uses: swatinem/rust-cache@v2
with:
shared-key: "ci-check-${{ runner.os }}"
shared-key: "ci-check-v2-${{ runner.os }}-no-cargo-bin-v1"
cache-bin: false

- name: Check compilation
run: cargo check --workspace --exclude bitfun-cli

- name: Run core Rust tests
run: cargo test --locked -p bitfun-core

# ── Frontend: build ────────────────────────────────────────────────
frontend-build:
name: Frontend Build
Expand All @@ -100,8 +115,8 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Type-check web UI
run: pnpm run type-check:web
- name: Lint web UI
run: pnpm run lint:web

- name: Build web UI
run: pnpm run build:web
Expand Down
158 changes: 151 additions & 7 deletions .github/workflows/desktop-package.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
name: Desktop Package

on:
# Triggered explicitly by release workflows to avoid duplicate packaging.
release:
types:
- published
workflow_dispatch:
inputs:
tag_name:
Expand All @@ -17,6 +19,10 @@ on:
permissions:
contents: write

concurrency:
group: desktop-package-${{ github.event.release.tag_name || inputs.tag_name || github.sha }}
cancel-in-progress: true

jobs:
# ── Resolve version info ───────────────────────────────────────────
prepare:
Expand All @@ -26,21 +32,31 @@ jobs:
version: ${{ steps.meta.outputs.version }}
release_tag: ${{ steps.meta.outputs.release_tag }}
upload_to_release: ${{ steps.meta.outputs.upload_to_release }}
checkout_ref: ${{ steps.meta.outputs.checkout_ref }}
steps:
- uses: actions/checkout@v4

- name: Resolve version metadata
id: meta
shell: bash
env:
GITHUB_EVENT_NAME: ${{ github.event_name }}
GITHUB_SHA: ${{ github.sha }}
RELEASE_TAG_NAME: ${{ github.event.release.tag_name }}
INPUT_TAG_NAME: ${{ inputs.tag_name }}
INPUT_UPLOAD_TO_RELEASE: ${{ inputs.upload_to_release }}
run: |
set -euo pipefail

if [[ -n "${INPUT_TAG_NAME}" ]]; then
if [[ "${GITHUB_EVENT_NAME}" == "release" ]]; then
TAG="${RELEASE_TAG_NAME}"
VERSION="${TAG#v}"
UPLOAD="true"
CHECKOUT_REF="${TAG}"
elif [[ -n "${INPUT_TAG_NAME}" ]]; then
TAG="${INPUT_TAG_NAME}"
VERSION="${TAG#v}"
CHECKOUT_REF="${TAG}"
if [[ "${INPUT_UPLOAD_TO_RELEASE}" == "true" ]]; then
UPLOAD="true"
else
Expand All @@ -50,11 +66,13 @@ jobs:
VERSION="$(jq -r '.version' package.json)"
TAG="v${VERSION}"
UPLOAD="false"
CHECKOUT_REF="${GITHUB_SHA}"
fi

echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "release_tag=$TAG" >> "$GITHUB_OUTPUT"
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "release_tag=$TAG" >> "$GITHUB_OUTPUT"
echo "upload_to_release=$UPLOAD" >> "$GITHUB_OUTPUT"
echo "checkout_ref=$CHECKOUT_REF" >> "$GITHUB_OUTPUT"

# ── Build per platform ─────────────────────────────────────────────
package:
Expand All @@ -63,11 +81,24 @@ jobs:
needs: prepare
env:
NODE_OPTIONS: --max-old-space-size=6144
BITFUN_ENABLE_UPDATER_ARTIFACTS: ${{ needs.prepare.outputs.upload_to_release }}
TAURI_UPDATER_ENDPOINT: https://github.com/GCWing/BitFun/releases/latest/download/latest.json
TAURI_UPDATER_PUBKEY: ${{ secrets.TAURI_UPDATER_PUBKEY }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}

strategy:
fail-fast: false
matrix:
platform:
- os: ubuntu-latest
name: linux-x64
target: x86_64-unknown-linux-gnu
build_command: pnpm run desktop:build:linux -- --target x86_64-unknown-linux-gnu --bundles deb,rpm,appimage
- os: ubuntu-24.04-arm
name: linux-arm64
target: aarch64-unknown-linux-gnu
build_command: pnpm run desktop:build:linux -- --target aarch64-unknown-linux-gnu --bundles deb,rpm,appimage
- os: macos-15
name: macos-arm64
target: aarch64-apple-darwin
Expand All @@ -79,19 +110,86 @@ jobs:
- os: windows-latest
name: windows-x64
target: x86_64-pc-windows-msvc
build_command: pnpm run installer:build
build_command: |
$ErrorActionPreference = 'Stop'
pnpm run desktop:build:nsis --target x86_64-pc-windows-msvc --verbose
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
$desktopExe = "target/x86_64-pc-windows-msvc/release/bitfun-desktop.exe"
if (-not (Test-Path $desktopExe)) {
throw "Desktop executable was not found after NSIS build: $desktopExe"
}
pnpm run installer:build:only
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }

steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ needs.prepare.outputs.release_tag }}
ref: ${{ needs.prepare.outputs.checkout_ref }}

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

- name: Install NSIS (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
choco install nsis -y --no-progress
$nsisRoot = "${env:ProgramFiles(x86)}\NSIS"
$nsisBin = "${env:ProgramFiles(x86)}\NSIS\Bin"
if (Test-Path $nsisRoot) {
Add-Content $env:GITHUB_PATH $nsisRoot
}
if (Test-Path $nsisBin) {
Add-Content $env:GITHUB_PATH $nsisBin
}

- name: Verify NSIS (Windows)
if: runner.os == 'Windows'
shell: pwsh
run: |
$ErrorActionPreference = 'Stop'
where.exe makensis
makensis /VERSION

- name: Install Linux system dependencies (Tauri bundler)
if: runner.os == 'Linux'
shell: bash
run: |
sudo apt-get update

if apt-cache show libwebkit2gtk-4.1-dev >/dev/null 2>&1; then
WEBKIT_PKG=libwebkit2gtk-4.1-dev
else
WEBKIT_PKG=libwebkit2gtk-4.0-dev
fi

if apt-cache show libappindicator3-dev >/dev/null 2>&1; then
APPINDICATOR_PKG=libappindicator3-dev
else
APPINDICATOR_PKG=libayatana-appindicator3-dev
fi

sudo apt-get install -y --no-install-recommends \
pkg-config \
xdg-utils \
libglib2.0-dev \
libgtk-3-dev \
libxdo-dev \
"$WEBKIT_PKG" \
"$APPINDICATOR_PKG" \
librsvg2-dev \
patchelf \
fakeroot \
rpm \
libleptonica-dev \
libtesseract-dev \
tesseract-ocr \
tesseract-ocr-eng

- name: Setup pnpm
uses: pnpm/action-setup@v4

Expand All @@ -109,7 +207,8 @@ jobs:
- name: Cache Rust build
uses: swatinem/rust-cache@v2
with:
shared-key: "package-${{ matrix.platform.name }}"
shared-key: "package-v2-${{ matrix.platform.name }}"
cache-bin: false

- name: Install dependencies
run: pnpm install --frozen-lockfile
Expand Down Expand Up @@ -137,8 +236,13 @@ jobs:
needs: [prepare, package]
if: needs.prepare.outputs.upload_to_release == 'true'
runs-on: ubuntu-latest
env:
REQUIRED_UPDATER_PLATFORMS: windows-x86_64,darwin-x86_64,darwin-aarch64,linux-x86_64,linux-aarch64

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Download bundled artifacts
uses: actions/download-artifact@v4
with:
Expand All @@ -151,11 +255,51 @@ jobs:
echo "Release assets:"
find release-assets -type f | sort

- name: Collect updater assets
run: |
node scripts/collect-tauri-updater-assets.mjs \
--assets-dir release-assets \
--version "${{ needs.prepare.outputs.version }}" \
--out-dir release-updater-assets \
--required-platforms "${REQUIRED_UPDATER_PLATFORMS}"

- name: Generate updater manifest
run: |
node scripts/generate-tauri-latest-json.mjs \
--assets-dir release-updater-assets \
--version "${{ needs.prepare.outputs.version }}" \
--tag "${{ needs.prepare.outputs.release_tag }}" \
--repo "GCWing/BitFun" \
--out release-updater-assets/latest.json \
--required-platforms "${REQUIRED_UPDATER_PLATFORMS}"

- name: Verify updater manifest
run: |
node scripts/verify-tauri-latest-json.mjs \
--manifest release-updater-assets/latest.json \
--version "${{ needs.prepare.outputs.version }}" \
--required-platforms "${REQUIRED_UPDATER_PLATFORMS}"

- name: Upload to release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ needs.prepare.outputs.release_tag }}
files: |
release-updater-assets/*
release-assets/**/*.AppImage
release-assets/**/*.deb
release-assets/**/*.dmg
release-assets/**/*.rpm
release-assets/**/*bitfun-installer.exe
fail_on_unmatched_files: true

- name: Verify published updater manifest
run: |
curl -fsSL --retry 5 --retry-delay 3 \
"https://github.com/GCWing/BitFun/releases/download/${{ needs.prepare.outputs.release_tag }}/latest.json" \
-o latest.published.json
node scripts/verify-tauri-latest-json.mjs \
--manifest latest.published.json \
--version "${{ needs.prepare.outputs.version }}" \
--required-platforms "${REQUIRED_UPDATER_PLATFORMS}" \
--check-urls true
49 changes: 48 additions & 1 deletion .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,14 @@ jobs:
fail-fast: false
matrix:
platform:
- os: ubuntu-latest
name: linux-x64
target: x86_64-unknown-linux-gnu
build_command: pnpm run desktop:build:linux -- --target x86_64-unknown-linux-gnu --bundles deb,rpm,appimage
- os: ubuntu-24.04-arm
name: linux-arm64
target: aarch64-unknown-linux-gnu
build_command: pnpm run desktop:build:linux -- --target aarch64-unknown-linux-gnu --bundles deb,rpm,appimage
- os: macos-15
name: macos-arm64
target: aarch64-apple-darwin
Expand All @@ -93,6 +101,41 @@ jobs:
shell: pwsh
run: ./scripts/ci/setup-openssl-windows.ps1

- name: Install Linux system dependencies (Tauri bundler)
if: runner.os == 'Linux'
shell: bash
run: |
sudo apt-get update

if apt-cache show libwebkit2gtk-4.1-dev >/dev/null 2>&1; then
WEBKIT_PKG=libwebkit2gtk-4.1-dev
else
WEBKIT_PKG=libwebkit2gtk-4.0-dev
fi

if apt-cache show libappindicator3-dev >/dev/null 2>&1; then
APPINDICATOR_PKG=libappindicator3-dev
else
APPINDICATOR_PKG=libayatana-appindicator3-dev
fi

sudo apt-get install -y --no-install-recommends \
pkg-config \
xdg-utils \
libglib2.0-dev \
libgtk-3-dev \
libxdo-dev \
"$WEBKIT_PKG" \
"$APPINDICATOR_PKG" \
librsvg2-dev \
patchelf \
fakeroot \
rpm \
libleptonica-dev \
libtesseract-dev \
tesseract-ocr \
tesseract-ocr-eng

- name: Setup pnpm
uses: pnpm/action-setup@v4

Expand All @@ -110,7 +153,8 @@ jobs:
- name: Cache Rust build
uses: swatinem/rust-cache@v2
with:
shared-key: "nightly-${{ matrix.platform.name }}"
shared-key: "nightly-v2-${{ matrix.platform.name }}"
cache-bin: false

- name: Install dependencies
run: pnpm install --frozen-lockfile
Expand Down Expand Up @@ -202,5 +246,8 @@ jobs:
> **Warning**: Nightly builds are untested and may be unstable.
prerelease: true
files: |
release-assets/**/*.AppImage
release-assets/**/*.deb
release-assets/**/*.dmg
release-assets/**/*.rpm
release-assets/**/*bitfun-installer.exe
Loading
Loading