New leaf crate op-util single-sources hex-color parsing (9 divergent copies, one with a non-ASCII panic), JSON escaping (one copy was lossy), and HTML/XML escaping (one copy missed the quote entity — an attribute-injection gap). Desktop now delegates image generate/search, settings payload serde, and the --mcp/--serve-web argv dispatch to op-host-services / op-editor-host-core instead of carrying drifted copies. Byte-identical widget_host twin files collapse into shared op-editor-core host_ui_transitions. Auth routes, the MCP port, product name, env-var names, service URLs, and status colors move to single shared constants / theme tokens; the stale claude-sonnet-4-5 default model id is corrected.
30 lines
1.1 KiB
TOML
30 lines
1.1 KiB
TOML
[package]
|
|
name = "op-cli"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
description = "OpenPencil `op` CLI — drives the editor via the HTTP MCP transport"
|
|
|
|
# The binary is `op` (the command users type); the crate is `op-cli`.
|
|
[[bin]]
|
|
name = "op"
|
|
path = "src/main.rs"
|
|
|
|
[dependencies]
|
|
base64 = "0.22"
|
|
op-ai-skills = { path = "../op-ai-skills" }
|
|
op-config-store = { path = "../op-config-store" }
|
|
# Shared MCP defaults (port + local endpoint URL helpers). Already in the
|
|
# build graph transitively via op-pen-loader, so this adds no new crates.
|
|
op-editor-core = { path = "../op-editor-core" }
|
|
jian-ops-schema = { path = "../../vendor/jian/crates/jian-ops-schema" }
|
|
op-figma = { path = "../op-figma" }
|
|
op-html = { path = "../op-html" }
|
|
op-pen-loader = { path = "../op-pen-loader", default-features = false }
|
|
op-process-io = { path = "../op-process-io" }
|
|
op-rpc-transport = { path = "../op-rpc-transport" }
|
|
# Canonical JSON string escaping (dependency-free).
|
|
op-util = { path = "../op-util" }
|
|
serde_json = { workspace = true }
|