Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
486 commits
Select commit Hold shift + click to select a range
f66e998
refactor(rbac): drop role registration/restore/delegation functions a…
Aug 16, 2026
84d0f31
refactor(rbac): remove role consumers from tool implementations (owne…
Aug 16, 2026
2a97af6
refactor(rbac): remove rbac_enabled config surface (types/global/serv…
Aug 16, 2026
d057e9b
fix(rbac): restore official session ownership authz after RBAC remova…
Aug 16, 2026
116d0df
fix(rbac): restore owner bypass for orphan deletion (R-26)
Aug 16, 2026
bec9c33
docs(rbac): clarify owner-bypass comments in session_control_tool tes…
Aug 16, 2026
483209e
fix(state): re-export SessionDisplayState and derive_display_state vi…
Aug 16, 2026
2a38731
docs(state): register hung watchdog long-stream false-positive as kno…
Aug 16, 2026
2104726
docs(task/schema): remove stale RBAC role param docs from live docstr…
Aug 16, 2026
823ca00
feat(core): add display_state field to persisted SessionMetadata
Aug 16, 2026
7bab9cd
feat(desktop): persist displayState through UI metadata save path
Aug 16, 2026
0861cc9
feat(desktop): expose display_state in SessionResponse list/restore
Aug 16, 2026
1389737
feat(web-ui): persist displayState through buildSessionMetadata save …
Aug 16, 2026
8f1f980
feat(web-ui): wire displayState into Session load/restore/reconcile p…
Aug 16, 2026
84975ba
fix(agent-runtime): preserve Processing in persisted state so hung su…
Aug 16, 2026
e77b90c
fix(agent-runtime): stop user restore paths from silently erasing hun…
Aug 16, 2026
6eea137
fix(agent-runtime): treat any persisted Processing as crash leftover …
Aug 16, 2026
ba2e895
fix(agent-runtime): exclude Processing sessions from idle eviction (R…
Aug 16, 2026
92caf81
merge: R-WF-01 RBAC removal + orphan deletion owner bypass (task/rwf0…
Aug 16, 2026
56208f1
merge: R-WF-11 seven-state display + hung/interrupted persistence (ta…
Aug 16, 2026
df37179
feat(session): enforce workspace inheritance + hierarchy on session c…
Aug 16, 2026
f974577
feat(agent): add group as first-class agent type
Aug 16, 2026
ac7f46f
feat(acp): align ACP agent tools with agentic mode
Aug 16, 2026
f90c5c9
merge: R-WF-23 session hierarchy enforcement (task/rwf23-hierarchy)
Aug 16, 2026
68fe30e
merge: R-WF-10 ACP agentic alignment (task/rwf10-acp)
Aug 16, 2026
d275d7e
fix(agent): replace serde untagged with hand-written string serde for…
Aug 16, 2026
6bc82ad
docs(rwf02): correct batch2 verification results in fix log (20/50/77…
Aug 16, 2026
284acfb
merge: R-WF-02 group as first-class agent type (task/rwf02-group)
Aug 16, 2026
e63988f
feat(group): keep 9 tools + add orchestration control suite
Aug 16, 2026
e13fd25
feat(group): no model response + open delivery
Aug 16, 2026
71abf58
docs(rwf04): fix log for R-WF-04 no model response + open delivery
Aug 16, 2026
0855acf
merge: R-WF-03 group orchestration tool suite (task/rwf03-tools)
Aug 16, 2026
5da7cb3
merge: R-WF-04 no model response + open delivery (task/rwf04-open)
Aug 16, 2026
41807c0
feat(workflow): template-instance model for group
Aug 16, 2026
87ab9a7
docs(rwf06): fix log for R-WF-06 template-instance model
Aug 16, 2026
a941a22
feat(group): async replicate member turns to group log
Aug 16, 2026
d43b366
docs(rwf05): archive R-WF-05 fix record for async group replicate
Aug 16, 2026
b607a61
fix(rwf06): isolate workflow test coordinator, drop order assumption,…
Aug 16, 2026
4215032
fix(group): unify back-mark storage domain + add cross-domain/async/s…
Aug 16, 2026
e6c3e4e
docs(rwf05): append batch4 return-fix round to R-WF-05 fix record
Aug 16, 2026
6f946bd
merge: R-WF-05 async group replicate (task/rwf05-replicate)
Aug 16, 2026
8ac78ec
merge: R-WF-06 template-instance model (task/rwf06-workflow)
Aug 16, 2026
1572ed8
Merge remote-tracking branch 'upstream/main' (965de28d9 fix(tool-card…
Aug 16, 2026
0d90690
fix(group-room): P1-A remove_member clears member back-mark + P1-B ti…
Aug 16, 2026
42592d9
merge: R-WF-05 P1 fix remove_member back-mark + timing assert (task/r…
Aug 16, 2026
6b472cc
fix(ci): align deferred-tool contract assertion, agent registry group…
Aug 16, 2026
3e86aaa
merge: CI fix deferred-tool contract + registry group spec (task/cifix)
Aug 16, 2026
916becc
feat(member): instantiate members as Claw with persona files + own wo…
Aug 16, 2026
0b208dc
docs(rwf07): add R-WF-07 fix record
Aug 16, 2026
4af6574
feat(member): instantiate members as Claw with persona files + own wo…
Aug 16, 2026
a334e0b
docs(rwf07): add R-WF-07 fix record
Aug 16, 2026
aff4c2d
feat(group): sender identity + group mode system prompt
Aug 16, 2026
29a6754
docs(rwf08): add R-WF-08 fix record
Aug 16, 2026
3b2d607
feat(group): orchestration tools main-session only
Aug 16, 2026
d97860f
fix(rwf09): reuse global coordinator consistently in orchestration test
Aug 16, 2026
638ab6e
docs(rwf09): archive R-WF-09 fix record for orchestration main-sessio…
Aug 16, 2026
4a72713
merge: R-WF-07 member-as-Claw instantiation (task/rwf07-member-claw)
Aug 16, 2026
0311bf8
merge: R-WF-08 sender identity + group mode prompt (task/rwf08-sender…
Aug 16, 2026
ca75e3c
merge: R-WF-09 orchestration tools main-session only (task/rwf09-orch…
Aug 16, 2026
f3c0d36
fix(ci): remove CJK comments to satisfy i18n contract
Aug 16, 2026
debc16d
fix(ci): isolate group_room roundtrip test from global coordinator ra…
Aug 16, 2026
356c336
merge: CI race fix isolate group_room roundtrip test (fix/batch5-ci)
Aug 16, 2026
b636e53
fix(ci): call_send_impl 直接用传入 coordinator 调 send_message,删 _coordinat…
Aug 16, 2026
59d43be
fix(session): canonicalize path comparison in resolved_sessions_dir_kind
Aug 17, 2026
8732918
docs(rwf26): archive R-WF-26 fix record for path canonicalization
Aug 17, 2026
5320eb1
merge: R-WF-26 path canonicalization fix (task/rwf26)
Aug 17, 2026
6c9de1b
feat(ui): group-chats nav section + two create entries
Aug 16, 2026
43764fb
docs(rwf12): archive R-WF-12 fix record for group-chats nav section
Aug 16, 2026
a7dfa2f
merge: R-WF-12 group-chats nav section + two create entries (task/rwf…
Aug 17, 2026
8137949
fix(ui): remove redundant Boolean cast in workflow member restore (es…
Aug 17, 2026
69d326b
fix(state): overlay live in-memory state in persisted session list
Aug 17, 2026
85a1e0e
docs(rwf24): archive R-WF-24 fix record for background activity visib…
Aug 17, 2026
b07dec6
merge: R-WF-24 background activity visibility (task/rwf24)
Aug 17, 2026
1779339
fix(ui): register group-chats appearance surfaces (contract audit)
Aug 17, 2026
de6a336
fix(state): keep processing while background command alive
Aug 17, 2026
52e00d7
feat(ui): bridge background command lifecycle to state machine
Aug 17, 2026
121b20a
docs(rwf25): archive R-WF-25 fix record for background activity visib…
Aug 17, 2026
6ddd3e5
fix(rwf25): wire watchdog params to ai.thresholds + full-chain tests
Aug 17, 2026
1e1c3a6
merge: R-WF-25 background activity visibility (task/rwf25)
Aug 17, 2026
fca338f
feat(R-THR-01): compression trigger percent + config contract domains…
Aug 17, 2026
7215cca
feat(R-THR-01): configurable hard-coded thresholds at consumer sites …
Aug 17, 2026
00202c4
merge: R-THR-01 hard-coded thresholds completion (task/rwf-hardcode-01)
Aug 17, 2026
4987b77
feat(ui): recover official AgentTeam UI from afc8c0aa1~1
Aug 17, 2026
ff28c12
feat(ui): recover ReviewTeam page from f072467ea~1
Aug 17, 2026
a9cf44f
feat(ui): wire agent team + review team into AgentsScene
Aug 17, 2026
26e9d34
docs(rwf13): archive R-WF-13 fix record for official team UI recovery
Aug 17, 2026
aa7701c
fix(ui): complete zh-TW traditional conversion for recovered A-suite …
Aug 17, 2026
45e498a
docs(rwf13): record CQO rework round for zh-TW conversion + P2 items
Aug 17, 2026
dc8f869
merge: R-WF-13 official team UI three-suite recovery (task/rwf13)
Aug 17, 2026
0d5cdd9
fix(async): remove coalescing + suppress injected reply + 16k truncation
Aug 17, 2026
6c1afbf
merge: R-ASYNC-01 async reply mechanism unification (task/rasync01)
Aug 17, 2026
cdb6909
Merge remote-tracking branch 'upstream/main' into main (11 commits)
Aug 17, 2026
e94361d
test(R-THR-01): 上游同步适配 session_control 测试用 std::env::temp_dir 替换硬编码 C…
Aug 17, 2026
47cc136
style(R-WF-13): 上游同步适配 agents 组件 appearance token color-primary -> co…
Aug 17, 2026
8d7aab8
fix(ui): register agent-team domain tokens; replace remaining appUi b…
Aug 17, 2026
228dd72
fix(cli): upstream adaptation - restore cli 0e0w after upstream sync
Aug 17, 2026
487d388
refactor(ui): rename legion to workflow wording
Aug 17, 2026
c2abb51
merge(R-WF-15): 军团表述 -> 工作流表述 (i18n legion wording, S-85)
Aug 17, 2026
a7f817f
docs(R-WF-15): add rename legion to workflow execution record
Aug 17, 2026
122844a
feat(ui): read-only group log view
Aug 17, 2026
82bbc4e
docs(R-WF-14): add read-only group log view execution record (pr-docs…
Aug 17, 2026
9654287
merge(R-WF-14): 前端只读群聊视图 (read-only group log view, S-85)
Aug 17, 2026
8fb9edb
feat(rwf16): backend tool settings commands (set_global_tool_disabled…
Aug 17, 2026
ba15e17
feat(ui): four-column custom bar + tools panel (WIP frontend)
Aug 17, 2026
acee0d7
feat(ui): four-column custom bar + tools panel (appearance contract +…
Aug 17, 2026
c0a4302
fix(rwf16): CQO review round 1 - global tool disabled runtime consump…
Aug 17, 2026
e384e9b
merge(R-WF-16): 定制栏四栏+工具栏 (four-column custom bar + tools panel, S-85)
Aug 17, 2026
7cc0a8b
fix(backend): rename Legion mode display to Workflow + differentiate …
Aug 17, 2026
1d2cc1b
fix(ui): workflow badge + Legion description override + sidebar ellip…
Aug 17, 2026
b77e074
merge(batch7-fix): 截图补修 P0x2+P1x3 数据层残留 (screenshot rework, S-85)
Aug 17, 2026
075ca80
feat(ui): independent workflow Claw frontend (detail jumps to Assista…
Aug 17, 2026
b68a154
docs(rwf18): R-WF-18 fix record (independent workflow Claw frontend)
Aug 17, 2026
e6f6793
merge(R-WF-18): 独立工作流 Claw 前端 (independent workflow Claw frontend, S-85)
Aug 17, 2026
4126528
feat(ui): DAG canvas workflow orchestration
Aug 17, 2026
d8effef
fix(ui): R-WF-17 CQO review round - i18n sharedTerm + appearance parts
Aug 17, 2026
dc367f1
merge(R-WF-17): DAG canvas workflow orchestration (S-85)
Aug 17, 2026
4d13326
feat(sub-auth): add codebuddy provider with private auth API flow
Aug 17, 2026
ed32df0
feat(sub-auth): add qoder provider with device flow
Aug 17, 2026
cd70dee
docs(sub-auth): R-LOGIN-01/02/04 execution record
Aug 17, 2026
5c3334c
fix(sub-auth): qoder nonce/refresh contract + 401/403 force refresh (…
Aug 17, 2026
5a7f238
docs(sub-auth): record CQO review fix (P0x2 + P1 + P2x2)
Aug 17, 2026
0d4c60e
fix(sub-auth): 401/403 auto-refresh retry loop (CQO round 2)
Aug 17, 2026
7834a7f
docs(sub-auth): record round-2 fix (401/403 auto-refresh loop)
Aug 17, 2026
8dd993a
fix(sub-auth): rebind retry client with rotated token after 401/403 (…
Aug 17, 2026
0f14cb7
docs(sub-auth): record round-3 fix (rebind retry client)
Aug 17, 2026
96f67a3
merge(R-LOGIN): codebuddy + qoder subscription auth providers (S-85)
Aug 17, 2026
829d85a
feat(ui): subscription login panel for codebuddy + qoder
Aug 17, 2026
27f2d17
docs(pr-docs): record R-LOGIN-03 frontend subscription login panel ex…
Aug 17, 2026
f22c592
fix(injection): extend write-like tool coverage + no mid-execution in…
Aug 17, 2026
0bcda1e
fix(agent): decouple review semantics from readonly tool stripping (r…
Aug 17, 2026
7132110
docs(pr-docs): record R-WF-21 review/readonly decoupling execution
Aug 17, 2026
db6b929
fix(agent): rustfmt formatting for review/readonly decoupling (CQO re…
Aug 17, 2026
b005946
docs(pr-docs): record R-WF-21 rustfmt rework per CQO review
Aug 17, 2026
d95ad04
fix(injection): english comments + remove dead scheduler guard (CQO r…
Aug 17, 2026
13163a7
merge(R-WF-22): tool injection write-like protection + no mid-executi…
Aug 17, 2026
5850bdb
merge(R-WF-21): review/readonly semantics decoupling (S-85)
Aug 17, 2026
2a0539a
fix(ui): agent team tab delete confirm, explicit rename save/cancel, …
Aug 17, 2026
5ccef16
fix(ui): register new appearance parts for rename buttons and panel t…
Aug 17, 2026
7155517
docs(pr-docs): record UI fix batch A (P0-1/P0-2/P1-5/P1-6) execution
Aug 17, 2026
e2462ee
Merge remote-tracking branch 'upstream/main' into main
Aug 17, 2026
9deeacc
merge(task/ui-fix-a): frontend UI fix batch A - agent team tab delete…
Aug 17, 2026
f9a7e4c
fix(ui): AgentsScene zone layout + action ordering + danger styling (…
Aug 17, 2026
8563b20
docs(pr-docs): record batch B AgentsScene UI layout fix execution
Aug 17, 2026
1a80241
docs(pr-docs): record batch A/B composer save/cancel unification (CQO…
Aug 17, 2026
8e165d1
merge(task/ui-fix-b): frontend UI fix batch B - AgentsScene zone layo…
Aug 17, 2026
ba85b3b
fix(ui): batch C cleanup and independent-domain UI fixes (P2-1..P2-4)
Aug 17, 2026
531350d
Merge branch 'task/ui-fix-c'
Aug 17, 2026
a7d8cb7
fix(ci): register token-usage-statistics as reviewed aggregate of run…
Aug 17, 2026
318edf9
fix(ci): local CI replica align remote 9-job matrix (P0)
Aug 17, 2026
6f97479
fix(ci): add bitfun-core product-full feature-combination gate (7 con…
Aug 17, 2026
33df298
merge(task/ci-fix): local CI replica align remote 9-job matrix + prod…
Aug 17, 2026
6676097
feat(compression): structured context checkpoint template with confid…
Aug 17, 2026
28c2385
fix(r13-r14): guard empty first-round requests in execution engine an…
Aug 18, 2026
121a25c
fix(r15): urgent fix - scheduler/session_message_tool/agent_api empty…
Aug 18, 2026
c954e79
fix(r12): unread session state attention resolution + tests (CQO 92/1…
Aug 18, 2026
535de33
merge(task/r13-emptyreq-guard): guard empty first-round requests (fix…
Aug 18, 2026
e330586
merge(task/r15-urgent-fix): urgent empty-request hardening scheduler/…
Aug 18, 2026
cb650b4
merge(task/r12-unread-guard): unread session state attention resoluti…
Aug 18, 2026
fbd6584
Revert "merge(task/r15-urgent-fix): urgent empty-request hardening sc…
Aug 18, 2026
86724d6
Revert "merge(task/r12-unread-guard): unread session state attention …
Aug 18, 2026
caa35f5
fix(r-urgent-01): W2 拼接层根治+守卫替换式+单测七件套
Aug 18, 2026
6765cc5
fix(r-urgent-01): W1 构造层根治(工厂分道+空防护+消费端空校验)
Aug 18, 2026
9e9febc
merge(task/r-urgent-01-w1): W1 构造层根治(工厂分道+空防护+消费端空校验)
Aug 18, 2026
51ab4a7
merge(task/r-urgent-01-w2): W2 拼接层根治+守卫替换式+单测七件套
Aug 18, 2026
a25cfc1
fix(r-urgent-01-w2): D7 断言对齐 W1 空防护(空文本 internal_reminder 不产壳)
Aug 18, 2026
ce93a96
fix(state-machine): busy 卡死必现根治(empty_initial_turn success 白名单 + 前端结算…
Aug 18, 2026
3883c06
Merge remote-tracking branch 'upstream/main' (22 commits, sync-20260818)
Aug 18, 2026
81b75b9
fix(merge): dedupe isAcpFlowSession import after upstream merge
Aug 18, 2026
b576ffb
fix(state-machine): DialogTurnCompleted 无条件结算根治 busy 卡死(R-BUSY-V6)
Aug 19, 2026
6958f2b
fix(remote-ssh): 补 allow_scan_fallback 构造点修复编译断裂(上游字段遗漏)
Aug 19, 2026
75b4357
fix(process): hide console windows for spawned git/cmd subprocesses
Aug 19, 2026
2479e2b
Merge remote-tracking branch 'upstream/main'
Aug 19, 2026
4c46a96
fix(desktop): remove unused_mut warning in browser_api (R-WARN01)
Aug 19, 2026
080205c
fix(cli): macOS process_group_alive must probe PGID via pgrep (MACOS-…
Aug 19, 2026
4d3cf3c
Merge remote-tracking branch 'upstream/main'
Aug 19, 2026
3bdcbc0
Merge branch 'backup-pre-refactor-20260819'
Aug 19, 2026
c28481e
fix(merge): adapt cli/app-server call sites to merged contracts (Agen…
Aug 20, 2026
a9a51ad
fix(merge): zero-warning gate - clippy --all-targets 0w, fmt clean, p…
Aug 20, 2026
47713dc
fix(test): host-environment isolation for windows test suites (pre-ex…
Aug 20, 2026
f2247f5
fix(web-ui): translate EventHandlerModule comments to English (i18n C…
Aug 20, 2026
4163dee
merge: upstream/main (869bde458) - GitCode PR stats + local rollback …
Aug 20, 2026
a9b483c
merge: upstream/main (b3eb18b5c) - miniapp-market submission metadata…
Aug 20, 2026
a0af519
diag(ci): probe create/update session storage path divergence on linu…
Aug 20, 2026
6dce1d9
chore(cleanup): remove archived sync-records from document-center (co…
Aug 20, 2026
90f5ad0
fix(urgent): restore async reply delivery after urgent injection (urg…
Aug 20, 2026
f1aeb18
fix(codebuddy): align subscription resolve with real Tencent gateway
Aug 20, 2026
624d816
fix(qoder): full China-region support via PAT login and CN gateway
Aug 20, 2026
e747462
fix(web-ui): remove redundant aiApi dependency in handlePatLogin useC…
Aug 20, 2026
9e16389
fix(qoder): match CN gateway in static model discovery branch
Aug 20, 2026
d363a43
feat(ai-adapters): Qoder wasm-signed model discovery (R-QODER-01..08)
Aug 20, 2026
911f786
fix(qoder): make wasm host Send-safe for tauri commands
Aug 20, 2026
09f6177
fix(qoder): remove no-token entry and fix model name storage
Aug 20, 2026
7ed46c6
fix(qoder): map catalog keys to real model ids
Aug 20, 2026
5dd1ea8
fix(core): unify session storage path canonicalization (RAD08/E-5)
Aug 20, 2026
a78aacb
Revert "fix(core): unify session storage path canonicalization (RAD08…
Aug 20, 2026
c6c5f2b
feat(ai-adapters): inject CodeBuddy conversation headers via session_…
Aug 21, 2026
d889c10
feat(ai-adapters): dynamic CodeBuddy model list via subscription auth…
Aug 21, 2026
ee9ee50
fix(ai-adapters): allow dead_code for CodeBuddyModelEntry fields (ser…
Aug 21, 2026
8788d90
R-TODOLIST: 真正落地后端根治(DialogTurnData.todos + 持久化打通)
Aug 21, 2026
85c7c4e
R-TODOLIST: 修复根因 3 getTodos 聚合逻辑(最新有效 turn 为主)
Aug 21, 2026
688bdc1
Merge remote-tracking branch 'upstream/main'
Aug 21, 2026
c6da185
Merge branch 'origin/main' into todolist-backend-fix
Aug 21, 2026
a7d3a18
R-TODOLIST: 补全 DialogTurnData.todos 字段(clippy 修复)
Aug 21, 2026
aef1c62
Merge remote-tracking branch 'upstream/main' into main (upstream #240…
Aug 21, 2026
433d814
R-CB-THINK: 根治 CodeBuddy 动态导入模型思考模式全关闭
Aug 21, 2026
3dba524
R-CB-MODEL: 修复 enterpriseId 缺失导致动态模型静默降级问题
Aug 21, 2026
aa7deb9
Merge remote-tracking branch 'upstream/main' into main (upstream #241…
Aug 21, 2026
b8dcdfa
Merge remote-tracking branch 'upstream/main' into main (upstream #242…
Aug 21, 2026
46e49c5
Merge remote-tracking branch 'upstream/main' into main (upstream plug…
Aug 21, 2026
5af1477
fix(plugin-host): allow unused_mut in comparable_instance_directory o…
Aug 21, 2026
ebce9ff
fix(codebuddy): bind X-Conversation-Request-ID to dialog turn and inj…
Aug 21, 2026
86f78ad
fix(codebuddy): use official CLI version 2.137.1 and real IDE fingerp…
Aug 21, 2026
931acc0
fix(ci): gate plugin-host resource helpers to unix; await process-exi…
Aug 21, 2026
4c1ac80
fix(ci): repair test-build breakage from upstream plugin-host integra…
Aug 21, 2026
109d9a2
fix(plugin-host): align SessionCreateBody parentID field with officia…
Aug 21, 2026
98fdded
fix(ci): align local-replica.ps1 with remote CI (licenses -A no-licen…
Aug 21, 2026
22ad122
fix(ai-adapters): codebuddy fingerprint headers 全补(X-API-Key/X-Privat…
Aug 22, 2026
ac39b79
ci: add rose-legion custom workflow (clippy/fmt/custom crate tests) +…
Aug 22, 2026
41a251c
fix(ci-custom): align local-replica sync probe with actual step names…
Aug 22, 2026
f70225b
fix(clippy): clear 5 clippy errors for rose-legion 0-warning gate (ne…
Aug 22, 2026
deac604
fix(clippy): box relay-service large Err variant (result_large_err) +…
Aug 22, 2026
55cc408
fix(ci-custom): create Tauri resource dirs (dist, src/mobile-web/dist…
Aug 22, 2026
03acf4c
fix(clippy): drop unneeded return in webdriver evaluate_script error …
Aug 22, 2026
aafe8ee
fix(clippy): repair 4 broken points exposed by CI all-targets build -…
Aug 22, 2026
48d7764
style(fmt): apply rustfmt to plugin_source and relay_deploy import li…
Aug 22, 2026
21e283e
fix(scheduler): BUG-02 suppress 消息级化(纯urgent仍Skip,normal回传不受影响)
Aug 22, 2026
78cd9d8
fix(task): 后台回复单通道极简化(双通道冗余复发修复 + 防回退单测)
Aug 22, 2026
080aeba
fix(group-chat): BUG-01 new group chat caller session context (fronte…
Aug 22, 2026
51ee8a4
fix(clippy): clear 10 remaining 1.98 lints in bitfun-cli and bitfun-d…
Aug 22, 2026
0348736
fix(clippy): gate stage_scripts_command import to unix test fn (unuse…
Aug 22, 2026
c773bab
fix(ci-custom): run bitfun-core tests without --lib - --lib + RUSTFLA…
Aug 22, 2026
4533c6a
fix(tool-pipeline): BUG-04 写保护扩展到排队队列 + CancelRunning 竞态原子化
Aug 22, 2026
f5fc42a
fix(clippy): allow dead_code on 7 configured_* helpers - insights/ses…
Aug 22, 2026
6c63859
fix(group-chat): BUG-01 守卫测试同步新语义(无会话回退内存主会话放行断言 + 无主会话回退拒绝断言)
Aug 22, 2026
8cee8bd
fix(security): GenerativeWidgetFrame message 监听补 window.parent source…
Aug 22, 2026
1c23563
fix(security): MermaidBlock svg 输出消毒(Mermaid loose 模式 label 允许 HTML,含…
Aug 22, 2026
daa12ea
fix(web-ui): move sanitizeMermaidSvg out of MermaidBlock.tsx - restor…
Aug 22, 2026
ec1d8cc
fix(deps): 升级 mermaid/dompurify/lodash-es/markdown-it/linkify-it 修复漏洞
Aug 22, 2026
3f8eb11
fix(session-driver): 删除 BACKGROUND_COMMAND_RUNNING 根治排队报错 + 兜底入队
Aug 22, 2026
a5398ec
fix(deps): 同步 package.json mermaid 声明与 lockfile 对齐,修复 CI OUTDATED_LOC…
Aug 22, 2026
8b825d0
fix(deps): 升级 pdf-inspector 0.1.8 消除 lopdf RUSTSEC-2026-0187 + 删豁免
Aug 22, 2026
f4f6bda
fix(i18n): 补齐英文漏翻硬编码迁移 + 扩展英文硬编码审计
Aug 22, 2026
5320f3a
fix(session-manager): 统一 persist write/read 路径解析源,修复 ubuntu CI flaky …
Aug 22, 2026
d917830
fix(deps): 依赖安全修复 dompurify 3.4.14/linkify-it 5.0.2/lodash-es 4.18.1/…
Aug 22, 2026
fad02fc
feat(knowledge-search): make MAX_SCANNED_FILES configurable via ai.th…
Aug 22, 2026
43b8233
qoder: persist machine_id in ~/.qoder-cn/.auth/machine_id
Aug 22, 2026
83b92be
ci: add gitleaks secret scan gate (R-A)
Aug 23, 2026
0996685
feat(session): R-COMM-01 remove parent-child chain validation for fre…
Aug 24, 2026
5a18b31
Merge remote-tracking branch 'upstream/main'
Aug 24, 2026
b3eafbc
fix(session): add evidence_ledger_operation_locks to SessionManager c…
Aug 24, 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
  •  
  •  
  •  
154 changes: 154 additions & 0 deletions .github/workflows/ci-custom.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# 玫瑰军团 · 本地定制门禁(fork 独立 workflow,白嫖远程 CI)
#
# 定位:上游 ci.yml(GCWing/BitFun)只覆盖官方 8 job(rust 3OS / cli-test / deny /
# frontend 三连审计 / vitest / web build)。本文件补上游盲区 =
# clippy 0 warning + cargo fmt --check + 定制 crate 全量测试。
# 原则:custom-* job 命名前缀,与上游 job 错开;独立文件 = 上游同步零冲突(U-3 经验);
# 公开仓 = GitHub Actions 免费额度,白嫖远程算力。
# 触发:仅 push main(不跑 PR——PR 面有上游 ci.yml 把关,本文件专盯 main 定制成果)。
name: CI Custom (Rose Legion)

on:
push:
branches: [main]
paths-ignore:
- 'png/**'

permissions:
contents: read

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

jobs:
# ── 定制 Rust crate 全量测试(上游只测 subscription-auth / search:: 子集)──
custom-rust-tests:
name: Custom Rust Tests
runs-on: ubuntu-latest
timeout-minutes: 40
env:
RUSTFLAGS: "-D warnings"
CARGO_TERM_COLOR: never
steps:
- uses: actions/checkout@v5

# Tauri code generation only requires its configured resource roots to
# exist during check/test (mirrors upstream ci.yml step).
- name: Create Tauri resource directories
shell: bash
run: mkdir -p dist src/mobile-web/dist

- name: Install Linux system dependencies (Tauri)
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf \
libxdo-dev libssl-dev pkg-config build-essential \
libleptonica-dev libtesseract-dev tesseract-ocr tesseract-ocr-eng

- uses: actions/cache@v5
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: custom-rust-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}
restore-keys: |
custom-rust-${{ runner.os }}-

- name: Install Rust toolchain (stable)
run: rustup toolchain install stable --profile minimal

- name: Cargo fmt check (0 容忍)
run: cargo fmt --all -- --check

- name: Clippy all targets (0 warning)
run: cargo clippy --workspace --all-targets -- -D warnings

- name: Test ai-adapters full suite
# 上游只跑 subscription-auth 子集;本地门禁 = 全量(R-CB 指纹头等定制在此)
run: cargo test --locked -p bitfun-ai-adapters

- name: Test tool-runtime full suite
# 上游只跑 search:: 子集;全量覆盖本地群聊/legion/幽灵删除等定制工具
run: cargo test --locked -p tool-runtime

- name: Test assembly core library
# 上游只跑 bitfun-core --lib(单测);本 job 跑全量(含集成测试)
# = 定制核心(群聊/steering/warden)测试盲区补全
# 不用 --lib:全量 target 编译才覆盖 configured_* 等 pub(crate) 辅助
# 函数的所有调用点(--lib + RUSTFLAGS=-D warnings 会把 unused 误报为 error)
run: cargo test --locked -p bitfun-core

# ── 仓库卫生 + 定制符号留存检查 ──
custom-hygiene:
name: Custom Hygiene
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Verify local CI replica stays in sync with remote ci.yml
# 上游 ci.yml 新增/变更检查项 → local-replica.ps1 必须同步覆盖(总纲 §四 第9项)
# 探测 local-replica.ps1 实际步骤名(中文别名),对应上游 ci.yml 英文步骤:
# Check compilation → workspace 编译检查
# Run core and desktop library tests → core + desktop 库测试
# Validate i18n contract → i18n 契约(CI profile)
# Lint web UI → web-ui lint(--max-warnings=0)
run: |
set -euo pipefail
for step in "workspace 编译检查" "core + desktop 库测试" "i18n 契约(CI profile)" "web-ui lint(--max-warnings=0)"; do
grep -qF "$step" scripts/ci/local-replica.ps1 || {
echo "::error::local-replica.ps1 缺少上游 ci.yml 步骤对应项: $step(CI 标准同步核对,总纲 §四 第9项)"
exit 1
}
done
echo "local-replica.ps1 覆盖核对通过"

- name: Reject conflict markers
run: |
set -euo pipefail
if git grep -nE '^(<<<<<<<|=======|>>>>>>>)' -- ':!*.lock' | grep -q .; then
echo "::error::冲突标记残留(M-2)"
exit 1
fi
echo "无冲突标记"

- name: Reject CRLF in shell and deploy assets
run: |
set -euo pipefail
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:"
echo "$bad"
exit 1
fi
echo "All shell and deploy assets are LF-only."

# ── gitleaks 门禁化(S-9 敏感/安全:全仓敏感扫描,发现真实凭据即 exit 非 0 失败)──
# 去伪凭据 = .gitleaks.toml(经人工核实 2026-08-23 的伪阳性:代码字段名/哈希/公钥/测试占位)
# 不用 gitleaks-action(org 账户需 GITLEAKS_LICENSE + GITHUB_TOKEN 评论依赖);
# 直接下载 pin v8.30.1 二进制跑 detect,门禁化 = 发现凭据 exit 非 0 失败。
gitleaks-secret-scan:
name: Gitleaks Secret Scan (门禁化)
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0

- name: Download gitleaks (pinned v8.30.1)
run: |
set -euo pipefail
GL_VERSION="8.30.1"
curl -sfL "https://github.com/gitleaks/gitleaks/releases/download/v${GL_VERSION}/gitleaks_${GL_VERSION}_linux_x64.tar.gz" -o /tmp/gitleaks.tar.gz
tar -xzf /tmp/gitleaks.tar.gz -C /tmp

- name: Gitleaks detect (发现真实凭据即失败)
run: |
set -euo pipefail
/tmp/gitleaks detect --source . --config .gitleaks.toml --redact --no-banner
95 changes: 94 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,9 @@ jobs:
if: ${{ !cancelled() && needs.rust-impact.outputs.rust_required != 'false' }}
runs-on: ${{ matrix.os }}
timeout-minutes: 15
env:
# Same warning gate as rust-build-check.
RUSTFLAGS: "-D warnings"
strategy:
fail-fast: false
matrix:
Expand Down Expand Up @@ -167,16 +170,57 @@ jobs:
cargo test --locked -p terminal-core background_only_binding_is_owned_by_the_session -- --test-threads=1

# ── Rust: build check ─────────────────────────────────────────────
# Cargo-deny gate: advisories + licenses + sources (+ bans at warn level).
# Kept on Linux only - the license/source graph is OS-independent, so a
# single check covers the whole workspace without triplicating the run.
cargo-deny:
name: Cargo Deny (advisories + licenses)
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v5

- uses: dtolnay/rust-toolchain@stable

- uses: swatinem/rust-cache@v2
with:
shared-key: "cargo-deny-v1"
cache-bin: false

- name: Install cargo-deny
run: cargo install cargo-deny --locked --version 0.20.2

- name: Deny advisories
run: cargo deny check advisories

- name: Deny licenses
# -A no-license-field silences the diagnostic for crates that declare
# `license-file` instead of the SPDX `license` expression field
# (display-info 0.4.8 via screenshots); the actual LICENSE text is
# still parsed and gated by the allow list below.
run: cargo deny check licenses -A no-license-field

- name: Deny sources
run: cargo deny check sources

rust-build-check:
name: Rust Build Check (${{ matrix.os }})
needs: rust-impact
if: ${{ !cancelled() && needs.rust-impact.outputs.rust_required != 'false' }}
runs-on: ${{ matrix.os }}
# Rust workspace check + 6 test groups across 3 OS; generous but bounded
# so a wedged dependency/network cannot burn the full 6h default.
timeout-minutes: 60
env:
# Keep the workspace check plus desktop test profiles within hosted-runner disk limits.
CARGO_INCREMENTAL: "0"
CARGO_PROFILE_DEV_DEBUG: "0"
CARGO_PROFILE_TEST_DEBUG: "0"
# Warning gate: any rustc warning (dead code, unused imports, ...) fails
# the build, so a warning regression cannot re-enter silently. The
# linker_messages lint intentionally ignores -D warnings (see workspace
# lints), so MSVC link noise stays non-fatal.
RUSTFLAGS: "-D warnings"
strategy:
fail-fast: false
matrix:
Expand Down Expand Up @@ -235,6 +279,50 @@ jobs:
save-if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
cache-on-failure: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}

# sherpa-onnx-sys downloads its native static libraries from GitHub
# Releases at build time. Hosted runners intermittently fail that
# download (network/rate limits), so pre-fetch and extract the archive
# here, then point SHERPA_ONNX_LIB_DIR at the extracted lib directory.
# The build script uses that variable directly without any cache/rerun
# logic, so both `cargo check` and `cargo test` link against the same
# pre-fetched libraries. Windows is skipped: its archive is already
# cached in the rust-cache path and the previous failures were Linux and
# macOS only.
- name: Pre-download sherpa-onnx native libraries
if: runner.os != 'Windows'
shell: bash
env:
SHERPA_VERSION: "1.13.4"
run: |
set -euo pipefail
case "${{ runner.os }}" in
Linux)
archive="sherpa-onnx-v${SHERPA_VERSION}-linux-x64-static-lib.tar.bz2"
;;
macOS)
archive="sherpa-onnx-v${SHERPA_VERSION}-osx-arm64-static-lib.tar.bz2"
;;
*)
exit 0
;;
esac
mkdir -p "$RUNNER_TEMP/sherpa-onnx-libs"
archive_path="$RUNNER_TEMP/sherpa-onnx-libs/$archive"
if [ ! -f "$archive_path" ]; then
curl -fL --retry 5 --retry-all-errors \
"https://github.com/k2-fsa/sherpa-onnx/releases/download/v${SHERPA_VERSION}/${archive}" \
-o "$archive_path"
fi
lib_dir="$RUNNER_TEMP/sherpa-onnx-libs/lib"
if [ ! -d "$lib_dir" ]; then
tar -xjf "$archive_path" -C "$RUNNER_TEMP/sherpa-onnx-libs"
# The archive extracts to a versioned directory; its lib/ is the
# native library directory the build script expects.
lib_dir="$(find "$RUNNER_TEMP/sherpa-onnx-libs" -maxdepth 2 -type d -name lib | head -n 1)"
fi
test -n "$lib_dir" && test -f "$lib_dir/libsherpa-onnx-c-api.a"
echo "SHERPA_ONNX_LIB_DIR=$lib_dir" >> "$GITHUB_ENV"

# rust-cache prunes the workspace target directory before saving it, so
# native libraries stored under target need an independent cache lifecycle.
- name: Restore Sherpa native libraries
Expand Down Expand Up @@ -406,6 +494,9 @@ jobs:
frontend-build:
name: Frontend Build
runs-on: ubuntu-latest
# Full web-ui test + build + i18n audits; bounded so a stuck install or
# test cannot burn the full 6h default.
timeout-minutes: 40
env:
NODE_OPTIONS: --max-old-space-size=6144
steps:
Expand Down Expand Up @@ -466,7 +557,9 @@ jobs:
run: pnpm run verify:webkit-compatibility:test

- name: Lint web UI
run: pnpm run lint:web
# Warning gate: any eslint warning (not just errors) fails the job so
# lint regressions cannot re-enter silently.
run: pnpm --dir src/web-ui exec eslint . --max-warnings=0

- name: Run web UI tests
run: pnpm --dir src/web-ui run test:run
Expand Down
25 changes: 16 additions & 9 deletions .github/workflows/desktop-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ jobs:
prepare:
name: Prepare
runs-on: ubuntu-latest
timeout-minutes: 10
outputs:
version: ${{ steps.meta.outputs.version }}
release_tag: ${{ steps.meta.outputs.release_tag }}
Expand Down Expand Up @@ -140,11 +141,15 @@ jobs:
runs-on: ${{ matrix.platform.os }}
needs: prepare
if: needs.prepare.outputs.relay_image_only != 'true'
# Release packaging: full release-profile build + bundles per platform.
# 6h default is far too long for a wedged job; cap it at 120m.
timeout-minutes: 120
env:
NODE_OPTIONS: --max-old-space-size=6144
BITFUN_ENABLE_UPDATER_ARTIFACTS: ${{ needs.prepare.outputs.upload_to_release }}
BITFUN_RELEASE_CHANNEL: ${{ needs.prepare.outputs.release_channel }}
TAURI_UPDATER_ENDPOINT: ${{ github.repository != 'GCWing/BitFun' && needs.prepare.outputs.release_channel == 'beta' && format('https://github.com/{0}/releases/download/channel-beta/latest.json', github.repository) || '' }}
# 本侧定制:stable 直链 latest.json(updater 常规路径)
TAURI_UPDATER_ENDPOINT: ${{ github.repository != 'GCWing/BitFun' && needs.prepare.outputs.release_channel == 'beta' && format('https://github.com/{0}/releases/download/channel-beta/latest.json', github.repository) || format('https://github.com/{0}/releases/latest/download/latest.json', github.repository) }}
TAURI_UPDATER_FALLBACK_ENDPOINT: ${{ github.repository != 'GCWing/BitFun' && needs.prepare.outputs.release_channel == 'beta' && format('https://github.com/{0}/releases/download/channel-beta/latest.json', github.repository) || '' }}
TAURI_UPDATER_PUBKEY: ${{ secrets.TAURI_UPDATER_PUBKEY }}
# Same trust root, compiled into the Desktop binary so one-click relay
Expand Down Expand Up @@ -346,6 +351,7 @@ jobs:
publish-relay-image:
name: Publish Relay Server Image
needs: [prepare, linux-binaries]
timeout-minutes: 60
if: >-
always() &&
((needs.prepare.outputs.upload_to_release == 'true' &&
Expand All @@ -358,7 +364,7 @@ jobs:
contents: write
packages: write
env:
IMAGE: ghcr.io/gcwing/bitfun-relay-server
IMAGE: ghcr.io/${{ github.repository_owner }}/bitfun-relay-server

steps:
- name: Checkout
Expand All @@ -384,7 +390,7 @@ jobs:
set -euo pipefail
mkdir -p linux-release-assets
gh release download "${RELEASE_TAG}" \
--repo GCWing/BitFun \
--repo "${{ github.repository }}" \
--dir linux-release-assets \
--pattern 'bitfun-relay-server-*.tar.gz' \
--pattern 'bitfun-relay-server-*.tar.gz.sha256'
Expand Down Expand Up @@ -432,7 +438,7 @@ jobs:
if [[ "${IMAGE_ONLY}" == "true" ]]; then
# Backfilling an older release must not roll the floating tag
# backwards. GitHub's latest endpoint excludes prereleases.
latest_release="$(gh api repos/GCWing/BitFun/releases/latest --jq .tag_name)"
latest_release="$(gh api repos/${{ github.repository }}/releases/latest --jq .tag_name)"
if [[ "${RELEASE_TAG}" == "${latest_release}" ]]; then
echo "${IMAGE}:latest"
fi
Expand Down Expand Up @@ -538,6 +544,7 @@ jobs:
upload-release-assets:
name: Upload Release Assets
needs: [prepare, package, linux-binaries, publish-relay-image]
timeout-minutes: 30
if: >-
always() &&
needs.prepare.outputs.upload_to_release == 'true' &&
Expand Down Expand Up @@ -637,7 +644,7 @@ jobs:
--assets-dir linux-release-assets \
--version "${{ needs.prepare.outputs.version }}" \
--tag "${{ needs.prepare.outputs.release_tag }}" \
--repo "GCWing/BitFun" \
--repo "${{ github.repository }}" \
--out linux-release-assets/linux-binaries.json

# The Tauri bundler signs the five updater artifacts during `tauri build`,
Expand Down Expand Up @@ -748,7 +755,7 @@ jobs:
if: needs.prepare.outputs.release_channel == 'stable'
run: |
curl -fsSL --retry 5 --retry-delay 3 \
"https://github.com/GCWing/BitFun/releases/download/${{ needs.prepare.outputs.release_tag }}/linux-binaries.json" \
"https://github.com/${{ github.repository }}/releases/download/${{ needs.prepare.outputs.release_tag }}/linux-binaries.json" \
-o linux-binaries.published.json
test "$(jq -r '.version' linux-binaries.published.json)" = "${{ needs.prepare.outputs.version }}"
while IFS= read -r cli_url; do
Expand All @@ -760,13 +767,13 @@ jobs:
if: needs.prepare.outputs.release_channel == 'stable'
run: |
curl -fsSL --retry 5 --retry-delay 3 \
"https://github.com/GCWing/BitFun/releases/download/${{ needs.prepare.outputs.release_tag }}/relay-image.json" \
"https://github.com/${{ github.repository }}/releases/download/${{ needs.prepare.outputs.release_tag }}/relay-image.json" \
-o relay-image.published.json
test "$(jq -r '.tag' relay-image.published.json)" = "${{ needs.prepare.outputs.release_tag }}"
test "$(jq -r '.image' relay-image.published.json)" = "ghcr.io/gcwing/bitfun-relay-server"
test "$(jq -r '.image' relay-image.published.json)" = "ghcr.io/${{ github.repository_owner }}/bitfun-relay-server"
jq -e '.digest | test("^sha256:[0-9a-f]{64}$")' relay-image.published.json >/dev/null
curl -fsSL --retry 5 --retry-delay 3 \
"https://github.com/GCWing/BitFun/releases/download/${{ needs.prepare.outputs.release_tag }}/relay-image.json.sig" \
"https://github.com/${{ github.repository }}/releases/download/${{ needs.prepare.outputs.release_tag }}/relay-image.json.sig" \
-o /dev/null

- name: Resolve beta channel promotion
Expand Down
Loading
Loading