argos_inspector 0.4.0
argos_inspector: ^0.4.0 copied to clipboard
All-seeing Flutter APM and HTTP packet capture plugin — FPS monitoring, native HTTP interception (NSURLProtocol on iOS, OkHttp Interceptor on Android), curl reproduction, and a route-grouped packet in [...]
0.4.0 #
Added #
- Added an opt-in on-device Widget Inspector with direct long-press selection, layout highlighting, searchable hierarchy snapshots, node details, refresh, and a floating full-tree launcher.
- Added opt-in runtime Widget tuning through
ArgosTunableandArgosWidgetTuningController. Registered numeric and color properties can be edited live and reset; arbitrary colors support hexadecimal/HSVA controls, built-in and host-defined quick picks, and compact tabs for multiple colors such as independent font and background colors. - Added automatic/manual diagnostic sessions with explicit
startSession/pauseSession/resumeSession/stopSessionAPIs, stable per-session sequence numbers, event metadata, session queries, interrupted recovery, and a defaultmaxSessionsretention limit of 5. - Added the opt-in
ArgosAutomaticSessionPolicy.adaptivestrategy. Automatic sessions can now roll after a configured background timeout, at a maximum duration, or when a cached host context fingerprint changes. New sessions persistbackgroundTimeout,maxDuration, orcontextChangedend reasons.
Changed #
- Storage now uses the versioned
argos_diagnostic_store_v1envelope. Existingargos_packet_recordslists migrate on read, while the legacy key is retained unchanged for rollback; an explicit clear removes both keys. captureEnablednow maps to session pause/resume and gates network, native network, crash, jank, and resource events consistently. Crash writes request a best-effort flush without delaying the host error handler.- Existing automatic behavior remains source- and behavior-compatible through the default process policy. Manual sessions, explicitly started sessions, routes, short lifecycle transitions, and explicit pause/resume are not implicitly segmented by the adaptive policy.
Fixed #
- Renamed the iOS podspec to
argos_inspector.podspecso CocoaPods discovery matches the package name introduced in0.3.1.
0.3.1 #
First version published to pub.dev, under the package name argos_inspector (the name argos was rejected by pub.dev as too similar to the existing argo package). 0.3.0 was tagged on GitHub under the old argos name but never published; 0.3.1 is functionally identical plus the package rename and lint fix below.
Changed #
- Package renamed
argos→argos_inspectorfor pub.dev. Imports are nowpackage:argos_inspector/argos_inspector.dart; the dependency isargos_inspector: ^0.3.1. All public class/API names (ArgosManager,ArgosConfig,ArgosCapability, etc.) are unchanged — only the package/import name changed. The GitHub repository remainsztlyyznf001/argos.
Fixed #
- Add braces to a single-statement
ifinArgosPacketDetailPage._parseFormBodythatdart formathad wrapped across two lines, which tripped thecurly_braces_in_flow_control_structureslint and madeflutter analyzeexit non-zero. No behavioural change.
0.3.0 #
This release bundles four changes landed since 0.2.0, expanding Argos from "network + basic FPS" into a four-signal APM tool (network, crash, jank, resource) with an event-type-aware Inspector and a hardened storage layer.
Added #
- Crash / error capture monitor —
ArgosCapability.crashcaptures Flutter framework errors (FlutterError.onError) and unhandled Dart exceptions (runZonedGuarded/PlatformDispatcher.onError), recording error type, message, stack trace, originating route, and timestamp into the shared APM data flow. NewArgosCrashMonitor(lib/apm/argos_crash_monitor.dart) andArgosCrashInfomodel. - Jank / dropped-frame analysis monitor —
ArgosCapability.jankextendsFrameTimingsampling to detect frames exceeding the frame budget, splits build vs raster time, aggregates contiguous jank intervals, and emits structured jank events. NewArgosJankMonitor(lib/apm/argos_jank_monitor.dart) andArgosJankInfomodel. - Resource (memory) monitor —
ArgosCapability.resourceperiodically samples process memory (RSS / maxRss) and emits resource-sample events. NewArgosResourceMonitor(lib/apm/argos_resource_monitor.dart) andArgosResourceInfomodel. - New
ArgosConfigfields (all backward-compatible defaults):resourceMaxRecords(default50),jankThresholdMultiplier(default1.0),resourceSampleInterval(default2s), andstoragePersistInterval(default5s). - New public exports in
lib/argos.dart: the crash / jank / resource models and monitors, plus the sharedargos_ui_kit(lib/ui/argos_ui_kit.dart).
Changed #
- Event-type-aware Inspector UI — the packet list filter is now two-level: first by event type (all / network / crash / jank / resource), with the HTTP method filter shown only when "network" is selected; each type chip shows its current record count. Contiguous resource samples collapse into a single expandable aggregate (sample count, current / peak RSS, trend). The detail page now dispatches by record kind: network keeps the request / response tabs, while crash, jank, and resource records get purpose-built views (crash: message + copyable stack + route; jank: dropped-frame count, interval span, max frame, build/raster split; resource: RSS values + sample time). Network rows gained response-body size and relative + absolute timestamps, and all colors now derive from
Theme.of(context).colorSchemefor correct light/dark contrast. - Hardened storage concurrency —
ArgosPacketStorage.clear()andgetAllAsync()now serialize through the write chain instead of bypassing it, closing a clear-vs-write race and preventing reads of in-flight write state. Writes are coalesced (storagePersistInterval) so the synchronousjsonEncodeno longer runs on every append. - Per-kind storage retention — retention is now a per-
kindFIFO rather than a single sharedmaxPacketRecordstotal. Resource records are bounded independently byresourceMaxRecords, so routine memory samples can never evict a captured crash or network request.maxPacketRecordskeeps its meaning for non-resource kinds.
0.2.0 #
Added #
- Native capture example demo wired through
MethodChannel:NativeDemoChannelon iOS (example/ios/Runner/NativeDemoChannel.swift) and Android (example/android/app/src/main/kotlin/com/example/example/NativeDemoChannel.kt), plusexample/lib/native_demo_page.dartexercising native HTTP from the example app. - MMKV-backed
ArgosStorageAdaptersample (example/lib/mmkv_storage_adapter.dart) showing how to plug a persistent backend into Argos. native-capture-examplecapability spec underopenspec/specs/documenting the demo wiring.
Changed #
- Native capture pipeline now honours runtime configuration: events are dropped when
ArgosManager.captureEnabledisfalse, and stored records are capped atArgosConfig.maxPacketRecords(defaulting to 200) instead of an unconditional 200. - Android
OkHttpInterceptorreads response bodies using the response's declared content-type charset instead of forcing UTF-8, matching the iOS path's behavior. - Silenced analyzer noise on
ArgosFpsInfo.typeandArgosHttpInfo.typeoverridden field initialisers with targeted// ignore: overridden_fieldsannotations. - Test bootstrap order in
test/argos_test.dartnow callsTestWidgetsFlutterBinding.ensureInitialized()before binding accessors, fixing flake on newer Flutter test harnesses.
Breaking #
- Android plugin build toolchain bumped: Kotlin
1.9.0→2.0.21, Android Gradle Plugin7.4.0→8.7.3,compileSdk33→36, source/target compatibility moved to Java 17, and the plugin now declaresnamespace 'dev.panoptes.argos'. Downstream Android apps consuming Argos must be on AGP 8.x with JDK 17 toolchains; AGP 7 / JDK 11 hosts will fail to configure. - Removed the unused
compileOnly 'io.flutter:flutter_embedding_debug:1.0.0-3316dd8728419ad3534e3f6112aa6291f587078a'dependency from the pluginbuild.gradle; downstream builds that pinned to that artifact's presence should drop the reference.
0.1.0 #
First public release.
Features #
- Native HTTP capture:
NSURLProtocolon iOS,OkHttp Interceptoron Android. - Dart-layer HTTP capture via
HttpOverrides(covers anydart:ioHTTP path). - Inspector UI:
ArgosPacketListPage/ArgosPacketDetailPagewith route grouping, method filter, URL search, runtime capture toggle, curl reproduction. - Pluggable storage via
ArgosStorageAdapter— bring your own MMKV / SharedPreferences / file backend. - Dynamic proxy provider through
ArgosConfig.proxyProvider. - FPS monitor, opt-in via
ArgosCapability.fps.