forked from 1b-agent/opencadstudio-upstream
Found while building an out-of-tree scripting plugin from scratch against this doc and the actual ocs_plugin_api/host source. Two categories: Fixed outright (docs/examples didn't match the real code): - The worked CadModule example returned Vec<RibbonGroup> from ribbon_groups(); the real trait requires &[RibbonGroup] - the example wouldn't compile. Fixed with the OnceLock pattern the host's own benchmark code already uses. - Reconciled a contradiction between "process isolation removes the need for a shared Rust ABI" and the exact-rustc_version requirement described a few paragraphs earlier in the same doc. - The roadmap's "Next" list still had external automation as unstarted; --mcp/--serve are real and operational (src/cli.rs, src/mcp.rs). - Added the missing plugin.toml to docs/plugin-template-v2 (its own DESIGN.md already claimed one could be installed). - Documented that plugin-template's CI floats rust-toolchain@stable, which doesn't guarantee matching the host's exact rustc - added acadrust_source to both templates' plugin.toml plus the release.yml step that fills it from Cargo.lock's resolved acadrust source, alongside the existing rustc_version fill. Flagging for your call, not fixed here (found the behavior, not sure it's the intended one, prefer to ask than guess at a fix): - acadrust_compatible()'s ABI gate only runs at all if plugin.toml declares acadrust_source - an undeclared field is silently treated as compatible, unlike rustc_version (undeclared = incompatible). The same shortcut appears in two places: ExternalPlugin::acadrust_compatible (src/plugin/external.rs) and the inline check inside fetch_release_info (src/plugin/marketplace.rs). If this is deliberate (e.g. back-compat with manifests from before the field existed), no action needed beyond a comment; if not, both call sites need the same fix. - The command line still uppercases typed/pasted input even with the `>` literal-spaces prefix (Message::CommandInput, src/app/update/mod.rs) - `>` only stops a space from auto-submitting the line, it doesn't skip `s.to_uppercase()`. A plugin command needing a case-sensitive typed argument has no escape today short of automation. - fetch_release_info (src/plugin/marketplace.rs) returns every release under a linked repo with no filter on the manifest's own id field (which it already parses to build ReleaseInfo) - a repo hosting more than one plugin under tag-namespaced releases surfaces all of them mixed together in one plugin's version list. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
31 lines
1.2 KiB
TOML
31 lines
1.2 KiB
TOML
[plugin]
|
|
id = "com.example.plugin-template-v2"
|
|
name = "Plugin Template v2"
|
|
version = "0.1.0"
|
|
description = "Demonstrates read/write object round-trips with the host."
|
|
author = "Your Name"
|
|
license = "GPL-3.0-only"
|
|
repository = "your-account/your-plugin-repo"
|
|
|
|
[opencad]
|
|
api_version = 5
|
|
# Both filled at release-build time from the actual compiler and Cargo.lock's
|
|
# resolved `acadrust` source — see docs/plugin-template's release.yml for the
|
|
# exact substitution. Do not fill these in by hand. Declare acadrust_source
|
|
# even though it's optional: the host's compatibility check only runs at all
|
|
# if this field is present, so an omitted field is silently treated as
|
|
# compatible rather than rejected (see plugin-architecture.md's "Build-time
|
|
# ABI metadata"). This template ships without its own CI workflow (see
|
|
# DESIGN.md) — copy docs/plugin-template's release.yml if you turn this into
|
|
# a real, released plugin.
|
|
rustc_version = "__RUSTC_VERSION__"
|
|
acadrust_source = "__ACADRUST_SOURCE__"
|
|
ribbon_order = 100
|
|
command_prefixes = [
|
|
"COUNT_SURVEY_POINTS",
|
|
"ADD_SURVEY_POINT",
|
|
"MARK_FIRST_SURVEY_POINT",
|
|
"COUNT_MARKED_SURVEY_POINTS",
|
|
]
|
|
xdata_apps = ["SURVEYMARK"]
|