Architecture: How should plugins declare cross-platform compatibility — st...
Documentation for Sessions
🏗️ Architecture: How should plugins declare cross-platform compatibility — st...
Date: 2026-03-23
Time: 17:01:54 UTC
Session: gspace1-258.3
Agent: angular
Confidence: 91%
Status: ✅ Documented
📋 Decision Context
Question:
How should plugins declare cross-platform compatibility — static platform lists or capability negotiation?
Task: S258: Plugin platform compatibility system
🎯 Decision Made
Chosen:
Capability negotiation with explicit platform override. Plugins declare requires: PlatformCapability[] (what they need). Platforms declare PLATFORM_CAPABILITIES (what they provide). Resolver matches at composition time. Optional platforms?: PluginPlatform[] override takes precedence for inherently platform-specific plugins.
Options Considered:
- Static platform declaration per plugin (simple but O(plugins*platforms) maintenance)
- Capability negotiation with override (chosen — O(1) per new platform)
- No filtering, all plugins everywhere (breaks on missing APIs)
💭 Reasoning
Static platform lists (platforms: ['web', 'vscode']) require editing every plugin when a new platform is added. With capability negotiation, adding React Native mobile means defining its capabilities once — all compatible plugins automatically work. The override escape hatch (platforms field) handles edge cases like an ide-diagnostics plugin that is conceptually meaningless outside VSCode even if mobile gained diagnostics capability. 17 plugins analyzed: 10 require [] (universal), 4 require component-rendering, 1 requires speech-api, 1 requires drag-drop, 1 requires route-context.
📁 Files Involved
libs/libs-ai/chat-plugin-core/src/lib/types/plugin-capabilities.tslibs/libs-ai/chat-plugin-core/src/lib/interfaces/plugin-resolution.ts
🔗 Related
- Decision ID:
dev_1774285314457_hi9j9ad - Session: 258
- Workspace: gspace1
Auto-generated by MCP Smart Consolidation