feat: Implement cross-canister plugin calls - #721
Draft
adamspofford-dfinity wants to merge 3 commits into
Draft
Conversation
adamspofford-dfinity
force-pushed
the
spofford/plugin-canister-access
branch
from
August 20, 2026 16:38
d7002ba to
dc17985
Compare
Contributor
There was a problem hiding this comment.
Pull request overview
Adds permission-controlled cross-canister calls for sync plugins while retaining host-canister targeting.
Changes:
- Adds manifest configuration for allowed canisters.
- Extends the plugin ABI with explicit call targets and runtime enforcement.
- Updates documentation, schemas, examples, and tests.
Reviewed changes
Copilot reviewed 14 out of 14 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
examples/icp-sync-plugin/plugin/src/lib.rs |
Targets the host canister explicitly. |
docs/schemas/icp-yaml-schema.json |
Adds the canisters schema field. |
docs/schemas/canister-yaml-schema.json |
Adds the canisters schema field. |
docs/reference/configuration.md |
Documents callable-canister configuration. |
docs/guides/writing-sync-plugins.md |
Explains target selection for authors. |
docs/concepts/sync-plugins.md |
Describes cross-canister permissions and routing. |
crates/icp/src/manifest/canister.rs |
Updates manifest test expectations. |
crates/icp/src/manifest/adapter/plugin.rs |
Parses named and principal canister references. |
crates/icp/src/canister/sync/plugin.rs |
Resolves declared callable canisters. |
crates/icp-sync-plugin/sync-plugin.wit |
Adds the call-target ABI field. |
crates/icp-sync-plugin/src/runtime.rs |
Enforces targets and routes calls accordingly. |
crates/icp-sync-plugin/src/lib.rs |
Exports callable-canister configuration. |
crates/icp-sync-plugin/DESIGN.md |
Updates plugin architecture documentation. |
crates/icp-cli/src/operations/bundle.rs |
Updates bundled plugin adapter construction. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
adamspofford-dfinity
force-pushed
the
spofford/plugin-canister-access
branch
from
August 20, 2026 17:15
dc17985 to
8a5273b
Compare
With cross-canister targeting present, the `canister-ids` table's field doc and
the DESIGN rationale should describe the real permission model: the table is
informational, and calling a listed canister requires declaring it as a
dependency (`call-target`). The mappings-branch wording ("canister-call always
targets the canister being synced") was correct only before this interface
added targeting.
adamspofford-dfinity
force-pushed
the
spofford/plugin-canister-access
branch
from
August 20, 2026 18:40
84a39da to
3055e64
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Allows plugins to call canisters other than the one they are assigned to. Canisters must be listed in a
canisterslist and, if in another project, that project must be a dependency.Stack created with GitHub Stacks CLI • Give Feedback 💬