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.
- {agentmetry-0.10.1 → agentmetry-0.10.2}/PKG-INFO +2 -2
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/cli/__init__.py +2 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/tool_policy/evaluator.py +8 -0
- agentmetry-0.10.2/agentmetry/core/scanner/instruction_files.py +192 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/scanner/scan.py +72 -10
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/version.py +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/404.html +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/__next.__PAGE__.txt +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/__next._full.txt +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/__next._tree.txt +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_not-found/__next._full.txt +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_not-found/__next._not-found.__PAGE__.txt +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_not-found/__next._tree.txt +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_not-found.html +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_not-found.txt +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/index.html +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/index.txt +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/policies/tool/manifest.yaml +7 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/pyproject.toml +1 -1
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_scanner.py +115 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_tool_policy_agent_cli.py +22 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/.dockerignore +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/.env.agentmetry-demo +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/.env.example +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/.gitignore +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/Dockerfile +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/README.md +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/main.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/routes/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/routes/audit.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/routes/auth.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/trusted_host.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/websocket.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/api/ws_bridge.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/cli/__main__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/api_token.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/agt.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/chronicle.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/cloudevents.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/ecs.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/sentinel.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/adapters/splunk.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/alerts.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/antigravity_trajectory.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/atlas.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/canonical.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/cloud_bridge.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/compliance_digest.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/cursor_cloud_cache.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/benchmark.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_approval_denied_then_executed.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_arbitrary_host_stage_execute.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_autonomous_unapproved_write.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_credential_exfil.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_credential_then_cloud_api.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_destructive_delete_burst.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_discovery_then_collect.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_dotfile_then_git_push.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_encoded_command_download.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_env_credential_exfil.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_hashed_only_no_command.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_interpreter_egress.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_pr_merged_without_review.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_proc_substitution_cradle.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_remote_pipe_to_shell.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_remote_staging_then_execute.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_secret_manager_then_egress.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_session_tool_burst.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_single_command_exfil.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_single_quoted_interpreter_egress.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_ssh_directory_exfil.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_subagent_swarm.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_timestamp_collision.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/attack_untrusted_input_then_action.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_authoring_merge_fixtures.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_autonomous_after_approval.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_build_artifact_cleanup.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_ci_artifact_download.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_commit_message_names_cloud_clis.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_container_registry_publish.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_database_migration.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_dependency_audit_network_burst.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_dependency_install_and_build.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_download_release_archive.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_env_example_read.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_fetch_data_then_run_repo_script.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_fetch_dataset_then_analyse.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_fetch_lockfile_then_install.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_fetch_piped_into_own_script.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_git_review_and_push.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_github_raw_docs_then_script.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_human_driven_deletes.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_local_api_probing.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_long_but_calm_session.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_loopback_is_not_egress.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_loopback_pipe_to_interpreter.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_mcp_text_mentions_credential_path.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_ordinary_development.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_package_manager_after_fetch.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_reading_config_that_is_not_secret.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_remote_api_call_no_credentials.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_research_then_docs.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_reversed_order_is_not_exfil.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_secret_names_and_docs.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_terraform_apply_with_profile.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_test_and_fix_loop.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/benign_writing_about_credentials.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/corpus/corpus.yaml +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/disposition.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/engine.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/live.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/live_store.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/models.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/rules.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/traits.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/yaml_config.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/detection/yaml_rules.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/dlp/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/dlp/loader.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/dlp/models.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/dlp/scanner.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/dogfood.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/evidence_pack.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/external.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/forwarder.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/grok_bot_transcript.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/hashing.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/heartbeat.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/hook_bootstrap.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/identity.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/ingest.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/ingest_quota.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/managed_hooks.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/mcp_inventory_event.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/migrate.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/mitre.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/otel_ingest.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/policy.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/policy_settings.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/posture_event.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/redaction.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/replay.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/run_context.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/session_tree.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/signing.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/sinks.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/spool.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/tool_policy/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/tool_policy/capability.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/tool_policy/loader.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/tool_policy/models.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/trail_anchor.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/trail_chain.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/trail_db.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/trail_merkle.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/audit/trail_rotation.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/auth.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/bus/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/bus/audit_exporter.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/bus/bridges.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/bus/bus.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/bus/events.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/bus/outbox.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/config.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/dashboard_session.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/autostart.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/doctor.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/driver_paths.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/env_file.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/hook_coverage.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/machine_view.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/mcp_inventory.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/mcp_schema.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/diagnostics/posture.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/drivers/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/drivers/host.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/drivers/permissions.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/drivers/spec.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/extensions.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/health.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/managed_policy.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/operator_identity.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/paths.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/scanner/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/scanner/injection.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/scanner/known_packages.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/core/scanner/typosquat.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/.gitkeep +0 -0
- {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
- {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
- {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
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/0cz1d0mv5g_q7.js +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/0umf92h1sb77c.js +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/1ix59xuhq-q14.css +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/1q292q_rc4_p6.js +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/2-sq6__g8tt5-.js +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/2gvu8dyrhibpa.js +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/31qp8jfkw0x2h.js +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/3ia-1961js2lo.js +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/3in77zrqn0wml.css +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/chunks/turbopack-3-ry682tkyiqk.js +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-mono-latin-400-normal.2lhng2ntocry9.woff +0 -0
- {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
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-mono-latin-500-normal.11q3guvgd1r20.woff2 +0 -0
- {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
- {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
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-sans-latin-400-normal.1xf5nwxyfigak.woff2 +0 -0
- {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
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-sans-latin-500-normal.2i4a1iuj6lbvw.woff2 +0 -0
- {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
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_next/static/media/ibm-plex-sans-latin-600-normal.2wn5p1s7u3utm.woff +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/agentmetry-icon-white.svg +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/demo.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/hooks/__init__.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/hooks/ingest.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/hooks/mcp_proxy.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/policies/detection/manifest.yaml +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/policies/dlp/manifest.yaml +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/policies/opa/agent_rules.rego +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/conftest.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/agt_filesink_exfil.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/agt_filesink_mixed.jsonl +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/codex_hooks/README.md +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/codex_hooks/permission-request.command.output.schema.json +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/codex_hooks/pre-tool-use.command.output.schema.json +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/fake_mcp_server.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/otel_claude_code_session.json +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/scanner/benign_skill/SKILL.md +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/scanner/benign_tools.json +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/scanner/poisoned_skill/SKILL.md +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/fixtures/scanner/poisoned_tools.json +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_agentmetry_audit.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_agentmetry_ingest_client.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_agt_adapter.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_antigravity_trajectory.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_ask_gate_phase_a.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_atlas_detection_enrichment.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_atlas_mapping.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_audit_sinks.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_audit_stats.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_audit_tail.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_auth.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_auth_default.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_autostart.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_boot_sequence.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_burst_windows.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_chinese_agent_hooks.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_chinese_agent_sprint_b.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_chinese_agent_sprint_c.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_chronicle_adapter.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_cli_backup.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_cli_commands.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_cli_env_var_names.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_cloud_bridge.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_cloudevents_adapter.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_codex_windows_command.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_compliance_digest.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_container_and_legacy_runtime.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_copilot_hooks.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_coverage_observed.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_crewai_adapter.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_cursor_cloud_cache.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_demo.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_demo_isolation.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_demo_mode_flag.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_adi.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_benchmark.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_default_config.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_disposition.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_disposition_api.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_duplicate_emission.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_emit_durability.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_engine.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_evasion.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_hf_incident.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_quoted_command_words.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_rule_identity.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_detection_rules_v2.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_dlp_agent_env_override.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_dlp_invisible_unicode.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_dlp_markdown_exfil.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_dlp_scanner.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_doctor.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_doctor_json_and_remediation.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_dogfood.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_dogfood_freeze.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_driver_paths.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_ecs_threat.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_event_bus.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_event_signing.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_evidence_pack.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_extensions.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_external_ingest.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_forwarder.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_forwarding_shape.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_funding_manifest.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_grok_bot_transcript.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hash_key.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_heartbeat.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_bootstrap.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_coverage.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_decision_format.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_enforcement_timing.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_import_cost.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_real_process.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_hook_spool.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_identity_enrich.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_identity_provider.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_ingest_rate_limit.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_ingest_roundtrip.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_ingest_token.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_isolation.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_launch_targets.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_live_detection.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_live_detection_store.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_machine_view.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_managed_hooks.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_managed_policy.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_audit_proxy.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_concealed_text.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_inventory.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_inventory_event.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_meta_fingerprint.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_proxy_packaged.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mcp_schema.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_mitre_dlp.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_opensre_adapter.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_operator_attribution.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_otel_ingest.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_paths.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_posture.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_powershell_encoding.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_readme_claims.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_redaction.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_replay.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_sentinel.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_serve_script_binds_loopback.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_session_tree.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_shared_install.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_sigma_pack.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_static_serving.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_subagent_lifecycle.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_suite_leaves_real_home_alone.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_tool_policy.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_tool_policy_git_hooks.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_trail_anchor.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_trail_chain.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_trail_concurrency.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_trail_merkle.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_transcript_watcher.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_trusted_host.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_unattended_agent_policy.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_user_profile_dir.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_version.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tests/test_yaml_detection_rules.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tools/generate_sigma_pack.py +0 -0
- {agentmetry-0.10.1 → agentmetry-0.10.2}/tools/mcp_audit_proxy.py +0 -0
- {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.
|
|
4
|
-
Summary:
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
|
@@ -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=
|
|
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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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":"
|
|
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":"
|
|
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
|
{agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_not-found/__next._full.txt
RENAMED
|
@@ -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":"
|
|
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":"
|
|
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
|
{agentmetry-0.10.1 → agentmetry-0.10.2}/agentmetry/dashboard_static/_not-found/__next._tree.txt
RENAMED
|
@@ -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":"
|
|
4
|
+
0:{"b":"B9YcBHt0iAnRAn2NpdHC2","t":{"t":{"s":"","h":80,"c":"$Q1"}}}
|