Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
ee03e70
feat: introduce intentcall_cli and intentcall_platform_sync packages …
Arenukvern Jul 6, 2026
f91e968
feat: implement manifest export checks and validation gates for ADR 0019
Arenukvern Jul 6, 2026
d4d6fd1
feat: update pubspec.lock with new dependencies and versions; enhance…
Arenukvern Jul 7, 2026
37575ce
feat: enhance catalog management with @AgentCatalog annotation, strea…
Arenukvern Jul 7, 2026
d373c74
feat: refine @AgentCatalog usage with static field support, enhance d…
Arenukvern Jul 7, 2026
2e4b137
feat: enhance example app with detailed documentation on catalog and …
Arenukvern Jul 7, 2026
ec1fbb0
feat: add projection pipeline check command and enhance entity type d…
Arenukvern Jul 7, 2026
e61d9d1
feat: enhance resource URI handling by introducing protocol scheme su…
Arenukvern Jul 7, 2026
e5d6f6c
feat: add manifest resource URI check command and enhance entity snap…
Arenukvern Jul 7, 2026
e135c8f
refactor: clean up library declarations and improve formatting in int…
Arenukvern Jul 7, 2026
b39ff0c
feat: add mcp-flutter-apple-sync-check command and enhance README wit…
Arenukvern Jul 7, 2026
e2e31f2
feat: update documentation structure and enhance intentcall_schema re…
Arenukvern Jul 7, 2026
6272b7c
feat: introduce intentcall_hooks and intentcall_bridge packages, enha…
Arenukvern Jul 8, 2026
cc162e0
feat: add intentcall_bridge package with entity open envelope support…
Arenukvern Jul 8, 2026
03040ad
refactor: deprecate intentcall_apple and intentcall_android packages,…
Arenukvern Jul 8, 2026
b0297d8
refactor: remove deprecated intentcall_apple and intentcall_android p…
Arenukvern Jul 8, 2026
2110e08
feat: add audience routing documentation and enhance navigation links…
Arenukvern Jul 8, 2026
e1db853
refactor: simplify constructor and improve formatting in IntentCallPe…
Arenukvern Jul 8, 2026
9f22242
feat: add apple-runner-compile-check command and update Swift imports…
Arenukvern Jul 9, 2026
2c8464a
feat: implement IntentCallNativeBridge for native handoff and update …
Arenukvern Jul 9, 2026
5bd11e1
docs: update documentation to include details on Apple compile checks…
Arenukvern Jul 9, 2026
d1f66c8
Merge branch 'main' into feat/intentcall-cli
Arenukvern Aug 2, 2026
83c8e7a
docs: readme
Arenukvern Aug 2, 2026
ee053c4
feat: add from_json_to_json and is_dart_empty_or_not dependencies, re…
Arenukvern Aug 3, 2026
7c29a40
fix: gitignore
Arenukvern Aug 3, 2026
ac52964
chore: update pubspec.lock and generated JavaScript files to include …
Arenukvern Aug 3, 2026
f183399
refactor: rename ArraySchema to ListSchema in documentation and tests…
Arenukvern Aug 3, 2026
711c25d
refactor: streamline stdout logging in _HooksSpineCommand and improve…
Arenukvern Aug 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
406 changes: 406 additions & 0 deletions .cursor/plans/adr_0019_closure_plan_762cf2a1.plan.md

Large diffs are not rendered by default.

8 changes: 7 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,13 @@ jobs:
run: dart pub get

- name: test
run: dart test packages/intentcall_schema packages/intentcall_core packages/intentcall_session packages/intentcall_mcp packages/intentcall_webmcp packages/intentcall_gemma packages/intentcall_apple packages/intentcall_android packages/intentcall_platform packages/intentcall_codegen packages/intentcall_testing tool/intentcall
run: just test

- name: ADR 0019 validation gates
run: just adr-gates

- name: projection pipeline check
run: just projection-pipeline-check

- name: analyze
run: dart analyze .
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-pr-sync-train.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,6 @@ jobs:
fi
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add packages/*/pubspec.yaml packages/intentcall_platform/ios/intentcall_platform.podspec packages/intentcall_platform/macos/intentcall_platform.podspec
git add packages/*/pubspec.yaml
git commit -m "chore: sync release train metadata"
git push origin HEAD:${{ github.head_ref }}
10 changes: 7 additions & 3 deletions .release-please-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,13 @@
"packages/intentcall_session": "0.6.0",
"packages/intentcall_mcp": "0.6.0",
"packages/intentcall_webmcp": "0.6.0",
"packages/intentcall_apple": "0.6.0",
"packages/intentcall_android": "0.6.0",
"packages/intentcall_codegen": "0.6.0",
"packages/intentcall_platform_sync": "0.6.0",
"packages/intentcall_hooks": "0.6.0",
"packages/intentcall_bridge": "0.6.0",
"packages/intentcall_cli": "0.6.0",
"packages/intentcall_platform": "0.6.0",
"packages/intentcall_platform_apple": "0.6.0",
"packages/intentcall_platform_android": "0.6.0",
"packages/intentcall_testing": "0.6.0"
}
}
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ npx skills add arenukvern/skill_steward

| Question | Go to |
|---|---|
| Which audience / setup lane? | [docs/start_here/audiences.mdx](docs/start_here/audiences.mdx) |
| Where is the full doc map? | [docs/start_here/docs_map.mdx](docs/start_here/docs_map.mdx) |
| What does this repo own? | [docs/NORTH_STAR.mdx](docs/NORTH_STAR.mdx) |
| Why is it built this way? | [docs/DESIGN_FAQ.mdx](docs/DESIGN_FAQ.mdx) |
Expand Down Expand Up @@ -61,3 +62,4 @@ When writing code, documentation, or planning features:
3. Run `steward probe --json --profile quick` for the safe first pass.
4. Run `steward benchmark --scenario intentcall.adapter-contract --json` for the first dogfood loop.
5. The repository uses standardized agent skills under `.agents/skills/` and distributable skills under `skills/`; skills remain installed separately from hook/plugin wiring.
6. Apple generated Swift compile proof runs in the mcp_flutter dogfood repo (`tool/contracts/check_apple_runner_compile.sh`, wired into `make check-contracts`). From agentkit with a sibling checkout: `just apple-runner-compile-check`.
11 changes: 10 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Thanks for your interest! IntentCall is a pre-release platform library. Contribu

## Prerequisites

- [Dart SDK](https://dart.dev/get-dart) `^3.11.0`
- [Dart SDK](https://dart.dev/get-dart) `^3.12.0`
- [Flutter SDK](https://flutter.dev/docs/get-started/install) (stable) — required for `intentcall_platform`
- [just](https://github.com/casey/just) task runner (recommended)
- [Node.js](https://nodejs.org/) `>=18` and [pnpm](https://pnpm.io/) `>=9` — for `just docs-check` (docs.page link validation)
Expand All @@ -27,6 +27,15 @@ pnpm install # once
just docs-check
```

If you changed Apple projection (`intentcall_platform_sync` emitters or
`intentcall_platform_apple` Swift facades), also run the dogfood compile gate
with sibling [mcp_flutter](https://github.com/Arenukvern/mcp_flutter) checked
out next to this repo:

```bash
just apple-runner-compile-check # delegates to mcp_flutter/tool/contracts/check_apple_runner_compile.sh
```

Agent/operator preflight starts with the declared Steward surface:

```bash
Expand Down
14 changes: 9 additions & 5 deletions PUBLISHING.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,11 @@ intentcall_core-v{{version}}
intentcall_session-v{{version}}
intentcall_mcp-v{{version}}
intentcall_webmcp-v{{version}}
intentcall_apple-v{{version}}
intentcall_android-v{{version}}
intentcall_codegen-v{{version}}
intentcall_platform_sync-v{{version}}
intentcall_hooks-v{{version}}
intentcall_bridge-v{{version}}
intentcall_cli-v{{version}}
intentcall_platform-v{{version}}
intentcall_testing-v{{version}}
```
Expand All @@ -71,9 +73,11 @@ uses GitHub OIDC through `dart-lang/setup-dart`.
1. `intentcall_schema`
2. `intentcall_core`
3. `intentcall_session`
4. `intentcall_mcp`, `intentcall_webmcp`, `intentcall_apple`, `intentcall_android`, `intentcall_codegen`
5. `intentcall_platform` (Flutter plugin — may need `flutter pub publish`)
6. `intentcall_testing`
4. `intentcall_mcp`, `intentcall_webmcp`, `intentcall_codegen`
5. `intentcall_platform_sync`, `intentcall_hooks`, `intentcall_bridge`, `intentcall_cli`
6. `intentcall_platform` (Flutter plugin — may need `flutter pub publish`)
7. `intentcall_platform_apple`, `intentcall_platform_android` (federated impls)
8. `intentcall_testing`

## Commands

Expand Down
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,11 @@ GitHub: [Arenukvern/intentcall](https://github.com/Arenukvern/intentcall)
| `intentcall_session` | [![pub package](https://img.shields.io/pub/v/intentcall_session.svg?include_prereleases)](https://pub.dev/packages/intentcall_session) [![pub points](https://img.shields.io/pub/points/intentcall_session.svg)](https://pub.dev/packages/intentcall_session/score) | Runtime session lifecycle, persisted session state, snapshots, and registry execution inside a session |
| `intentcall_mcp` | [![pub package](https://img.shields.io/pub/v/intentcall_mcp.svg?include_prereleases)](https://pub.dev/packages/intentcall_mcp) [![pub points](https://img.shields.io/pub/points/intentcall_mcp.svg)](https://pub.dev/packages/intentcall_mcp/score) | MCP publish adapter and MCP mapping (`dart_mcp`) |
| `intentcall_webmcp` | [![pub package](https://img.shields.io/pub/v/intentcall_webmcp.svg?include_prereleases)](https://pub.dev/packages/intentcall_webmcp) [![pub points](https://img.shields.io/pub/points/intentcall_webmcp.svg)](https://pub.dev/packages/intentcall_webmcp/score) | WebMCP hot-sync adapter |
| `intentcall_apple` | [![pub package](https://img.shields.io/pub/v/intentcall_apple.svg?include_prereleases)](https://pub.dev/packages/intentcall_apple) [![pub points](https://img.shields.io/pub/points/intentcall_apple.svg)](https://pub.dev/packages/intentcall_apple/score) | Apple manifest projection for App Intents / Shortcuts dispatch artifacts and first typed-entity/indexing direction |
| `intentcall_android` | [![pub package](https://img.shields.io/pub/v/intentcall_android.svg?include_prereleases)](https://pub.dev/packages/intentcall_android) [![pub points](https://img.shields.io/pub/points/intentcall_android.svg)](https://pub.dev/packages/intentcall_android/score) | Android manifest codegen for shortcut and deep-link artifacts |
| `intentcall_platform` | [![pub package](https://img.shields.io/pub/v/intentcall_platform.svg?include_prereleases)](https://pub.dev/packages/intentcall_platform) [![pub points](https://img.shields.io/pub/points/intentcall_platform.svg)](https://pub.dev/packages/intentcall_platform/score) | Native/web emitters, protocol fallback artifacts, and Flutter plugin |
| `intentcall_platform_sync` | [![pub package](https://img.shields.io/pub/v/intentcall_platform_sync.svg?include_prereleases)](https://pub.dev/packages/intentcall_platform_sync) | Dart-only manifest, emitters, and `PlatformSync` |
| `intentcall_hooks` | [![pub package](https://img.shields.io/pub/v/intentcall_hooks.svg?include_prereleases)](https://pub.dev/packages/intentcall_hooks) | Dart build hooks for manifest export and platform sync |
| `intentcall_bridge` | [![pub package](https://img.shields.io/pub/v/intentcall_bridge.svg?include_prereleases)](https://pub.dev/packages/intentcall_bridge) | Pigeon IDL and generated Dart bindings for the platform bridge |
| `intentcall_cli` | [![pub package](https://img.shields.io/pub/v/intentcall_cli.svg?include_prereleases)](https://pub.dev/packages/intentcall_cli) | Framework-neutral CLI: manifest export, platform sync, MCP serve |
| `intentcall_platform` | [![pub package](https://img.shields.io/pub/v/intentcall_platform.svg?include_prereleases)](https://pub.dev/packages/intentcall_platform) [![pub points](https://img.shields.io/pub/points/intentcall_platform.svg)](https://pub.dev/packages/intentcall_platform/score) | Flutter runtime host / federated umbrella (re-exports `intentcall_platform_sync`) |
| `intentcall_codegen` | [![pub package](https://img.shields.io/pub/v/intentcall_codegen.svg?include_prereleases)](https://pub.dev/packages/intentcall_codegen) [![pub points](https://img.shields.io/pub/points/intentcall_codegen.svg)](https://pub.dev/packages/intentcall_codegen/score) | Optional `@AgentTool` codegen |
| `intentcall_testing` | [![pub package](https://img.shields.io/pub/v/intentcall_testing.svg?include_prereleases)](https://pub.dev/packages/intentcall_testing) [![pub points](https://img.shields.io/pub/points/intentcall_testing.svg)](https://pub.dev/packages/intentcall_testing/score) | Contract / invoke test helpers |

Expand Down
1 change: 0 additions & 1 deletion analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ analyzer:
# Incremental cleanup: style infos remain visible but do not fail CI.
lines_longer_than_80_chars: ignore
public_member_api_docs: ignore
unnecessary_library_directive: ignore
exclude:
- "**/*.g.dart"
- packages/intentcall_codegen/example/**
Expand Down
65 changes: 54 additions & 11 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,26 +30,69 @@
{
"group": "Start Here",
"pages": [
{ "title": "Overview", "href": "/" },
{ "title": "How it works", "href": "/start_here/how_it_works" },
{ "title": "Choose your path", "href": "/start_here/choose_your_path" },
{ "title": "Platform support", "href": "/start_here/platform_support" },
{ "title": "Roadmap", "href": "/start_here/roadmap" },
{ "title": "North Star", "href": "/NORTH_STAR" },
{ "title": "Docs map", "href": "/start_here/docs_map" }
{
"title": "Overview",
"href": "/"
},
{
"title": "Who is this for?",
"href": "/start_here/audiences"
},
{
"title": "How it works",
"href": "/start_here/how_it_works"
},
{
"title": "Choose your path",
"href": "/start_here/choose_your_path"
},
{
"title": "Platform support",
"href": "/start_here/platform_support"
},
{
"title": "Roadmap",
"href": "/start_here/roadmap"
},
{
"title": "North Star",
"href": "/NORTH_STAR"
},
{
"title": "Docs map",
"href": "/start_here/docs_map"
}
]
},
{
"group": "Packages",
"pages": [
{
"title": "intentcall_schema",
"href": "/packages/intentcall_schema"
}
]
},
{
"group": "FAQs",
"pages": [
{ "title": "Design FAQ", "href": "/DESIGN_FAQ" },
{ "title": "DX FAQ", "href": "/DX_FAQ" }
{
"title": "Design FAQ",
"href": "/DESIGN_FAQ"
},
{
"title": "DX FAQ",
"href": "/DX_FAQ"
}
]
},
{
"group": "Decisions",
"pages": [
{ "title": "Index", "href": "/decisions/README" },
{
"title": "Index",
"href": "/decisions/README"
},
{
"title": "0010 — IntentCall product name",
"href": "/decisions/0010-adopt-intentcall-product-name"
Expand Down Expand Up @@ -127,4 +170,4 @@
]
}
]
}
}
13 changes: 11 additions & 2 deletions docs/DESIGN_FAQ.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,23 @@ A: Test helpers have `test` as a dependency, which must not bleed into productio
**Q: Why is there an `intentcall_codegen` package?**
A: Codegen is strictly optional — many adopters will register intents by hand. Keeping it separate means the core registry has zero `build_runner` dependency, and users who opt in to `@AgentTool` get a clean code-generation surface without it affecting tree-shaking for others.

**Q: Why `intentcall_cli` instead of `flutter-mcp-toolkit` for platform sync?**
A: Platform projection (`agent_manifest.json`, native emitters, `PlatformSync`) is framework-agnostic. `intentcall_cli` owns that contract; [mcp_flutter](https://github.com/Arenukvern/mcp_flutter) delegates to it. See [ADR 0019](decisions/0019-framework-neutral-intentcall-cli.md).

**Q: Why is `agent_manifest.json` generated rather than hand-edited?**
A: Manifest rows are a projection cache for platform emitters, not a second runtime catalog. Semantic truth lives in `AgentRegistry`; projection policy lives in `@AgentProjection` or `.intentcall/projection.yaml`. CI proves manifest freshness with `intentcall manifest export --check`.

**Q: Why is IntentPack direction separate from today's registry API?**
A: `AgentRegistry`, `AgentCallEntry`, and `RegisteredAgentIntent` are the current shipped authoring/runtime model. IntentPack is the proposed portable packaging layer above them: one app-level unit that can carry entries, schemas, examples, side-effect metadata, safety policy, platform projection hints, adapter hints, and compatibility metadata. Keeping that distinction explicit lets the repo document the destination without pretending the stable public API already exists.

**Q: Why are additive actions, typed entities, and indexing lifecycle not a new core runtime?**
A: They are a projection layer over the existing source concepts. Actions remain registry entries. Typed entities are app-owned Dart snapshots with stable ids, display fields, and search/index fields. Indexing or donation is a lifecycle that copies those snapshots into a platform projection cache. Keeping this additive avoids turning `intentcall_core` into an Apple-shaped runtime while still letting Apple be the first concrete typed-entity/indexing projection. See [ADR 0018](decisions/0018-additive-actions-typed-entities-indexing-lifecycle.md).

**Q: Why are there separate `intentcall_apple` / `intentcall_android` / `intentcall_gemma` packages instead of one `intentcall_native`?**
A: Native surface adapters differ sharply in their platform SDKs and entitlement requirements. A single `intentcall_native` would force all three sets of platform SDKs into every build. Platform-specific packages let Flutter tree-shaker and pubspec `platforms` keys exclude irrelevant targets cleanly.
**Q: Why were `intentcall_apple` / `intentcall_android` removed, and what replaced them?**
A: Those packages were sparse-manifest generators. They were **deleted** (zero consumers, pre-1.0). Canonical projection is `intentcall_platform_sync` (`PlatformSync` / `ManifestExporter`). Runtime native code lives in federated Flutter plugins `intentcall_platform_apple` / `intentcall_platform_android` under the `intentcall_platform` umbrella ([ADR 0025](decisions/0025-platform-subset-federated-plugins.md)). On Apple, generated `AppIntent` structs compile in the app `Runner` target but import `intentcall_platform_apple` for handoff (`IntentCallNativeBridge.enqueue`) and snapshot stores — do not duplicate that logic in emitted Swift. `intentcall_gemma` remains a separate surface adapter.

**Q: Why are there two `IntentCallNativeBridge` types?**
A: Different languages, same handoff story. Dart `IntentCallNativeBridge.bindRegistry(...)` in `intentcall_platform_sync` authorizes envelopes into the registry after the app wakes. Swift `IntentCallNativeBridge.enqueue(...)` in `intentcall_platform_apple` queues native App Intent invocations and optionally opens the app-owned `protocolScheme` URL. Generated Runner Swift calls the Swift facade only.

## Runtime sessions

Expand Down
Loading
Loading