Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
d80287f
refactor(environment): define the worker wire protocol
Hccake Sep 1, 2026
ce3e24d
refactor(environment): extract the shared execution engine
Hccake Sep 1, 2026
4cb3c85
feat(wsl): add the supervised environment worker runtime
Hccake Sep 2, 2026
dde9014
refactor(wsl): route reads and sources through the worker
Hccake Sep 3, 2026
6a350b4
refactor(wsl): route mutations and persistence through the worker
Hccake Sep 3, 2026
1f72077
build(windows): package and verify the WSL worker
Hccake Sep 4, 2026
18c5260
refactor(storage): unify atomic document persistence
Hccake Sep 6, 2026
6996809
refactor(mutation): enforce transaction and recovery guarantees
Hccake Sep 6, 2026
718c2a5
refactor(libraries): model durable scope reconciliation
Hccake Sep 7, 2026
8962e97
feat(libraries): support membership changes in applied libraries
Hccake Sep 8, 2026
268a5a4
feat(libraries): expose membership impact and retry workflows
Hccake Sep 9, 2026
fc74ce8
fix(projects): reject environment home as a project
Hccake Sep 10, 2026
7b1c4c1
fix(skills): discard stale detail responses
Hccake Sep 10, 2026
6c16cdb
feat(agents): keep selected agents visible
Hccake Sep 11, 2026
f850cf6
refactor(agents): separate workflow selection baselines
Hccake Sep 11, 2026
c96a5c2
fix(skills): treat untracked skills as local
Hccake Sep 12, 2026
84bf67d
refactor(skills): remove source repair workflow
Hccake Sep 12, 2026
67a8f4a
fix(skills): make content preparation safe to retry
Hccake Sep 12, 2026
b80a37a
fix(skills): preserve symlink targets when overriding library entries
Hccake Sep 13, 2026
de2b6f5
fix(settings): make proxy configuration recoverable
Hccake Sep 13, 2026
110592b
fix(discovery): restore project selection in install wizard
Hccake Sep 13, 2026
19c11d2
refactor(skills): centralize physical version election
Hccake Sep 14, 2026
c039abf
feat(updates): prepare updates for actual installations
Hccake Sep 15, 2026
e036d96
feat(skills): present installation maintenance states
Hccake Sep 15, 2026
538f7df
perf(skills): scale scope reads by physical content
Hccake Sep 16, 2026
f60ea13
feat(skills): show incomplete scope reads
Hccake Sep 16, 2026
07822e4
fix(ci): restore cross-platform quality checks
Hccake Sep 17, 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
  •  
  •  
  •  
44 changes: 37 additions & 7 deletions .github/workflows/quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- uses: dtolnay/rust-toolchain@1.88.0
- run: cargo check --locked --manifest-path src-tauri/Cargo.toml --all-targets
- run: cargo check --locked --workspace --manifest-path src-tauri/Cargo.toml --all-targets

frontend:
runs-on: ubuntu-22.04
Expand Down Expand Up @@ -63,13 +63,13 @@ jobs:
uses: docker://rhysd/actionlint:1.7.12

shellcheck:
name: ShellCheck bundled WSL assets
name: ShellCheck WSL bootstrap
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v7
with:
ref: ${{ inputs.target_sha }}
- name: Check bundled WSL operation scripts
- name: Check WSL bootstrap script
run: >-
docker run --rm
--volume "$PWD:/work"
Expand All @@ -92,7 +92,7 @@ jobs:
shell: bash
run: |
mkdir -p ci-diagnostics
cargo fmt --manifest-path src-tauri/Cargo.toml -- --check 2>&1 | tee ci-diagnostics/fmt.log
cargo fmt --all --manifest-path src-tauri/Cargo.toml -- --check 2>&1 | tee ci-diagnostics/fmt.log
- name: Upload Rust formatting diagnostics
if: ${{ always() }}
uses: actions/upload-artifact@v4
Expand Down Expand Up @@ -127,6 +127,13 @@ jobs:
- uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
- name: Prepare Windows Cargo resource placeholders
if: runner.os == 'Windows'
shell: bash
run: |
mkdir -p src-tauri/target/wsl-worker/current
printf 'quality-check-placeholder\n' > src-tauri/target/wsl-worker/current/worker
printf '{}\n' > src-tauri/target/wsl-worker/current/manifest.json
- name: Capture runner diagnostics
shell: bash
run: |
Expand All @@ -143,11 +150,11 @@ jobs:
} | tee ci-diagnostics/toolchain.txt
- name: Check all Rust targets
shell: bash
run: cargo check --locked --manifest-path src-tauri/Cargo.toml --all-targets 2>&1 | tee ci-diagnostics/check.log
run: cargo check --locked --workspace --manifest-path src-tauri/Cargo.toml --all-targets 2>&1 | tee ci-diagnostics/check.log
- name: Lint all Rust targets
if: ${{ always() }}
shell: bash
run: cargo clippy --locked --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings 2>&1 | tee ci-diagnostics/clippy.log
run: cargo clippy --locked --workspace --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings 2>&1 | tee ci-diagnostics/clippy.log
- name: Upload Rust static diagnostics
if: ${{ always() }}
uses: actions/upload-artifact@v4
Expand All @@ -171,6 +178,12 @@ jobs:
- uses: actions/checkout@v7
with:
ref: ${{ inputs.target_sha }}
- uses: pnpm/action-setup@v6
- uses: actions/setup-node@v7
with:
node-version: lts/*
cache: pnpm
- run: pnpm install --frozen-lockfile
- name: Install Tauri system dependencies
if: runner.os == 'Linux'
run: |
Expand All @@ -180,6 +193,13 @@ jobs:
- uses: swatinem/rust-cache@v2
with:
workspaces: './src-tauri -> target'
- name: Prepare Windows Cargo resource placeholders
if: runner.os == 'Windows'
shell: bash
run: |
mkdir -p src-tauri/target/wsl-worker/current
printf 'quality-check-placeholder\n' > src-tauri/target/wsl-worker/current/worker
printf '{}\n' > src-tauri/target/wsl-worker/current/manifest.json
- name: Capture runner diagnostics
shell: bash
run: |
Expand All @@ -196,7 +216,17 @@ jobs:
} | tee ci-diagnostics/toolchain.txt
- name: Run Rust tests
shell: bash
run: cargo test --locked --manifest-path src-tauri/Cargo.toml 2>&1 | tee ci-diagnostics/test.log
run: cargo test --locked --workspace --manifest-path src-tauri/Cargo.toml 2>&1 | tee ci-diagnostics/test.log
- name: Verify CLI private installation updates
shell: bash
run: |
cargo test --locked --workspace --manifest-path src-tauri/Cargo.toml native_update_private_only_cli_installation_in_place -- --ignored --nocapture 2>&1 | tee ci-diagnostics/cli-private-update.log
grep -Eq 'test native_workflow_integration_support::update_lifecycle::native_update_private_only_cli_installation_in_place \.\.\. ok' ci-diagnostics/cli-private-update.log
- name: Verify CLI Eve directory updates
shell: bash
run: |
cargo test --locked --workspace --manifest-path src-tauri/Cargo.toml native_eve_update_restores_recorded_missing_installation -- --ignored --nocapture 2>&1 | tee ci-diagnostics/cli-eve-update.log
grep -Eq 'test native_workflow_integration_support::update_lifecycle::native_eve_update_restores_recorded_missing_installation \.\.\. ok' ci-diagnostics/cli-eve-update.log
- name: Upload Rust test diagnostics
if: ${{ always() }}
uses: actions/upload-artifact@v4
Expand Down
45 changes: 44 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,34 @@ jobs:
with:
target_sha: ${{ needs.validate.outputs.commit_sha }}

build-wsl-worker:
needs: [validate, quality]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v7
with:
ref: ${{ needs.validate.outputs.commit_sha }}
- uses: actions/setup-node@v7
with:
node-version: 22
- uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-unknown-linux-musl
- uses: swatinem/rust-cache@v2
with:
workspaces: "./src-tauri -> target"
- name: Build WSL Worker artifact
run: node scripts/prepare-wsl-worker.mjs
- name: Verify WSL Worker artifact
run: node scripts/prepare-wsl-worker.mjs --verify src-tauri/target/wsl-worker/current
- name: Upload WSL Worker artifact
uses: actions/upload-artifact@v4
with:
name: wsl-worker-${{ needs.validate.outputs.commit_sha }}
path: src-tauri/target/wsl-worker/current
if-no-files-found: error
retention-days: 7

prepare-release:
needs: [validate, quality]
runs-on: ubuntu-22.04
Expand Down Expand Up @@ -184,7 +212,7 @@ jobs:
echo "release_id=$RELEASE_ID" >> "$GITHUB_OUTPUT"

build-release:
needs: [validate, quality, prepare-release]
needs: [validate, quality, prepare-release, build-wsl-worker]
permissions:
contents: write
strategy:
Expand Down Expand Up @@ -229,6 +257,15 @@ jobs:
with:
workspaces: "./src-tauri -> target"
- run: pnpm install --frozen-lockfile
- name: Download WSL Worker artifact
if: ${{ runner.os == 'Windows' }}
uses: actions/download-artifact@v4
with:
name: wsl-worker-${{ needs.validate.outputs.commit_sha }}
path: src-tauri/target/wsl-worker/current
- name: Verify WSL Worker artifact
if: ${{ runner.os == 'Windows' }}
run: pnpm verify:wsl-worker
- name: Build and upload release bundles
uses: tauri-apps/tauri-action@1deb371b0cd8bd54025b384f1cd735e725c4060f # v1.0.0
env:
Expand All @@ -244,6 +281,12 @@ jobs:
retryAttempts: 3
releaseAssetNamePattern: skill-deck_[version]_${{ matrix.asset_platform }}_[arch][setup][ext]
args: ${{ needs.validate.outputs.prerelease == 'true' && matrix.prerelease_args || matrix.args }}
- name: Verify NSIS WSL Worker resource
if: ${{ runner.os == 'Windows' }}
run: pwsh -NoProfile -File scripts/verify-windows-worker-bundle.ps1 -BundleKind nsis
- name: Verify MSI WSL Worker resource
if: ${{ runner.os == 'Windows' && needs.validate.outputs.prerelease != 'true' }}
run: pwsh -NoProfile -File scripts/verify-windows-worker-bundle.ps1 -BundleKind msi

verify-release:
needs: [validate, prepare-release, build-release]
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@

## [Unreleased]

### Changed

- **简化 Skill 维护操作** — 来源信息不完整或上游已删除时,用户可以保留或移除当前 Skill;需要重新使用时,通过普通安装流程重新安装,不再提供独立的来源修复和重新安装操作。

## [1.7.1] - 2026-08-20

### Added
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
## ✨ Core capabilities

- **Discover and install** — Browse available Skills, review their sources, documentation, and security information, or install from GitHub, Git, local directories, Well-known URLs, raw `SKILL.md` files, and ZIP/tar archives
- **Browse and maintain** — Read installed Skill content, check and apply updates, and select a new source when the saved source no longer works; private GitHub sources can reuse local Git credentials for update checks
- **Browse and maintain** — Read installed Skill content and check or apply updates; keep Skills whose sources are unavailable, or remove them before installing from another source; private GitHub sources can reuse local Git credentials for update checks
- **Projects and agents** — View global and project Skills together, filter by agent, manage which agents can read a Skill, and copy Project Skills to other projects; use built-in agent definitions or add your own
- **Cross-platform management** — Manage Skills on Windows, macOS, and Linux; Windows users can also switch to installed WSL distributions

Expand Down Expand Up @@ -102,7 +102,7 @@ Download the latest release from [GitHub Releases](https://github.com/hccake/ski

### 1. Choose an install entry point

Choose a Skill from the Discover page, or open the install entry in Global Skills or a target project. When installing a Project Skill, add or select the project in the sidebar first.
Choose a Skill from the Discover page to open the installation wizard in the current environment. The wizard defaults to Global Skills; you can select an added project to install there. You can also open the install entry directly from Global Skills or a project on the Skills page.

### 2. Provide a Skill source

Expand All @@ -121,7 +121,7 @@ npx skills add vercel-labs/agent-skills --skill frontend-design -a claude-code

### 3. Confirm and install

Select the Skills, target agents, and installation mode, review the change preview, and run the installation. Cross-host download redirects require explicit confirmation. Direct downloads are one-time, new-install sources and do not provide update, reinstall, or source-repair actions afterward. After installation, the selected agents can read the Skill; you can continue reading and managing agents from the Skills workspace.
Select the Skills, target agents, and installation mode, review the change preview, and run the installation. Cross-host download redirects require explicit confirmation. Direct downloads are one-time, new-install sources and do not provide updates; remove the installed Skill before installing it again. After installation, the selected agents can read the Skill; you can continue reading and managing agents from the Skills workspace.

---

Expand Down
6 changes: 3 additions & 3 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
## ✨ 核心能力

- **发现与安装**:从在线目录发现 Skill,查看来源、说明和安全信息,或者从 GitHub、Git、本地目录、约定地址(Well-known 地址)、原始 `SKILL.md` 文件和 ZIP、tar 归档安装
- **浏览与维护**:阅读已安装 Skill 的完整内容,检查并执行更新,在来源失效时重新选择来源;私有 GitHub 来源可以复用本机 Git 凭据检查更新
- **浏览与维护**:阅读已安装 Skill 的完整内容,检查并执行更新;来源失效时可以保留当前 Skill,或移除后从其他来源重新安装;私有 GitHub 来源可以复用本机 Git 凭据检查更新
- **项目与 Agent 管理**:统一查看全局与项目 Skill,按 Agent 筛选,调整 Skill 可供哪些 Agent 使用,并在项目之间复制 Skill;既可以使用随应用提供的 Agent 信息,也可以添加自己的 Agent 信息
- **跨平台管理**:在 Windows、macOS 和 Linux 上管理 Skill;Windows 用户还可以切换到已安装的 WSL 发行版

Expand Down Expand Up @@ -101,7 +101,7 @@

### 1. 选择安装入口

可以从“发现”页面选择 Skill,也可以在“全局 Skill”或目标项目中打开安装入口。安装项目 Skill 时,先在侧栏添加或选择对应项目。
从“发现”页面选择 Skill 后,安装向导使用当前环境并默认选中全局,用户可以改选已添加的项目。也可以直接从 Skills 页的“全局 Skill”或项目区域打开安装入口。

### 2. 提供 Skill 来源

Expand All @@ -120,7 +120,7 @@ npx skills add vercel-labs/agent-skills --skill frontend-design -a claude-code

### 3. 确认并安装

选择需要安装的 Skill、目标 Agent 和安装方式,检查变更预览,然后执行安装。下载地址发生跨主机重定向时,需要明确确认最终下载主机。直接下载属于一次性全新安装来源,安装后不提供更新、重新安装或来源修复操作。安装完成后,关联的 Agent 即可读取该 Skill;你也可以在 Skills 工作台中继续阅读和管理 Agent。
选择需要安装的 Skill、目标 Agent 和安装方式,检查变更预览,然后执行安装。下载地址发生跨主机重定向时,需要明确确认最终下载主机。直接下载属于一次性全新安装来源,安装后不提供更新;再次安装前需要先移除现有 Skill。安装完成后,关联的 Agent 即可读取该 Skill;你也可以在 Skills 工作台中继续阅读和管理 Agent。

---

Expand Down
4 changes: 2 additions & 2 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Skill Deck 的长期文档说明当前产品、领域规则和系统约束。每
| [产品行为与交互](./product.md) | 用户看到的核心概念、页面能力、用户工作流、反馈规则、Agent 筛选交互和产品限制 | 用户可见能力、交互语义或产品限制变化 |
| [Agent 模型](./agent-model.md) | Agent 注册表、Skill 读取位置、Agent 检测位置、关联 Agent、筛选候选、选择分组和安装初始选择 | Agent 模型、解析规则或选择语义变化 |
| [Environment、Skill 位置与项目管理](./environments-and-projects.md) | 应用所在系统、Windows 与 WSL 切换、全局 Skill、项目 Skill、已添加项目、路径解析和跨文件系统访问 | Windows/WSL 切换、全局或项目行为、已添加项目、路径或文件访问规则变化 |
| [Skill 生命周期](./skill-lifecycle.md) | 来源、发现、安装、读取、更新、来源修复、管理 Agent、复制和移除 | Skill 从来源进入本地后的业务流程变化 |
| [Skill 生命周期](./skill-lifecycle.md) | 来源、发现、安装、读取、更新、管理 Agent、复制和移除 | Skill 从来源进入本地后的业务流程变化 |
| [更新检查](./update-checking.md) | 远端版本比较、缓存、重试、限流、凭据和状态文件 | 远端版本比较或检查策略变化 |
| [系统架构](./architecture.md) | 系统边界、应用内部结构、进程与窗口、IPC 契约、平台适配、数据归属和安全保证 | 顶层模块、典型调用方向、窗口、传输接口、平台实现或数据归属变化 |
| [测试与验证规范](./testing.md) | 测试类型、覆盖范围、测试夹具、跨平台规则和断言原则 | 测试架构、平台测试能力、测试夹具或验证策略变化 |
Expand All @@ -28,7 +28,7 @@ Skill Deck 的长期文档说明当前产品、领域规则和系统约束。每
| 修改用户可见功能、页面交互或 Agent 筛选 | [产品行为与交互](./product.md),再按涉及概念进入对应主文档 |
| 修改 Skill 读取位置、Agent 检测位置、关联 Agent、筛选候选、选择分组或安装初始选择 | [Agent 模型](./agent-model.md) |
| 修改应用所在系统、Windows/WSL 切换、全局或项目行为、已添加项目、路径解析或跨文件系统访问 | [Environment、Skill 位置与项目管理](./environments-and-projects.md) |
| 修改来源、发现、安装、更新、来源修复、管理 Agent、复制或移除 | [Skill 生命周期](./skill-lifecycle.md);涉及远端检查时增加[更新检查](./update-checking.md),涉及写入机制时增加[执行与恢复](./execution-and-recovery.md) |
| 修改来源、发现、安装、更新、管理 Agent、复制或移除 | [Skill 生命周期](./skill-lifecycle.md);涉及远端检查时增加[更新检查](./update-checking.md),涉及写入机制时增加[执行与恢复](./execution-and-recovery.md) |
| 修改路由、跨窗口通信、Tauri 命令、WSL 传输或顶层依赖 | [系统架构](./architecture.md) |
| 新增或修改测试、测试夹具、平台适配器验证或 E2E | [测试与验证规范](./testing.md);修改 CI 命令时增加[贡献指南](../CONTRIBUTING.md) |
| 跟踪 `skills` CLI 版本变化 | [skills CLI 参考与兼容](./skills-cli-reference.md),再按变化类型进入受影响的领域主文档 |
Expand Down
11 changes: 11 additions & 0 deletions docs/adr/0010-use-single-writer-library-persistence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
status: accepted
---

# Skill Library 采用单写者持久化模型

Skill Library catalog 和成员目录只由当前 Skill Deck 进程写入。Tauri 单实例机制限制正常运行时的应用实例数量,`RuntimeAdmissionCoordinator` 统一控制持久化写入许可,Runtime Library Adapter 再按 Environment 串行化 catalog、成员内容和内部恢复 I/O。其他进程、命令行工具和用户直接修改 catalog 不属于受支持的写入方式。

这项取舍删除了 Native 操作系统文件锁和 WSL `flock` 守卫协议,同时保留成员条件提交、catalog 原子写入、目录备份和崩溃恢复。全局和项目 Skill 的兼容 lock 仍可能被 `skills` CLI 或用户工具修改,因此继续在提交前重新读取并检查修订。

正式支持多个 Skill Deck 实例、增加独立后台写入进程、允许其他产品写入 Library,或者让多个设备共享同一 Library 数据目录时,必须重新讨论跨进程协调协议。当前行为由[系统架构](../architecture.md#应用内部结构)、[执行与恢复](../execution-and-recovery.md#原子写入与-lock-提交)和[测试与验证规范](../testing.md#http时间与外部进程)负责说明。
Loading
Loading