fluttersdk_telescope
Passive runtime inspector for Flutter. Captures HTTP, logs, exceptions, DB queries, and Magic events via VM Service extensions. CLI tail and MCP tools for Claude Code.
0.0.4
6.6K downloads/mo
#3491 most downloaded on pub.dev
fluttersdk/telescope
What this package is like to depend on
Last release 2 months ago
17 Jun 2026
Too new to tell
only 2 release windows
Nearly every release is documented
notes for 4 of 4 stable releases
Nothing withdrawn
no release was ever pulled
3 months old
4 releases · first in 2026
4 releases in the last 12 months
see the full history below
Release timeline
4 releases · May 2026 to Jun 2026Releases
latest 4-
0.0.417 Jun 2026Release notes
Open source →Changed
fluttersdk_artisanconstraint bumped^0.0.6->^0.0.8. Required for co-installability withfluttersdk_dusk0.0.7, which declaresfluttersdk_artisan: ^0.0.8. Without this bump, a downstream package listing bothfluttersdk_dusk: ^0.0.7andfluttersdk_telescopewould fail pub dependency resolution. No public API change; constraint only.telescope:installnow injectsimport 'package:magic_devtools/telescope.dart';and gates the Magic-stack wiring on themagic_devtoolsdependency instead of the removedpackage:magic/telescope_integration.dart. Coordinated with themagic_devtoolsextraction that movedMagicTelescopeIntegration(plus the 5 Magic watchers andMagicHttpFacadeAdapter) out of the magic core package. The injectedMagicTelescopeIntegration.install()call and all other wiring are unchanged.
Fixed
telescope:installno longer injects themagic_devtoolsimport whenlib/main.darthas noawait Magic.init(anchor. Previously, the magic-side wiring block fired for any project that listedmagic_devtoolsin pubspec regardless of whether the app calledMagic.init. On a vanilla Flutter app this left an unused import that brokedart analyzein the consumer. The block is now gated onhasMagicInit && _hasMagicDevtoolsDep()so the import andMagicTelescopeIntegration.install()call are only injected for Magic-stack apps that actually callMagic.init. The existing try/catch aroundinjectAfterMagicInitis retained as a defensive backstop.
Documentation
- Synced docs, skill files,
README.md, andCLAUDE.mdto themagic_devtoolsextraction and thefluttersdk_artisan ^0.0.8bump. The Magic-stack telescope adapter is now documented as shipping inmagic_devtools(imported viapackage:magic_devtools/telescope.dart, added as a dev_dependency); the installation / quickstart / watchers pages, the MCP setup snippet, and the skill (SKILL.md+ references) reflect themagic_devtoolsdependency gate and import. Dependency-version pins bumped from^0.0.3to^0.0.4acrossREADME.md,doc/getting-started/installation.md,doc/getting-started/quickstart.md, anddoc/mcp/setup.md; skill version stamp bumped to 0.0.4.
Release notes
Open source →Changed
fluttersdk_artisanconstraint bumped^0.0.6->^0.0.8. Required for co-installability withfluttersdk_dusk0.0.7, which declaresfluttersdk_artisan: ^0.0.8. Without this bump, a downstream package listing bothfluttersdk_dusk: ^0.0.7andfluttersdk_telescopewould fail pub dependency resolution. No public API change; constraint only.telescope:installnow injectsimport 'package:magic_devtools/telescope.dart';and gates the Magic-stack wiring on themagic_devtoolsdependency instead of the removedpackage:magic/telescope_integration.dart. Coordinated with themagic_devtoolsextraction that movedMagicTelescopeIntegration(plus the 5 Magic watchers andMagicHttpFacadeAdapter) out of the magic core package. The injectedMagicTelescopeIntegration.install()call and all other wiring are unchanged.
Fixed
telescope:installno longer injects themagic_devtoolsimport whenlib/main.darthas noawait Magic.init(anchor. Previously, the magic-side wiring block fired for any project that listedmagic_devtoolsin pubspec regardless of whether the app calledMagic.init. On a vanilla Flutter app this left an unused import that brokedart analyzein the consumer. The block is now gated onhasMagicInit && _hasMagicDevtoolsDep()so the import andMagicTelescopeIntegration.install()call are only injected for Magic-stack apps that actually callMagic.init. The existing try/catch aroundinjectAfterMagicInitis retained as a defensive backstop.
Documentation
- Synced docs, skill files,
README.md, andCLAUDE.mdto themagic_devtoolsextraction and thefluttersdk_artisan ^0.0.8bump. The Magic-stack telescope adapter is now documented as shipping inmagic_devtools(imported viapackage:magic_devtools/telescope.dart, added as a dev_dependency); the installation / quickstart / watchers pages, the MCP setup snippet, and the skill (SKILL.md+ references) reflect themagic_devtoolsdependency gate and import. Dependency-version pins bumped from^0.0.3to^0.0.4acrossREADME.md,doc/getting-started/installation.md,doc/getting-started/quickstart.md, anddoc/mcp/setup.md; skill version stamp bumped to 0.0.4.
-
0.0.328 May 2026Release notes
Open source →Added
- Skill v0.0.3: new
## 8. Community: star + issue (optional, once per session)section inskills/fluttersdk-telescope/SKILL.mdplus a newskills/fluttersdk-telescope/references/community.mdreference page. Trigger split: star CTA fires after the user confirms a telescope task end-to-end (captured HTTP record after a gesture, level-filtered tail slice, surfaced uncaught exception,clear-then-repro delta, or cleantelescope:install); issue CTA fires only on a genuine telescope-side bug (malformed MCP envelope,kInvalidParamsfor documented params,TelescopeStorelosing entries before the 500-cap,clearreturning anything but{"cleared": true}, shipped watchers throwing on a clean install,telescope:installexiting non-zero on a fresh consumer, orregisterExtensionIdempotentviolating idempotency). Issue CTA explicitly excludes the documented wired-but-empty buffers, swallowedtry / catchinvisibility, consumer-app exceptions, rawdart:io HttpClienttraffic gaps, the missingtelescope_modelsMCP tool, and FIFO eviction past 500. Preflight gates onghpresence and auth; failure prints the URL only, noopen/xdg-open/start. Both CTAs are prose-permission (notAskUserQuestion), maximum one star and one issue per session, declining one suppresses only that CTA. Labels: onlybugis applied (theagent-reportedlabel does not exist onfluttersdk/telescope, drop the flag). - Repo flow adopted GitHub Flow (single long-lived
master; retired thedevelopaccumulator).CLAUDE.mdand.github/copilot-instructions.mdnow carry Golden Rule 7 plus a## Branchingsection documenting task-branch naming, squash-merge policy, and the release-tag shape.delete_branch_on_merge: trueenabled on origin so merged branches auto-cleanup.
Changed
fluttersdk_artisanconstraint bumped^0.0.4->^0.0.6. Consumers were already pulling 0.0.6 transitively (via the post-installfluttersdk_artisan: anyline the telescope:install bootstrap appends to the consumer pubspec); telescope's own dev resolution now tracks the same version so tests, format, andpub publish --dry-runrun against the artisan that consumers actually execute. Picks up the 0.0.5 + 0.0.6 fixes:_plugins.g.dartAOT staleness detection, MCPserverInfo.versionsync to0.0.6, atomic.mcp.jsonwrites via.tmp+ rename, themcp:install --invocationplugin-aware fallback, and thedusk_evaluateVM-routed fix. Future artisan 0.0.7 will need a coordinated bump.telescope_*MCP tool descriptions now state the actual wire shape ("oldest-first; last entry is newest"). Previously seven of the eight read tools claimed "Returns newest-first" while the handler delivered oldest-first; the SKILL.md Law 5 disclaimer ("presenter shorthand") that papered over the gap has been retired. Clients reading the description verbatim no longer assume a reversed order.mcp:installfallback now writesdart run fluttersdk_telescope mcp:servewhenbin/fsais absent (via the wrapper's--invocationpass-through to artisan'smcp:install, gated on the 0.0.6 trim-whitespace behavior).telescope:installno longer depends on the AOT-compiledbin/fsa. The chained subprocess calls (install+plugin:install fluttersdk_telescope) now spawndart run fluttersdk_telescope ...directly through the telescope CLI wrapper, mirroring the Cat C subprocess pattern landed influttersdk_dusk. Consumers on a clean checkout (where fsa has not been compiled yet) can complete the bootstrap chain without aProcessException: No such file or directoryfailure. Behavior delta: even consumers withbin/fsascaffolded now invokeplugin:installthroughdart run(a few seconds slower than the fsa AOT proxy on a singletelescope:installinvocation). RequiresdartonPATH(always true on a Flutter dev box). Matches dusk's unconditionaldart runpattern for cross-plugin consistency.
Fixed
telescope_clearMCP descriptor claimed it cleared "three ring buffers (http, logs, exceptions)" but the implementation has always wiped all 9 buffers atomically (per Core Law 6). Rewrote the description and Usage bullets inlib/src/telescope_artisan_provider.dartto enumerate the 9 buffers (http, logs, exceptions, events, gates, dumps, queries, caches, magic models), document the{"cleared": true}envelope, and make the upstream-sink isolation (Sentry, Bugsnag still receive events) explicit. The wire behavior was already correct; this is a descriptor-string fix only.bin/fluttersdk_telescope.dartnow forcescollectMcpTools: truewhen dispatchingmcp:serve, sodart run fluttersdk_telescope mcp:servesurfaces all 9telescope_*MCP tools. Previously returned 0 plugin tools.
Release notes
Open source →Added
- Skill v0.0.3: new
## 8. Community: star + issue (optional, once per session)section inskills/fluttersdk-telescope/SKILL.mdplus a newskills/fluttersdk-telescope/references/community.mdreference page. Trigger split: star CTA fires after the user confirms a telescope task end-to-end (captured HTTP record after a gesture, level-filtered tail slice, surfaced uncaught exception,clear-then-repro delta, or cleantelescope:install); issue CTA fires only on a genuine telescope-side bug (malformed MCP envelope,kInvalidParamsfor documented params,TelescopeStorelosing entries before the 500-cap,clearreturning anything but{"cleared": true}, shipped watchers throwing on a clean install,telescope:installexiting non-zero on a fresh consumer, orregisterExtensionIdempotentviolating idempotency). Issue CTA explicitly excludes the documented wired-but-empty buffers, swallowedtry / catchinvisibility, consumer-app exceptions, rawdart:io HttpClienttraffic gaps, the missingtelescope_modelsMCP tool, and FIFO eviction past 500. Preflight gates onghpresence and auth; failure prints the URL only, noopen/xdg-open/start. Both CTAs are prose-permission (notAskUserQuestion), maximum one star and one issue per session, declining one suppresses only that CTA. Labels: onlybugis applied (theagent-reportedlabel does not exist onfluttersdk/telescope, drop the flag). - Repo flow adopted GitHub Flow (single long-lived
master; retired thedevelopaccumulator).CLAUDE.mdand.github/copilot-instructions.mdnow carry Golden Rule 7 plus a## Branchingsection documenting task-branch naming, squash-merge policy, and the release-tag shape.delete_branch_on_merge: trueenabled on origin so merged branches auto-cleanup.
Changed
fluttersdk_artisanconstraint bumped^0.0.4->^0.0.6. Consumers were already pulling 0.0.6 transitively (via the post-installfluttersdk_artisan: anyline the telescope:install bootstrap appends to the consumer pubspec); telescope's own dev resolution now tracks the same version so tests, format, andpub publish --dry-runrun against the artisan that consumers actually execute. Picks up the 0.0.5 + 0.0.6 fixes:_plugins.g.dartAOT staleness detection, MCPserverInfo.versionsync to0.0.6, atomic.mcp.jsonwrites via.tmp+ rename, themcp:install --invocationplugin-aware fallback, and thedusk_evaluateVM-routed fix. Future artisan 0.0.7 will need a coordinated bump.telescope_*MCP tool descriptions now state the actual wire shape ("oldest-first; last entry is newest"). Previously seven of the eight read tools claimed "Returns newest-first" while the handler delivered oldest-first; the SKILL.md Law 5 disclaimer ("presenter shorthand") that papered over the gap has been retired. Clients reading the description verbatim no longer assume a reversed order.mcp:installfallback now writesdart run fluttersdk_telescope mcp:servewhenbin/fsais absent (via the wrapper's--invocationpass-through to artisan'smcp:install, gated on the 0.0.6 trim-whitespace behavior).telescope:installno longer depends on the AOT-compiledbin/fsa. The chained subprocess calls (install+plugin:install fluttersdk_telescope) now spawndart run fluttersdk_telescope ...directly through the telescope CLI wrapper, mirroring the Cat C subprocess pattern landed influttersdk_dusk. Consumers on a clean checkout (where fsa has not been compiled yet) can complete the bootstrap chain without aProcessException: No such file or directoryfailure. Behavior delta: even consumers withbin/fsascaffolded now invokeplugin:installthroughdart run(a few seconds slower than the fsa AOT proxy on a singletelescope:installinvocation). RequiresdartonPATH(always true on a Flutter dev box). Matches dusk's unconditionaldart runpattern for cross-plugin consistency.
Fixed
telescope_clearMCP descriptor claimed it cleared "three ring buffers (http, logs, exceptions)" but the implementation has always wiped all 9 buffers atomically (per Core Law 6). Rewrote the description and Usage bullets inlib/src/telescope_artisan_provider.dartto enumerate the 9 buffers (http, logs, exceptions, events, gates, dumps, queries, caches, magic models), document the{"cleared": true}envelope, and make the upstream-sink isolation (Sentry, Bugsnag still receive events) explicit. The wire behavior was already correct; this is a descriptor-string fix only.bin/fluttersdk_telescope.dartnow forcescollectMcpTools: truewhen dispatchingmcp:serve, sodart run fluttersdk_telescope mcp:servesurfaces all 9telescope_*MCP tools. Previously returned 0 plugin tools.
- Skill v0.0.3: new
-
0.0.221 May 2026Release notes
Open source →Fixed
- CHANGELOG correction. The
0.0.1archive on pub.dev shipped with a populated[Unreleased]block left over from release prep: every entry listed there (magic dev-dep drop,pubspec_overrides.yamlremoval,test/src/magic/deletion,magictag cleanup indart_test.yaml+ CI workflows + agent-instruction files,example_magic/removal, sub-barrel import path swap intelescope:install) actually shipped INSIDE0.0.1; nothing was published before it. This0.0.2republishes the corrected CHANGELOG so the consolidated0.0.1history surfaces on pub.dev. - README pinned-install snippet bumped from
^0.0.1to^0.0.2so the example matches the published version.
Unchanged
- No code, no test, no runtime behavior, no public API surface changed.
lib/,bin/,test/,example/, and all 11ext.telescope.*VM Service extensions plus 9telescope_*MCP tools are byte-identical to0.0.1.
Release notes
Open source →Fixed
- CHANGELOG correction. The
0.0.1archive on pub.dev shipped with a populated[Unreleased]block left over from release prep: every entry listed there (magic dev-dep drop,pubspec_overrides.yamlremoval,test/src/magic/deletion,magictag cleanup indart_test.yaml+ CI workflows + agent-instruction files,example_magic/removal, sub-barrel import path swap intelescope:install) actually shipped INSIDE0.0.1; nothing was published before it. This0.0.2republishes the corrected CHANGELOG so the consolidated0.0.1history surfaces on pub.dev. - README pinned-install snippet bumped from
^0.0.1to^0.0.2so the example matches the published version.
Unchanged
- No code, no test, no runtime behavior, no public API surface changed.
lib/,bin/,test/,example/, and all 11ext.telescope.*VM Service extensions plus 9telescope_*MCP tools are byte-identical to0.0.1.
- CHANGELOG correction. The
-
0.0.121 May 2026Release notes
Open source →First publish on pub.dev. Source archive byte-identical to the 0.0.2
republish (43cfd7e), which exists solely to surface the corrected
CHANGELOG on pub.dev.Release notes
Open source →Initial public release of
fluttersdk_telescope. Passive runtime inspector for Flutter apps with a framework-agnostic core and optional Magic-stack integration. Plugin offluttersdk_artisan^0.0.4 (hosted-only; no path overrides). Vanilla-Flutter clean: zeromagicreferences in the production or default-test surface. Magic-stack integration is opt-in via runtime detection intelescope:install, which injectsimport 'package:magic/telescope_integration.dart';and anif (kDebugMode) MagicTelescopeIntegration.install();block afterawait Magic.init(when the consumer's pubspec listsmagic:.Watchers
9 watchers across vanilla Flutter and Magic-stack:
LogWatcher(auto-installed):package:loggingLogger calls captured to thelogsring buffer.ExceptionWatcher:FlutterError.onError+PlatformDispatcher.instance.onError, chain-preserve previous handlers.DumpWatcher:debugPrintcapture (vanilla Flutter); debug-only.MagicHttpFacadeAdapter: MagicHttpfacade interceptor.MagicModelWatcher:ModelCreated/ModelSaved/ModelDeletedevents from Magic.MagicCacheWatcher:CacheHit/CacheMiss/CachePut/CacheForget/CacheFlushevents.MagicEventWatcher: curated event subscription (auth, db connection, gate-define).MagicGateWatcher:GateAccessCheckedevent after everyGate.allows/Gate.denies.MagicQueryWatcher:QueryExecutedevent from the magic database connector.
Records
9 immutable record types:
HttpRequestRecord,LogRecordEntry,ExceptionRecord,MagicModelRecord,MagicCacheRecord,EventRecord,GateRecord,DumpRecord,QueryRecord.9-buffer TelescopeStore
Per-buffer Queue<T> (O(1) ends) + StreamController<T>.broadcast() for live tail. Default capacity 500 entries per buffer (settable via
setCapacity(buffer, capacity)).clear()flushes all 9 atomically.VM Service extensions (11)
ext.telescope.requests,.console,.exceptions,.events,.gates,.dumps,.queries,.caches,.clear,.pause,.resume. Every registration goes throughregisterExtensionIdempotent(fromfluttersdk_artisan) for hot-restart safety.MCP tools (9)
telescope_tail,telescope_requests,telescope_exceptions,telescope_clear,telescope_events,telescope_gates,telescope_dumps,telescope_queries,telescope_caches. Each is aMcpToolDescriptorconst instance contributed viaTelescopeArtisanProvider.mcpTools().CLI commands (6)
telescope:install,telescope:tail,telescope:requests,telescope:queries,telescope:caches,telescope:clear.telescope:installis a one-shot bootstrap that scaffolds the consumer artisan harness, runsplugin:install fluttersdk_telescope, and injectsTelescopePlugin.install()intolib/main.dart(Magic-stack anchor or vanillarunAppanchor).Three public contracts
TelescopeWatcher:namegetter +install()+uninstall().TelescopeHttpAdapter: same 3-method shape + optionalpendingCountgetter (default 0).McpToolDescriptor: const-constructible; shape owned byfluttersdk_artisan.
TelescopeStore extension surface
pendingHttpCountgetter sumsTelescopeHttpAdapter.pendingCountacross every registered adapter; consumed byext.dusk.wait_for_network_idlefor network-idle detection.
CI + automated publishing
.github/workflows/ci.yml: format + analyze + flutter test (--exclude-tags integration) + 80% line-coverage floor (lcov + awk gate) + codecov upload + dart pub publish --dry-run..github/workflows/publish.yml: SemVer tag push triggers validate -> pub.dev publish via the officialdart-lang/setup-dart/.github/workflows/publish.yml@v1reusable workflow with OIDC authentication + github-release job auto-extracting CHANGELOG entry..github/dependabot.yml: weekly pub root + weekly github-actions bumps.
Documentation
README.mdtwo-path Quick Start (one-shot self-bootstrap viadart run fluttersdk_telescope telescope:install; manual wiring for consumers who prefer to drive the artisan dispatcher by hand). After install, the consumer's./bin/fsanative AOT launcher is the recommended entry point for every subsequent telescope command.doc/tree:getting-started/,watchers/,mcp/.llms.txtat repo root per llmstxt.org spec.skills/fluttersdk-telescope/LLM-agent skill (SKILL.md + 2 references).
Compatibility
- Dart SDK >=3.4.0 <4.0.0; Flutter >=3.22.0.
- Platforms: Android, iOS, macOS, Linux, Windows, Web (debug-only on every platform; release builds tree-shake the entire telescope subsystem via
kDebugModegate). - Magic-stack integration optional. Vanilla Flutter consumers use Dio adapter + LogWatcher + ExceptionWatcher + DumpWatcher with no Magic dependency.
Test coverage
249 tests green at release time across watchers, records, commands, extensions, and the artisan provider. 80% line coverage floor enforced in CI (current measured coverage 95.60%).