Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
7679750
docs(plugins): add 3D scene menu plugin design spec
NoWint Jun 20, 2026
2eb33e5
docs: add 3D scene menu plugin implementation plan
NoWint Jun 20, 2026
1e2bc7a
feat(plugins): scaffold scene-menu plugin and register as builtin
NoWint Jun 20, 2026
08ed64f
feat(scene-menu): add useOverlayVisibility hook (hash + auth state ma…
NoWint Jun 20, 2026
2c88324
feat(scene-menu): add useCameraDolly with clamped camera math (breath…
NoWint Jun 20, 2026
55e29b7
feat(scene-menu): add useLaunchLastInstance hook (one-click launch la…
NoWint Jun 20, 2026
fe3f576
feat(scene-menu): add SceneRenderer with 3DGS + WebGL fallback
NoWint Jun 20, 2026
b4cf784
feat(scene-menu): add MenuLayer with 4 holographic panels + keyboard nav
NoWint Jun 20, 2026
45863dd
feat(scene-menu): add SceneOverlay composing visibility/camera/render…
NoWint Jun 20, 2026
5a736a8
feat(scene-menu): implement activate/deactivate lifecycle with create…
NoWint Jun 20, 2026
326c214
feat(scene-menu): add overlay styles (clip-path panels + neon variant…
NoWint Jun 20, 2026
71a534d
docs(scene-menu): document offline SHARP .ply + fallback asset genera…
NoWint Jun 20, 2026
6627322
fix(scene-menu): remove unused import + add gaussian-splats-3d module…
NoWint Jun 20, 2026
8db70d6
fix(scene-menu): fix rootElement prop name + stop detectWebGL context…
NoWint Jun 20, 2026
306777e
feat(scene-menu): improve 3DGS render quality (AA + float sort + SH2 …
NoWint Jun 20, 2026
6ff43f4
feat(scene-menu): use high-quality 3DGS model (1.18M Gaussians)
NoWint Jun 20, 2026
20f85ae
feat(scene-menu): enhance camera dolly effects
NoWint Jun 20, 2026
bcb0292
fix(scene-menu): fill 3DGS gaps with dark bg + move camera closer (z=…
NoWint Jun 20, 2026
c06f484
feat(scene-menu): menu panels follow camera dolly + fix transition ti…
NoWint Jun 20, 2026
9b94d9b
feat(scene-menu): dramatic AAA-style camera transitions on menu click
NoWint Jun 21, 2026
8890909
fix(scene-menu): fix invoke command name + add accounts:read permission
NoWint Jun 21, 2026
0070990
fix(scene-menu): fix transition not advancing — stabilize onTransitio…
NoWint Jun 21, 2026
1feef48
fix(scene-menu): remove breathing drift — keep camera static by default
NoWint Jun 21, 2026
95df4a9
fix(scene-menu): hold close-up after transition + fix direction per b…
NoWint Jun 21, 2026
f728776
fix(scene-menu): fix transition direction — move toward button, not away
NoWint Jun 21, 2026
737721e
fix(scene-menu): simplify to z-only push + remove parallax + fill screen
NoWint Jun 21, 2026
2d0f107
feat(scene-menu): 3A-style cinematic transition with rotation feel
NoWint Jun 21, 2026
68f7743
fix(scene-menu): aim camera at button + deepen 3D button depth
NoWint Jun 21, 2026
7a6acf3
fix(scene-menu): push buttons further + add direction to launch button
NoWint Jun 21, 2026
8955505
feat(web): scaffold web/ project with Vite + React + TS
NoWint Jun 21, 2026
a7017c0
feat(web): add design tokens, global styles, assets, hooks with tests
NoWint Jun 21, 2026
c6eeaf3
feat(web): add Nav, ScrollProgress, SectionDots, Footer components
NoWint Jun 21, 2026
d920fce
feat(web): add Hero, Manifesto, DesignLanguage, Performance sections
NoWint Jun 21, 2026
55dfe50
feat(web): enhance animation density to medium (4-5 techniques per se…
NoWint Jun 21, 2026
1563baf
feat(web): add ContentPlatform, Architecture, CrossPlatform, Download…
NoWint Jun 21, 2026
fa808d1
feat(web): assemble App with all 8 sections and navigation
NoWint Jun 21, 2026
95e7133
ci: add deploy-web workflow for GitHub Pages + remove legacy folders
NoWint Jun 21, 2026
f684a41
fix(web): add CSS module type declarations and vitest config types
NoWint Jun 21, 2026
0638fb6
feat:再也不敢不提交git了
NoWint Jun 21, 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
  •  
  •  
  •  
64 changes: 64 additions & 0 deletions .github/workflows/deploy-web.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Deploy Web to GitHub Pages

on:
push:
branches: [main]
paths:
- 'web/**'
- '.github/workflows/deploy-web.yml'
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: 'pages'
cancel-in-progress: true

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
cache-dependency-path: web/pnpm-lock.yaml

- name: Install dependencies
run: pnpm install --frozen-lockfile --ignore-workspace
working-directory: web

- name: Build
run: pnpm build
working-directory: web

- name: Setup Pages
uses: actions/configure-pages@v5

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: web/dist

deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
139 changes: 131 additions & 8 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ env:

jobs:
# =========================================================================
# Prepare: calculate next 0.0.N version number
# Prepare: calculate next 1.0.N version number
# =========================================================================
prepare:
name: Prepare
Expand All @@ -28,15 +28,15 @@ jobs:
- id: calc
name: Calculate next version
run: |
LATEST=$(git tag -l 'v0.0.[0-9]*' | sort -V | tail -1)
LATEST=$(git tag -l 'v1.0.[0-9]*' | sort -V | tail -1)
if [ -z "$LATEST" ]; then
PATCH=1
PATCH=0
else
PATCH=$(echo "$LATEST" | sed 's/v0\.0\.//')
PATCH=$(echo "$LATEST" | sed 's/v1\.0\.//')
PATCH=$((PATCH + 1))
fi
echo "NEW_VERSION=0.0.$PATCH" >> $GITHUB_OUTPUT
echo "Next version: 0.0.$PATCH"
echo "NEW_VERSION=1.0.$PATCH" >> $GITHUB_OUTPUT
echo "Next version: 1.0.$PATCH"

# =========================================================================
# Build macOS (Universal: Intel + Apple Silicon)
Expand All @@ -45,6 +45,9 @@ jobs:
name: Build macOS
needs: prepare
runs-on: macos-latest
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -81,13 +84,25 @@ jobs:
path: src-tauri/target/universal-apple-darwin/release/bundle/dmg/*.dmg
if-no-files-found: warn

- name: Upload macOS updater artifacts
uses: actions/upload-artifact@v4
with:
name: bonnext-macos-updater
path: |
src-tauri/target/universal-apple-darwin/release/bundle/macos/*.app.tar.gz
src-tauri/target/universal-apple-darwin/release/bundle/macos/*.app.tar.gz.sig
if-no-files-found: warn

# =========================================================================
# Build Windows
# =========================================================================
build-windows:
name: Build Windows
needs: prepare
runs-on: windows-latest
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -130,13 +145,27 @@ jobs:
path: src-tauri/target/release/bundle/nsis/*.exe
if-no-files-found: warn

- name: Upload Windows updater artifacts
uses: actions/upload-artifact@v4
with:
name: bonnext-windows-updater
path: |
src-tauri/target/release/bundle/nsis/*-setup.exe
src-tauri/target/release/bundle/nsis/*-setup.exe.sig
src-tauri/target/release/bundle/nsis/*.nsis.zip
src-tauri/target/release/bundle/nsis/*.nsis.zip.sig
if-no-files-found: warn

# =========================================================================
# Build Linux (AppImage + deb)
# =========================================================================
build-linux:
name: Build Linux (glibc-compat via Ubuntu 22.04)
needs: prepare
runs-on: ubuntu-22.04
env:
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -180,7 +209,10 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: bonnext-linux-appimage
path: src-tauri/target/release/bundle/appimage/*.AppImage
path: |
src-tauri/target/release/bundle/appimage/*.AppImage
src-tauri/target/release/bundle/appimage/*.AppImage.tar.gz
src-tauri/target/release/bundle/appimage/*.AppImage.tar.gz.sig
if-no-files-found: warn

- name: Upload deb artifact
Expand Down Expand Up @@ -229,6 +261,87 @@ jobs:
- name: Display artifact structure
run: find artifacts -type f | sort

- name: Generate latest.json for updater
env:
VERSION: ${{ needs.prepare.outputs.version }}
REPO: NoWint/BonNextMinecraftLauncher-Rust
run: |
set -eu
# Helper: read .sig file content (first line = signature)
read_sig() {
local sigfile="$1"
if [ -f "$sigfile" ]; then
head -1 "$sigfile"
else
echo ""
fi
}

# Locate updater artifacts
MACOS_TARGZ=$(find artifacts/bonnext-macos-updater -name '*.app.tar.gz' 2>/dev/null | head -1 || true)
MACOS_SIG=$(find artifacts/bonnext-macos-updater -name '*.app.tar.gz.sig' 2>/dev/null | head -1 || true)

# Windows: prefer .nsis.zip, fallback to -setup.exe
WIN_ZIP=$(find artifacts/bonnext-windows-updater -name '*.nsis.zip' 2>/dev/null | head -1 || true)
WIN_ZIP_SIG=$(find artifacts/bonnext-windows-updater -name '*.nsis.zip.sig' 2>/dev/null | head -1 || true)
WIN_EXE=$(find artifacts/bonnext-windows-updater -name '*-setup.exe' 2>/dev/null | head -1 || true)
WIN_EXE_SIG=$(find artifacts/bonnext-windows-updater -name '*-setup.exe.sig' 2>/dev/null | head -1 || true)

if [ -n "$WIN_ZIP" ]; then
WIN_FILE="$WIN_ZIP"
WIN_SIGFILE="$WIN_ZIP_SIG"
else
WIN_FILE="$WIN_EXE"
WIN_SIGFILE="$WIN_EXE_SIG"
fi

LINUX_TARGZ=$(find artifacts/bonnext-linux-appimage -name '*.AppImage.tar.gz' 2>/dev/null | head -1 || true)
LINUX_SIG=$(find artifacts/bonnext-linux-appimage -name '*.AppImage.tar.gz.sig' 2>/dev/null | head -1 || true)

# Build download URLs (GitHub Release assets)
MACOS_URL="https://github.com/${REPO}/releases/download/v${VERSION}/$(basename "$MACOS_TARGZ" 2>/dev/null || echo '')"
WIN_URL="https://github.com/${REPO}/releases/download/v${VERSION}/$(basename "$WIN_FILE" 2>/dev/null || echo '')"
LINUX_URL="https://github.com/${REPO}/releases/download/v${VERSION}/$(basename "$LINUX_TARGZ" 2>/dev/null || echo '')"

# Read signatures
MACOS_SIGNATURE=$(read_sig "$MACOS_SIG")
WIN_SIGNATURE=$(read_sig "$WIN_SIGFILE")
LINUX_SIGNATURE=$(read_sig "$LINUX_SIG")

# Current UTC timestamp in ISO 8601
PUB_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")

# Build latest.json (Tauri v2 updater format)
# macOS universal build covers both darwin-aarch64 and darwin-x86_64
cat > latest.json <<EOF
{
"version": "${VERSION}",
"notes": "BonNext v${VERSION}",
"pub_date": "${PUB_DATE}",
"platforms": {
"darwin-aarch64": {
"signature": "${MACOS_SIGNATURE}",
"url": "${MACOS_URL}"
},
"darwin-x86_64": {
"signature": "${MACOS_SIGNATURE}",
"url": "${MACOS_URL}"
},
"linux-x86_64": {
"signature": "${LINUX_SIGNATURE}",
"url": "${LINUX_URL}"
},
"windows-x86_64": {
"signature": "${WIN_SIGNATURE}",
"url": "${WIN_URL}"
}
}
}
EOF

echo "Generated latest.json:"
cat latest.json

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
Expand All @@ -244,6 +357,16 @@ jobs:
| Windows | `.msi` / `.exe` |
| Linux | `.AppImage` / `.deb` |

### 首次运行说明 / First-run Instructions

由于本版本未进行代码签名,首次运行时会遇到系统安全提示:

- **macOS**: 右键点击应用 → "打开" → 在弹窗中确认"打开"。或在"系统设置 → 隐私与安全性"中点击"仍要打开"。
- **Windows**: SmartScreen 可能拦截,点击"更多信息" → "仍要运行"。
- **Linux**: AppImage 需先赋予执行权限:`chmod +x BonNext*.AppImage`

> Built with Tauri v2 + React 18 + Rust
files: artifacts/**/*
files: |
artifacts/**/*
latest.json
generate_release_notes: true
3 changes: 1 addition & 2 deletions .github/workflows/security-audit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
run: cargo install cargo-audit
- name: Run cargo audit
working-directory: src-tauri
run: cargo audit || true
run: cargo audit

js-audit:
runs-on: ubuntu-latest
Expand All @@ -35,4 +35,3 @@ jobs:
run: pnpm install --frozen-lockfile
- name: Run pnpm audit
run: pnpm audit --audit-level=high
continue-on-error: true
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ logs
*.log
npm-debug.log*
yarn-debug.log*

# 3DGS model (66MB, regenerate via SHARP — see src/plugins/builtins/scene-menu/assets/README.md)
public/scene.ply
public/scene_clean.ply
public/scene_small.ply
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
Expand Down
Empty file added 0
Empty file.
70 changes: 49 additions & 21 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,61 @@

All notable changes to BonNext will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
## [1.0.0] - 2026-06-XX

### Added
- Modrinth mod browser with search, filtering, and one-click install
- Keyboard shortcuts (Ctrl+H/I/M/V/N/, for navigation)
- Toast notification system with auto-dismiss
- Error boundary with recovery UI
- Skeleton loading components
- GitHub Actions CI pipeline (Ubuntu, macOS, Windows)
- SECURITY.md, CONTRIBUTING.md, CHANGELOG.md
- 插件化架构:最小核心 + 插件系统,支持第三方插件安装
- GitHub Releases 自动更新
- 首次使用引导(Quick Start + Detailed Tour)
- 主题系统:dark/light/OLED + 色盲模式 + 动态背景
- 键盘快捷键(Ctrl+K 搜索、Ctrl+H/I/V/N 导航)
- AI 智能搜索
- 崩溃自动诊断与修复建议
- 模组/整合包安装与依赖解析
- 实例快照与迁移
- 安全模块:AES-256-GCM 加密、JVM 参数白名单、审计日志

### Changed
- All pages converted from inline styles to CSS Modules
- SettingsPage checkboxes now functional and config-driven
- File/folder picker dialogs wired in SettingsPage
- 版本号从 0.0.6 升级为 1.0.0(首个正式稳定版)
- 主题系统重构,消除三套主题系统冲突
- 插件事件总线支持按 pluginId 追踪和清理

### Fixed
- 插件事件权限模型失效
- PluginFileSystem 完全不可用
- activate() 失败 UI 注入泄漏
- 主题匹配 bug
- DownloadPanel 硬编码英文(i18n 化)
- NewInstancePage 版本加载静默吞错

### Known Limitations
- 无代码签名(macOS/Windows 首次运行有安全警告)
- 社交/P2P 功能未启用(代码存在但 UI 未暴露)
- 支持 960×640 及以上窗口,未适配移动端

## [0.0.6] - 2026-06-19

### Added
- 插件架构审查与修复(35+ 问题修复)

## [0.0.5] - 2026-06-XX

### Fixed
- `user_type` now dynamically set from account store (not hardcoded "msa")
- `version_type` now resolved from version JSON (not hardcoded "release")
- `--fullscreen` flag properly passed to Minecraft
- Memory validation added (min >= 256MB, max >= min, max <= 64GB)
- Launch state machine transitions now enforced with logging
- XSS 漏洞修复(DOMPurify 集成)
- 路由冲突修复

## [0.0.4] - 2026-06-XX

### Added
- 多 Shell 架构(ZZZ/SwiftUI/Editor)

## [0.0.3] - 2026-06-XX

### Added
- Modrinth/CurseForge 市场集成
- 下载管理器

## [0.2.0] - 2026-05-16
## [0.0.2] - 2026-05-16

### Added
- Complete application rewrite based on oxide-mc and shard reference projects
Expand All @@ -48,7 +76,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- CSS custom properties design tokens
- React Context + useReducer state management

## [0.1.0] - 2026-05-14
## [0.0.1] - 2026-05-14

### Added
- Initial Tauri v2 + React 18 + TypeScript project scaffold
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -150,4 +150,4 @@ Default game directory: `~/.local/share/bonnext/` (Linux), `~/Library/Applicatio
- **Overlays** — `.noise-overlay` (SVG noise) and `.scanline-overlay` (horizontal lines) for CRT effect
- **Sizes use `em`** — base is 16px set on `html`. Component font sizes typically 0.55em–0.9em range
- **All new UI must use CSS Modules** — no inline styles except for truly dynamic values
- **Light theme contrast** — accent color #6B5F00 meets WCAG AA (4.6:1 contrast ratio)
- **Light theme contrast** — accent color #807000 meets WCAG AA (4.8:1 contrast ratio)
Loading
Loading