agentmetry 0.10.1__tar.gz → 0.10.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (365) hide show
  1. {agentmetry-0.10.1 → agentmetry-0.10.2}/PKG-INFO +2 -2
  2. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/cli/__init__.py +2 -1
  3. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/tool_policy/evaluator.py +8 -0
  4. agentmetry-0.10.2/agentmetry/core/scanner/instruction_files.py +192 -0
  5. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/scanner/scan.py +72 -10
  6. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/version.py +1 -1
  7. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/404.html +1 -1
  8. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/__next.__PAGE__.txt +1 -1
  9. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/__next._full.txt +1 -1
  10. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/__next._tree.txt +1 -1
  11. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_not-found/__next._full.txt +1 -1
  12. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_not-found/__next._not-found.__PAGE__.txt +1 -1
  13. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_not-found/__next._tree.txt +1 -1
  14. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_not-found.html +1 -1
  15. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_not-found.txt +1 -1
  16. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/index.html +1 -1
  17. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/index.txt +1 -1
  18. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/policies/tool/manifest.yaml +7 -1
  19. {agentmetry-0.10.1 → agentmetry-0.10.2}/pyproject.toml +1 -1
  20. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_scanner.py +115 -0
  21. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_tool_policy_agent_cli.py +22 -0
  22. {agentmetry-0.10.1 → agentmetry-0.10.2}/.dockerignore +0 -0
  23. {agentmetry-0.10.1 → agentmetry-0.10.2}/.env.agentmetry-demo +0 -0
  24. {agentmetry-0.10.1 → agentmetry-0.10.2}/.env.example +0 -0
  25. {agentmetry-0.10.1 → agentmetry-0.10.2}/.gitignore +0 -0
  26. {agentmetry-0.10.1 → agentmetry-0.10.2}/Dockerfile +0 -0
  27. {agentmetry-0.10.1 → agentmetry-0.10.2}/README.md +0 -0
  28. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/__init__.py +0 -0
  29. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/__init__.py +0 -0
  30. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/main.py +0 -0
  31. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/routes/__init__.py +0 -0
  32. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/routes/audit.py +0 -0
  33. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/routes/auth.py +0 -0
  34. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/trusted_host.py +0 -0
  35. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/websocket.py +0 -0
  36. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/ws_bridge.py +0 -0
  37. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/cli/__main__.py +0 -0
  38. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/__init__.py +0 -0
  39. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/api_token.py +0 -0
  40. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/__init__.py +0 -0
  41. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/__init__.py +0 -0
  42. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/agt.py +0 -0
  43. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/chronicle.py +0 -0
  44. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/cloudevents.py +0 -0
  45. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/ecs.py +0 -0
  46. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/sentinel.py +0 -0
  47. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/splunk.py +0 -0
  48. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/alerts.py +0 -0
  49. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/antigravity_trajectory.py +0 -0
  50. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/atlas.py +0 -0
  51. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/canonical.py +0 -0
  52. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/cloud_bridge.py +0 -0
  53. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/compliance_digest.py +0 -0
  54. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/cursor_cloud_cache.py +0 -0
  55. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/__init__.py +0 -0
  56. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/benchmark.py +0 -0
  57. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_approval_denied_then_executed.jsonl +0 -0
  58. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_arbitrary_host_stage_execute.jsonl +0 -0
  59. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_autonomous_unapproved_write.jsonl +0 -0
  60. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_credential_exfil.jsonl +0 -0
  61. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_credential_then_cloud_api.jsonl +0 -0
  62. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_destructive_delete_burst.jsonl +0 -0
  63. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_discovery_then_collect.jsonl +0 -0
  64. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_dotfile_then_git_push.jsonl +0 -0
  65. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_encoded_command_download.jsonl +0 -0
  66. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_env_credential_exfil.jsonl +0 -0
  67. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_hashed_only_no_command.jsonl +0 -0
  68. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_interpreter_egress.jsonl +0 -0
  69. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_pr_merged_without_review.jsonl +0 -0
  70. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_proc_substitution_cradle.jsonl +0 -0
  71. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_remote_pipe_to_shell.jsonl +0 -0
  72. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_remote_staging_then_execute.jsonl +0 -0
  73. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_secret_manager_then_egress.jsonl +0 -0
  74. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_session_tool_burst.jsonl +0 -0
  75. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_single_command_exfil.jsonl +0 -0
  76. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_single_quoted_interpreter_egress.jsonl +0 -0
  77. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_ssh_directory_exfil.jsonl +0 -0
  78. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_subagent_swarm.jsonl +0 -0
  79. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_timestamp_collision.jsonl +0 -0
  80. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_untrusted_input_then_action.jsonl +0 -0
  81. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_authoring_merge_fixtures.jsonl +0 -0
  82. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_autonomous_after_approval.jsonl +0 -0
  83. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_build_artifact_cleanup.jsonl +0 -0
  84. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_ci_artifact_download.jsonl +0 -0
  85. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_commit_message_names_cloud_clis.jsonl +0 -0
  86. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_container_registry_publish.jsonl +0 -0
  87. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_database_migration.jsonl +0 -0
  88. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_dependency_audit_network_burst.jsonl +0 -0
  89. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_dependency_install_and_build.jsonl +0 -0
  90. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_download_release_archive.jsonl +0 -0
  91. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_env_example_read.jsonl +0 -0
  92. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_fetch_data_then_run_repo_script.jsonl +0 -0
  93. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_fetch_dataset_then_analyse.jsonl +0 -0
  94. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_fetch_lockfile_then_install.jsonl +0 -0
  95. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_fetch_piped_into_own_script.jsonl +0 -0
  96. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_git_review_and_push.jsonl +0 -0
  97. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_github_raw_docs_then_script.jsonl +0 -0
  98. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_human_driven_deletes.jsonl +0 -0
  99. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_local_api_probing.jsonl +0 -0
  100. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_long_but_calm_session.jsonl +0 -0
  101. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_loopback_is_not_egress.jsonl +0 -0
  102. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_loopback_pipe_to_interpreter.jsonl +0 -0
  103. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_mcp_text_mentions_credential_path.jsonl +0 -0
  104. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_ordinary_development.jsonl +0 -0
  105. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_package_manager_after_fetch.jsonl +0 -0
  106. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_reading_config_that_is_not_secret.jsonl +0 -0
  107. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_remote_api_call_no_credentials.jsonl +0 -0
  108. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_research_then_docs.jsonl +0 -0
  109. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_reversed_order_is_not_exfil.jsonl +0 -0
  110. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_secret_names_and_docs.jsonl +0 -0
  111. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_terraform_apply_with_profile.jsonl +0 -0
  112. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_test_and_fix_loop.jsonl +0 -0
  113. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_writing_about_credentials.jsonl +0 -0
  114. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/corpus.yaml +0 -0
  115. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/disposition.py +0 -0
  116. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/engine.py +0 -0
  117. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/live.py +0 -0
  118. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/live_store.py +0 -0
  119. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/models.py +0 -0
  120. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/rules.py +0 -0
  121. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/traits.py +0 -0
  122. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/yaml_config.py +0 -0
  123. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/yaml_rules.py +0 -0
  124. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/dlp/__init__.py +0 -0
  125. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/dlp/loader.py +0 -0
  126. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/dlp/models.py +0 -0
  127. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/dlp/scanner.py +0 -0
  128. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/dogfood.py +0 -0
  129. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/evidence_pack.py +0 -0
  130. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/external.py +0 -0
  131. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/forwarder.py +0 -0
  132. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/grok_bot_transcript.py +0 -0
  133. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/hashing.py +0 -0
  134. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/heartbeat.py +0 -0
  135. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/hook_bootstrap.py +0 -0
  136. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/identity.py +0 -0
  137. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/ingest.py +0 -0
  138. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/ingest_quota.py +0 -0
  139. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/managed_hooks.py +0 -0
  140. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/mcp_inventory_event.py +0 -0
  141. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/migrate.py +0 -0
  142. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/mitre.py +0 -0
  143. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/otel_ingest.py +0 -0
  144. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/policy.py +0 -0
  145. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/policy_settings.py +0 -0
  146. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/posture_event.py +0 -0
  147. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/redaction.py +0 -0
  148. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/replay.py +0 -0
  149. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/run_context.py +0 -0
  150. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/session_tree.py +0 -0
  151. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/signing.py +0 -0
  152. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/sinks.py +0 -0
  153. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/spool.py +0 -0
  154. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/tool_policy/__init__.py +0 -0
  155. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/tool_policy/capability.py +0 -0
  156. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/tool_policy/loader.py +0 -0
  157. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/tool_policy/models.py +0 -0
  158. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/trail_anchor.py +0 -0
  159. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/trail_chain.py +0 -0
  160. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/trail_db.py +0 -0
  161. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/trail_merkle.py +0 -0
  162. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/trail_rotation.py +0 -0
  163. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/auth.py +0 -0
  164. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/bus/__init__.py +0 -0
  165. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/bus/audit_exporter.py +0 -0
  166. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/bus/bridges.py +0 -0
  167. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/bus/bus.py +0 -0
  168. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/bus/events.py +0 -0
  169. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/bus/outbox.py +0 -0
  170. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/config.py +0 -0
  171. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/dashboard_session.py +0 -0
  172. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/__init__.py +0 -0
  173. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/autostart.py +0 -0
  174. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/doctor.py +0 -0
  175. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/driver_paths.py +0 -0
  176. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/env_file.py +0 -0
  177. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/hook_coverage.py +0 -0
  178. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/machine_view.py +0 -0
  179. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/mcp_inventory.py +0 -0
  180. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/mcp_schema.py +0 -0
  181. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/posture.py +0 -0
  182. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/drivers/__init__.py +0 -0
  183. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/drivers/host.py +0 -0
  184. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/drivers/permissions.py +0 -0
  185. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/drivers/spec.py +0 -0
  186. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/extensions.py +0 -0
  187. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/health.py +0 -0
  188. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/managed_policy.py +0 -0
  189. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/operator_identity.py +0 -0
  190. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/paths.py +0 -0
  191. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/scanner/__init__.py +0 -0
  192. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/scanner/injection.py +0 -0
  193. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/scanner/known_packages.py +0 -0
  194. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/scanner/typosquat.py +0 -0
  195. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/.gitkeep +0 -0
  196. {agentmetry-0.10.1/agentmetry/dashboard_static/_next/static/NZBzSYttw3Vkl_rHtxNJp → agentmetry-0.10.2/agentmetry/dashboard_static/_next/static/B9YcBHt0iAnRAn2NpdHC2}/_buildManifest.js +0 -0
  197. {agentmetry-0.10.1/agentmetry/dashboard_static/_next/static/NZBzSYttw3Vkl_rHtxNJp → agentmetry-0.10.2/agentmetry/dashboard_static/_next/static/B9YcBHt0iAnRAn2NpdHC2}/_clientMiddlewareManifest.js +0 -0
  198. {agentmetry-0.10.1/agentmetry/dashboard_static/_next/static/NZBzSYttw3Vkl_rHtxNJp → agentmetry-0.10.2/agentmetry/dashboard_static/_next/static/B9YcBHt0iAnRAn2NpdHC2}/_ssgManifest.js +0 -0
  199. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/0cz1d0mv5g_q7.js +0 -0
  200. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/0umf92h1sb77c.js +0 -0
  201. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/1ix59xuhq-q14.css +0 -0
  202. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/1q292q_rc4_p6.js +0 -0
  203. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/2-sq6__g8tt5-.js +0 -0
  204. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/2gvu8dyrhibpa.js +0 -0
  205. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/31qp8jfkw0x2h.js +0 -0
  206. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/3ia-1961js2lo.js +0 -0
  207. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/3in77zrqn0wml.css +0 -0
  208. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/turbopack-3-ry682tkyiqk.js +0 -0
  209. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-mono-latin-400-normal.2lhng2ntocry9.woff +0 -0
  210. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-mono-latin-400-normal.3xdfs0-p_zi4c.woff2 +0 -0
  211. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-mono-latin-500-normal.11q3guvgd1r20.woff2 +0 -0
  212. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-mono-latin-500-normal.1fgk-kmy-32_a.woff +0 -0
  213. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-sans-latin-400-normal.19i24--p24z3r.woff +0 -0
  214. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-sans-latin-400-normal.1xf5nwxyfigak.woff2 +0 -0
  215. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-sans-latin-500-normal.14sc3d7sk_zzh.woff +0 -0
  216. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-sans-latin-500-normal.2i4a1iuj6lbvw.woff2 +0 -0
  217. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-sans-latin-600-normal.2ovda_azncp9b.woff2 +0 -0
  218. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-sans-latin-600-normal.2wn5p1s7u3utm.woff +0 -0
  219. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/agentmetry-icon-white.svg +0 -0
  220. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/demo.py +0 -0
  221. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/hooks/__init__.py +0 -0
  222. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/hooks/ingest.py +0 -0
  223. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/hooks/mcp_proxy.py +0 -0
  224. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/policies/detection/manifest.yaml +0 -0
  225. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/policies/dlp/manifest.yaml +0 -0
  226. {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/policies/opa/agent_rules.rego +0 -0
  227. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/conftest.py +0 -0
  228. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/agt_filesink_exfil.jsonl +0 -0
  229. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/agt_filesink_mixed.jsonl +0 -0
  230. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/codex_hooks/README.md +0 -0
  231. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/codex_hooks/permission-request.command.output.schema.json +0 -0
  232. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/codex_hooks/pre-tool-use.command.output.schema.json +0 -0
  233. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/fake_mcp_server.py +0 -0
  234. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/otel_claude_code_session.json +0 -0
  235. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/scanner/benign_skill/SKILL.md +0 -0
  236. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/scanner/benign_tools.json +0 -0
  237. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/scanner/poisoned_skill/SKILL.md +0 -0
  238. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/scanner/poisoned_tools.json +0 -0
  239. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_agentmetry_audit.py +0 -0
  240. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_agentmetry_ingest_client.py +0 -0
  241. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_agt_adapter.py +0 -0
  242. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_antigravity_trajectory.py +0 -0
  243. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_ask_gate_phase_a.py +0 -0
  244. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_atlas_detection_enrichment.py +0 -0
  245. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_atlas_mapping.py +0 -0
  246. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_audit_sinks.py +0 -0
  247. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_audit_stats.py +0 -0
  248. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_audit_tail.py +0 -0
  249. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_auth.py +0 -0
  250. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_auth_default.py +0 -0
  251. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_autostart.py +0 -0
  252. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_boot_sequence.py +0 -0
  253. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_burst_windows.py +0 -0
  254. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_chinese_agent_hooks.py +0 -0
  255. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_chinese_agent_sprint_b.py +0 -0
  256. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_chinese_agent_sprint_c.py +0 -0
  257. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_chronicle_adapter.py +0 -0
  258. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_cli_backup.py +0 -0
  259. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_cli_commands.py +0 -0
  260. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_cli_env_var_names.py +0 -0
  261. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_cloud_bridge.py +0 -0
  262. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_cloudevents_adapter.py +0 -0
  263. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_codex_windows_command.py +0 -0
  264. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_compliance_digest.py +0 -0
  265. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_container_and_legacy_runtime.py +0 -0
  266. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_copilot_hooks.py +0 -0
  267. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_coverage_observed.py +0 -0
  268. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_crewai_adapter.py +0 -0
  269. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_cursor_cloud_cache.py +0 -0
  270. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_demo.py +0 -0
  271. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_demo_isolation.py +0 -0
  272. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_demo_mode_flag.py +0 -0
  273. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_adi.py +0 -0
  274. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_benchmark.py +0 -0
  275. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_default_config.py +0 -0
  276. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_disposition.py +0 -0
  277. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_disposition_api.py +0 -0
  278. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_duplicate_emission.py +0 -0
  279. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_emit_durability.py +0 -0
  280. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_engine.py +0 -0
  281. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_evasion.py +0 -0
  282. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_hf_incident.py +0 -0
  283. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_quoted_command_words.py +0 -0
  284. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_rule_identity.py +0 -0
  285. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_rules_v2.py +0 -0
  286. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_dlp_agent_env_override.py +0 -0
  287. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_dlp_invisible_unicode.py +0 -0
  288. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_dlp_markdown_exfil.py +0 -0
  289. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_dlp_scanner.py +0 -0
  290. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_doctor.py +0 -0
  291. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_doctor_json_and_remediation.py +0 -0
  292. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_dogfood.py +0 -0
  293. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_dogfood_freeze.py +0 -0
  294. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_driver_paths.py +0 -0
  295. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_ecs_threat.py +0 -0
  296. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_event_bus.py +0 -0
  297. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_event_signing.py +0 -0
  298. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_evidence_pack.py +0 -0
  299. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_extensions.py +0 -0
  300. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_external_ingest.py +0 -0
  301. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_forwarder.py +0 -0
  302. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_forwarding_shape.py +0 -0
  303. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_funding_manifest.py +0 -0
  304. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_grok_bot_transcript.py +0 -0
  305. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hash_key.py +0 -0
  306. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_heartbeat.py +0 -0
  307. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_bootstrap.py +0 -0
  308. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_coverage.py +0 -0
  309. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_decision_format.py +0 -0
  310. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_enforcement_timing.py +0 -0
  311. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_import_cost.py +0 -0
  312. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_real_process.py +0 -0
  313. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_spool.py +0 -0
  314. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_identity_enrich.py +0 -0
  315. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_identity_provider.py +0 -0
  316. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_ingest_rate_limit.py +0 -0
  317. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_ingest_roundtrip.py +0 -0
  318. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_ingest_token.py +0 -0
  319. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_isolation.py +0 -0
  320. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_launch_targets.py +0 -0
  321. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_live_detection.py +0 -0
  322. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_live_detection_store.py +0 -0
  323. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_machine_view.py +0 -0
  324. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_managed_hooks.py +0 -0
  325. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_managed_policy.py +0 -0
  326. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_audit_proxy.py +0 -0
  327. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_concealed_text.py +0 -0
  328. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_inventory.py +0 -0
  329. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_inventory_event.py +0 -0
  330. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_meta_fingerprint.py +0 -0
  331. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_proxy_packaged.py +0 -0
  332. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_schema.py +0 -0
  333. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mitre_dlp.py +0 -0
  334. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_opensre_adapter.py +0 -0
  335. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_operator_attribution.py +0 -0
  336. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_otel_ingest.py +0 -0
  337. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_paths.py +0 -0
  338. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_posture.py +0 -0
  339. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_powershell_encoding.py +0 -0
  340. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_readme_claims.py +0 -0
  341. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_redaction.py +0 -0
  342. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_replay.py +0 -0
  343. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_sentinel.py +0 -0
  344. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_serve_script_binds_loopback.py +0 -0
  345. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_session_tree.py +0 -0
  346. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_shared_install.py +0 -0
  347. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_sigma_pack.py +0 -0
  348. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_static_serving.py +0 -0
  349. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_subagent_lifecycle.py +0 -0
  350. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_suite_leaves_real_home_alone.py +0 -0
  351. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_tool_policy.py +0 -0
  352. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_tool_policy_git_hooks.py +0 -0
  353. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_trail_anchor.py +0 -0
  354. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_trail_chain.py +0 -0
  355. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_trail_concurrency.py +0 -0
  356. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_trail_merkle.py +0 -0
  357. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_transcript_watcher.py +0 -0
  358. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_trusted_host.py +0 -0
  359. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_unattended_agent_policy.py +0 -0
  360. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_user_profile_dir.py +0 -0
  361. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_version.py +0 -0
  362. {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_yaml_detection_rules.py +0 -0
  363. {agentmetry-0.10.1 → agentmetry-0.10.2}/tools/generate_sigma_pack.py +0 -0
  364. {agentmetry-0.10.1 → agentmetry-0.10.2}/tools/mcp_audit_proxy.py +0 -0
  365. {agentmetry-0.10.1 → agentmetry-0.10.2}/tools/vault_fs_server.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentmetry
3
- Version: 0.10.1
4
- Summary: Local-first endpoint sensor for AI coding agents: hash-chained audit trail, MITRE-mapped sequence detection, DLP
3
+ Version: 0.10.2
4
+ Summary: Open-source security for AI coding agents: record, detect and block at the tool boundary, with a verifiable audit trail and SIEM forwarding
5
5
  Project-URL: Homepage, https://agentmetry.ai
6
6
  Project-URL: Source, https://github.com/blitzcrieg1/agentmetry
7
7
  Project-URL: Issues, https://github.com/blitzcrieg1/agentmetry/issues
@@ -1799,7 +1799,8 @@ def main(argv: list[str] | None = None) -> int:
1799
1799
  scan.add_argument(
1800
1800
  "target", nargs="?", default=None,
1801
1801
  help="a file or folder (skills, rules, a saved tools/list), npm:NAME or pypi:NAME; "
1802
- "omit to scan the MCP servers configured on this machine",
1802
+ "omit to scan the MCP servers configured on this machine and the agent "
1803
+ "instruction files in Downloads, on the Desktop and in the home folder",
1803
1804
  )
1804
1805
  scan.add_argument("--project", default=None, help="project root whose MCP config to include (default: cwd)")
1805
1806
  scan.add_argument("--known", default=None, help="file of extra known package names, one per line (npm:/pypi: or bare)")
@@ -98,6 +98,14 @@ def _extract_command(hook_data: dict[str, Any] | str, qualified: str = "") -> st
98
98
  val = hook_data.get("value")
99
99
  if val is not None and str(val).strip():
100
100
  return str(val)
101
+ # Codex's apply_patch carries its target paths inside the patch text, not
102
+ # under a path key, so a config-write rule needs the patch itself.
103
+ if q.endswith("apply_patch"):
104
+ for container in (hook_data, *nested):
105
+ for key in ("patch", "input"):
106
+ val = container.get(key)
107
+ if isinstance(val, str) and val.strip():
108
+ return val
101
109
 
102
110
  # Path fallback: lets a rule deny writes to agent-execution config.
103
111
  for container in (hook_data, *nested):
@@ -0,0 +1,192 @@
1
+ """Instruction files an agent loads on its own, and where they sit.
2
+
3
+ An agent started in a folder reads AGENTS.md, CLAUDE.md and their siblings from
4
+ it without being asked, and follows them with the permissions it already has.
5
+ In October 2026 one was found in a customer's ~/Downloads, where a web page can
6
+ save a file without a prompt, telling a coding agent to install a rogue npm
7
+ package (BleepingComputer, 2026-10-25). Nothing there was a bug to patch: the
8
+ agent did what instruction files are for.
9
+
10
+ So two questions are asked of these files only, never of skills or tool
11
+ descriptions, which legitimately say "pip install pandas" all day:
12
+
13
+ - **install_directive**: does it tell the agent to install a *named* package,
14
+ run a package straight from a registry, or pipe a download into a shell?
15
+ A bare `npm install` or `pip install -e .` installs the project the file
16
+ belongs to and is silent. A named package is a reason to read the line, not
17
+ proof of an attack, so it is medium on its own.
18
+ - **agent_config**: does it name the agent's own endpoint, proxy or execution
19
+ config (`ANTHROPIC_BASE_URL`, `.claude/settings.json`, hooks, MCP config)?
20
+ The Claude Code variant of that attack pointed the API at the attacker's
21
+ server. A project's notes rarely touch these, and when they do it is worth a
22
+ look: medium on its own.
23
+ - **outside_project**: is the file in Downloads or on the Desktop, with no
24
+ repository between it and that folder? Nobody writes a project's agent
25
+ instructions there; a browser or an unzipped archive does. High, whatever the
26
+ file says.
27
+ """
28
+
29
+ from __future__ import annotations
30
+
31
+ import os
32
+ import re
33
+ from dataclasses import dataclass
34
+ from pathlib import Path
35
+
36
+ #: Loaded by an agent from its working directory without being asked.
37
+ #: SKILL.md is not: a skill is opted into, and its job is to carry commands.
38
+ AUTOLOAD_NAMES = frozenset({"AGENTS.md", "CLAUDE.md", "GEMINI.md", ".cursorrules", ".windsurfrules"})
39
+
40
+ _I = re.IGNORECASE
41
+ # Flags stay on the same line as the command: a fenced block's next line is a
42
+ # different command.
43
+ _FLAGS = r"(?P<flags>(?:[ \t]+-{1,2}[\w-]+(?:=\S+)?)*)"
44
+ _NPM_NAME = r"(?P<name>(?:@[\w.-]+/)?[A-Za-z0-9][\w.-]*)(?:@[\w.^~<>=*-]+)?"
45
+ _PY_NAME = r"(?P<name>[A-Za-z0-9][\w.-]*)(?:\[[\w,.-]+\])?(?:[<>=!~]=?[\w.*-]+)?"
46
+
47
+ #: (ecosystem, pattern). The ecosystem names the registry a typosquat check uses.
48
+ _INSTALLS: tuple[tuple[str, re.Pattern[str]], ...] = (
49
+ ("npm", re.compile(rf"\b(?:npm|pnpm|cnpm)[ \t]+(?:i|install|add)\b{_FLAGS}[ \t]+{_NPM_NAME}", _I)),
50
+ ("npm", re.compile(rf"\byarn[ \t]+(?:global[ \t]+)?add\b{_FLAGS}[ \t]+{_NPM_NAME}", _I)),
51
+ ("npm", re.compile(rf"\bbun[ \t]+(?:add|install|i)\b{_FLAGS}[ \t]+{_NPM_NAME}", _I)),
52
+ # Runs whatever the registry serves today, without asking.
53
+ ("npm", re.compile(rf"\bnpx[ \t]+(?:-y|--yes)\b{_FLAGS}[ \t]+{_NPM_NAME}", _I)),
54
+ (
55
+ "pypi",
56
+ re.compile(
57
+ rf"\b(?:pip3?|python3?[ \t]+-m[ \t]+pip|py[ \t]+-m[ \t]+pip|uv[ \t]+pip)[ \t]+install\b{_FLAGS}[ \t]+{_PY_NAME}",
58
+ _I,
59
+ ),
60
+ ),
61
+ ("pypi", re.compile(rf"\b(?:uv[ \t]+(?:add|tool[ \t]+install)|pipx[ \t]+install|uvx)\b{_FLAGS}[ \t]+{_PY_NAME}", _I)),
62
+ ("", re.compile(rf"\b(?:gem|cargo|go|brew)[ \t]+install\b{_FLAGS}[ \t]+(?P<name>[A-Za-z0-9][\w./@-]*)", _I)),
63
+ )
64
+
65
+ #: A download handed straight to a shell: nothing is left on disk to read first.
66
+ _PIPE_TO_SHELL = re.compile(
67
+ r"\b(?:curl|wget)\b[^\n|]*\|[ \t]*(?:sudo[ \t]+)?(?:ba|z|da|k)?sh\b"
68
+ r"|\b(?:iwr|irm|Invoke-WebRequest|Invoke-RestMethod)\b[^\n|]*\|[ \t]*(?:iex|Invoke-Expression)\b"
69
+ r"|\b(?:iex|Invoke-Expression)\b[ \t]*\(?[ \t]*\(?[ \t]*(?:iwr|irm|New-Object[ \t]+Net\.WebClient)",
70
+ _I,
71
+ )
72
+
73
+ #: Where an agent's own traffic and execution are configured. The Claude Code
74
+ #: variant of the Downloads attack pointed ANTHROPIC_BASE_URL at the attacker's
75
+ #: server and read the OAuth token off the wire. The names mirror the
76
+ #: agent_env_override DLP rule and the block_agent_exec_config_write policy.
77
+ _AGENT_CONFIG = re.compile(
78
+ r"\b(?:ANTHROPIC_BASE_URL|ANTHROPIC_AUTH_TOKEN|OPENAI_BASE_URL|OPENAI_API_BASE|GEMINI_BASE_URL|"
79
+ r"HTTPS?_PROXY|NODE_OPTIONS|PYTHONSTARTUP|LD_PRELOAD)\b"
80
+ r"|(?:^|[\s`'\"(\\/~])(?:\.claude[\\/]settings(?:\.local)?\.json|\.claude[\\/]hooks?\b|\.mcp\.json|"
81
+ r"\.codex[\\/](?:config\.toml|hooks\.json)|\.gemini[\\/]settings\.json|\.cursor[\\/](?:mcp|hooks)\.json)",
82
+ _I,
83
+ )
84
+
85
+ #: Flags that point the installer at the project rather than at a named package.
86
+ _PROJECT_FLAGS = re.compile(r"(?:^|\s)-(?:r|e|c)\b|--(?:requirement|editable|constraint)\b", _I)
87
+ #: A "name" that is a file the project ships, not a package.
88
+ _FILE_LIKE = re.compile(r"\.(?:txt|toml|cfg|lock|json|in)$", _I)
89
+
90
+
91
+ @dataclass(frozen=True)
92
+ class InstallHit:
93
+ start: int
94
+ end: int
95
+ ecosystem: str # npm | pypi | "" (no typosquat list for it)
96
+ name: str # the package, or "" for a pipe into a shell
97
+
98
+
99
+ def find_installs(text: str) -> list[InstallHit]:
100
+ """Install directives in `text`: at most one per line, in order."""
101
+ text = text or ""
102
+ found: list[InstallHit] = []
103
+ for eco, pattern in _INSTALLS:
104
+ for m in pattern.finditer(text):
105
+ name = m.group("name")
106
+ if _PROJECT_FLAGS.search(m.group("flags") or "") or _FILE_LIKE.search(name):
107
+ continue
108
+ found.append(InstallHit(m.start(), m.end(), eco, name))
109
+ for m in _PIPE_TO_SHELL.finditer(text):
110
+ found.append(InstallHit(m.start(), m.end(), "", ""))
111
+ hits: list[InstallHit] = []
112
+ seen_lines: set[int] = set()
113
+ for hit in sorted(found, key=lambda h: h.start):
114
+ line = text.count("\n", 0, hit.start)
115
+ if line in seen_lines:
116
+ continue
117
+ seen_lines.add(line)
118
+ hits.append(hit)
119
+ return hits
120
+
121
+
122
+ def find_agent_config(text: str) -> list[tuple[int, int]]:
123
+ """Lines that name an agent's endpoint, proxy or execution config: one per line."""
124
+ text = text or ""
125
+ out: list[tuple[int, int]] = []
126
+ seen_lines: set[int] = set()
127
+ for m in _AGENT_CONFIG.finditer(text):
128
+ line = text.count("\n", 0, m.start())
129
+ if line not in seen_lines:
130
+ seen_lines.add(line)
131
+ out.append((m.start(), m.end()))
132
+ return out
133
+
134
+
135
+ def risky_folders(home: Path) -> list[tuple[str, Path]]:
136
+ """Where a browser or an archive drops files nobody wrote as a project.
137
+
138
+ Includes the OneDrive copies Windows redirects Desktop and Downloads to.
139
+ """
140
+ return [(label, base / label) for label in ("Downloads", "Desktop") for base in (home, home / "OneDrive")]
141
+
142
+
143
+ def outside_project(path: Path, home: Path) -> str:
144
+ """'Downloads' or 'Desktop' when `path` sits there outside any repository, else ''."""
145
+ try:
146
+ resolved = path.resolve()
147
+ except OSError:
148
+ return ""
149
+ for label, folder in risky_folders(home):
150
+ try:
151
+ root = folder.resolve()
152
+ resolved.relative_to(root)
153
+ except (OSError, ValueError):
154
+ continue
155
+ d = resolved.parent
156
+ while True:
157
+ if (d / ".git").exists():
158
+ return ""
159
+ if d == root or d.parent == d:
160
+ break
161
+ d = d.parent
162
+ return label
163
+ return ""
164
+
165
+
166
+ #: How far into each folder the machine-wide scan looks. An unzipped archive
167
+ #: puts its AGENTS.md one or two levels down; deeper is somebody's project.
168
+ MACHINE_DEPTH = {"Downloads": 2, "Desktop": 2}
169
+
170
+
171
+ def machine_files(home: Path, limit: int = 500) -> list[Path]:
172
+ """Autoloaded instruction files in Downloads, on the Desktop and in the home folder itself."""
173
+ found: list[Path] = []
174
+ for name in sorted(AUTOLOAD_NAMES):
175
+ candidate = home / name
176
+ if candidate.is_file():
177
+ found.append(candidate)
178
+ for label, folder in risky_folders(home):
179
+ if not folder.is_dir():
180
+ continue
181
+ depth = MACHINE_DEPTH[label]
182
+ base = len(folder.parts)
183
+ for dirpath, dirnames, filenames in os.walk(folder):
184
+ here = Path(dirpath)
185
+ keep = len(here.parts) - base < depth
186
+ dirnames[:] = [d for d in dirnames if keep and not d.startswith(".") and d != "node_modules"]
187
+ for fname in filenames:
188
+ if fname in AUTOLOAD_NAMES:
189
+ found.append(here / fname)
190
+ if len(found) >= limit:
191
+ return found
192
+ return found
@@ -7,10 +7,14 @@ Targets, in the order people reach for them:
7
7
  `agentmetry mcp` already knows (unpinned fetch-and-run, plaintext http) are
8
8
  reported beside them. Descriptions are not readable here: a live server
9
9
  hands them to the model at `tools/list`, which only the MCP proxy sees, so
10
- servers are reported as unobserved on that front rather than as clean.
10
+ servers are reported as unobserved on that front rather than as clean. It
11
+ also reads the instruction files an agent loads by itself (AGENTS.md,
12
+ CLAUDE.md and their siblings) in Downloads, on the Desktop and in the home
13
+ folder, where a browser can leave one (`instruction_files.py`).
11
14
  - **a file or folder**: skills, rules files, CLAUDE.md and AGENTS.md, and any
12
15
  saved `tools/list` result (`{"tools": [...]}` or a list of tool objects),
13
- checked for model-steering text.
16
+ checked for model-steering text. Instruction files an agent loads by itself
17
+ are also checked for install directives and for where they sit.
14
18
  - **`npm:NAME` or `pypi:NAME`**: one package name, checked for typosquatting.
15
19
 
16
20
  Output never contains the word "safe". "No findings" means these checks found
@@ -25,7 +29,8 @@ from dataclasses import asdict, dataclass, field
25
29
  from pathlib import Path
26
30
  from typing import Any
27
31
 
28
- from agentmetry.core.scanner import injection, typosquat
32
+ from agentmetry.core.paths import user_profile_dir
33
+ from agentmetry.core.scanner import injection, instruction_files, typosquat
29
34
 
30
35
  #: Files read as model-visible text when a folder is scanned.
31
36
  TEXT_SUFFIXES = (".md", ".mdc", ".txt")
@@ -51,7 +56,7 @@ CONFIG_DETAIL = {
51
56
 
52
57
  @dataclass(frozen=True)
53
58
  class Finding:
54
- check: str # injection | typosquat | mcp_config
59
+ check: str # injection | instruction_file | typosquat | mcp_config
55
60
  category: str
56
61
  severity: str # high | medium | low
57
62
  where: str
@@ -193,13 +198,51 @@ def _excerpt(text: str, start: int, end: int, width: int = 100) -> str:
193
198
  return line if len(line) <= width else line[: width - 1] + "…"
194
199
 
195
200
 
196
- def _scan_text_file(path: Path, report: ScanReport) -> None:
201
+ def _scan_text_file(path: Path, report: ScanReport, known: dict[str, frozenset[str]] | None = None) -> None:
197
202
  text = path.read_text(encoding="utf-8", errors="replace")
198
- for hit in injection.find_in_text(text):
203
+ hits = injection.find_in_text(text)
204
+ for hit in hits:
199
205
  line = text.count("\n", 0, hit.start) + 1
200
206
  report.findings.append(
201
207
  Finding("injection", hit.category, hit.severity, f"{path}:{line}", _excerpt(text, hit.start, hit.end))
202
208
  )
209
+ if path.name in instruction_files.AUTOLOAD_NAMES:
210
+ _check_instruction_file(path, text, bool(hits), report, known or {})
211
+
212
+
213
+ def _check_instruction_file(
214
+ path: Path, text: str, steering: bool, report: ScanReport, known: dict[str, frozenset[str]]
215
+ ) -> None:
216
+ """Where an autoloaded instruction file sits, and whether it installs anything."""
217
+ place = instruction_files.outside_project(path, user_profile_dir())
218
+ if place:
219
+ report.findings.append(
220
+ Finding(
221
+ "instruction_file", "outside_project", "high", str(path),
222
+ f"an agent started here loads this file and follows it, and it sits in {place} with "
223
+ "no repository around it, where a browser or an unzipped archive leaves files. Read "
224
+ "it before starting an agent in this folder, and delete it if you did not put it there",
225
+ )
226
+ )
227
+ for hit in instruction_files.find_installs(text):
228
+ line = text.count("\n", 0, hit.start) + 1
229
+ where = f"{path}:{line}"
230
+ # Alone, a named package is a line to read. Beside text that steers the
231
+ # model, or in a folder no project lives in, it is the payload.
232
+ severity = "high" if steering or place else "medium"
233
+ report.findings.append(
234
+ Finding("instruction_file", "install_directive", severity, where, _excerpt(text, hit.start, hit.end))
235
+ )
236
+ if hit.ecosystem in typosquat.ECOSYSTEMS and hit.name:
237
+ squat = typosquat.check(hit.name, hit.ecosystem, known.get(hit.ecosystem, frozenset()))
238
+ if squat:
239
+ report.findings.append(Finding("typosquat", squat.kind, "high", where, squat.sentence()))
240
+ for start, end in instruction_files.find_agent_config(text):
241
+ line = text.count("\n", 0, start) + 1
242
+ severity = "high" if steering or place else "medium"
243
+ report.findings.append(
244
+ Finding("instruction_file", "agent_config", severity, f"{path}:{line}", _excerpt(text, start, end))
245
+ )
203
246
 
204
247
 
205
248
  def _scan_tools_file(path: Path, tools: list[dict[str, Any]], report: ScanReport) -> None:
@@ -228,7 +271,7 @@ def _candidate_files(root: Path) -> list[Path]:
228
271
  return found
229
272
 
230
273
 
231
- def scan_path(target: Path) -> ScanReport:
274
+ def scan_path(target: Path, known: dict[str, frozenset[str]] | None = None) -> ScanReport:
232
275
  report = ScanReport(target=str(target))
233
276
  if not target.exists():
234
277
  report.errors.append(f"{target}: no such file or folder")
@@ -250,7 +293,7 @@ def scan_path(target: Path) -> ScanReport:
250
293
  _scan_tools_file(path, tools, report)
251
294
  else:
252
295
  report.scanned += 1
253
- _scan_text_file(path, report)
296
+ _scan_text_file(path, report, known)
254
297
  except OSError as exc:
255
298
  report.errors.append(f"{path}: {exc.strerror or exc}")
256
299
  return report
@@ -260,7 +303,26 @@ def run(target: str | None, *, project: Path | None = None, known_file: str | No
260
303
  """Dispatch on the target's shape."""
261
304
  known = _load_known(known_file)
262
305
  if not target:
263
- return scan_mcp_config(project, known)
306
+ return scan_machine(project, known)
264
307
  if target.startswith(("npm:", "pypi:")):
265
308
  return scan_package(target, known)
266
- return scan_path(Path(target))
309
+ return scan_path(Path(target), known)
310
+
311
+
312
+ def scan_machine(project: Path | None = None, known: dict[str, frozenset[str]] | None = None) -> ScanReport:
313
+ """The MCP servers configured here, and the instruction files a browser could have left."""
314
+ report = scan_mcp_config(project, known)
315
+ report.target = (
316
+ "this machine: MCP servers, and agent instruction files in Downloads, on the Desktop "
317
+ "and in the home folder"
318
+ )
319
+ for path in instruction_files.machine_files(user_profile_dir()):
320
+ try:
321
+ if path.stat().st_size > MAX_FILE_BYTES:
322
+ report.errors.append(f"{path}: larger than {MAX_FILE_BYTES:,} bytes, skipped")
323
+ continue
324
+ report.scanned += 1
325
+ _scan_text_file(path, report, known)
326
+ except OSError as exc:
327
+ report.errors.append(f"{path}: {exc.strerror or exc}")
328
+ return report
@@ -10,4 +10,4 @@ Bump this here and add the matching CHANGELOG section in the same commit.
10
10
 
11
11
  from __future__ import annotations
12
12
 
13
- __version__ = "0.10.1"
13
+ __version__ = "0.10.2"
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/3in77zrqn0wml.css?v=20261023191237633" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/31qp8jfkw0x2h.js?v=20261023191237633"/><script src="/_next/static/chunks/1q292q_rc4_p6.js?v=20261023191237633" async=""></script><script src="/_next/static/chunks/2gvu8dyrhibpa.js?v=20261023191237633" async=""></script><script src="/_next/static/chunks/turbopack-3-ry682tkyiqk.js?v=20261023191237633" async=""></script><script src="/_next/static/chunks/3ia-1961js2lo.js?v=20261023191237633" async=""></script><meta name="robots" content="noindex"/><title>Agentmetry</title><meta name="description" content="Local flight recorder for AI coding agents"/><link rel="icon" href="/agentmetry-icon-white.svg"/><link rel="apple-touch-icon" href="/agentmetry-icon-white.svg"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><script src="/_next/static/chunks/0cz1d0mv5g_q7.js?v=20261023191237633" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","agentmetry-theme","dark",null,["light","dark"],null,true,true)</script><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script id="_R_">(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push({"otherChunks":["static/chunks/31qp8jfkw0x2h.js","static/chunks/1q292q_rc4_p6.js","static/chunks/2gvu8dyrhibpa.js"],"runtimeModuleIds":[94553]});</script><script src="/_next/static/chunks/31qp8jfkw0x2h.js?v=20261023191237633" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"/_next/static/chunks/3ia-1961js2lo.js?v=20261023191237633\"\n3:I[89554,[\"$2\"],\"ThemeProvider\"]\n4:I[39756,[\"$2\"],\"default\"]\n5:I[37457,[\"$2\"],\"default\"]\n9:I[97367,[\"$2\"],\"OutletBoundary\"]\na:\"$Sreact.suspense\"\nc:\"ViewportBoundary\"\nd:I[97367,[\"$2\"],\"$c\"]\nf:\"MetadataBoundary\"\n10:I[97367,[\"$2\"],\"$f\"]\n12:I[68027,[\"$2\"],\"default\",1]\n:HL[\"/_next/static/chunks/3in77zrqn0wml.css?v=20261023191237633\",\"style\"]\n7:X\n8:[[\"children\",{\"s\":\"__PAGE__\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$a\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@b\"}]}]]}],\"p\":false,\"v\":null}}]]\n6:[[\"children\",{\"s\":\"/_not-found\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$7\"},\"c\":\"$Q8\"}]]\n0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3in77zrqn0wml.css?v=20261023191237633\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/3ia-1961js2lo.js?v=20261023191237633\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[\"$\",\"$L3\",null,{\"attribute\":\"class\",\"defaultTheme\":\"dark\",\"enableSystem\":true,\"storageKey\":\"agentmetry-theme\",\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],\"p\":false,\"v\":null},\"c\":\"$Q6\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],[\"$\",\"$L10\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$a\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L11\"}]}],null]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$12\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3in77zrqn0wml.css?v=20261023191237633\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"NZBzSYttw3Vkl_rHtxNJp\"}\n7:C\ne:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n13:I[27201,[\"$2\"],\"IconMark\"]\nb:null\n11:[[\"$\",\"title\",\"0\",{\"children\":\"Agentmetry\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Local flight recorder for AI coding agents\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/agentmetry-icon-white.svg\"}],[\"$\",\"link\",\"3\",{\"rel\":\"apple-touch-icon\",\"href\":\"/agentmetry-icon-white.svg\"}],[\"$\",\"$L13\",\"4\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/3in77zrqn0wml.css?v=20261025194635519" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/31qp8jfkw0x2h.js?v=20261025194635519"/><script src="/_next/static/chunks/1q292q_rc4_p6.js?v=20261025194635519" async=""></script><script src="/_next/static/chunks/2gvu8dyrhibpa.js?v=20261025194635519" async=""></script><script src="/_next/static/chunks/turbopack-3-ry682tkyiqk.js?v=20261025194635519" async=""></script><script src="/_next/static/chunks/3ia-1961js2lo.js?v=20261025194635519" async=""></script><meta name="robots" content="noindex"/><title>Agentmetry</title><meta name="description" content="Local flight recorder for AI coding agents"/><link rel="icon" href="/agentmetry-icon-white.svg"/><link rel="apple-touch-icon" href="/agentmetry-icon-white.svg"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><script src="/_next/static/chunks/0cz1d0mv5g_q7.js?v=20261025194635519" noModule=""></script></head><body class="font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","agentmetry-theme","dark",null,["light","dark"],null,true,true)</script><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script id="_R_">(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push({"otherChunks":["static/chunks/31qp8jfkw0x2h.js","static/chunks/1q292q_rc4_p6.js","static/chunks/2gvu8dyrhibpa.js"],"runtimeModuleIds":[94553]});</script><script src="/_next/static/chunks/31qp8jfkw0x2h.js?v=20261025194635519" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"/_next/static/chunks/3ia-1961js2lo.js?v=20261025194635519\"\n3:I[89554,[\"$2\"],\"ThemeProvider\"]\n4:I[39756,[\"$2\"],\"default\"]\n5:I[37457,[\"$2\"],\"default\"]\n9:I[97367,[\"$2\"],\"OutletBoundary\"]\na:\"$Sreact.suspense\"\nc:\"ViewportBoundary\"\nd:I[97367,[\"$2\"],\"$c\"]\nf:\"MetadataBoundary\"\n10:I[97367,[\"$2\"],\"$f\"]\n12:I[68027,[\"$2\"],\"default\",1]\n:HL[\"/_next/static/chunks/3in77zrqn0wml.css?v=20261025194635519\",\"style\"]\n7:X\n8:[[\"children\",{\"s\":\"__PAGE__\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$a\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@b\"}]}]]}],\"p\":false,\"v\":null}}]]\n6:[[\"children\",{\"s\":\"/_not-found\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$7\"},\"c\":\"$Q8\"}]]\n0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3in77zrqn0wml.css?v=20261025194635519\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/3ia-1961js2lo.js?v=20261025194635519\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"font-sans antialiased\",\"children\":[\"$\",\"$L3\",null,{\"attribute\":\"class\",\"defaultTheme\":\"dark\",\"enableSystem\":true,\"storageKey\":\"agentmetry-theme\",\"children\":[\"$\",\"$L4\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L5\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],\"p\":false,\"v\":null},\"c\":\"$Q6\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],[\"$\",\"$L10\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$a\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L11\"}]}],null]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$12\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/3in77zrqn0wml.css?v=20261025194635519\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"B9YcBHt0iAnRAn2NpdHC2\"}\n7:C\ne:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n13:I[27201,[\"$2\"],\"IconMark\"]\nb:null\n11:[[\"$\",\"title\",\"0\",{\"children\":\"Agentmetry\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Local flight recorder for AI coding agents\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/agentmetry-icon-white.svg\"}],[\"$\",\"link\",\"3\",{\"rel\":\"apple-touch-icon\",\"href\":\"/agentmetry-icon-white.svg\"}],[\"$\",\"$L13\",\"4\",{}]]\n"])</script></body></html>
@@ -16,7 +16,7 @@ f:"ViewportBoundary"
16
16
  :HL["/_next/static/chunks/1ix59xuhq-q14.css","style"]
17
17
  7:X
18
18
  8:[["children",{"s":"__PAGE__","h":160,"d":{"r":["$","$1","c",{"children":[["$","$La",null,{}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1ix59xuhq-q14.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/2-sq6__g8tt5-.js","async":true}]],["$","$Lb",null,{"children":["$","$c",null,{"name":"Next.MetadataOutlet","children":"$@d"}]}]]}],"p":"$@e","v":null,"s":"$7"}}]]
19
- 0:{"t":{"t":{"s":"","h":80,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3in77zrqn0wml.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/3ia-1961js2lo.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"font-sans antialiased","children":["$","$L3",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"storageKey":"agentmetry-theme","children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]]}],"p":"$@6","v":null,"s":"$7"},"c":"$Q8"},"h":{"r":["$","$1","h",{"children":[null,["$","$L10",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","$L12",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$c",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Agentmetry"}],["$","meta","1",{"name":"description","content":"Local flight recorder for AI coding agents"}],["$","link","2",{"rel":"icon","href":"/agentmetry-icon-white.svg"}],["$","link","3",{"rel":"apple-touch-icon","href":"/agentmetry-icon-white.svg"}],["$","$L13","4",{}]]}]}],null]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"p":"$@14","v":null,"s":"$7"}},"a":"$@15","u":"$@16","b":"NZBzSYttw3Vkl_rHtxNJp"}
19
+ 0:{"t":{"t":{"s":"","h":80,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3in77zrqn0wml.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/3ia-1961js2lo.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"font-sans antialiased","children":["$","$L3",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"storageKey":"agentmetry-theme","children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]]}],"p":"$@6","v":null,"s":"$7"},"c":"$Q8"},"h":{"r":["$","$1","h",{"children":[null,["$","$L10",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","$L12",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$c",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Agentmetry"}],["$","meta","1",{"name":"description","content":"Local flight recorder for AI coding agents"}],["$","link","2",{"rel":"icon","href":"/agentmetry-icon-white.svg"}],["$","link","3",{"rel":"apple-touch-icon","href":"/agentmetry-icon-white.svg"}],["$","$L13","4",{}]]}]}],null]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"p":"$@14","v":null,"s":"$7"}},"a":"$@15","u":"$@16","b":"B9YcBHt0iAnRAn2NpdHC2"}
20
20
  d:null
21
21
  7:300
22
22
  16:true
@@ -16,7 +16,7 @@ f:"MetadataBoundary"
16
16
  :HC["/",""]
17
17
  :HL["/_next/static/chunks/1ix59xuhq-q14.css","style"]
18
18
  6:[["children",{"s":"__PAGE__","h":512,"d":{"r":["$","$1","c",{"children":[["$","$L8",null,{}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/1ix59xuhq-q14.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/2-sq6__g8tt5-.js","async":true,"nonce":"$undefined"}]],["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],"p":false,"v":null}}]]
19
- 0:{"P":null,"c":["",""],"q":"","i":false,"t":{"t":{"s":"","h":528,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3in77zrqn0wml.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/3ia-1961js2lo.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"font-sans antialiased","children":["$","$L3",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"storageKey":"agentmetry-theme","children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],"p":false,"v":null},"c":"$Q6"},"h":{"r":["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","$L10",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$a",null,{"name":"Next.Metadata","children":"$L11"}]}],null]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"p":false,"v":null}},"m":"$undefined","G":["$12",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3in77zrqn0wml.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"NZBzSYttw3Vkl_rHtxNJp"}
19
+ 0:{"P":null,"c":["",""],"q":"","i":false,"t":{"t":{"s":"","h":528,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3in77zrqn0wml.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/3ia-1961js2lo.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"font-sans antialiased","children":["$","$L3",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"storageKey":"agentmetry-theme","children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],"p":false,"v":null},"c":"$Q6"},"h":{"r":["$","$1","h",{"children":[null,["$","$Ld",null,{"children":"$Le"}],["$","$L10",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$a",null,{"name":"Next.Metadata","children":"$L11"}]}],null]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"p":false,"v":null}},"m":"$undefined","G":["$12",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3in77zrqn0wml.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"B9YcBHt0iAnRAn2NpdHC2"}
20
20
  e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
21
21
  13:I[27201,["$2"],"IconMark"]
22
22
  b:null
@@ -2,4 +2,4 @@
2
2
  :HC["/",""]
3
3
  :HL["/_next/static/chunks/1ix59xuhq-q14.css","style"]
4
4
  1:[["children",{"s":"__PAGE__","h":160}]]
5
- 0:{"b":"NZBzSYttw3Vkl_rHtxNJp","t":{"t":{"s":"","h":80,"c":"$Q1"}}}
5
+ 0:{"b":"B9YcBHt0iAnRAn2NpdHC2","t":{"t":{"s":"","h":80,"c":"$Q1"}}}
@@ -14,7 +14,7 @@ f:"MetadataBoundary"
14
14
  7:X
15
15
  8:[["children",{"s":"__PAGE__","h":512,"d":{"r":["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L9",null,{"children":["$","$a",null,{"name":"Next.MetadataOutlet","children":"$@b"}]}]]}],"p":false,"v":null}}]]
16
16
  6:[["children",{"s":"/_not-found","h":512,"d":{"r":["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],"p":false,"v":"$7"},"c":"$Q8"}]]
17
- 0:{"P":null,"c":["","_not-found"],"q":"","i":false,"t":{"t":{"s":"","h":528,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3in77zrqn0wml.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/3ia-1961js2lo.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"font-sans antialiased","children":["$","$L3",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"storageKey":"agentmetry-theme","children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],"p":false,"v":null},"c":"$Q6"},"h":{"r":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$Ld",null,{"children":"$Le"}],["$","$L10",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$a",null,{"name":"Next.Metadata","children":"$L11"}]}],null]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"p":false,"v":null}},"m":"$undefined","G":["$12",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3in77zrqn0wml.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"NZBzSYttw3Vkl_rHtxNJp"}
17
+ 0:{"P":null,"c":["","_not-found"],"q":"","i":false,"t":{"t":{"s":"","h":528,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3in77zrqn0wml.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/3ia-1961js2lo.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"font-sans antialiased","children":["$","$L3",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"storageKey":"agentmetry-theme","children":["$","$L4",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]]}],"p":false,"v":null},"c":"$Q6"},"h":{"r":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$Ld",null,{"children":"$Le"}],["$","$L10",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$a",null,{"name":"Next.Metadata","children":"$L11"}]}],null]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"p":false,"v":null}},"m":"$undefined","G":["$12",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3in77zrqn0wml.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"B9YcBHt0iAnRAn2NpdHC2"}
18
18
  7:C
19
19
  e:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
20
20
  13:I[27201,["$2"],"IconMark"]
@@ -16,7 +16,7 @@ a:X
16
16
  a:C
17
17
  b:[["children",{"s":"__PAGE__","h":160,"d":{"r":["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:t:t:d:r:props:children:1:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$Lc",null,{"children":["$","$d",null,{"name":"Next.MetadataOutlet","children":"$@e"}]}]]}],"p":"$@f","v":null,"s":"$7"}}]]
18
18
  8:[["children",{"s":"/_not-found","h":96,"d":{"r":["$","$1","c",{"children":[null,["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}]}]]}],"p":"$@9","v":"$a","s":"$7"},"c":"$Qb"}]]
19
- 0:{"t":{"t":{"s":"","h":80,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3in77zrqn0wml.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/3ia-1961js2lo.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"font-sans antialiased","children":["$","$L3",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"storageKey":"agentmetry-theme","children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]]}],"p":"$@6","v":null,"s":"$7"},"c":"$Q8"},"h":{"r":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L11",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","$L13",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$d",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Agentmetry"}],["$","meta","1",{"name":"description","content":"Local flight recorder for AI coding agents"}],["$","link","2",{"rel":"icon","href":"/agentmetry-icon-white.svg"}],["$","link","3",{"rel":"apple-touch-icon","href":"/agentmetry-icon-white.svg"}],["$","$L14","4",{}]]}]}],null]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"p":"$@15","v":null,"s":"$7"}},"a":"$@16","u":"$@17","b":"NZBzSYttw3Vkl_rHtxNJp"}
19
+ 0:{"t":{"t":{"s":"","h":80,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/3in77zrqn0wml.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/3ia-1961js2lo.js","async":true}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"children":["$","body",null,{"className":"font-sans antialiased","children":["$","$L3",null,{"attribute":"class","defaultTheme":"dark","enableSystem":true,"storageKey":"agentmetry-theme","children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]]}],"p":"$@6","v":null,"s":"$7"},"c":"$Q8"},"h":{"r":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L11",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","$L13",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$d",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"Agentmetry"}],["$","meta","1",{"name":"description","content":"Local flight recorder for AI coding agents"}],["$","link","2",{"rel":"icon","href":"/agentmetry-icon-white.svg"}],["$","link","3",{"rel":"apple-touch-icon","href":"/agentmetry-icon-white.svg"}],["$","$L14","4",{}]]}]}],null]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"p":"$@15","v":null,"s":"$7"}},"a":"$@16","u":"$@17","b":"B9YcBHt0iAnRAn2NpdHC2"}
20
20
  e:null
21
21
  7:300
22
22
  17:true
@@ -1,4 +1,4 @@
1
1
  :HL["/_next/static/chunks/3in77zrqn0wml.css","style"]
2
2
  2:[["children",{"s":"__PAGE__","h":160}]]
3
3
  1:[["children",{"s":"/_not-found","h":96,"c":"$Q2"}]]
4
- 0:{"b":"NZBzSYttw3Vkl_rHtxNJp","t":{"t":{"s":"","h":80,"c":"$Q1"}}}
4
+ 0:{"b":"B9YcBHt0iAnRAn2NpdHC2","t":{"t":{"s":"","h":80,"c":"$Q1"}}}