Skip to content

[codex] Extract session broker surfaces#100

Merged
Arenukvern merged 22 commits into
mainfrom
codex/session-broker
Jul 5, 2026
Merged

[codex] Extract session broker surfaces#100
Arenukvern merged 22 commits into
mainfrom
codex/session-broker

Conversation

@Arenukvern

@Arenukvern Arenukvern commented Jun 22, 2026

Copy link
Copy Markdown
Owner

Summary

  • Moves the session/persistence ownership toward IntentCall-backed session surfaces and removes stale local session-manager/persistence copies from mcp_server_dart.
  • Integrates the published hosted IntentCall packages from pub.dev and removes the temporary git dependency overrides.
  • Normalizes dynamic registry and command result mapping so the server side can consume IntentCall-shaped results without private/internal duplication.
  • Hardens runtime commandability: semantic snapshots expose viewport visibility, offscreen taps fail honestly, reveal/search reports tappability, and the exec sweep refreshes visible refs before interactions.
  • Improves desktop-window capture diagnostics and validate-runtime fallback reporting so missing host context and helper retry details are visible instead of flattened into a generic screenshot failure.

Why

Downstream tools need a reusable realtime broker/session foundation without importing Flutter-VM-shaped internals. This keeps Flutter-specific VM service, screenshots, and extension calls as adapters while consuming the shared session/result/registration surfaces through published IntentCall packages.

Validation

  • flutter pub get resolves intentcall_core, intentcall_mcp, and intentcall_session from hosted https://pub.dev.
  • dart analyze packages/server_capability_kernel packages/server_capability_core mcp_server_dart mcp_toolkit
  • flutter test test/control_flow_service_test.dart test/agent_entry_helpers_test.dart test/mcp_toolkit_bootstrap_test.dart test/semantic_snapshot_surface_test.dart from mcp_toolkit
  • dart test mcp_server_dart/test/core_executor_test.dart mcp_server_dart/test/dynamic_registry_input_schema_test.dart mcp_server_dart/test/registry_discovery_service_test.dart mcp_server_dart/test/session_manager_test.dart mcp_server_dart/test/command_snapshot_service_test.dart mcp_server_dart/test/desktop_capture_recovery_test.dart mcp_server_dart/test/platform_view_capture_flow_test.dart mcp_server_dart/test/desktop_window_screenshot_test.dart
  • dart test packages/server_capability_kernel/test packages/server_capability_core/test mcp_server_dart/test/agent_registry_host_test.dart mcp_server_dart/test/host_test.dart mcp_server_dart/test/host_extras_test.dart mcp_server_dart/test/flutter_inspector_resources_test.dart
  • Live validate-runtime without global desktop flags: ok:true, verdict:pass_with_fallback, failure details now report missing_flutter_device.
  • Live validate-runtime with --flutter-device macos --flutter-project-dir flutter_test_app: ok:true, verdict:pass, captureMode:desktop_window, no fallback.
  • Live scripts/run_exec_sweep.sh: PASS=35 FAIL=0 SKIP=0.
  • steward probe --json --profile quick
  • git diff --check

Notes

GitNexus change detection originally reported CRITICAL for the branch because the PR intentionally touches the broader session/broker/dynamic-registry flow. The hosted-package integration itself reports low risk in change detection; the shim impact is medium because it feeds the capability-kernel public surface and is covered by capability/host registration tests.

Summary by CodeRabbit

  • New Features
    • Added fmtk as a short alias for the Flutter MCP Toolkit CLI (installed alongside the main binaries).
    • Expanded the bundled fmt_* tool surface to 30.
    • Added AppIntentsTesting scaffold generation guidance and enhanced webmcp verify with tool-specific assertions.
  • Documentation
    • Refreshed README/quick-start, strengthened IntentCall boundary guidance, and updated security/contribution materials.
  • Bug Fixes
    • Improved WebMCP detection/verification reliability and enriched validate-runtime and capture diagnostics output.
  • Breaking Changes
    • Removed compatibility guarantees for certain internal session/state/snapshot re-exports; import equivalent types from intentcall_session instead.

@docs-page

docs-page Bot commented Jun 22, 2026

Copy link
Copy Markdown

To preview the documentation for this pull request, visit the following URL:

docs.page/arenukvern/mcp_flutter~100

Documentation is deployed and generated using docs.page

@coderabbitai

coderabbitai Bot commented Jun 22, 2026

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR adds the fmtk CLI alias, migrates session and snapshot wiring to hosted IntentCall packages, expands the Flutter showcase app’s IntentCall integration, and updates the related docs, scripts, tests, and validation gates.

Changes

Alias, policy, and docs

Layer / File(s) Summary
Alias surface and contracts
tool/contracts/check_cli_alias_surface.sh, tool/contracts/check_no_personal_paths.sh, makefile, steward.yaml, steward/scenarios/mcp_flutter.intentcall-hosted-cutover.yaml, tool/intentcall/check_no_path_deps.sh, tool/intentcall/check_no_path_deps_test.sh
Adds checks for the fmtk surface and strict hosted dependency validation, and wires them into the contract, make, and steward flows.
Documentation, ADRs, and policy
decisions/*, CHANGELOG.md, README.md, docs/*, plugin/README.md, mcp_server_dart/README.md, mcp_toolkit/README.md, plugin/skills/*, mcp_server_dart/lib/src/skill_assets.g.dart, AGENTS.md, ARCHITECTURE.md, QUICK_START.md
Updates CLI naming, tool-count references, onboarding docs, ADRs, policy docs, and skill guidance to describe the alias and the revised tool surface.

IntentCall server and toolkit migration

Layer / File(s) Summary
Session and snapshot services
mcp_server_dart/lib/src/cli/session/*, mcp_server_dart/lib/src/cli/diagnostics/*, mcp_server_dart/lib/src/cli/cli_daemon_server.dart, mcp_server_dart/bin/flutter_mcp_toolkit.dart, mcp_server_dart/lib/flutter_mcp_core.dart, mcp_server_dart/lib/src/shared_core/*, mcp_server_dart/pubspec.yaml, mcp_server_dart/makefile, mcp_server_dart/test/*
Replaces the local session/state/snapshot implementation with IntentCall-backed connectors, stores, and barrel exports, and updates the corresponding CLI wiring and tests.
Dynamic registry routing
mcp_server_dart/lib/src/capabilities/dynamic_registry/*, mcp_server_dart/lib/src/mcp_toolkit_server/mixins/dynamic_registry_integration.dart, mcp_server_dart/lib/src/shared_core/agent_result_mapper.dart, mcp_server_dart/lib/src/cli/webmcp_command.dart, mcp_server_dart/lib/src/cli/appintents_testing_command.dart, mcp_server_dart/docs/*
Routes tool/resource invocation through AgentRegistry, normalizes dynamic text payloads, updates WebMCP verification, and adds AppIntentsTesting codegen plus docs/tests.
Dependency and export migration
packages/server_capability_*/*, mcp_toolkit/pubspec.yaml, packages/core/pubspec.yaml, mcp_server_dart/pubspec.yaml, tool/intentcall/print_hosted_deps.sh
Bumps intentcall_* versions to ^0.6.0 and switches kernel re-exports to intentcall_core.

Flutter showcase app integration

Layer / File(s) Summary
Showcase runtime and tools
flutter_test_app/lib/main.dart, flutter_test_app/lib/intentcall_showcase_bootstrap.dart, flutter_test_app/lib/intentcall_showcase_entries.dart, flutter_test_app/lib/agent_state.dart, flutter_test_app/lib/showcase_screen.dart
Adds IntentCall proof entries, showcase entity seeding, startup wiring, and bidirectional state/UI sync.
Platform wiring
flutter_test_app/android/*, flutter_test_app/ios/*, flutter_test_app/macos/*, flutter_test_app/linux/*, flutter_test_app/windows/*, flutter_test_app/web/*, flutter_test_app/pubspec.yaml
Adds the new URL scheme, generated plugin registration, Swift package integration, app manifest updates, and web modelContext/tool bootstrap changes.
Showcase fixtures and tests
flutter_test_app/tool/*, flutter_test_app/test/*, flutter_test_app/INTENTCALL_PLATFORM.md
Adds AppIntentsTesting fixtures and test coverage for showcase reactivity and platform proofs.

Visibility, gesture, and reveal-search behavior

Layer / File(s) Summary
Semantic visibility and gestures
mcp_toolkit/lib/src/services/semantic_snapshot_service.dart, mcp_toolkit/lib/src/services/gesture_interaction_service.dart, mcp_toolkit/lib/src/toolkits/interaction_toolkit.dart, packages/core/lib/src/tools/interaction_input_schemas.dart, packages/server_capability_core/lib/src/tools/interaction_tools.dart
Adds viewport visibility metadata and web-aware gesture/scroll verification, and updates the interaction descriptions and schemas to use snapshotId.
Reveal search
mcp_toolkit/lib/src/services/reveal_search_service.dart
Requires actionable viewport matches and exposes not-actionable result helpers.
Tests and docs
mcp_toolkit/test/*, mcp_toolkit/README.md, mcp_toolkit/lib/src/mcp_toolkit_binding.dart, mcp_toolkit/lib/src/mcp_toolkit_extensions.dart
Updates tests and package docs for the new visibility and interaction behavior.

Proof scripts, evals, and build tooling

Layer / File(s) Summary
Scripts and evals
scripts/*, tool/evals/*, tool/contracts/check_intentcall_integration.sh, .github/workflows/intentcall_publish_dry_run.yml, tool/release/build_release_artifacts.sh
Updates scripted proof flows, web showcase setup, and runtime validation behavior.
Skill assets and checks
mcp_server_dart/tool/build_skill_assets.dart, mcp_server_dart/lib/src/skill_assets.g.dart, plugin/.codex-plugin/plugin.json, plugin/assets/DESIGN.md
Refreshes generated skill assets, boundary-audit content, and plugin metadata to match the new tool and repo boundaries.

Estimated code review effort: 5 (Critical) | ~150 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and matches the main change: extracting session broker surfaces and moving session ownership to IntentCall-backed interfaces.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/session-broker

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

# Conflicts:
#	packages/server_capability_core/pubspec.yaml
#	packages/server_capability_kernel/pubspec.yaml
@Arenukvern Arenukvern self-assigned this Jun 24, 2026
- Adjusted project indexing in AGENTS.md to reflect updated symbol and relationship counts.
- Updated CHANGELOG.md to document breaking changes in `flutter_mcp_core.dart` and the migration of canonical types to `intentcall_core`.
- Added a new command in steward.yaml to check for stale local or root path dependencies in hosted IntentCall.
- Updated README.md to reflect the new consumer package policy for IntentCall version 0.2.1.
- Enhanced the gesture interaction service to handle web-specific scrolling actions and added new utility functions for semantic snapshot services.
- Improved tests for registry discovery and semantic snapshot functionalities.
- Cleaned up legacy artifacts in the exec sweep script and ensured proper version checks for IntentCall dependencies.
@Arenukvern
Arenukvern marked this pull request as ready for review July 4, 2026 14:44
@Arenukvern
Arenukvern enabled auto-merge July 4, 2026 14:44
@Arenukvern
Arenukvern disabled auto-merge July 4, 2026 14:57

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 9

🧹 Nitpick comments (22)
flutter_test_app/lib/agent_state.dart (1)

62-70: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add a brief doc comment for the new test-only member.

As per coding guidelines, "Document all public members (methods, properties, etc.) with clear, concise explanations of their purpose and usage in Dart." resetForTest() is @visibleForTesting (effectively public) but has no /// comment.

📝 Proposed doc comment
+  /// Resets all tracked state to defaults for deterministic tests.
   `@visibleForTesting`
   void resetForTest() {
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@flutter_test_app/lib/agent_state.dart` around lines 62 - 70, Add a brief Dart
doc comment for the test-only public method resetForTest() in AgentState.
Document its purpose clearly and concisely with a /// comment placed immediately
above the `@visibleForTesting` member, noting that it resets the internal state
fields and notifies listeners for tests.

Source: Coding guidelines

mcp_server_dart/lib/src/cli/appintents_testing_command.dart (3)

93-149: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚖️ Poor tradeoff

Manual JSON casting instead of from_json_to_json helpers.

_readJsonObjectFile and the inner switch casts in readAppIntentsTestingSampleArguments/readAppIntentsTestingEntityFixtures hand-roll the "decode object, validate shape, throw on invalid input" pattern. As per coding guidelines, Dart files should "Always use the from_json_to_json package for type-safe JSON handling" and "Use jsonDecodeThrowableMap() when you need exceptions on invalid input," which would replace this bespoke casting/validation logic.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp_server_dart/lib/src/cli/appintents_testing_command.dart` around lines 93
- 149, The JSON parsing in readAppIntentsTestingSampleArguments,
readAppIntentsTestingEntityFixtures, and _readJsonObjectFile is hand-rolling
casts and validation instead of using the approved helpers. Replace the manual
jsonDecode/json cast logic with from_json_to_json utilities, using
jsonDecodeThrowableMap() for invalid-input exceptions and any needed typed map
conversion, while preserving the existing fixture validation for required fields
in AppleAppIntentsTestingEntityFixture.

Source: Coding guidelines


62-70: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Broad on Object catch masks programming errors.

Catching Object after the specific FormatException catch also swallows Error subtypes (e.g., TypeError, assertion failures), turning real bugs into a generic "appintents-testing generate failed" exit 65 instead of a diagnosable crash.

🛡️ Narrow the catch
-  } on Object catch (error) {
+  } on Exception catch (error) {
     stderr.writeln('appintents-testing generate failed: $error');
     return 65;
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp_server_dart/lib/src/cli/appintents_testing_command.dart` around lines 62
- 70, The generic exception handler in the appintents-testing generate flow is
too broad and catches programming errors as if they were user failures. In
appintentsTestingGenerateCommand (the try/catch around the FormatException
block), remove the on Object catch or narrow it to only expected exception types
so TypeError, assertion failures, and other Error subtypes can surface normally.
Keep the existing FormatException handling for invalid input, and only map truly
anticipated runtime failures to the exit 65 path.

73-135: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Missing dartdoc on public top-level functions.

emitAppIntentsTestingScaffold, readAppIntentsTestingSampleArguments, and readAppIntentsTestingEntityFixtures are all public but lack /// documentation. As per coding guidelines, "Document all public members (methods, properties, etc.) with clear, concise explanations of their purpose and usage in Dart."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp_server_dart/lib/src/cli/appintents_testing_command.dart` around lines 73
- 135, Add dartdoc comments to the public top-level functions
emitAppIntentsTestingScaffold, readAppIntentsTestingSampleArguments, and
readAppIntentsTestingEntityFixtures in appintents_testing_command.dart. Each
comment should briefly explain the function’s purpose, what inputs it expects,
and what it returns or throws, so the public API is documented consistently with
the coding guidelines.

Source: Coding guidelines

mcp_server_dart/test/appintents_testing_command_test.dart (1)

6-132: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Wrap tests in group() per test-file conventions.

All four tests sit flat under main(). As per coding guidelines, **/*_test.dart files should "Group related tests with group() and individual cases with test()."

♻️ Suggested wrap
 void main() {
+  group('appintents-testing scaffold generation', () {
   test('emits AppIntentsTesting scaffold from manifest and fixtures', () {
   ...
   });
+  });
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp_server_dart/test/appintents_testing_command_test.dart` around lines 6 -
132, The tests in appintents_testing_command_test.dart are currently declared
flat under main(), which breaks the test-file convention of grouping related
cases. Wrap the four existing test() cases in a group() inside main(), using a
descriptive group name that matches the AppIntentsTesting scaffold/fixture
behavior, and keep the existing test names and assertions unchanged; the
relevant symbols to place are main(), group(), and the existing
readAppIntentsTestingSampleArguments/readAppIntentsTestingEntityFixtures/emitAppIntentsTestingScaffold
tests.

Source: Coding guidelines

mcp_server_dart/lib/src/cli/diagnostics/command_snapshot_service.dart (1)

15-26: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Class doc comment is missing the required @ai annotation.

The new CommandSnapshotService dartdoc is otherwise good (concise, states the "why"), but per repo Dart doc guidelines, class-level docs should include an @ai annotation with instructions for AI tools.

As per coding guidelines: "Include an @ai annotation with specific instructions for AI tools on how to interpret and use the class."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp_server_dart/lib/src/cli/diagnostics/command_snapshot_service.dart` around
lines 15 - 26, The class-level dartdoc for CommandSnapshotService is missing the
required `@ai` annotation. Update the existing documentation on
CommandSnapshotService to keep the current summary, and add an `@ai` section that
tells AI tools how to interpret and use this class per the repo guideline. Make
sure the annotation is part of the class doc comment, not the constructor docs,
and keep the wording concise and specific to CommandSnapshotService and its
snapshotStore responsibilities.

Source: Coding guidelines

flutter_test_app/lib/showcase_screen.dart (3)

88-109: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

Missing const on _DebugSection() despite a const constructor.

_DebugSection declares const _DebugSection(); (line 613) but is instantiated as _DebugSection() here without const. Given the surrounding list now rebuilds on every AgentState change (including greeting sync), this avoidably reallocates the widget on each rebuild.

⚡ Proposed fix
-                  _DebugSection(),
+                  const _DebugSection(),
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@flutter_test_app/lib/showcase_screen.dart` around lines 88 - 109, The widget
list in the showcase screen is instantiating _DebugSection without const even
though _DebugSection has a const constructor. Update the _DebugSection() usage
in the children list to use const, matching the neighboring const widgets, so
the showcase screen avoids unnecessary widget allocations during rebuilds.

43-46: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick win

Guard against no-op writes on selection-only changes.

_syncGreetingFromController fires on every TextEditingController value change — including cursor-move/selection-only changes with no text delta — and unconditionally reassigns AgentState.instance.greeting. Since the whole section list rebuilds via AnimatedBuilder(animation: AgentState.instance, ...), this can trigger unnecessary full-tree rebuilds on cursor movement alone.

⚡ Proposed fix
   void _syncGreetingFromController() {
     if (_syncingGreetingFromState) return;
-    AgentState.instance.greeting = _textController.text;
+    if (_textController.text == AgentState.instance.greeting) return;
+    AgentState.instance.greeting = _textController.text;
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@flutter_test_app/lib/showcase_screen.dart` around lines 43 - 46, The
_syncGreetingFromController method in ShowcaseScreen is writing
AgentState.instance.greeting on every TextEditingController change, including
selection-only updates, which can cause unnecessary rebuilds. Update this method
to compare the controller text against the current greeting and return early
when there is no text change, while still preserving the existing
_syncingGreetingFromState guard. Keep the fix localized to
_syncGreetingFromController and the AgentState.instance.greeting assignment path
so AnimatedBuilder only reacts to real content changes.

641-652: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicated tap logic between Semantics.onTap and TextButton.onPressed.

The exact same state.logMessage(...) call is written twice inline. Since the PR's goal is for Semantics.onTap to give automated tooling parity with real taps, keeping these as separate literals risks the two diverging silently over time.

♻️ Proposed fix
+              () {
+                final onEmitLog = () =>
+                    state.logMessage('agent hook: log at ${DateTime.now()}');
+              }
               Semantics(
                 identifier: 'emit_log_button',
                 button: true,
-                onTap: () =>
-                    state.logMessage('agent hook: log at ${DateTime.now()}'),
+                onTap: onEmitLog,
                 child: TextButton(
-                  onPressed: () =>
-                      state.logMessage('agent hook: log at ${DateTime.now()}'),
+                  onPressed: onEmitLog,
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@flutter_test_app/lib/showcase_screen.dart` around lines 641 - 652, The tap
behavior for the Emit log control is duplicated between `Semantics.onTap` and
`TextButton.onPressed`, which risks them drifting apart. Refactor the
`Semantics`/`TextButton` block in `showcase_screen.dart` to use a single shared
handler or callback variable for the `state.logMessage('agent hook: log at
${DateTime.now()}')` action, and wire both `onTap` and `onPressed` to that same
symbol so automated semantics taps and real button taps stay identical.
tool/contracts/check_no_personal_paths.sh (1)

7-16: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider broadening path coverage.

The check only matches /Users/anton. If maintainers also work from Linux (/home/<user>) or other machines, those hardcoded paths would slip through undetected.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tool/contracts/check_no_personal_paths.sh` around lines 7 - 16, Broaden the
personal-path detection in the check_no_personal_paths.sh script, since the
current rg pattern only catches /Users/anton and misses other common
home-directory paths. Update the logic around the matches/pattern lookup to
search for additional platform-specific personal path prefixes such as Linux
/home/<user> and any other hardcoded developer home paths you want to guard
against, while keeping the existing ROOT scan and exclusions intact.
mcp_server_dart/lib/src/cli/session/flutter_session_connector.dart (1)

8-57: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add required dartdoc to the new public connector class.

FlutterSessionConnector and its public members (activeEndpointDisplay, lastSelectionDiagnostics, connect, disconnect) have no /// documentation. As per coding guidelines, **/*.dart: "Document all public members (methods, properties, etc.) with clear, concise explanations of their purpose and usage in Dart" and "Start class documentation with a brief, single-sentence summary of the class's purpose."

📝 Example doc skeleton
/// Bridges [IntentSessionConnector] to the app's [ConnectionContext].
///
/// `@ai` Use this to translate hosted intentcall_session connection
/// requests into flutter_mcp_toolkit_core's [ConnectionContext] calls.
final class FlutterSessionConnector implements IntentSessionConnector {
  const FlutterSessionConnector({required this.connectionContext});

  /// The underlying [ConnectionContext] used to manage the VM connection.
  final ConnectionContext connectionContext;
  ...
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp_server_dart/lib/src/cli/session/flutter_session_connector.dart` around
lines 8 - 57, Add Dartdoc to FlutterSessionConnector and every public member it
exposes. Document the class with a one-sentence summary of its purpose, then add
concise /// comments for connectionContext, activeEndpointDisplay,
lastSelectionDiagnostics, connect, and disconnect explaining what each returns
or does and how it is used. Keep the wording aligned with the existing
IntentSessionConnector and ConnectionContext symbols so the public API is
properly documented.

Source: Coding guidelines

mcp_server_dart/lib/src/capabilities/visual_capture/desktop_capture_recovery.dart (1)

116-129: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Avoid catching Object — narrow to Exception.

on Object catch (e) also catches Error subtypes (e.g. TypeError, StateError, assertion failures), turning genuine programming bugs into a silent focus_failed diagnostic instead of surfacing them. Prefer catching Exception (or the specific platform-channel exception type) so real bugs aren't masked.

🛡️ Proposed narrowing
-  } on Object catch (e) {
+  } on Exception catch (e) {
     focusDetails = <String, Object?>{
       'ok': false,
       'error': 'focus_failed',
       'message': '$e',
     };
   }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@mcp_server_dart/lib/src/capabilities/visual_capture/desktop_capture_recovery.dart`
around lines 116 - 129, The focus recovery block in
desktop_capture_recovery.dart is catching too broadly with the focus call inside
the recovery flow, which masks real bugs. Update the try/catch around
service.focus in the recovery routine to catch Exception only, or a more
specific platform-channel exception type if available, and keep the existing
focus_failed diagnostic handling for recoverable failures while allowing Error
subclasses to surface normally.
mcp_server_dart/lib/src/shared_core/command_executor.dart (1)

1682-1701: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Duplicate connection-mode mapping across files.

_toIntentSessionMode/_toCoreMode here duplicates the inverse enum mapping already implemented in FlutterSessionConnector._toCoreMode (mcp_server_dart/lib/src/cli/session/flutter_session_connector.dart). Consider extracting a shared bidirectional mapper to avoid maintaining two parallel switch statements over the same enums.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp_server_dart/lib/src/shared_core/command_executor.dart` around lines 1682
- 1701, The session connection-mode enum mapping is duplicated between
command_executor’s _toIntentSessionMode and FlutterSessionConnector._toCoreMode,
so extract a shared bidirectional mapper and use it from both places. Move the
CoreConnectionMode↔IntentSessionConnectionMode switch logic into a common helper
or mapper class, then update _toSessionStartRequest and FlutterSessionConnector
to call that shared implementation. Keep the existing enum coverage intact so
both directions stay consistent in one place.
mcp_server_dart/lib/src/cli/webmcp_command.dart (3)

136-149: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Clarify why tool-invocation success requires fetchCalled == false.

ok for the toolName != null path requires toolProof?['fetchCalled'] == false in addition to toolProof?['ok']. This is a reasonable way to prove the tool executed via the in-page WebMCP API rather than a network bridge, but the intent isn't documented and could confuse future maintainers extending this verifier for tools that legitimately call fetch.

📝 Suggested doc comment
+    // fetchCalled must be false: a genuine WebMCP tool invocation runs
+    // in-page via document.modelContext, not through a network call.
     final ok = toolName == null
         ? cdpOk || logEvidence
         : toolProof?['ok'] == true && toolProof?['fetchCalled'] == false;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp_server_dart/lib/src/cli/webmcp_command.dart` around lines 136 - 149,
Document the intent behind the `ok` check in `webmcp_command.dart` so future
maintainers understand why `toolProof?['fetchCalled'] == false` is required
alongside `toolProof?['ok']`. Add a brief comment near the `ok` assignment in
the `toolName != null` branch explaining that `_cdpInvokeWebMcpTool` is
verifying in-page WebMCP execution and that `fetchCalled` must stay false for
this verifier, and note that tools with legitimate network access may need a
different success predicate.

184-296: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Duplicated fetch-interception logic between the two invocation branches.

The "dart hook" fallback branch (lines 205-246) and the "testing API" branch (lines 247-287) duplicate the fetch-wrapping, expectation-matching, and try/catch/finally structure almost verbatim inside the embedded JS. Consider factoring the shared logic into a single JS helper function within the expression string to reduce duplication and drift risk between the two paths.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp_server_dart/lib/src/cli/webmcp_command.dart` around lines 184 - 296, The
_cdpInvokeWebMcpTool expression duplicates the same fetch-wrapping, execute,
expectation-checking, and try/catch/finally flow in both the dart hook fallback
and testing API branches. Refactor the embedded JS in _cdpInvokeWebMcpTool by
introducing a single shared helper inside the expression string that handles
interception, execution, result validation, and error shaping. Then have both
the __intentcallWebMcpDartExecute path and the testing.getTools()/tool.execute
path call that helper with only the branch-specific execute function and
metadata. Keep the returned ok/code/message/toolName/names fields consistent
across both paths.

158-166: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Nested ternary reduces readability.

The verdict value is computed via a 4-way nested ternary chain. Consider extracting to a small helper function/switch for clarity.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp_server_dart/lib/src/cli/webmcp_command.dart` around lines 158 - 166, The
verdict computation in webmcp_command.dart is too hard to read because it uses a
nested ternary chain inside the map. Refactor the logic around the verdict field
into a small helper method or switch-style branch near the existing cdpOk,
toolName, ok, and logEvidence checks, and have the map call that helper instead
of inlining the conditionals.
mcp_server_dart/lib/src/capabilities/dynamic_registry/dynamic_result_normalizer.dart (1)

10-20: 📐 Maintainability & Code Quality | 🔵 Trivial

Model class should be an extension type per project convention.

DynamicTextResourcePayload is a plain final class, but the project guideline requires extension-type const models for DTOs/data classes, backed by from_json_to_json decoders (already used inside the function). Consider reshaping this as an extension type wrapping the normalized Map<String, Object?> with computed content/message/payload getters, consistent with other models in the codebase.

As per coding guidelines: "Always use extension type const models for creating or modifying models, DTOs, or data in Dart files."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@mcp_server_dart/lib/src/capabilities/dynamic_registry/dynamic_result_normalizer.dart`
around lines 10 - 20, `DynamicTextResourcePayload` should follow the project’s
Dart model convention instead of being a plain final class. Update the DTO in
`dynamic_result_normalizer.dart` to use an extension type const model backed by
the normalized `Map<String, Object?>`, and expose `content`, `message`, and
`payload` as computed getters. Keep the existing normalization logic in
`dynamic_result_normalizer` aligned with the `from_json_to_json` decoder pattern
used elsewhere so the model construction remains consistent.

Source: Coding guidelines

mcp_server_dart/lib/src/capabilities/dynamic_registry/core_dynamic_registry_gateway.dart (1)

55-78: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the repeated 'intent_not_found' literal into a shared constant.

The same magic string is compared against result.code in both runClientTool and runClientResource. A shared const avoids typo-driven divergence if the intentcall_core error code ever changes.

♻️ Proposed refactor
+const _intentNotFoundCode = 'intent_not_found';
+
 final class RegistryBackedDynamicGateway implements CoreDynamicGateway {
   ...
-    if (!result.ok && result.code == 'intent_not_found') {
+    if (!result.ok && result.code == _intentNotFoundCode) {

As per coding guidelines: "Do not rely on strings, use enums instead."

Also applies to: 91-121

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@mcp_server_dart/lib/src/capabilities/dynamic_registry/core_dynamic_registry_gateway.dart`
around lines 55 - 78, The `runClientTool`/`runClientResource` flow in
`CoreDynamicRegistryGateway` compares `result.code` against the repeated
`'intent_not_found'` magic string; replace this with a shared enum/constant used
consistently in both methods to avoid divergence and align with the no-strings
guideline. Update the `intent_not_found` check and the related failure mapping
in `CoreDynamicRegistryGateway` so the error code is referenced from a single
source of truth instead of duplicated literals.

Source: Coding guidelines

mcp_server_dart/makefile (1)

9-10: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider a symlink instead of duplicating the binary.

cp doubles the on-disk size of the compiled artifact for a simple alias. A symlink (or hardlink) achieves the same CLI-alias goal without duplicating build output.

♻️ Proposed change
 	dart compile exe bin/flutter_mcp_toolkit.dart -o build/flutter-mcp-toolkit && \
-	cp build/flutter-mcp-toolkit build/fmtk
+	ln -sf flutter-mcp-toolkit build/fmtk
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp_server_dart/makefile` around lines 9 - 10, The build alias step in the
Makefile duplicates the compiled Dart binary with cp, unnecessarily doubling
disk usage. Update the alias creation after dart compile exe in the build target
to use a symlink or hardlink for the fmtk alias instead of copying the artifact,
while keeping the flutter-mcp-toolkit output unchanged.
scripts/run_exec_sweep.sh (2)

18-33: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Cleanup only targets the legacy flat layout, not the new per-platform outdir.

Prior-run artifacts inside ${outdir} (e.g. attempt-numbered *_N.visibility/scroll_to_*_N.json files) aren't cleared between runs, so a rerun with fewer attempts can leave stale files mixed with fresh ones, misleading debugging.

♻️ Proposed fix
 legacy_root="${repo_root}/.showcase/tool_verify/exec_sweep"
 outdir="${legacy_root}/${platform}"
-mkdir -p "${outdir}"
 
 cleanup_legacy_root_artifacts() {
   local artifact
   for artifact in "${legacy_root}"/sweep_summary.txt \
     "${legacy_root}"/*.json \
     "${legacy_root}"/*.stderr; do
     [[ -e "${artifact}" ]] || continue
     rm -f "${artifact}"
   done
+  rm -rf "${outdir}"
 }
 
 cleanup_legacy_root_artifacts
+mkdir -p "${outdir}"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/run_exec_sweep.sh` around lines 18 - 33, The cleanup in
run_exec_sweep.sh only removes artifacts from legacy_root and leaves stale files
in the per-platform outdir, so reruns can mix old and new results. Update
cleanup_legacy_root_artifacts or add a dedicated cleanup step around outdir
creation to remove prior-run artifacts there as well, including the
attempt-numbered visibility and scroll_to JSON files produced by the exec_sweep
flow. Use the existing symbols legacy_root and outdir to locate the cleanup
logic and ensure the directory is reset before each run.

178-283: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Duplicate snapshot/visibility helper logic across two eval scripts.

json_ok, capture_snapshot, write_ref_args_for_identifier, and ensure_visible_identifier_args here are near-duplicates of the same-named functions in tool/evals/run_runtime_enter_text_greeting.sh, already diverging (this file's write_ref_args_for_identifier takes an extra require_visible param the other script lacks). Consider extracting a shared sourced helper script for these to avoid drift.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@scripts/run_exec_sweep.sh` around lines 178 - 283, The snapshot/visibility
helper functions in this script are duplicated from the runtime enter-text eval
script and are already drifting apart, especially
`write_ref_args_for_identifier` with its extra `require_visible` parameter.
Extract the shared logic used by `json_ok`, `capture_snapshot`,
`write_ref_args_for_identifier`, and `ensure_visible_identifier_args` into a
common sourced helper script, then update both eval scripts to call that shared
implementation so behavior stays consistent.
tool/evals/run_runtime_enter_text_greeting.sh (1)

137-169: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Parameterize write_reveal_fallback_json instead of hardcoding identifier/direction.

The function signature is generic (args_file, match_file, outfile), but the emitted payload hardcodes "query": "greeting_input_field" and "direction": "down". Currently the one call site happens to match, but the function will silently emit incorrect metadata if reused for any other identifier/direction.

♻️ Proposed fix
-write_reveal_fallback_json() {
-  local args_file="$1"
-  local match_file="$2"
-  local outfile="$3"
-  python3 - "${args_file}" "${match_file}" "${outfile}" <<'PY'
+write_reveal_fallback_json() {
+  local args_file="$1"
+  local match_file="$2"
+  local outfile="$3"
+  local identifier="${4:-greeting_input_field}"
+  local direction="${5:-down}"
+  python3 - "${args_file}" "${match_file}" "${outfile}" "${identifier}" "${direction}" <<'PY'
 import json, sys
 args = json.load(open(sys.argv[1]))
 match = json.load(open(sys.argv[2]))
+identifier = sys.argv[4]
+direction = sys.argv[5]
 payload = {
     "ok": True,
     "data": {
         "message": "Revealed target with semantic snapshot fallback.",
         "success": True,
         "error": None,
-        "query": "greeting_input_field",
+        "query": identifier,
         "matchBy": "identifier",
-        "direction": "down",
+        "direction": direction,
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tool/evals/run_runtime_enter_text_greeting.sh` around lines 137 - 169, The
write_reveal_fallback_json helper is hardcoding query and direction metadata
instead of deriving them from its inputs. Update write_reveal_fallback_json to
read the relevant identifier and direction from args_file (or the passed
match/context data) and use those values in the emitted payload so the function
stays correct for any caller. Keep the existing structure intact, but ensure the
fields populated in the JSON reflect the actual invocation context rather than
the current greeting_input_field/down constants.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/ai_agents/marketplace_copy.yaml`:
- Line 14: The `marketplace_copy.yaml` marketing copy has an inaccurate `fmt_*`
tool count. Update the text in the marketplace description to reflect the real
`FmtCapability` counts: 29 built-in `fmt_*` tools by default, with the 4
`debug_dump_*` tools included only when `dumps_supported` is enabled, for a
total of 33 in that mode. Keep the wording aligned with the existing description
section that mentions `fmt_* MCP tools`.

In `@mcp_server_dart/bin/flutter_mcp_toolkit.dart`:
- Around line 2251-2255: Align the `sample-arguments` documentation so it uses
one consistent requirement level across the CLI definition and
`_usageCodegenAppIntentsTestingGenerate`: either update the
`addOption('sample-arguments', ...)` help text or the usage string so both
describe the same thing, and keep the wording consistent with the
`qualifiedName`-keyed primitive App Intent fixtures description used in the
codebase.
- Around line 2674-2688: The `runWebmcpVerify` argument parsing currently calls
`jsonDecode` for `sub.option('tool-args')` without error handling, so malformed
JSON can escape as an unhandled `FormatException`. Update the parsing near
`rawToolArgs`/`toolArgs` to mirror `_parseJsonScalarOrString` by catching
`FormatException` and routing it through the CLI’s normal structured error path
before calling `runWebmcpVerify`, so invalid `--tool-args` input fails cleanly
instead of crashing `main()`.

In `@mcp_toolkit/lib/src/services/reveal_search_service.dart`:
- Line 33: The clamped attempt count in RevealSearchService is inferred as num,
so it no longer matches the int parameter expected later. In
reveal_search_service.dart, update the boundedMaxAttempts assignment in the
RevealSearchService logic to convert the result of maxAttempts.clamp(0,
_maxAttemptsLimit) back to int, keeping the type aligned for the downstream
maxAttempts argument.

In `@mcp_toolkit/lib/src/services/semantic_snapshot_service.dart`:
- Around line 44-58: The viewportRect getter currently always uses the first
FlutterView, which can misclassify visibility in multi-window apps. Update
SemanticSnapshotService.viewportRect to resolve the correct view for the active
semantics tree using the same viewId-based approach as
view_introspection_service.dart, or make the main-view assumption explicit and
consistent. Ensure visibilityForRef, visibleSubtreeSignature, and the snapshot
visibility fields all read from the correct FlutterView rather than blindly
using renderViews.first.

In `@mcp_toolkit/pubspec.yaml`:
- Around line 17-19: The default INTENTCALL_VERSION in print_hosted_deps.sh is
stale and no longer matches the pinned intentcall_core, intentcall_platform, and
intentcall_schema constraints in mcp_toolkit. Update the script’s default
version to the same released version used by the pubspec so the generated hosted
dependency guidance stays consistent; locate the change in the
print_hosted_deps.sh logic that sets INTENTCALL_VERSION and align it with the
package constraints.

In `@plugin/.codex-plugin/plugin.json`:
- Line 29: The marketplace longDescription is outdated and still says “30 fmt_*
MCP tools” even though the shared command catalog now exposes 44 default MCP
tools (45 total commands with dynamicRegistryStats CLI-only). Update the copy in
plugin.json to use the current tool count and keep the rest of the description
aligned with the existing product names like
fmt_list_client_tools_and_resources, fmt_client_tool, and fmt_client_resource.

In `@scripts/run_web_showcase.sh`:
- Around line 59-70: The Flutter web showcase script always appends
--no-web-resources-cdn, which prevents the CanvasKit URL path from being used.
Update scripts/run_web_showcase.sh so the flutter_args construction in the
run_web_showcase flow only includes --no-web-resources-cdn when canvaskit_url is
empty, using the existing canvaskit_url branch and flutter_args array to gate it
conditionally. Keep the FLUTTER_WEB_CANVASKIT_URL case and the local resources
case aligned so the log message matches the actual behavior.

In `@tool/intentcall/print_hosted_deps.sh`:
- Line 5: The default INTENTCALL_VERSION in print_hosted_deps.sh is stale and
does not match the new intentcall package versions used elsewhere in this PR.
Update the version fallback in the script so hosted dependency snippets reflect
the same ^0.6.0 release family as intentcall_core, intentcall_platform, and
intentcall_schema, keeping the script’s default in sync with the published
package versions.

---

Nitpick comments:
In `@flutter_test_app/lib/agent_state.dart`:
- Around line 62-70: Add a brief Dart doc comment for the test-only public
method resetForTest() in AgentState. Document its purpose clearly and concisely
with a /// comment placed immediately above the `@visibleForTesting` member,
noting that it resets the internal state fields and notifies listeners for
tests.

In `@flutter_test_app/lib/showcase_screen.dart`:
- Around line 88-109: The widget list in the showcase screen is instantiating
_DebugSection without const even though _DebugSection has a const constructor.
Update the _DebugSection() usage in the children list to use const, matching the
neighboring const widgets, so the showcase screen avoids unnecessary widget
allocations during rebuilds.
- Around line 43-46: The _syncGreetingFromController method in ShowcaseScreen is
writing AgentState.instance.greeting on every TextEditingController change,
including selection-only updates, which can cause unnecessary rebuilds. Update
this method to compare the controller text against the current greeting and
return early when there is no text change, while still preserving the existing
_syncingGreetingFromState guard. Keep the fix localized to
_syncGreetingFromController and the AgentState.instance.greeting assignment path
so AnimatedBuilder only reacts to real content changes.
- Around line 641-652: The tap behavior for the Emit log control is duplicated
between `Semantics.onTap` and `TextButton.onPressed`, which risks them drifting
apart. Refactor the `Semantics`/`TextButton` block in `showcase_screen.dart` to
use a single shared handler or callback variable for the
`state.logMessage('agent hook: log at ${DateTime.now()}')` action, and wire both
`onTap` and `onPressed` to that same symbol so automated semantics taps and real
button taps stay identical.

In
`@mcp_server_dart/lib/src/capabilities/dynamic_registry/core_dynamic_registry_gateway.dart`:
- Around line 55-78: The `runClientTool`/`runClientResource` flow in
`CoreDynamicRegistryGateway` compares `result.code` against the repeated
`'intent_not_found'` magic string; replace this with a shared enum/constant used
consistently in both methods to avoid divergence and align with the no-strings
guideline. Update the `intent_not_found` check and the related failure mapping
in `CoreDynamicRegistryGateway` so the error code is referenced from a single
source of truth instead of duplicated literals.

In
`@mcp_server_dart/lib/src/capabilities/dynamic_registry/dynamic_result_normalizer.dart`:
- Around line 10-20: `DynamicTextResourcePayload` should follow the project’s
Dart model convention instead of being a plain final class. Update the DTO in
`dynamic_result_normalizer.dart` to use an extension type const model backed by
the normalized `Map<String, Object?>`, and expose `content`, `message`, and
`payload` as computed getters. Keep the existing normalization logic in
`dynamic_result_normalizer` aligned with the `from_json_to_json` decoder pattern
used elsewhere so the model construction remains consistent.

In
`@mcp_server_dart/lib/src/capabilities/visual_capture/desktop_capture_recovery.dart`:
- Around line 116-129: The focus recovery block in desktop_capture_recovery.dart
is catching too broadly with the focus call inside the recovery flow, which
masks real bugs. Update the try/catch around service.focus in the recovery
routine to catch Exception only, or a more specific platform-channel exception
type if available, and keep the existing focus_failed diagnostic handling for
recoverable failures while allowing Error subclasses to surface normally.

In `@mcp_server_dart/lib/src/cli/appintents_testing_command.dart`:
- Around line 93-149: The JSON parsing in readAppIntentsTestingSampleArguments,
readAppIntentsTestingEntityFixtures, and _readJsonObjectFile is hand-rolling
casts and validation instead of using the approved helpers. Replace the manual
jsonDecode/json cast logic with from_json_to_json utilities, using
jsonDecodeThrowableMap() for invalid-input exceptions and any needed typed map
conversion, while preserving the existing fixture validation for required fields
in AppleAppIntentsTestingEntityFixture.
- Around line 62-70: The generic exception handler in the appintents-testing
generate flow is too broad and catches programming errors as if they were user
failures. In appintentsTestingGenerateCommand (the try/catch around the
FormatException block), remove the on Object catch or narrow it to only expected
exception types so TypeError, assertion failures, and other Error subtypes can
surface normally. Keep the existing FormatException handling for invalid input,
and only map truly anticipated runtime failures to the exit 65 path.
- Around line 73-135: Add dartdoc comments to the public top-level functions
emitAppIntentsTestingScaffold, readAppIntentsTestingSampleArguments, and
readAppIntentsTestingEntityFixtures in appintents_testing_command.dart. Each
comment should briefly explain the function’s purpose, what inputs it expects,
and what it returns or throws, so the public API is documented consistently with
the coding guidelines.

In `@mcp_server_dart/lib/src/cli/diagnostics/command_snapshot_service.dart`:
- Around line 15-26: The class-level dartdoc for CommandSnapshotService is
missing the required `@ai` annotation. Update the existing documentation on
CommandSnapshotService to keep the current summary, and add an `@ai` section that
tells AI tools how to interpret and use this class per the repo guideline. Make
sure the annotation is part of the class doc comment, not the constructor docs,
and keep the wording concise and specific to CommandSnapshotService and its
snapshotStore responsibilities.

In `@mcp_server_dart/lib/src/cli/session/flutter_session_connector.dart`:
- Around line 8-57: Add Dartdoc to FlutterSessionConnector and every public
member it exposes. Document the class with a one-sentence summary of its
purpose, then add concise /// comments for connectionContext,
activeEndpointDisplay, lastSelectionDiagnostics, connect, and disconnect
explaining what each returns or does and how it is used. Keep the wording
aligned with the existing IntentSessionConnector and ConnectionContext symbols
so the public API is properly documented.

In `@mcp_server_dart/lib/src/cli/webmcp_command.dart`:
- Around line 136-149: Document the intent behind the `ok` check in
`webmcp_command.dart` so future maintainers understand why
`toolProof?['fetchCalled'] == false` is required alongside `toolProof?['ok']`.
Add a brief comment near the `ok` assignment in the `toolName != null` branch
explaining that `_cdpInvokeWebMcpTool` is verifying in-page WebMCP execution and
that `fetchCalled` must stay false for this verifier, and note that tools with
legitimate network access may need a different success predicate.
- Around line 184-296: The _cdpInvokeWebMcpTool expression duplicates the same
fetch-wrapping, execute, expectation-checking, and try/catch/finally flow in
both the dart hook fallback and testing API branches. Refactor the embedded JS
in _cdpInvokeWebMcpTool by introducing a single shared helper inside the
expression string that handles interception, execution, result validation, and
error shaping. Then have both the __intentcallWebMcpDartExecute path and the
testing.getTools()/tool.execute path call that helper with only the
branch-specific execute function and metadata. Keep the returned
ok/code/message/toolName/names fields consistent across both paths.
- Around line 158-166: The verdict computation in webmcp_command.dart is too
hard to read because it uses a nested ternary chain inside the map. Refactor the
logic around the verdict field into a small helper method or switch-style branch
near the existing cdpOk, toolName, ok, and logEvidence checks, and have the map
call that helper instead of inlining the conditionals.

In `@mcp_server_dart/lib/src/shared_core/command_executor.dart`:
- Around line 1682-1701: The session connection-mode enum mapping is duplicated
between command_executor’s _toIntentSessionMode and
FlutterSessionConnector._toCoreMode, so extract a shared bidirectional mapper
and use it from both places. Move the
CoreConnectionMode↔IntentSessionConnectionMode switch logic into a common helper
or mapper class, then update _toSessionStartRequest and FlutterSessionConnector
to call that shared implementation. Keep the existing enum coverage intact so
both directions stay consistent in one place.

In `@mcp_server_dart/makefile`:
- Around line 9-10: The build alias step in the Makefile duplicates the compiled
Dart binary with cp, unnecessarily doubling disk usage. Update the alias
creation after dart compile exe in the build target to use a symlink or hardlink
for the fmtk alias instead of copying the artifact, while keeping the
flutter-mcp-toolkit output unchanged.

In `@mcp_server_dart/test/appintents_testing_command_test.dart`:
- Around line 6-132: The tests in appintents_testing_command_test.dart are
currently declared flat under main(), which breaks the test-file convention of
grouping related cases. Wrap the four existing test() cases in a group() inside
main(), using a descriptive group name that matches the AppIntentsTesting
scaffold/fixture behavior, and keep the existing test names and assertions
unchanged; the relevant symbols to place are main(), group(), and the existing
readAppIntentsTestingSampleArguments/readAppIntentsTestingEntityFixtures/emitAppIntentsTestingScaffold
tests.

In `@scripts/run_exec_sweep.sh`:
- Around line 18-33: The cleanup in run_exec_sweep.sh only removes artifacts
from legacy_root and leaves stale files in the per-platform outdir, so reruns
can mix old and new results. Update cleanup_legacy_root_artifacts or add a
dedicated cleanup step around outdir creation to remove prior-run artifacts
there as well, including the attempt-numbered visibility and scroll_to JSON
files produced by the exec_sweep flow. Use the existing symbols legacy_root and
outdir to locate the cleanup logic and ensure the directory is reset before each
run.
- Around line 178-283: The snapshot/visibility helper functions in this script
are duplicated from the runtime enter-text eval script and are already drifting
apart, especially `write_ref_args_for_identifier` with its extra
`require_visible` parameter. Extract the shared logic used by `json_ok`,
`capture_snapshot`, `write_ref_args_for_identifier`, and
`ensure_visible_identifier_args` into a common sourced helper script, then
update both eval scripts to call that shared implementation so behavior stays
consistent.

In `@tool/contracts/check_no_personal_paths.sh`:
- Around line 7-16: Broaden the personal-path detection in the
check_no_personal_paths.sh script, since the current rg pattern only catches
/Users/anton and misses other common home-directory paths. Update the logic
around the matches/pattern lookup to search for additional platform-specific
personal path prefixes such as Linux /home/<user> and any other hardcoded
developer home paths you want to guard against, while keeping the existing ROOT
scan and exclusions intact.

In `@tool/evals/run_runtime_enter_text_greeting.sh`:
- Around line 137-169: The write_reveal_fallback_json helper is hardcoding query
and direction metadata instead of deriving them from its inputs. Update
write_reveal_fallback_json to read the relevant identifier and direction from
args_file (or the passed match/context data) and use those values in the emitted
payload so the function stays correct for any caller. Keep the existing
structure intact, but ensure the fields populated in the JSON reflect the actual
invocation context rather than the current greeting_input_field/down constants.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 502dcc16-dc8c-4400-8a0e-4eafcc706974

📥 Commits

Reviewing files that changed from the base of the PR and between 9f23559 and 7da6eaa.

⛔ Files ignored due to path filters (6)
  • docs/assets/flutter-mcp-toolkit-infographic-clean.png is excluded by !**/*.png
  • docs/assets/flutter-mcp-toolkit-infographic.png is excluded by !**/*.png
  • flutter_test_app/ios/Runner/Generated/IntentCallGenerated.swift is excluded by !**/generated/**
  • flutter_test_app/macos/Podfile.lock is excluded by !**/*.lock
  • flutter_test_app/macos/Runner/Generated/IntentCallGenerated.swift is excluded by !**/generated/**
  • pubspec.lock is excluded by !**/*.lock
📒 Files selected for processing (150)
  • .agents/skills/mcp-harness-repo-maintainer/evals/cases/portable-invocation-trigger.yaml
  • .github/pull_request_template.md
  • AGENTS.md
  • CHANGELOG.md
  • CONTRIBUTING.md
  • README.md
  • SECURITY.md
  • decisions/0012_fmtk_cli_alias_and_harness_boundary.mdx
  • decisions/README.md
  • decisions/index.mdx
  • docs.json
  • docs/NORTH_STAR.md
  • docs/ai_agents/marketplace_copy.yaml
  • docs/ai_agents/marketplace_distribution.mdx
  • docs/ai_agents/overview.mdx
  • docs/contributing/contribution_guide.mdx
  • docs/contributing/contributors.mdx
  • docs/contributing/marketplace_submission_runbook.mdx
  • docs/evidence/dogfood/dogfood_web_eval.yaml
  • docs/index.mdx
  • docs/intentcall/README.md
  • docs/start_here/cli_quick_recipes.mdx
  • docs/start_here/cli_vs_mcp.mdx
  • docs/start_here/migration_mcp_call_entry_to_agent_call_entry.md
  • docs/superpowers/WHATS_NEXT.md
  • docs/superpowers/evals/2026-05-26-webmcp-verification.md
  • docs/superpowers/evals/README.md
  • docs/superpowers/evals/archive/2026-05-26-dogfood-spec-gap-matrix.md
  • flutter_test_app/INTENTCALL_PLATFORM.md
  • flutter_test_app/android/app/src/main/res/xml/intentcall_shortcuts.xml
  • flutter_test_app/ios/Flutter/AppFrameworkInfo.plist
  • flutter_test_app/ios/Podfile
  • flutter_test_app/ios/Runner.xcodeproj/project.pbxproj
  • flutter_test_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
  • flutter_test_app/ios/Runner/AppDelegate.swift
  • flutter_test_app/ios/Runner/Info.plist
  • flutter_test_app/lib/agent_state.dart
  • flutter_test_app/lib/main.dart
  • flutter_test_app/lib/showcase_screen.dart
  • flutter_test_app/linux/intentcall_protocol.desktop
  • flutter_test_app/macos/Flutter/GeneratedPluginRegistrant.swift
  • flutter_test_app/macos/Podfile
  • flutter_test_app/macos/Runner.xcodeproj/project.pbxproj
  • flutter_test_app/macos/Runner/Info.plist
  • flutter_test_app/pubspec.yaml
  • flutter_test_app/test/showcase_reactivity_test.dart
  • flutter_test_app/tool/gen_resolution.dart
  • flutter_test_app/tool/intentcall/appintents_testing_entities.json
  • flutter_test_app/tool/intentcall/appintents_testing_samples.json
  • flutter_test_app/web/agent_manifest.json
  • flutter_test_app/web/intentcall_webmcp.generated.js
  • flutter_test_app/web/manifest.json
  • flutter_test_app/windows/intentcall_protocol.reg
  • flutter_test_app/windows/intentcall_protocol_msix.xml
  • install.sh
  • makefile
  • mcp_server_dart/README.md
  • mcp_server_dart/bin/flutter_mcp_toolkit.dart
  • mcp_server_dart/lib/flutter_mcp_core.dart
  • mcp_server_dart/lib/src/capabilities/dynamic_registry/core_dynamic_registry_gateway.dart
  • mcp_server_dart/lib/src/capabilities/dynamic_registry/dynamic_gateway.dart
  • mcp_server_dart/lib/src/capabilities/dynamic_registry/dynamic_registry.dart
  • mcp_server_dart/lib/src/capabilities/dynamic_registry/dynamic_result_normalizer.dart
  • mcp_server_dart/lib/src/capabilities/dynamic_registry/registry_discovery_service.dart
  • mcp_server_dart/lib/src/capabilities/visual_capture/desktop_capture_recovery.dart
  • mcp_server_dart/lib/src/capabilities/visual_capture/desktop_window_screenshot.dart
  • mcp_server_dart/lib/src/capabilities/visual_capture/visual_capture.dart
  • mcp_server_dart/lib/src/cli/appintents_testing_command.dart
  • mcp_server_dart/lib/src/cli/cli.dart
  • mcp_server_dart/lib/src/cli/cli_daemon_server.dart
  • mcp_server_dart/lib/src/cli/diagnostics/bundle_builder.dart
  • mcp_server_dart/lib/src/cli/diagnostics/command_snapshot_service.dart
  • mcp_server_dart/lib/src/cli/diagnostics/diagnostics.dart
  • mcp_server_dart/lib/src/cli/session/flutter_session_connector.dart
  • mcp_server_dart/lib/src/cli/session/session.dart
  • mcp_server_dart/lib/src/cli/session/session_manager.dart
  • mcp_server_dart/lib/src/cli/session/state_lock_manager.dart
  • mcp_server_dart/lib/src/cli/session/state_store.dart
  • mcp_server_dart/lib/src/cli/sessions_persistence/safe_writes.dart
  • mcp_server_dart/lib/src/cli/sessions_persistence/session_persistence.dart
  • mcp_server_dart/lib/src/cli/webmcp_command.dart
  • mcp_server_dart/lib/src/mcp_toolkit_server/mixins/dynamic_registry_integration.dart
  • mcp_server_dart/lib/src/shared_core/agent_result_mapper.dart
  • mcp_server_dart/lib/src/shared_core/command_executor.dart
  • mcp_server_dart/lib/src/shared_core/vm_connections/preconnect.dart
  • mcp_server_dart/lib/src/skill_assets.g.dart
  • mcp_server_dart/makefile
  • mcp_server_dart/pubspec.yaml
  • mcp_server_dart/test/appintents_testing_command_test.dart
  • mcp_server_dart/test/bundle_builder_test.dart
  • mcp_server_dart/test/codegen_sync_command_test.dart
  • mcp_server_dart/test/command_snapshot_service_test.dart
  • mcp_server_dart/test/core_executor_test.dart
  • mcp_server_dart/test/desktop_capture_recovery_test.dart
  • mcp_server_dart/test/dynamic_registry_input_schema_test.dart
  • mcp_server_dart/test/flutter_mcp_example_app_integration_test.dart
  • mcp_server_dart/test/flutter_tool_machine_discovery_test.dart
  • mcp_server_dart/test/platform_view_capture_flow_test.dart
  • mcp_server_dart/test/preconnect_test.dart
  • mcp_server_dart/test/registry_discovery_service_test.dart
  • mcp_server_dart/test/safe_writes_test.dart
  • mcp_server_dart/test/session_manager_test.dart
  • mcp_server_dart/test/state_lock_manager_test.dart
  • mcp_server_dart/test/state_store_test.dart
  • mcp_toolkit/README.md
  • mcp_toolkit/lib/mcp_toolkit.dart
  • mcp_toolkit/lib/src/mcp_toolkit_binding.dart
  • mcp_toolkit/lib/src/mcp_toolkit_extensions.dart
  • mcp_toolkit/lib/src/services/gesture_interaction_service.dart
  • mcp_toolkit/lib/src/services/reveal_search_service.dart
  • mcp_toolkit/lib/src/services/semantic_snapshot_service.dart
  • mcp_toolkit/pubspec.yaml
  • mcp_toolkit/test/control_flow_service_test.dart
  • mcp_toolkit/test/mcp_toolkit_bootstrap_test.dart
  • mcp_toolkit/test/semantic_snapshot_surface_test.dart
  • packages/core/README.md
  • packages/core/pubspec.yaml
  • packages/server_capability_core/README.md
  • packages/server_capability_core/pubspec.yaml
  • packages/server_capability_kernel/README.md
  • packages/server_capability_kernel/lib/src/host_service.dart
  • packages/server_capability_kernel/lib/src/resource_registration.dart
  • packages/server_capability_kernel/lib/src/resource_template_registration.dart
  • packages/server_capability_kernel/lib/src/tool_registration.dart
  • packages/server_capability_kernel/pubspec.yaml
  • plugin/.codex-plugin/plugin.json
  • plugin/README.md
  • plugin/skills/flutter-mcp-boundary-audit/reference.md
  • plugin/skills/flutter-mcp-toolkit-guide/SKILL.md
  • plugin/skills/flutter-mcp-toolkit-intentcall-migration/SKILL.md
  • plugin/skills/flutter-mcp-toolkit-maintain-macos/SKILL.md
  • plugin/skills/flutter-mcp-toolkit-maintain-web/SKILL.md
  • plugin/skills/flutter-mcp-toolkit-repo-maintainer/SKILL.md
  • plugin/skills/flutter-mcp-toolkit-setup/SKILL.md
  • scripts/run_exec_sweep.sh
  • scripts/run_web_showcase.sh
  • scripts/run_web_showcase_tests.sh
  • steward.yaml
  • steward/scenarios/mcp_flutter.intentcall-hosted-cutover.yaml
  • tool/contracts/check_cli_alias_surface.sh
  • tool/contracts/check_intentcall_integration.sh
  • tool/contracts/check_no_personal_paths.sh
  • tool/evals/run_dogfood_eval.sh
  • tool/evals/run_macos_validate_runtime.sh
  • tool/evals/run_runtime_enter_text_greeting.sh
  • tool/intentcall/check_no_path_deps.sh
  • tool/intentcall/check_no_path_deps_test.sh
  • tool/intentcall/print_hosted_deps.sh
  • tool/intentcall/publish_all.sh
  • tool/release/build_release_artifacts.sh
💤 Files with no reviewable changes (7)
  • mcp_server_dart/lib/src/cli/cli.dart
  • mcp_server_dart/lib/src/cli/sessions_persistence/session_persistence.dart
  • mcp_server_dart/lib/src/cli/sessions_persistence/safe_writes.dart
  • mcp_server_dart/lib/src/cli/session/session_manager.dart
  • flutter_test_app/ios/Flutter/AppFrameworkInfo.plist
  • mcp_server_dart/lib/src/cli/session/state_store.dart
  • mcp_server_dart/lib/src/cli/session/state_lock_manager.dart

Comment thread docs/ai_agents/marketplace_copy.yaml Outdated
Comment thread mcp_server_dart/bin/flutter_mcp_toolkit.dart
Comment thread mcp_server_dart/bin/flutter_mcp_toolkit.dart Outdated
Comment thread mcp_toolkit/lib/src/services/reveal_search_service.dart Outdated
Comment thread mcp_toolkit/lib/src/services/semantic_snapshot_service.dart
Comment thread mcp_toolkit/pubspec.yaml
Comment thread plugin/.codex-plugin/plugin.json Outdated
Comment thread scripts/run_web_showcase.sh Outdated
Comment thread tool/intentcall/print_hosted_deps.sh Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (5)
mcp_server_dart/docs/enhancement_suggestions.md (1)

23-41: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

"Implementation" note still references the old MCPToolDefinition API.

The code sample above was migrated to AgentCallEntry.tool, but the "Implementation" guidance right below (line 46) still says to extend MCPToolDefinition. Worth updating that reference so the suggestion doc is internally consistent post-migration.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@mcp_server_dart/docs/enhancement_suggestions.md` around lines 23 - 41, The
documentation still refers to the removed MCPToolDefinition API even though the
example now uses AgentCallEntry.tool. Update the “Implementation” guidance in
the same suggestion section to reference the current AgentCallEntry.tool-based
flow and related symbols like debugToolEntry and debugToolMetadata so the doc
stays consistent after the migration.
docs/core/dynamic_tools_registry.mdx (1)

83-90: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Lifecycle diagram / Quick Checklist not updated to match new bootstrapFlutter flow.

This section now recommends MCPToolkitBinding.instance.bootstrapFlutter(...) as the minimal correct setup, but the Lifecycle (ASCII) diagram and the Quick Checklist elsewhere in this same doc still describe the older initialize() + initializeFlutterToolkit() + manual addEntries(...) flow as the primary path. Consider updating those sections so readers aren't given two conflicting "correct" setups.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/core/dynamic_tools_registry.mdx` around lines 83 - 90, The Lifecycle
diagram and Quick Checklist still describe the old
initialize()/initializeFlutterToolkit()/addEntries flow, which conflicts with
the new bootstrapFlutter setup. Update those doc sections in
dynamic_tools_registry.mdx to make
MCPToolkitBinding.instance.bootstrapFlutter(...) the primary recommended path,
and revise any references to manual initialization or entry registration so they
align with the new bootstrapFlutter flow and no longer present two competing
“correct” setups.
flutter_test_app/lib/intentcall_showcase_entries.dart (2)

6-181: 📐 Maintainability & Code Quality | 🔵 Trivial

Add dartdoc to new public API surface.

None of the new public top-level declarations (intentCallProtocolScheme, buildIntentCallBridgePingEntry, buildSetGreetingEntry, buildEnableSwitchEntry, buildShowcaseScreenEntityType, seedIntentCallShowcaseEntities) have /// documentation.

As per coding guidelines, "Document all public members (methods, properties, etc.) with clear, concise explanations of their purpose and usage in Dart."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@flutter_test_app/lib/intentcall_showcase_entries.dart` around lines 6 - 181,
Add dartdoc comments for every new public top-level declaration in
intentcall_showcase_entries.dart: document intentCallProtocolScheme,
buildIntentCallBridgePingEntry, buildSetGreetingEntry, buildEnableSwitchEntry,
buildShowcaseScreenEntityType, and seedIntentCallShowcaseEntities. Keep each
comment concise but specific about the purpose and expected usage of the
constant/function so the public API surface is properly documented.

Source: Coding guidelines


137-137: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Deep-link path segment app_screen is hardcoded independently of the entity ref fields.

Each deepLink literally embeds app_screen, duplicating namespace/typeName from the corresponding AgentEntityRef (app/screen). If those values ever diverge, the deep links silently go stale.

Also applies to: 153-153, 169-169

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@flutter_test_app/lib/intentcall_showcase_entries.dart` at line 137, The
deepLink values in intentcall_showcase_entries are hardcoding the app_screen
path segment instead of deriving it from the associated AgentEntityRef fields.
Update the deepLink construction in the affected showcase entries to build the
path from the same namespace/typeName values used by AgentEntityRef (for example
via the shared entity metadata), so the link stays consistent if those values
change.
flutter_test_app/lib/intentcall_showcase_bootstrap.dart (1)

7-73: 📐 Maintainability & Code Quality | 🔵 Trivial

Add dartdoc to new public bootstrap API.

intentCallProofRegistry, intentCallHost, buildIntentCallProofEntries, and configureIntentCallShowcase are public top-level declarations without /// documentation.

As per coding guidelines, "Document all public members (methods, properties, etc.) with clear, concise explanations of their purpose and usage in Dart."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@flutter_test_app/lib/intentcall_showcase_bootstrap.dart` around lines 7 - 73,
The new public top-level API in intentcall_showcase_bootstrap.dart is missing
required dartdoc. Add concise /// documentation for intentCallProofRegistry,
intentCallHost, buildIntentCallProofEntries, and configureIntentCallShowcase,
explaining each symbol’s purpose and how callers should use them; keep the docs
aligned with the behavior in the bootstrap setup and registry binding flow.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@docs/guides/creating_dynamic_tools.mdx`:
- Around line 84-105: The `registerMyTools()` sample has an unclosed
`AgentCallEntry.tool(...)` invocation, so the `helloTool` initialization in the
dynamic tools example is syntactically incomplete. Update the snippet in
`creating_dynamic_tools.mdx` by closing the `AgentCallEntry.tool` call before
the `await MCPToolkitBinding.instance.addEntries(entries: {helloTool});` line,
keeping the `helloTool` variable assignment and surrounding example structure
intact.

---

Nitpick comments:
In `@docs/core/dynamic_tools_registry.mdx`:
- Around line 83-90: The Lifecycle diagram and Quick Checklist still describe
the old initialize()/initializeFlutterToolkit()/addEntries flow, which conflicts
with the new bootstrapFlutter setup. Update those doc sections in
dynamic_tools_registry.mdx to make
MCPToolkitBinding.instance.bootstrapFlutter(...) the primary recommended path,
and revise any references to manual initialization or entry registration so they
align with the new bootstrapFlutter flow and no longer present two competing
“correct” setups.

In `@flutter_test_app/lib/intentcall_showcase_bootstrap.dart`:
- Around line 7-73: The new public top-level API in
intentcall_showcase_bootstrap.dart is missing required dartdoc. Add concise ///
documentation for intentCallProofRegistry, intentCallHost,
buildIntentCallProofEntries, and configureIntentCallShowcase, explaining each
symbol’s purpose and how callers should use them; keep the docs aligned with the
behavior in the bootstrap setup and registry binding flow.

In `@flutter_test_app/lib/intentcall_showcase_entries.dart`:
- Around line 6-181: Add dartdoc comments for every new public top-level
declaration in intentcall_showcase_entries.dart: document
intentCallProtocolScheme, buildIntentCallBridgePingEntry, buildSetGreetingEntry,
buildEnableSwitchEntry, buildShowcaseScreenEntityType, and
seedIntentCallShowcaseEntities. Keep each comment concise but specific about the
purpose and expected usage of the constant/function so the public API surface is
properly documented.
- Line 137: The deepLink values in intentcall_showcase_entries are hardcoding
the app_screen path segment instead of deriving it from the associated
AgentEntityRef fields. Update the deepLink construction in the affected showcase
entries to build the path from the same namespace/typeName values used by
AgentEntityRef (for example via the shared entity metadata), so the link stays
consistent if those values change.

In `@mcp_server_dart/docs/enhancement_suggestions.md`:
- Around line 23-41: The documentation still refers to the removed
MCPToolDefinition API even though the example now uses AgentCallEntry.tool.
Update the “Implementation” guidance in the same suggestion section to reference
the current AgentCallEntry.tool-based flow and related symbols like
debugToolEntry and debugToolMetadata so the doc stays consistent after the
migration.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 09e22dff-310b-4de8-8a32-d955cb078839

📥 Commits

Reviewing files that changed from the base of the PR and between 7da6eaa and b1609bf.

📒 Files selected for processing (42)
  • .github/workflows/intentcall_publish_dry_run.yml
  • AGENTS.md
  • ARCHITECTURE.md
  • CHANGELOG.md
  • QUICK_START.md
  • README.md
  • docs/ai_agents/overview.mdx
  • docs/core/dynamic_tools_registry.mdx
  • docs/core/project_architecture.mdx
  • docs/guides/creating_dynamic_tools.mdx
  • docs/intentcall/README.md
  • docs/start_here/docs_map.mdx
  • docs/start_here/why_this_repo_matters.mdx
  • flutter_test_app/INTENTCALL_PLATFORM.md
  • flutter_test_app/lib/intentcall_showcase_bootstrap.dart
  • flutter_test_app/lib/intentcall_showcase_entries.dart
  • flutter_test_app/lib/main.dart
  • makefile
  • mcp_server_dart/docs/SIMPLIFIED_DYNAMIC_REGISTRATION.md
  • mcp_server_dart/docs/enhancement_suggestions.md
  • mcp_server_dart/lib/src/shared_core/commands/commands_catalog.dart
  • mcp_server_dart/lib/src/skill_assets.g.dart
  • mcp_server_dart/test/appintents_testing_command_test.dart
  • mcp_server_dart/tool/build_skill_assets.dart
  • mcp_toolkit/CHANGELOG.md
  • mcp_toolkit/README.md
  • mcp_toolkit/lib/mcp_toolkit.dart
  • mcp_toolkit/lib/src/toolkits/interaction_toolkit.dart
  • packages/core/lib/src/tools/interaction_input_schemas.dart
  • packages/server_capability_core/lib/src/tools/interaction_tools.dart
  • plugin/README.md
  • plugin/assets/DESIGN.md
  • plugin/skills/flutter-mcp-boundary-audit/SKILL.md
  • plugin/skills/flutter-mcp-toolkit-custom-tools/SKILL.md
  • plugin/skills/flutter-mcp-toolkit-guide/SKILL.md
  • plugin/skills/flutter-mcp-toolkit-inspect/SKILL.md
  • plugin/skills/flutter-mcp-toolkit-intentcall-migration/SKILL.md
  • plugin/skills/flutter-mcp/SKILL.md
  • tool/contracts/check_intentcall_hosted_consumer.sh
  • tool/contracts/check_intentcall_integration.sh
  • tool/intentcall/print_hosted_deps.sh
  • tool/intentcall/publish_all.sh
💤 Files with no reviewable changes (1)
  • tool/intentcall/publish_all.sh
✅ Files skipped from review due to trivial changes (21)
  • packages/server_capability_core/lib/src/tools/interaction_tools.dart
  • plugin/skills/flutter-mcp-toolkit-custom-tools/SKILL.md
  • .github/workflows/intentcall_publish_dry_run.yml
  • plugin/skills/flutter-mcp-boundary-audit/SKILL.md
  • plugin/assets/DESIGN.md
  • mcp_server_dart/lib/src/shared_core/commands/commands_catalog.dart
  • plugin/README.md
  • plugin/skills/flutter-mcp-toolkit-intentcall-migration/SKILL.md
  • plugin/skills/flutter-mcp-toolkit-inspect/SKILL.md
  • AGENTS.md
  • mcp_server_dart/docs/SIMPLIFIED_DYNAMIC_REGISTRATION.md
  • mcp_toolkit/CHANGELOG.md
  • mcp_toolkit/lib/src/toolkits/interaction_toolkit.dart
  • docs/start_here/docs_map.mdx
  • mcp_toolkit/README.md
  • packages/core/lib/src/tools/interaction_input_schemas.dart
  • QUICK_START.md
  • ARCHITECTURE.md
  • README.md
  • mcp_toolkit/lib/mcp_toolkit.dart
  • mcp_server_dart/lib/src/skill_assets.g.dart
🚧 Files skipped from review as they are similar to previous changes (3)
  • tool/contracts/check_intentcall_integration.sh
  • mcp_server_dart/test/appintents_testing_command_test.dart
  • flutter_test_app/INTENTCALL_PLATFORM.md

Comment thread docs/guides/creating_dynamic_tools.mdx
Arenukvern and others added 4 commits July 5, 2026 02:15
The flutter-mcp-boundary-audit skill was missing the mode prelude marker
required by init writers and skill_assets tests. Regenerate skill_assets.g.dart
to fix skill-assets-drift CI.

Co-authored-by: Cursor <cursoragent@cursor.com>
@Arenukvern
Arenukvern merged commit 9f012b5 into main Jul 5, 2026
13 checks passed
@Arenukvern
Arenukvern deleted the codex/session-broker branch July 5, 2026 02:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant