Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
dbc9677
refactor: modularize macOS features and source layout
1lck Aug 14, 2026
f3f98f6
fix(macOS): isolate search index task cleanup
1lck Aug 14, 2026
56b1a88
test(macOS): support Swift 6.2 weak references
1lck Aug 14, 2026
08b3c9e
Merge pull request #78 from 1lck/codex/preview-0.3.0-modularization
1lck Aug 14, 2026
963336f
feat(windows): replace Qt frontend with React Tauri
1lck Aug 14, 2026
079786c
Merge pull request #79 from 1lck/codex/windows-tauri-migration
1lck Aug 14, 2026
10c994d
add: add comments to the rust core
xiaoyumuxi Aug 14, 2026
dfdca80
Merge pull request #81 from 1lck/codex/add-comments
1lck Aug 14, 2026
0ce5164
fix(windows): restore legacy icon mappings
Mucheen Aug 14, 2026
bf2e6a1
feat(macOS): add staged plugin management
1lck Aug 14, 2026
352bd79
fix(ci): remove ripgrep dependency from Windows check
1lck Aug 14, 2026
921f3b4
Merge pull request #84 from 1lck/codex/plugin-management-confirmation
1lck Aug 14, 2026
338742e
fix(ci): remove ripgrep dependency from Windows boundaries
Mucheen Aug 14, 2026
cbb9099
Merge preview/0.3.0 into fix/restore-nucleo-icons
Mucheen Aug 15, 2026
2b7bca1
Merge pull request #83 from Mucheen/fix/restore-nucleo-icons
1lck Aug 15, 2026
58da569
Add checkbox staging with optimistic updates
Yager-42 Aug 13, 2026
4356d93
CI:文件校验脚本的添加对注释修改的豁免 CI 流程 (#82)
xiaoyumuxi Aug 15, 2026
a83ce4c
Merge branch 'preview/0.3.0' into feature/git-checkbox-staging
1lck Aug 15, 2026
e360333
Merge pull request #85 from Yager-42/feature/git-checkbox-staging
1lck Aug 15, 2026
73653aa
fix(windows): update configuration to resolve startup failure
saltFishCode Aug 15, 2026
afb9b10
Merge branch 'preview/0.3.0' of https://github.com/1lck/Lithe-IDEA in…
saltFishCode Aug 15, 2026
7c0f39c
docs(macOS): 添加自定义快捷键设计规格
Wz58luck Aug 15, 2026
52d4518
docs(macOS): 添加快捷键 TDD 实现计划
Wz58luck Aug 15, 2026
8427c96
feat(macOS): 添加快捷键命令目录(任务 1/7)
Wz58luck Aug 15, 2026
94fb674
feat(macOS): 持久化快捷键覆盖设置(任务 2/7)
Wz58luck Aug 15, 2026
52eb468
feat(macOS): 统一动态快捷键检测(任务 3/7)
Wz58luck Aug 15, 2026
b1d2f6a
feat(macOS): 同步快捷键命令入口(任务 4/7)
Wz58luck Aug 15, 2026
3186422
feat(macOS): 添加快捷键设置界面(任务 5/7)
Wz58luck Aug 15, 2026
711eb20
test(macOS): 覆盖快捷键设置本地化(任务 6/7)
Wz58luck Aug 15, 2026
597c4e7
fix(macOS): 修正快捷键动态本地化(任务 7/7)
Wz58luck Aug 15, 2026
222faa2
Merge branch 'pr-94-fix-windows-startup' into preview/0.3.0
1lck Aug 15, 2026
42c9f57
Merge pull request #94 from saltFishCode/preview/0.3.0-win-fish
1lck Aug 15, 2026
59b0821
Merge branch 'preview/0.3.0' into codex/issue-10-custom-keymap
1lck Aug 15, 2026
5643eb8
fix(macOS): 修复打开文件查找时界面卡死
Wz58luck Aug 15, 2026
adfb5ab
perf(workbench): optimize vertical split handle drag performance
1lck Aug 15, 2026
4d752c2
fix(macOS): 补齐快捷键操作注册并增加覆盖测试
Wz58luck Aug 15, 2026
7658c88
Merge branch '1lck:main' into codex/issue-10-custom-keymap
Wz58luck Aug 15, 2026
a6a44c8
feat(windows): optimize workbench layout and localization
saltFishCode Aug 15, 2026
c205dda
Merge branch 'preview/0.3.0' into preview/0.3.0-win-fish
1lck Aug 15, 2026
2c8aaf5
Merge pull request #93 from Sunwenzhi58/codex/issue-10-custom-keymap
1lck Aug 15, 2026
7739ae4
Merge branch 'preview/0.3.0' into preview/0.3.0-win-fish
1lck Aug 15, 2026
92386cf
Merge pull request #95 from saltFishCode/preview/0.3.0-win-fish
1lck Aug 15, 2026
229c862
fix(macOS): restore output log contrast
1lck Aug 15, 2026
7cfa3a4
Merge pull request #96 from 1lck/codex/fix-output-log-colors
1lck Aug 15, 2026
d390384
Align Windows UI with macOS preview 0.3
puppyben1 Aug 15, 2026
4087df2
feat(github): add macOS pull request workflow
1lck Aug 15, 2026
d68933c
fix(github): localize pull request workflow
1lck Aug 15, 2026
75d04a1
fix(github): simplify disconnected sign-in experience
1lck Aug 15, 2026
498906d
fix(github): enable browser authorization
1lck Aug 15, 2026
eefabe4
fix(github): encode remote URL contract correctly
1lck Aug 15, 2026
734d850
Merge branch 'preview/0.3.0' into codex/windows-macos-ui-parity
1lck Aug 15, 2026
17c1a1d
Merge pull request #97 from puppyben1/codex/windows-macos-ui-parity
1lck Aug 15, 2026
af3dbe8
feat: add AI-assisted pull request workflow
1lck Aug 15, 2026
ad39354
fix(github): preserve PR defaults after publishing
1lck Aug 15, 2026
113b526
perf(github): cache branch choices
1lck Aug 15, 2026
3fafd7c
Merge remote-tracking branch 'origin/preview/0.3.0' into codex/pr-af3…
1lck Aug 15, 2026
cdc194a
Merge pull request #98 from 1lck/codex/pr-af3dbe85
1lck Aug 15, 2026
a2856d7
fix(windows): hide project switcher for new-window mode
Mucheen Aug 15, 2026
b778a53
feat: add optional LINUX DO browsing plugin
1lck Aug 15, 2026
53c7ae1
Merge remote-tracking branch 'origin/preview/0.3.0' into fix/project-…
Mucheen Aug 16, 2026
5be7536
test(macOS): stabilize workspace recovery checks
1lck Aug 16, 2026
627e694
Merge pull request #100 from 1lck/feat/linux-do-support
1lck Aug 16, 2026
289b930
feat(macOS): add IDEA-style Git and Spring workflows
1lck Aug 16, 2026
b809392
build(macOS): guard workbench rendering and stamp provenance
1lck Aug 16, 2026
49b9a6b
Merge branch 'preview/0.3.0' into fix/project-switcher-new-window
1lck Aug 16, 2026
f1f4f04
fix(ci): use configured Swift compiler for plugins
1lck Aug 16, 2026
6a7e20a
Merge remote-tracking branch 'origin/preview/0.3.0' into codex/idea-w…
1lck Aug 16, 2026
221b999
Merge pull request #104 from 1lck/codex/fix-preview-swift-toolchain
1lck Aug 16, 2026
be383ee
Merge branch 'preview/0.3.0' into fix/project-switcher-new-window
1lck Aug 16, 2026
6fd3ab3
Merge pull request #99 from Mucheen/fix/project-switcher-new-window
1lck Aug 16, 2026
fc86b15
feat(macOS): group language plugins and suppress background Keychain …
1lck Aug 16, 2026
bc82cc8
Merge branch 'preview/0.3.0' into codex/idea-workflow-and-render-safety
1lck Aug 16, 2026
1c6c254
fix(ci): remove ripgrep dependency from macOS safety check
1lck Aug 16, 2026
cddfcfd
Merge pull request #105 from 1lck/codex/idea-workflow-and-render-safety
1lck Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
69 changes: 51 additions & 18 deletions .agents/skills/develop-lithe/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ framework conventions.
| `Sources/Lithe/Core/` | Platform-neutral ports and typed Rust operations |
| `Sources/Lithe/Platform/MacOS/` | macOS adapters and composition |
| `rust/lithe-core/` | Deterministic shared commands, models, validation, and C ABI |
| `windows/` | Native C++23, Win32 adapter, and Qt implementation |
| `windows/` | React/Tauri Windows product and Rust platform adapters |
| `shared/` | Cross-platform contracts and fixtures, not compiled implementation |
| `third_party/` | Upstream code; leave unchanged unless the task explicitly targets it |

macOS is the current reference product. Windows is an independent native
macOS is the current reference product. Windows is an independent React/Tauri
implementation and must not import Swift source or depend on macOS types.

## Preserve application boundaries
Expand All @@ -48,15 +48,16 @@ implementation and must not import Swift source or depend on macOS types.
`Process`, `Pipe`, `FileManager`, `FileHandle`, watchers, persistence stores,
or concrete `Mac*` adapters.
- Core and application code must remain free of SwiftUI, AppKit, CoreServices,
Win32, Qt, and concrete platform implementations.
Tauri, WebView2, Win32, and concrete platform implementations.
- `MacServiceContainer` is the macOS composition root. Platform capabilities
belong in `Sources/Lithe/Platform/MacOS/`.
- Deterministic behavior shared by both products belongs in `rust/lithe-core/`.
Native filesystem, process, terminal, runtime, security, persistence, and UI
behavior belongs in platform adapters.
- Windows application algorithms and services must not depend on Win32 or Qt.
Qt code must not include `core_client.h` directly, and public ports must not
expose Win32 handle types.
- Windows feature code must import `@/platform/tauri-core` instead of the Tauri
core API directly. Shared operations route through `lithe-core`; Windows-only
terminal, watcher, credential, process, and WebView behavior stays in the
Tauri host or a platform plugin.

## Keep shared contracts deterministic

Expand Down Expand Up @@ -103,15 +104,47 @@ the existing stack can reasonably avoid.
- Add tests in the owning crate for changes to commands, parsing, validation,
ordering, cancellation, or serialization.

### Windows C++ and Qt

- Use C++23 and the existing CMake target boundaries. Use the Qt version pinned
in `.github/workflows/ci-windows.yml`.
- Keep Qt widget state in `windows/qt/`, application behavior in `windows/app/`,
Rust communication in `windows/core/`, and native behavior in
`windows/adapters/`.
- Add CTest coverage under `windows/tests/` for application, DTO, algorithm,
persistence, or adapter behavior that can be tested without manual UI work.
#### Rust Core comments

Apply the following comment standard to first-party code under
`rust/lithe-core/`. It does not require comment coverage in the database helpers,
Windows/Tauri Rust crates, generated code, or third-party sources.

- Write comments in English and keep them accurate when behavior changes.
- Start each production module with a concise `//!` description of its
responsibility or architectural boundary.
- Use `///` for exported APIs, shared request and response types, core domain
types, and C ABI functions. Document ownership and add `# Safety` for unsafe
entry points; describe errors only when the failure contract is not obvious.
- Document enums, structs, variants, and fields whenever their names alone do
not make their semantics, allowed values, units, ownership, or protocol role
immediately clear. This requirement applies to internal types as well as
exported contracts.
- Use `//` inside implementations to explain non-obvious decisions and
constraints involving compatibility, determinism, ordering, security,
performance, or cross-platform behavior.
- In tests, comment the scenario, regression risk, or boundary being protected
when the test name and assertions do not make that intent clear.
- Do not narrate statements, restate descriptive names, or add comments to
trivial accessors and straightforward control flow solely for coverage.
- Run `./scripts/verify-rust-core-comments.sh` before slower Rust Core checks.
It enforces module documentation, exported Rustdoc, English comments, and
unsafe API safety sections without requiring documentation on every internal
helper. Still review changed internal types and implementations for the
semantic cases above, which a static check cannot judge reliably.

### Windows React and Tauri

- Use Bun for frontend scripts and Tauri 2 for the Windows host. Keep React
feature code in `windows/tauri/src/features`, reusable UI in
`windows/tauri/src/ui`, the invoke boundary in
`windows/tauri/src/platform`, and native Rust behavior in
`windows/tauri/src-tauri`.
- Do not restore a parallel C++/Qt application layer or one Tauri command per
shared Core operation. Translate compatibility command names through the
central platform dispatcher.
- Add frontend tests for product behavior and Rust tests in the owning crate.
Verify WebView2, ConPTY, installer, signing, and updater behavior on Windows.

## Avoid hardcoded environment details

Expand All @@ -130,8 +163,8 @@ the existing stack can reasonably avoid.

- Do not silently discard errors. Return, translate, or log them at the layer
that has enough context to act on them.
- Preserve stable contract error categories when crossing Rust, Swift, C++, or
process boundaries.
- Preserve stable contract error categories when crossing Rust, Swift,
TypeScript, Tauri, or process boundaries.
- User-facing failures should be actionable without exposing credentials,
environment contents, or unnecessary internal details.
- Comments should explain non-obvious constraints or decisions, not narrate the
Expand All @@ -151,7 +184,7 @@ before handoff.
| Core feature behavior | `./scripts/verify-core.sh` |
| Git graph behavior | `./scripts/verify-git-graph.sh` |
| Windows boundaries from macOS/Linux | `./scripts/verify-windows-boundaries.sh` |
| Windows implementation on Windows | `./scripts/build-windows.ps1 -Configuration Release -BuildQt`, then `ctest --test-dir windows/build-windows -C Release --output-on-failure` |
| Windows implementation on Windows | `./scripts/build-windows.ps1 -Configuration Release`, then `cargo test --manifest-path windows/tauri/src-tauri/Cargo.toml` |

Also run tests for directly affected crates or targets. If the current machine
cannot run a platform-specific check, state that clearly; do not claim an
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ body:
id: environment
attributes:
label: Environment / 环境信息
description: Include relevant JDK, Maven, JDT LS, Rust, or Qt versions. / 请填写相关的 JDK、Maven、JDT LS、Rust 或 Qt 版本。
description: Include relevant JDK, Maven, JDT LS, Rust, WebView2, or Tauri versions. / 请填写相关的 JDK、Maven、JDT LS、Rust、WebView2Tauri 版本。
placeholder: |
JDK:
Maven:
Expand Down
43 changes: 26 additions & 17 deletions .github/workflows/ci-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,19 @@ jobs:
runs-on: ubuntu-latest
outputs:
full: ${{ steps.classify.outputs.full }}
comments: ${{ steps.classify.outputs.comments }}
metadata: ${{ steps.classify.outputs.metadata }}

steps:
- name: Check out source
uses: actions/checkout@v7
with:
fetch-depth: 0

- name: Test CI change classifier
shell: bash
run: ./scripts/test-classify-ci-changes.sh

- name: Classify changed paths
id: classify
env:
Expand All @@ -36,7 +42,11 @@ jobs:
shell: bash
run: |
if [[ "$EVENT_NAME" == "workflow_dispatch" ]]; then
echo "full=true" >> "$GITHUB_OUTPUT"
{
echo "full=true"
echo "comments=false"
echo "metadata=false"
} >> "$GITHUB_OUTPUT"
exit 0
fi

Expand All @@ -45,22 +55,21 @@ jobs:
base_sha="$PR_BASE_SHA"
fi

full=false
while IFS= read -r path; do
case "$path" in
README.md|README.zh-CN.md|docs/*|Casks/*)
;;
*)
full=true
break
;;
esac
done < <(git diff --name-only "$base_sha" "$GITHUB_SHA")

echo "full=$full" >> "$GITHUB_OUTPUT"

- name: Validate lightweight changes
if: steps.classify.outputs.full == 'false'
./scripts/classify-ci-changes.sh "$base_sha" "$GITHUB_SHA" >> "$GITHUB_OUTPUT"

- name: Set up Rust for comment verification
if: steps.classify.outputs.full == 'false' && steps.classify.outputs.comments == 'true'
uses: dtolnay/rust-toolchain@stable

- name: Validate text-only changes
if: steps.classify.outputs.full == 'false' && steps.classify.outputs.comments == 'true'
shell: bash
run: |
git diff --check "${{ github.event.pull_request.base.sha || github.event.before }}" "$GITHUB_SHA"
./scripts/verify-rust-core-comments.sh

- name: Validate lightweight metadata changes
if: steps.classify.outputs.full == 'false' && steps.classify.outputs.metadata == 'true'
shell: bash
run: |
git diff --check "${{ github.event.pull_request.base.sha || github.event.before }}" "$GITHUB_SHA"
Expand Down
63 changes: 50 additions & 13 deletions .github/workflows/ci-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ on:
- "rust/**"
- "shared/**"
- "scripts/build-windows.ps1"
- "scripts/classify-ci-changes.sh"
- "scripts/test-classify-ci-changes.sh"
- "scripts/verify-windows-boundaries.ps1"
- ".github/workflows/ci-windows.yml"
push:
Expand All @@ -17,6 +19,8 @@ on:
- "rust/**"
- "shared/**"
- "scripts/build-windows.ps1"
- "scripts/classify-ci-changes.sh"
- "scripts/test-classify-ci-changes.sh"
- "scripts/verify-windows-boundaries.ps1"
- ".github/workflows/ci-windows.yml"
workflow_dispatch:
Expand All @@ -25,8 +29,46 @@ permissions:
contents: read

jobs:
changes:
name: Classify changes
runs-on: ubuntu-latest
outputs:
full: ${{ steps.classify.outputs.full }}

steps:
- name: Check out source
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Test CI change classifier
shell: bash
run: ./scripts/test-classify-ci-changes.sh

- name: Classify changed content
id: classify
env:
EVENT_NAME: ${{ github.event_name }}
PR_BASE_SHA: ${{ github.event.pull_request.base.sha }}
PUSH_BASE_SHA: ${{ github.event.before }}
shell: bash
run: |
if [[ "$EVENT_NAME" == "workflow_dispatch" ]]; then
echo "full=true" >> "$GITHUB_OUTPUT"
exit 0
fi

base_sha="$PUSH_BASE_SHA"
if [[ "$EVENT_NAME" == "pull_request" ]]; then
base_sha="$PR_BASE_SHA"
fi

./scripts/classify-ci-changes.sh "$base_sha" "$GITHUB_SHA" >> "$GITHUB_OUTPUT"

build:
name: Build and test Windows implementation
needs: changes
if: needs.changes.outputs.full == 'true'
runs-on: windows-latest

steps:
Expand All @@ -38,26 +80,21 @@ jobs:
with:
targets: x86_64-pc-windows-msvc

- name: Set up Qt
uses: jurplel/install-qt-action@v4
- name: Set up Bun
uses: oven-sh/setup-bun@v2
with:
version: "6.8.2"
arch: win64_msvc2022_64
archives: qtbase
cache: true
bun-version: "1.3.12"

- name: Build Rust core and C++ targets
- name: Build Windows Tauri application
shell: pwsh
run: ./scripts/build-windows.ps1 -Configuration Release -BuildQt
run: ./scripts/build-windows.ps1 -Configuration Release

- name: Verify Windows boundaries
shell: pwsh
run: ./scripts/verify-windows-boundaries.ps1

- name: Run C++ tests
shell: pwsh
run: ctest --test-dir windows/build-windows -C Release --output-on-failure

- name: Run Rust tests
shell: pwsh
run: cargo test --manifest-path rust/Cargo.toml
run: |
cargo test --manifest-path rust/Cargo.toml
cargo test --manifest-path windows/tauri/src-tauri/Cargo.toml
9 changes: 9 additions & 0 deletions .github/workflows/release-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,15 @@ jobs:
/usr/libexec/PlistBuddy \
-c "Print :CFBundleVersion" \
"$app_path/Contents/Info.plist"
for build_key in \
LitheBuildGitRevision \
LitheBuildGitBranch \
LitheBuildGitDirty \
LitheBuildTimestamp; do
/usr/libexec/PlistBuddy \
-c "Print :${build_key}" \
"$app_path/Contents/Info.plist"
done
lipo "$app_path/Contents/MacOS/Lithe" -verify_arch "$LITHE_ARCH"
hdiutil imageinfo "$dmg_path" > /dev/null
test -s "$dmg_path"
Expand Down
17 changes: 5 additions & 12 deletions .github/workflows/release-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,10 @@ jobs:
with:
targets: x86_64-pc-windows-msvc

- name: Set up Qt
uses: jurplel/install-qt-action@v4
- name: Set up Bun
uses: oven-sh/setup-bun@v2
with:
version: "6.8.2"
arch: win64_msvc2022_64
modules: qtbase
cache: true

- name: Install NSIS
shell: pwsh
run: choco install nsis --no-progress --yes
bun-version: "1.3.12"

- name: Resolve release version
id: version
Expand All @@ -61,9 +54,9 @@ jobs:
"version=$version" >> $env:GITHUB_OUTPUT
"tag=v$version" >> $env:GITHUB_OUTPUT

- name: Build Rust core and Qt workbench
- name: Build Windows Tauri application
shell: pwsh
run: ./scripts/build-windows.ps1 -Configuration Release -BuildQt
run: ./scripts/build-windows.ps1 -Configuration Release

- name: Import Authenticode certificate
shell: pwsh
Expand Down
3 changes: 2 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@

Before any work in this repository, load and follow the `develop-lithe` skill
at `.agents/skills/develop-lithe/SKILL.md`. That Skill is the single source of
truth for AI coding and verification rules.
truth for AI coding and verification rules, including the required Rust Core
comment standard.
Loading
Loading