openpencil/crates/op-editor-core/Cargo.toml
Kayshen-X 4adfa38bae feat(ai): chat image attachments + per-provider thinking/effort
ChatRequest gains an attachments field; ChatState carries a per-turn
thinking mode, effort level and staged attachments (capped at 4 files /
5 MiB, attachment-only sends allowed). The chat panel grows a controls
row (thinking / effort / attach) and a dedicated attachment-chip row,
with hit-test and paint sharing one input-block origin.

All five providers consume the knobs — Claude maps thinking onto the
SDK token budget, Copilot onto reasoning_effort, the CLI / built-in
transports prepend an in-band directive, the HTTP transport adds body
fields; attachments spill to a private per-turn temp dir (cleaned on
drop) or inline base64. Also wires op-ai-skills into the built-in
provider and op-acp in as the AcpProvider chat backend.
2026-05-17 22:44:28 +08:00

26 lines
1 KiB
TOML

[package]
name = "op-editor-core"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
description = "OpenPencil editor state — selection/tool/history/viewport on jian PenDocument"
[dependencies]
jian-ops-schema = { path = "../../vendor/jian/crates/jian-ops-schema" }
jian-core = { path = "../../vendor/jian/crates/jian-core" }
# Locale enum for the chrome UI state (ui_chrome.rs). op-i18n is
# dependency-free + wasm32-clean, so it doesn't compromise the
# wasm-clean invariant of op-editor-core.
op-i18n = { path = "../op-i18n" }
# Chat-request data shapes (ThinkingMode / EffortLevel / ChatAttachment)
# the chat sub-state carries. op-ai is dependency-free + wasm32-clean
# and never imports op-editor-core, so this edge is acyclic + safe.
op-ai = { path = "../op-ai" }
# render_backend.rs uses glam::Vec2 as Point2D (spec §5.2). Pinned to the
# same version op-editor-ui uses so both crates resolve one glam.
glam = { version = "0.29", default-features = false, features = ["std"] }