openpencil/Cargo.toml
Kayshen-X a3d142f586 build(deps): vendor casement (winit fork) as a submodule
The casement crate was depended on through a sibling-repo path
(`../../../winit`) that only existed on the maintainer's machine,
so CI couldn't load the workspace manifest and every Rust Check
job died with "failed to read winit/Cargo.toml".

Vendoring it as a real submodule under `vendor/casement` (matching
the `vendor/jian` pattern, picked up by CI's `submodules:
recursive` checkout) closes that gap. The renamed GitHub repo
`ZSeven-W/casement` (was `ZSeven-W/winit`) tracks the `op-file-open`
branch — `feat(macos): drain_opened_file_urls` + the package rename
landed there as commit 5877fa83.

- `.gitmodules`: add vendor/casement.
- Root Cargo.toml: exclude vendor/casement from the workspace glob
  (it's its own workspace).
- op-host-native + op-host-desktop: path = "../../vendor/casement".
2026-05-21 22:23:34 +08:00

70 lines
2.8 KiB
TOML

[workspace]
resolver = "2"
# Use a glob instead of an explicit list: incremental crate creation in Step 0
# does not require editing `members` each time (per implementer Phase 1 batch 2
# workspace-masking feedback: listing a non-existent crate makes `cargo build -p X`
# fail at the resolve stage). The glob picks up every manifest under crates/,
# naturally supporting incremental creation.
members = ["crates/*"]
exclude = [
"vendor/agent",
"vendor/anthropic-agent-sdk",
"vendor/casement",
"vendor/jian",
"vendor/skia-safe-op",
"node_modules",
]
[workspace.package]
version = "0.1.0"
edition = "2021"
rust-version = "1.85"
license = "MIT"
authors = ["ZSeven-W <fini.yang@gmail.com>"]
repository = "https://github.com/ZSeven-W/openpencil"
[workspace.dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"
thiserror = "1"
anyhow = "1"
tracing = "0.1"
# WASM-boundary related (per kickoff §1.2 blacklist = must not appear here).
# Intentionally NOT exposing tokio / reqwest / agent / pen-agent-cli /
# pen-server / native-tls in workspace.dependencies — these are used only
# inside native-only crates via dev-deps or target-specific deps.
# Step 1b §3.2 P0.5B Run path (2026-05-09): wasm32-unknown-unknown skia
# build via `vendor/skia-safe-op` — fork of rust-skia 0.97.0 with a new
# build_support/platform/wasm_unknown.rs target that produces .o files
# free of emscripten runtime imports.
#
# IMPORTANT: `[patch.crates-io]` is workspace-global, NOT target-scoped.
# Every `skia-safe` / `skia-bindings` consumer in this workspace —
# including `op-host-native` (macOS / Linux / Windows desktop,
# `gl` feature) — now resolves through this fork on every target.
# Cargo does not natively support per-target patches, so this is the
# accepted blast radius.
#
# Compatibility surface vs upstream rust-skia 0.97.0:
# - every upstream platform module (macos / linux / windows /
# emscripten / android / ios / ohos / alpine) is byte-identical;
# only `wasm_unknown` is new
# - the dispatch table adds one new arm for
# `("wasm32", "unknown", "unknown", _)`; every existing target
# tuple still resolves to the same upstream module as before
# - the binary-cache feature URL + skia-binaries archive layout are
# untouched, so native desktop builds continue to download the
# prebuilt artifact instead of compiling Skia from source
#
# Trade-offs accepted:
# - upstream rust-skia patches will not flow until we re-vendor
# - `Cargo.lock` records `path` sources for skia-bindings/skia-safe
# instead of `registry+…`, surfacing the fork in audit tools
#
# When upstream rust-skia ships a wasm32-unknown-unknown platform
# module of its own, this whole [patch] block can go away.
[patch.crates-io]
skia-bindings = { path = "vendor/skia-safe-op/skia-bindings" }
skia-safe = { path = "vendor/skia-safe-op/skia-safe" }