Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
148 commits
Select commit Hold shift + click to select a range
ae12a76
taiji fork customizations (squashed, single-commit delivery form)
1688mengdie Aug 10, 2026
b1b5f0f
fix(ci): core boundary steering ownership + legion appearance part
1688mengdie Aug 10, 2026
a73040d
Merge upstream/main (CI: appearance audit dep-dir skip + Windows inst…
1688mengdie Aug 10, 2026
6ad39c2
fix(i18n): remove CJK from config component comments
1688mengdie Aug 10, 2026
144b236
fix(theme): replace undefined appearance var with standard token and …
1688mengdie Aug 10, 2026
54e4fcd
fix(engine): remove dead finalize_rounds_completed counter
1688mengdie Aug 10, 2026
7cc1a68
fix(core): remove dead code left by threshold config-parameterization…
1688mengdie Aug 10, 2026
807aaa7
fix(security): SessionHistory authorization check
1688mengdie Aug 10, 2026
d3cceb3
fix(config): document ai.legion_* top-level keys
1688mengdie Aug 10, 2026
14bc925
fix(web-ui): add subagent dispatch fields to ThresholdsConfig
1688mengdie Aug 10, 2026
573054c
fix(security): explicit allowlists for Executor/Reviewer templates an…
1688mengdie Aug 10, 2026
28b9849
fix(reliability): quarantine corrupt shame-wall registry before fallback
1688mengdie Aug 10, 2026
0e20d9d
fix(perf): debounce turn-context snapshot writes (PERF-01)
1688mengdie Aug 10, 2026
b5939d7
fix(cli): inject ai.knowledge_base_root into BITFUN_KNOWLEDGE_BASE_RO…
1688mengdie Aug 10, 2026
3d98408
fix(persistence): publish session transcripts atomically (UX-P1-7)
1688mengdie Aug 10, 2026
9f2c243
fix(legion): serialize frequency check/reserve and use workspace-wide…
1688mengdie Aug 10, 2026
dfa0c96
fix(web-ui): knowledge base root field and legionRole display-only an…
1688mengdie Aug 10, 2026
d8698a0
fix(token): dedup UserSteering by steering-id metadata (TOKEN-01)
1688mengdie Aug 10, 2026
57ed0bb
fix(web-ui): complete thresholds render + legion a11y and scene contr…
1688mengdie Aug 10, 2026
0eddea2
fix(security): P2 defense-in-depth batch (S1/S2/S4-S8 + UX-P2-2/3/4)
1688mengdie Aug 10, 2026
bca0dc7
fix(perf): event-queue lock-free stats (PERF-02) + User Context cache…
1688mengdie Aug 10, 2026
9fd4dd7
Merge remote-tracking branch 'upstream/main'
1688mengdie Aug 10, 2026
9ef2d57
fix(merge): map customized plan/workspace/acp tools to feature owners…
1688mengdie Aug 10, 2026
a945ff4
fix(web-ui): move non-component export out of ChatInput to satisfy re…
1688mengdie Aug 10, 2026
b1f3145
fix(ci): unblock frontend build - compat get_effective_session_path, …
1688mengdie Aug 10, 2026
e7a095c
fix(session): resolve cross-workspace session binding via projects-ro…
1688mengdie Aug 10, 2026
0294d40
fix(rust): gate PortResult import under ssh-remote feature to clear u…
1688mengdie Aug 10, 2026
6c517d7
Merge remote-tracking branch 'upstream/main'
1688mengdie Aug 11, 2026
b8d6d6e
fix: 注入开关/泄露链/steering 修复 + P2/Platform-P1 批量修复
1688mengdie Aug 11, 2026
9b67ab9
Merge remote-tracking branch 'upstream/main' (20260811-02: settings …
1688mengdie Aug 11, 2026
91f80e2
fix(appearance): drop undefined radiusBase/spacing4 from prompt snaps…
Aug 11, 2026
960d2a6
feat(tools): add DeepReview tool - background CodeReview dispatch fro…
Aug 11, 2026
a51753d
feat: Session与Worktree双向联动(create/delete/rename)
Aug 11, 2026
529763b
Merge remote-tracking branch 'upstream/main' (20260811-03: cron hand…
Aug 11, 2026
f9cb5e6
fix: 补 SessionControlInput.worktree 测试构造点(base_input 漏 worktree: None…
Aug 11, 2026
2d25c15
Merge remote-tracking branch 'upstream/main' (20260811-04: prune dea…
Aug 11, 2026
9d3f12f
chore: 固化本地 CI 全量复刻脚本 local-replica.ps1(本地预演对齐远程 CI)
Aug 11, 2026
e00f4d0
fix(clippy): 工具链升级 1.97.1 硬 error 全量修复
Aug 11, 2026
c9bd981
fix(deps): 升级 ratatui 0.30 修复 Cargo Deny RUSTSEC-2026-0253(lru 0.12.5…
Aug 11, 2026
e60d21b
fix: Windows 本地测试欠账修复搬移 taiji
Aug 11, 2026
e207d62
Merge remote-tracking branch 'upstream/main' (20260811-05: computer-…
Aug 11, 2026
56cfb34
fix: CLI TUI 测试适配 ratatui 0.30
Aug 11, 2026
f4eb603
feat: 群聊功能实现(Wave 1-7 契约/存储/工具/路由/API/前端 + 修复轮 + 审查闭环)
Aug 11, 2026
cb92cd5
fix: CI 治理门禁修复(i18n key + appearance 注册 + CJK 清理)
Aug 11, 2026
5610fea
chore: 全仓 rustfmt 格式化轮(历史 688 文件清理)
Aug 11, 2026
ad25af5
feat: 遗留三项任务 A/B — 群聊完整 ChatInput 复用 + workspace_path 集中持有
Aug 11, 2026
b7be1d7
fix: 群聊 P0x3 大修复轮(command 薄封装 + 回执闭环 + MainNav 接线 + 错误码贯通)
Aug 11, 2026
70241a9
fix: worktree 会话接入左侧工作区列表(AB 双修)
Aug 11, 2026
05ec262
merge: 遗留三项 A/B — 群聊完整 ChatInput 复用 + workspace_path 集中持有(ad25af59f)
Aug 12, 2026
821c74a
merge: 群聊 P0x3 大修复轮 — command 薄封装 + 回执闭环 + MainNav 接线 + 错误码贯通(b7be1d7f0)
Aug 12, 2026
a358668
Merge remote-tracking branch 'origin/main' into task/wt-bugfix
Aug 12, 2026
8094cc0
fix: 主题 color-audit 合约修复(GroupChatPane 未注册 danger-500 token + NavPane…
Aug 12, 2026
c4ddc28
Merge remote-tracking branch 'upstream/main' (20260812-01: computer-…
Aug 12, 2026
46332e0
fix: 群聊 12 命令声明 remote workspace policy(CI 修复)
Aug 12, 2026
16709d8
Merge remote-tracking branch 'upstream/main' (20260812-02: perf(buil…
Aug 12, 2026
9510fb9
fix: 统一修复轮 A+B(appearance 注册补齐 3 项 + SettingsScene 测试时序鲁棒性)
Aug 12, 2026
c352763
fix(core): gate RBAC integration tests behind agent-runtime feature
Aug 12, 2026
aa98261
style(core/desktop): rustfmt group-chat and remote-policy files
Aug 12, 2026
418b045
fix: 群聊创建 P0 修复(方案 A 前端 camelCase 参数对齐 + 空值防护 + UI 样式)
Aug 12, 2026
c9f35da
fix: 群聊创建空值防护错误消息改英文(i18n CJK audit budget=0 合规)
Aug 12, 2026
b975c24
docs: PR 版全软件审计收编文档(pr-docs/ 8 份:侦察×3 + 图谱 + 审计 + 说明书×3)
Aug 12, 2026
821f3b6
feat: F-1 GroupChatPort trait 补 impl + 契约测试(P0 悬空修复)
Aug 12, 2026
a98400c
fix: F-2 ingest_reply 双实现行为分叉收敛(router 版为权威)
Aug 12, 2026
0200383
fix(server): F-7 bootstrap 惰性启动——HTTP shell dormant,--with-runtime 显式激活
Aug 12, 2026
60a1126
fix(F-3): 12 group-chat 命令 remote_connection_id 真实传递(消除硬编码 None)
Aug 12, 2026
13edf28
docs: G 组遗留三项核对登记报告(G-1 ChatInput 复用 / G-2 错误结构化 code / G-3 workspace…
Aug 12, 2026
e757f3c
Merge remote-tracking branch 'upstream/main'
Aug 12, 2026
c331973
fix(agent-runtime): align scheduler tests with widened RoundInjection…
Aug 12, 2026
b03ede3
Merge remote-tracking branch 'upstream/main'
Aug 12, 2026
4d8ee45
fix: F-5 User Context 改为真实用户轮才注入/计数(改法 A)
Aug 12, 2026
d35402a
perf: Runtime Facts 拼接进真实用户消息轮,删除每轮独立提示(主人实测 token 优化)
Aug 12, 2026
67f993f
refactor(E-1): 12 group-chat 命令扁平参数 → 嵌套 request DTO(消除 camelCase 分叉)
Aug 12, 2026
dd8692c
docs(F-6): 群聊测试标准补充 + 测试标准-群聊18域(F-6 测试标准落地)
Aug 12, 2026
3919bdb
Merge branch 'task/e1-dto-refactor'
Aug 12, 2026
8e6b4b9
Merge branch 'task/f3-remote-connection'
Aug 12, 2026
31bf4f0
Merge branch 'task/f7-bootstrap-lazy'
Aug 12, 2026
7c6d36f
Merge branch 'task-f6-groupchat-docs'
Aug 12, 2026
f64cdd2
Merge branch 'task/g-legacy-cleanup2'
Aug 12, 2026
eb647ad
Merge remote-tracking branch 'upstream/main'
Aug 12, 2026
9acb73e
fix: core boundary local-storage owner 规则补 bitfun-runtime-ports(上游同步后…
Aug 12, 2026
8015f2a
Merge origin/main (F group unified push) into upstream-sync branch
Aug 12, 2026
6791668
fix: 幽灵节点——瞬态会话回收补发 SessionDeleted 事件 + delete_session_tree 容错
Aug 12, 2026
c4aa0b1
test: 幽灵节点验证——transient 回收 emit SessionDeleted 断言 + 已回收根手动删除行为实证
Aug 12, 2026
e35790e
fix: 幽灵节点 B 兜底——delete_session_tree 对已回收/未知 root 幂等返回空列表
Aug 12, 2026
9660734
fix(web-ui): route ai-thresholds settings tab (blank page)
Aug 12, 2026
ab7ae6d
perf(E-4): 群聊性能四项 — 轮转cursor条件写 + cursor语义统一 + catalog单写 + 列表虚拟化
Aug 12, 2026
dd41091
fix(web-ui): E-3 GroupChatPane ChatInput 复用接线(slash/外挂命令走 registratio…
Aug 12, 2026
8673df2
merge: sync upstream e28a03327 (b0d03be21 perf(build)! breaking + 791…
Aug 12, 2026
54bb2f3
feat(R-AD-00): 移植本地定制到上游重构后 runtime-ports 切片形态
Aug 12, 2026
10f6815
fix(R-AD-00): 对齐本地 spawn_child 深度递归语义 + all-features 测试构造点补字段
Aug 12, 2026
927662d
fix(R-AD-02): 前端 groupChatStore loadMessages cursor 签名 string 改 numbe…
Aug 12, 2026
9017021
feat(R-AD-04): 本地定制符号清单边界规则 — 34 保持符号注册 + check-core-boundaries 适配 + …
Aug 12, 2026
8b38ef9
fix(R-AD-03): 移除 Warden 全套(POKE/SELF_BOOT/RBAC 常量/模块/消费链)
Aug 12, 2026
17c0909
Merge branch 'task/rad03-warden-removal'
Aug 12, 2026
2749113
fix(tool-contracts): 移除测试 import 中无 cfg 门控的 validate_mcp_tool_bridge_…
Aug 12, 2026
f260433
Merge branch 'task/rad04-boundary-symbols'
Aug 12, 2026
962c7a6
fix(core-boundaries): 对齐 R-AD-00 本地定制依赖边界(acp-client/acp-bridge/local…
Aug 12, 2026
3be02e8
Merge branch 'task/fix-boundaries'
Aug 12, 2026
dd989b9
fix(core-boundaries): 合流后修复 — 移除 rad03 遗留 rand 规则 + checker 模块化收敛至 12…
Aug 12, 2026
46d64ea
fix(web-ui): R-AD-08 CI 修复 — GroupChatsSection items part 补 DOM 契约 + …
Aug 12, 2026
adca1b5
Merge branch 'task/fix-tool-contracts' — R-AD-09 补合流 tool-contracts 修…
Aug 12, 2026
deb59c7
fix(agentic): harden AgentRegistry lock spin against heavy parallel c…
Aug 12, 2026
1c66b52
test(session): harden persist_session_lineage against concurrent pers…
Aug 12, 2026
1b3db1f
debug(session): add diagnostic assertion for CI-only metadata flake
Aug 12, 2026
626f6e2
debug(session): check metadata at resolved storage path before persist
Aug 12, 2026
dd18211
feat(RAD06): taiji-quant 全量注册 + quant 工具族(quant_backtest/quote/strate…
Aug 12, 2026
2ea66b1
docs(RAD06): 落盘 rad06 Phase 1 量化工具注册与接线验证报告(编码/编译/测试/真实链路四证)
Aug 12, 2026
d335128
feat(W1-P0): quant_backtest 支持 pipeline 参数双层透传(P0-c 回归兼容)+ 完整回测真实链路验证…
Aug 12, 2026
c4f8a1a
debug(session): dump full persistence state when persist_session_line…
Aug 12, 2026
82430cb
debug(persistence): log exact storage path on update_session_metadata…
Aug 12, 2026
b0dcb1c
feat(W1-1): pattern 工具族 — quant_pattern_chan/quant_pattern_dtw(9527 通道)
Aug 13, 2026
c0c078b
revert(session): remove CI-only diagnostic instrumentation
Aug 13, 2026
1f25a3a
feat(W1-3): quant_sentiment 工具 — sentiment.analyze/sentiment.fgi(9527…
Aug 13, 2026
c418b50
docs(RAD06): 补充 CI 验证结果(rad06 相关测试全绿,唯一失败为 pre-existing session linea…
Aug 13, 2026
a2268fe
feat(W1-2): quant_anomaly 工具 — abnormal.score(9527 通道)
Aug 13, 2026
fe69d16
debug(persistence): eprintln exact probed paths on update_session_met…
Aug 13, 2026
2390423
feat(W1-5): alert 工具族 — quant_alert(9527 通道,dry_run 默认 true)+ 执行报告落盘
Aug 13, 2026
fc67b02
docs(W1-4): strategen 全链闭环执行报告 — quant_strategen(9527 通道,六处注册已随行落库)
Aug 13, 2026
d814797
feat(W2): gbrain 工具族 + W2-1/2/4 合流 — gbrain(9527 通道,结构化 RAG 知识库 6 act…
Aug 13, 2026
82371cb
docs(W2): content/publisher/gbrain/knowledge_graph 四批执行报告落盘
Aug 13, 2026
c5e5082
feat(R-AD-08): 孤儿会话 UX 修复 — 前端 orphaned 标记 + 独立折叠区 + OrphanKind 透传 + …
Aug 13, 2026
87371a2
merge: sync upstream/main fdbb53e8b — RAD10 flowchat 渲染层重构 + beta pac…
Aug 13, 2026
33107a3
fix(CI): 注册 sessions-section 孤儿会话折叠区 Appearance token(orphanSection p…
Aug 13, 2026
91c568d
fix(CI): 全局开启 React act() 环境消除 1151 条 act() warning
Aug 13, 2026
10bdd55
fix(CI): 清除 39 条真实 act() 未包裹警告(GroupChatPane/GroupChatsSection/AgentC…
Aug 13, 2026
4a3bef7
test(session): harden the whole persisted-session test family against…
Aug 13, 2026
8082098
fix(CI): CLI Tests + Cargo Deny warning 清零
Aug 13, 2026
114106b
merge: ci-fix-cli — CLI Tests + Cargo Deny warning 清零(6+3 条 Rust warn…
Aug 13, 2026
05f9d71
ci: re-trigger CI on 114106bb (previous run cancelled by superseding …
Aug 13, 2026
11cb225
fix(E-5): 根治 session lineage flaky(TestWorkspace 改 tempfile::tempdir …
Aug 13, 2026
9f1c3be
fix(E5b): CLI export_dialog flaky - 对齐 startup prompt 断言 30s 超时(唯一暴露核…
Aug 13, 2026
42b55ec
fix(CI): clear Rust Build Check dead-code + unused warnings (bitfun-s…
Aug 13, 2026
af6c0e7
fix(server): 删除重构遗留的死代码 dispatch 路由(8 warning 清零)
Aug 13, 2026
13bcd6d
fix(desktop): precise cfg gate for webview_recovery decision engine
Aug 13, 2026
14bf41e
fix(desktop): restore local_download_name_key import in ssh_api tests
Aug 13, 2026
27e14a8
fix(web-ui): drop contract-test read of deleted server routes/dispatc…
Aug 13, 2026
9544b75
merge: upstream/main into main (9848f7a95, macOS signing + markdown/w…
Aug 13, 2026
499f41b
fix(CI): 固化零 warning 门禁 -D warnings + eslint --max-warnings=0
Aug 13, 2026
75f4bb9
merge: upstream/main into main (a4d944e5b, harmonyos conversation fix…
Aug 13, 2026
2847014
fix(CI): 门禁首轮红修复 - cli test import + installer unsafe block
Aug 13, 2026
f63f0b6
fix(CI): gate webview_recovery imports behind windows/test cfg
Aug 13, 2026
ff8dc4a
merge: upstream/main into main (59e06a0e5, dmg installer branding + w…
Aug 13, 2026
cdb49e8
fix(CI): plan-todo binding tests must write to the resolved backend p…
Aug 13, 2026
4eec1f4
merge: upstream/main into main (9b05dd0e0, centralize default feature…
Aug 13, 2026
f4e2e49
fix(CI): move get_path_manager_arc into test module to clear unused-i…
Aug 13, 2026
5b99994
fix(CI): gate local_download_name_key test import to platforms that u…
Aug 13, 2026
2ba9a7e
fix(P0): group chat auto-creates Claw session for missing member
Aug 13, 2026
8d810b9
feat(UI): unify LegionCard style with CoreAgentCard surface
Aug 13, 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
  •  
  •  
  •  
95 changes: 94 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,9 @@ jobs:
name: CLI Tests (${{ matrix.os }})
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 @@ -138,14 +141,55 @@ 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 }})
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 @@ -204,6 +248,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 @@ -282,6 +370,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 @@ -339,7 +430,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
37 changes: 37 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,44 @@ dist-ssr
# Build outputs - Rust/Tauri
target/
**/target/
.target/
/.targets/
# Local evidence working dir (fully ignored; intermediate artifacts go to
# outside the repo)
target2/
# The deployable Rust services use the workspace lockfile for reproducible
# container builds.
!Cargo.lock

# Work artifacts that must never enter the repo (S-37/S-56 hygiene):
# recon/fix/verify/report/sediment intermediates, sync records, ws-check data.
/docs/plans/RECON-*
/docs/plans/FIX-*
/docs/plans/VERIFY-*
/docs/plans/REPORT-*
/docs/plans/SEDIMENT-*
/docs/plans/sync-record-*
/docs/plans/recon-*
/docs/plans/fix-*
/docs/plans/doc-governance-report-*
/docs/plans/pr-final-*
/docs/plans/ws-check-*
/docs/plans/del-*.json
/docs/plans/侦查-*
/docs/plans/核对-*
/docs/plans/核查-*
/docs/plans/*.log
/docs/plans/*.json
/docs/plans/*.cjs

# Local customization docs stay out of the repo (S-56 sanitize)

/docs/功能文档/
/交接文档-现状与决议.md
/fix-dualfeed-停止回报.md
/docs/plans/review-upstream-sync-*
/docs/features/agent-hot-reload.md

# Monaco Editor - copied from node_modules
public/monaco-editor/
src/web-ui/public/monaco-editor/
Expand Down Expand Up @@ -91,5 +124,9 @@ external/
/.bitfun/search/flashgrep-index/
.agents/
/.flashgrep-index-engine/
/src/apps/desktop/.bitfun/search/flashgrep-index/
/target/debug/.bitfun/search/flashgrep-index/

.design/
__pycache__/
*.pyc
4 changes: 3 additions & 1 deletion BitFun-Installer/src-tauri/src/installer/commands.rs
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,9 @@ unsafe fn windows_sys_get_disk_free_space(
lpTotalNumberOfFreeBytes: *mut u64,
) -> i32;
}
GetDiskFreeSpaceExW(path, free_bytes_available, total_bytes, total_free_bytes)
// SAFETY: callers guarantee the pointers reference valid kernel32
// arguments; the foreign function only writes through the out-pointers.
unsafe { GetDiskFreeSpaceExW(path, free_bytes_available, total_bytes, total_free_bytes) }
}

#[tauri::command]
Expand Down
Loading
Loading