intentcall_platform_sync
PRE-RELEASE — Dart-only platform manifest, emitters, and sync for IntentCall.
The projection layer between an app's compiled registry catalog and the
platform artifacts agents consume. It reads the build_runner-generated
lib/generated/agent_catalog.g.dart, merges it with hand-curated
manifest metadata, and emits/validates everything downstream:
- Agent manifest —
web/agent_manifest.jsonprojection (intentcall manifest export --checkkeeps it honest). - Catalog loading — probe-and-load the generated catalog
(
CatalogLoader), including entity type descriptors. - Platform emitters — WebMCP bootstrap JS, Apple (Swift/App Intents) and Android runner scaffolds, Gradle/Xcode hook spines.
- Sync —
intentcall platform syncwrites platform artifacts;--checkreports drift (CI gate). - Invocation — protocol fallback (
<scheme>://invoke/...) link records and discovery.
Pure Dart: no Flutter SDK, no plugin surfaces. Pair it with
intentcall_cli for the command surface and intentcall_core for the
runtime registry.
WebMCP projection API
The Dart-first WebMCP bootstrap projects an app's entries/registry onto the
browser's window.webMcp surface. Every entry point takes an explicit
IntentCallAuthorizationPolicy — nothing registers WebMCP tools without
one:
import 'package:intentcall_platform_sync/intentcall_platform_sync.dart';
// Composable with the Flutter MCP Toolkit's projection SPI: pass
// `projection.entriesChanged` to `MCPToolkitBinding.addEntryListener`.
const projection = WebMcpProjection(
policy: IntentCallAuthorizationPolicy.denyAll(), // or an explicit allowlist
);
binding.addEntryListener(projection.entriesChanged);
// One-shot forms:
projectEntriesToWebMcp(entries, policy: myPolicy);
projectRegistryToWebMcp(registry, policy: myPolicy, surfaceIndex: index);
debugAllowAll() is open only while Dart assertions are enabled and behaves
like denyAll() in compiled profile/release builds — pass it deliberately,
for local dogfood only. Emitter and sync truth (PlatformSync, the Apple /
Android / web emitters, kPlatformSyncTargets) also lives here; the CLI
verbs over it live in intentcall_cli.
Libraries
- intentcall_platform_sync
- io
- VM and server transports. Do not import this from Flutter web or Jaspr client code.