ai-dev-cli-tools 1.2.2__tar.gz → 1.3.0__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 (379) hide show
  1. ai_dev_cli_tools-1.3.0/.dockerignore +26 -0
  2. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/.github/workflows/ci.yml +59 -12
  3. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/.github/workflows/codeql.yml +3 -3
  4. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/.github/workflows/docs.yml +2 -2
  5. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/.github/workflows/publish-pypi.yml +4 -4
  6. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/.github/workflows/release.yml +5 -5
  7. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/.gitignore +3 -0
  8. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/CHANGELOG.md +24 -1
  9. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/PKG-INFO +63 -2
  10. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/README.md +49 -1
  11. ai_dev_cli_tools-1.3.0/collector/.dockerignore +27 -0
  12. ai_dev_cli_tools-1.3.0/collector/.env.example +19 -0
  13. ai_dev_cli_tools-1.3.0/collector/Dockerfile +59 -0
  14. ai_dev_cli_tools-1.3.0/collector/README.md +115 -0
  15. ai_dev_cli_tools-1.3.0/collector/__init__.py +1 -0
  16. ai_dev_cli_tools-1.3.0/collector/alembic/env.py +60 -0
  17. ai_dev_cli_tools-1.3.0/collector/alembic/script.py.mako +26 -0
  18. ai_dev_cli_tools-1.3.0/collector/alembic/versions/0001_initial_telemetry_events.py +107 -0
  19. ai_dev_cli_tools-1.3.0/collector/alembic.ini +39 -0
  20. ai_dev_cli_tools-1.3.0/collector/app/__init__.py +1 -0
  21. ai_dev_cli_tools-1.3.0/collector/app/config.py +74 -0
  22. ai_dev_cli_tools-1.3.0/collector/app/main.py +217 -0
  23. ai_dev_cli_tools-1.3.0/collector/app/models.py +126 -0
  24. ai_dev_cli_tools-1.3.0/collector/app/rate_limit.py +81 -0
  25. ai_dev_cli_tools-1.3.0/collector/app/retention.py +74 -0
  26. ai_dev_cli_tools-1.3.0/collector/app/storage.py +97 -0
  27. ai_dev_cli_tools-1.3.0/collector/app/validation.py +448 -0
  28. ai_dev_cli_tools-1.3.0/collector/docker-compose.yml +65 -0
  29. ai_dev_cli_tools-1.3.0/collector/requirements.txt +6 -0
  30. ai_dev_cli_tools-1.3.0/collector/tests/__init__.py +1 -0
  31. ai_dev_cli_tools-1.3.0/collector/tests/conftest.py +40 -0
  32. ai_dev_cli_tools-1.3.0/collector/tests/test_concurrency.py +48 -0
  33. ai_dev_cli_tools-1.3.0/collector/tests/test_config.py +120 -0
  34. ai_dev_cli_tools-1.3.0/collector/tests/test_dedup.py +31 -0
  35. ai_dev_cli_tools-1.3.0/collector/tests/test_ingestion.py +150 -0
  36. ai_dev_cli_tools-1.3.0/collector/tests/test_migrations.py +73 -0
  37. ai_dev_cli_tools-1.3.0/collector/tests/test_privacy.py +53 -0
  38. ai_dev_cli_tools-1.3.0/collector/tests/test_privacy_logging.py +167 -0
  39. ai_dev_cli_tools-1.3.0/collector/tests/test_proxy.py +118 -0
  40. ai_dev_cli_tools-1.3.0/collector/tests/test_rate_limit.py +123 -0
  41. ai_dev_cli_tools-1.3.0/collector/tests/test_retention.py +91 -0
  42. ai_dev_cli_tools-1.3.0/collector/tests/test_storage_retention_cli.py +108 -0
  43. ai_dev_cli_tools-1.3.0/collector/tests/test_streaming.py +79 -0
  44. ai_dev_cli_tools-1.3.0/collector/tests/test_validation_branches.py +161 -0
  45. ai_dev_cli_tools-1.3.0/docs/AI_DEV_CLI_TOOLS_PERFORMANCE_OPTIMIZATION_AGENT_TASK.md +1023 -0
  46. ai_dev_cli_tools-1.3.0/docs/AUDIT_2026-09-09.md +80 -0
  47. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/CHANGED_TEST_SELECTION.md +6 -1
  48. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/CONTEXT_BUILDER.md +16 -5
  49. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/DISTRIBUTION.md +6 -7
  50. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/REPORT_SCHEMA.md +1 -1
  51. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/TOOL_OUTPUT_PARSERS.md +5 -1
  52. ai_dev_cli_tools-1.3.0/docs/community-telemetry-collector.md +277 -0
  53. ai_dev_cli_tools-1.3.0/docs/community-telemetry-deployment.md +285 -0
  54. ai_dev_cli_tools-1.3.0/docs/community-telemetry.md +274 -0
  55. ai_dev_cli_tools-1.3.0/docs/performance/PERFORMANCE_BASELINE_2026-09-10.md +51 -0
  56. ai_dev_cli_tools-1.3.0/docs/performance/PERFORMANCE_OPTIMIZATION_REPORT_2026-09-10.md +111 -0
  57. ai_dev_cli_tools-1.3.0/docs/performance/RUST_NATIVE_ACCELERATION_ASSESSMENT.md +37 -0
  58. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/pyproject.toml +19 -4
  59. ai_dev_cli_tools-1.3.0/scripts/benchmark_semantic_scalability.py +125 -0
  60. ai_dev_cli_tools-1.3.0/scripts/test_collector_postgres_e2e.py +338 -0
  61. ai_dev_cli_tools-1.3.0/scripts/unified_benchmark.py +364 -0
  62. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/scripts/validate_ci.py +1 -1
  63. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/__init__.py +1 -1
  64. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/cache/graph.py +29 -13
  65. ai_dev_cli_tools-1.3.0/src/ai_dev_tools/cache/repository.py +409 -0
  66. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/cache/validation.py +13 -3
  67. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/cli.py +81 -1
  68. ai_dev_cli_tools-1.3.0/src/ai_dev_tools/community/__init__.py +59 -0
  69. ai_dev_cli_tools-1.3.0/src/ai_dev_tools/community/builder.py +551 -0
  70. ai_dev_cli_tools-1.3.0/src/ai_dev_tools/community/config.py +158 -0
  71. ai_dev_cli_tools-1.3.0/src/ai_dev_tools/community/queue.py +174 -0
  72. ai_dev_cli_tools-1.3.0/src/ai_dev_tools/community/schema.py +717 -0
  73. ai_dev_cli_tools-1.3.0/src/ai_dev_tools/community/service.py +322 -0
  74. ai_dev_cli_tools-1.3.0/src/ai_dev_tools/community/transport.py +140 -0
  75. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/builder.py +62 -82
  76. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/incremental.py +15 -3
  77. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/selection.py +1 -1
  78. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/tokens.py +14 -4
  79. ai_dev_cli_tools-1.3.0/src/ai_dev_tools/detectors/repository_map.py +290 -0
  80. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/git/inspect.py +143 -37
  81. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/mcp_server.py +28 -12
  82. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/parsers/logs.py +38 -2
  83. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/check.py +17 -4
  84. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/check_scheduler.py +21 -3
  85. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/check_selection.py +10 -3
  86. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/diagnostics.py +3 -1
  87. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/environment_state.py +12 -1
  88. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/finish.py +4 -0
  89. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/flaky.py +11 -3
  90. ai_dev_cli_tools-1.3.0/src/ai_dev_tools/semantic.py +534 -0
  91. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/semantic_backends.py +55 -9
  92. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/telemetry.py +59 -3
  93. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/token_efficiency.py +1 -1
  94. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/utils/subprocess.py +34 -21
  95. ai_dev_cli_tools-1.3.0/tests/integration/test_community_collector_e2e.py +249 -0
  96. ai_dev_cli_tools-1.3.0/tests/integration/test_git.py +220 -0
  97. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_cache.py +87 -0
  98. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_check_scheduler.py +32 -0
  99. ai_dev_cli_tools-1.3.0/tests/unit/test_community_contract_drift.py +48 -0
  100. ai_dev_cli_tools-1.3.0/tests/unit/test_community_telemetry_cli.py +119 -0
  101. ai_dev_cli_tools-1.3.0/tests/unit/test_community_telemetry_coverage.py +467 -0
  102. ai_dev_cli_tools-1.3.0/tests/unit/test_community_telemetry_final_polish.py +481 -0
  103. ai_dev_cli_tools-1.3.0/tests/unit/test_community_telemetry_functional.py +348 -0
  104. ai_dev_cli_tools-1.3.0/tests/unit/test_community_telemetry_performance.py +145 -0
  105. ai_dev_cli_tools-1.3.0/tests/unit/test_community_telemetry_privacy.py +160 -0
  106. ai_dev_cli_tools-1.3.0/tests/unit/test_community_telemetry_release.py +194 -0
  107. ai_dev_cli_tools-1.3.0/tests/unit/test_community_telemetry_review_pass.py +289 -0
  108. ai_dev_cli_tools-1.3.0/tests/unit/test_concurrency_safety.py +315 -0
  109. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_coordination.py +22 -0
  110. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_finish.py +26 -0
  111. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_flaky.py +127 -101
  112. ai_dev_cli_tools-1.3.0/tests/unit/test_gitignore_conformance.py +212 -0
  113. ai_dev_cli_tools-1.3.0/tests/unit/test_issue_regressions.py +224 -0
  114. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_more_coverage.py +18 -0
  115. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_progressive_reports.py +17 -0
  116. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_report.py +1 -1
  117. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_runtime_runner.py +1 -1
  118. ai_dev_cli_tools-1.3.0/tests/unit/test_semantic.py +198 -0
  119. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_semantic_backends.py +26 -0
  120. ai_dev_cli_tools-1.3.0/tests/unit/test_semantic_fingerprint.py +193 -0
  121. ai_dev_cli_tools-1.3.0/tests/unit/test_semantic_large_repo.py +322 -0
  122. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_symbol_diff.py +22 -0
  123. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_task.py +32 -0
  124. ai_dev_cli_tools-1.2.2/src/ai_dev_tools/cache/repository.py +0 -199
  125. ai_dev_cli_tools-1.2.2/src/ai_dev_tools/detectors/repository_map.py +0 -139
  126. ai_dev_cli_tools-1.2.2/src/ai_dev_tools/semantic.py +0 -195
  127. ai_dev_cli_tools-1.2.2/tests/integration/test_git.py +0 -76
  128. ai_dev_cli_tools-1.2.2/tests/unit/test_semantic.py +0 -88
  129. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/.github/dependabot.yml +0 -0
  130. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/CONTRIBUTING.md +0 -0
  131. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/LICENSE +0 -0
  132. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/Makefile +0 -0
  133. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/SECURITY.md +0 -0
  134. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/TODO.md +0 -0
  135. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/ai.ps1 +0 -0
  136. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/ai.sh +0 -0
  137. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/ADAPTIVECHESSAI_FULL_CHECK_FAILURE_2026-08-30.md +0 -0
  138. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/ADAPTIVECHESSAI_PYCHARM_HEADLESS_INSPECTION_FAILURE_2026-08-30.md +0 -0
  139. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/ADDING_A_DETECTOR.md +0 -0
  140. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/ADDING_A_RUNNER.md +0 -0
  141. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/AGENT_COORDINATION.md +0 -0
  142. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/AGENT_EFFICIENCY_ROADMAP.md +0 -0
  143. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/AGENT_INTEGRATION_CONTRACT.md +0 -0
  144. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/AGENT_WORKFLOW.md +0 -0
  145. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/ARCHITECTURE.md +0 -0
  146. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/BENCHMARKS.md +0 -0
  147. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/BOOTSTRAP.md +0 -0
  148. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/CACHE_AND_INDEX.md +0 -0
  149. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/FLAKY_RETRIES.md +0 -0
  150. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/INTEGRATIONS_AND_DASHBOARD.md +0 -0
  151. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/MCP_SERVER.md +0 -0
  152. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/MONOREPO_SUPPORT.md +0 -0
  153. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/OBSERVATION_LIFECYCLE.md +0 -0
  154. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/PERFORMANCE.md +0 -0
  155. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/PROJECT_COMPLETE.md +0 -0
  156. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/RELEASE_CHECKLIST.md +0 -0
  157. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/RUNTIME.md +0 -0
  158. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/SEMANTIC_COMPRESSION.md +0 -0
  159. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/TOKEN_EFFICIENCY_RESEARCH.md +0 -0
  160. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/WARM_ENVIRONMENT.md +0 -0
  161. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/WATCH_MODE.md +0 -0
  162. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/benchmarks/agent-workflows-windows-py314-2026-08-11.json +0 -0
  163. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/docs/report-schema.json +0 -0
  164. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/agent-adaptive-context.json +0 -0
  165. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/agent-affected-workflow.json +0 -0
  166. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/agent-context-acknowledgement.json +0 -0
  167. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/agent-corpus.json +0 -0
  168. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/agent-feedback-delta.json +0 -0
  169. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/agent-monorepo-workflow.json +0 -0
  170. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/agent-multiturn-workflow.json +0 -0
  171. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/agent-repair-workflow.json +0 -0
  172. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/pyproject.toml +0 -0
  173. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/src/__init__.py +0 -0
  174. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/src/orders.py +0 -0
  175. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/src/pricing.py +0 -0
  176. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/__init__.py +0 -0
  177. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_orders.py +0 -0
  178. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_pricing.py +0 -0
  179. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_1.py +0 -0
  180. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_10.py +0 -0
  181. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_11.py +0 -0
  182. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_12.py +0 -0
  183. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_2.py +0 -0
  184. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_3.py +0 -0
  185. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_4.py +0 -0
  186. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_5.py +0 -0
  187. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_6.py +0 -0
  188. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_7.py +0 -0
  189. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_8.py +0 -0
  190. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_9.py +0 -0
  191. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/__init__.py +0 -0
  192. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/__init__.py +0 -0
  193. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/pyproject.toml +0 -0
  194. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/src/__init__.py +0 -0
  195. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/src/billing.py +0 -0
  196. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/tests/__init__.py +0 -0
  197. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/tests/test_billing.py +0 -0
  198. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/__init__.py +0 -0
  199. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/pyproject.toml +0 -0
  200. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/src/__init__.py +0 -0
  201. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/src/catalog.py +0 -0
  202. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/tests/__init__.py +0 -0
  203. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/tests/test_catalog.py +0 -0
  204. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/mcp-recurring-status.json +0 -0
  205. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/output-budget-smoke.json +0 -0
  206. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/benchmarks/symbol-diff-context.json +0 -0
  207. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/examples/consume_json_report.py +0 -0
  208. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/requirements-dev.lock +0 -0
  209. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/scripts/__init__.py +0 -0
  210. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/scripts/benchmark_agent_workflow.py +0 -0
  211. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/scripts/benchmark_mcp_context_ack.py +0 -0
  212. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/scripts/benchmark_mcp_status.py +0 -0
  213. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/scripts/benchmark_symbol_diff.py +0 -0
  214. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/scripts/dev.py +0 -0
  215. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/scripts/test_installed_package.py +0 -0
  216. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/scripts/validate_release.py +0 -0
  217. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/scripts/verify_published_package.py +0 -0
  218. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/__main__.py +0 -0
  219. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/cache/__init__.py +0 -0
  220. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/cache/prompt_layout.py +0 -0
  221. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/completion.py +0 -0
  222. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/config.py +0 -0
  223. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/__init__.py +0 -0
  224. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/adaptive.py +0 -0
  225. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/compression.py +0 -0
  226. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/mcp_delta.py +0 -0
  227. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/models.py +0 -0
  228. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/profiles.py +0 -0
  229. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/refinement.py +0 -0
  230. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/retrieval.py +0 -0
  231. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/context/symbols.py +0 -0
  232. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/dashboard.py +0 -0
  233. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/detectors/__init__.py +0 -0
  234. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/detectors/environment.py +0 -0
  235. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/detectors/project.py +0 -0
  236. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/detectors/runtime.py +0 -0
  237. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/detectors/workspaces.py +0 -0
  238. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/git/__init__.py +0 -0
  239. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/git/symbol_diff.py +0 -0
  240. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/index_daemon_service.py +0 -0
  241. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/integrations.py +0 -0
  242. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/models/__init__.py +0 -0
  243. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/models/report.py +0 -0
  244. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/models/workspace.py +0 -0
  245. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/parsers/__init__.py +0 -0
  246. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/parsers/failures.py +0 -0
  247. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/parsers/registry.py +0 -0
  248. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/reporters/__init__.py +0 -0
  249. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/reporters/progressive.py +0 -0
  250. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/reporters/sarif.py +0 -0
  251. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/reporters/writer.py +0 -0
  252. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/__init__.py +0 -0
  253. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/baseline.py +0 -0
  254. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/benchmark.py +0 -0
  255. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/bootstrap.py +0 -0
  256. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/bootstrap_models.py +0 -0
  257. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/bootstrap_strategies.py +0 -0
  258. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/cache.py +0 -0
  259. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/check_checkpoint.py +0 -0
  260. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/check_models.py +0 -0
  261. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/coordination.py +0 -0
  262. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/feedback.py +0 -0
  263. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/feedback_delta.py +0 -0
  264. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/focused.py +0 -0
  265. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/index.py +0 -0
  266. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/index_daemon.py +0 -0
  267. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/observations.py +0 -0
  268. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/performance.py +0 -0
  269. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/plan.py +0 -0
  270. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/policy.py +0 -0
  271. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/task.py +0 -0
  272. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runners/watch.py +0 -0
  273. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runtime/__init__.py +0 -0
  274. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runtime/runner.py +0 -0
  275. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/runtime/supervisor.py +0 -0
  276. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/security/__init__.py +0 -0
  277. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/security/execution.py +0 -0
  278. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/security/secrets.py +0 -0
  279. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/source_symbols.py +0 -0
  280. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/telemetry_optimizer.py +0 -0
  281. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/telemetry_policy.py +0 -0
  282. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/src/ai_dev_tools/utils/__init__.py +0 -0
  283. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/cargo-fail.log +0 -0
  284. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/coverage-ok.log +0 -0
  285. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/eslint-fail.log +0 -0
  286. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/gradle-ok.log +0 -0
  287. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/jest-fail.log +0 -0
  288. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/maven-fail.log +0 -0
  289. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/maven-localized-fail.log +0 -0
  290. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/mypy-fail.log +0 -0
  291. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/phpunit-fail.log +0 -0
  292. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/pytest-9-ok.log +0 -0
  293. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/pytest-fail.log +0 -0
  294. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/pytest-multiple-failures.log +0 -0
  295. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/ruff-fail.log +0 -0
  296. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/ruff-warning.log +0 -0
  297. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/tsc-fail.log +0 -0
  298. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/logs/vitest-ok.log +0 -0
  299. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/monorepo-mixed/package.json +0 -0
  300. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/monorepo-mixed/packages/api/pyproject.toml +0 -0
  301. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/monorepo-mixed/packages/api/tests/test_smoke.py +0 -0
  302. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/monorepo-mixed/packages/web/package.json +0 -0
  303. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/monorepo-mixed/packages/web/test.js +0 -0
  304. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/monorepo-mixed/services/worker/Cargo.toml +0 -0
  305. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/monorepo-mixed/services/worker/src/lib.rs +0 -0
  306. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/gradle/build.gradle +0 -0
  307. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/gradle/gradlew.bat +0 -0
  308. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/maven/mvnw.cmd +0 -0
  309. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/maven/pom.xml +0 -0
  310. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/node-npm/package-lock.json +0 -0
  311. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/node-npm/package.json +0 -0
  312. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/node-pnpm/package.json +0 -0
  313. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/node-pnpm/pnpm-lock.yaml +0 -0
  314. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/node-yarn/package.json +0 -0
  315. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/node-yarn/yarn.lock +0 -0
  316. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/php-composer/composer.json +0 -0
  317. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/python-pip/pyproject.toml +0 -0
  318. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/python-pip/requirements.txt +0 -0
  319. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/python-poetry/pyproject.toml +0 -0
  320. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/python-uv/pyproject.toml +0 -0
  321. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/python-uv/uv.lock +0 -0
  322. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/fixtures/projects/rust/Cargo.toml +0 -0
  323. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/integration/test_adaptive_chess_regression.py +0 -0
  324. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/integration/test_cli.py +0 -0
  325. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/integration/test_cross_platform_paths.py +0 -0
  326. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/integration/test_toolchain_e2e.py +0 -0
  327. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_adaptive_context.py +0 -0
  328. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_agent_plan.py +0 -0
  329. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_baseline.py +0 -0
  330. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_benchmark.py +0 -0
  331. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_benchmark_gate.py +0 -0
  332. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_bootstrap.py +0 -0
  333. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_check.py +0 -0
  334. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_check_plan.py +0 -0
  335. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_cli_more.py +0 -0
  336. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_completion.py +0 -0
  337. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_config.py +0 -0
  338. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_context_builder.py +0 -0
  339. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_context_compression.py +0 -0
  340. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_context_mcp_delta.py +0 -0
  341. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_context_profiles.py +0 -0
  342. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_context_refinement.py +0 -0
  343. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_context_retrieval.py +0 -0
  344. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_context_symbols.py +0 -0
  345. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_dev_launcher.py +0 -0
  346. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_diagnostics.py +0 -0
  347. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_doctor.py +0 -0
  348. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_environment_state.py +0 -0
  349. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_execution_policy.py +0 -0
  350. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_failure_classification.py +0 -0
  351. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_feedback.py +0 -0
  352. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_feedback_delta.py +0 -0
  353. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_index_daemon.py +0 -0
  354. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_index_daemon_service.py +0 -0
  355. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_integrations_dashboard.py +0 -0
  356. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_logs.py +0 -0
  357. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_mcp_server.py +0 -0
  358. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_more_symbol_adapters.py +0 -0
  359. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_new_cli_commands.py +0 -0
  360. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_observations.py +0 -0
  361. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_package_smoke.py +0 -0
  362. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_performance.py +0 -0
  363. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_prompt_layout.py +0 -0
  364. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_release_scripts.py +0 -0
  365. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_repository_map.py +0 -0
  366. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_runner_failures.py +0 -0
  367. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_runtime.py +0 -0
  368. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_runtime_supervisor.py +0 -0
  369. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_sarif.py +0 -0
  370. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_scan.py +0 -0
  371. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_secret_boundaries.py +0 -0
  372. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_secrets.py +0 -0
  373. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_telemetry.py +0 -0
  374. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_telemetry_optimizer.py +0 -0
  375. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_telemetry_policy.py +0 -0
  376. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_token_accounting.py +0 -0
  377. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_tool_parsers.py +0 -0
  378. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_watch.py +0 -0
  379. {ai_dev_cli_tools-1.2.2 → ai_dev_cli_tools-1.3.0}/tests/unit/test_workspaces.py +0 -0
@@ -0,0 +1,26 @@
1
+ .git
2
+ .gitignore
3
+ .venv
4
+ venv
5
+ env
6
+ __pycache__
7
+ *.pyc
8
+ *.pyo
9
+ *.pyd
10
+ .mypy_cache
11
+ .pytest_cache
12
+ .ruff_cache
13
+ .coverage
14
+ .coverage.*
15
+ build
16
+ dist
17
+ *.egg-info
18
+ .tmp-*
19
+ .ai
20
+ *.db
21
+ *.sqlite
22
+ *.sqlite3
23
+ collector/tests
24
+ tests
25
+ docs
26
+ examples
@@ -8,8 +8,8 @@ jobs:
8
8
  launcher-smoke:
9
9
  runs-on: ubuntu-latest
10
10
  steps:
11
- - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
12
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
11
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
12
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
13
13
  with:
14
14
  python-version: "3.13"
15
15
  - run: python scripts/dev.py --diagnose
@@ -24,8 +24,8 @@ jobs:
24
24
  python-version: ["3.11", "3.12", "3.13", "3.14"]
25
25
  runs-on: ${{ matrix.os }}
26
26
  steps:
27
- - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
28
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
27
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
28
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
29
29
  with:
30
30
  python-version: ${{ matrix.python-version }}
31
31
  - run: python -m pip install --upgrade pip
@@ -55,14 +55,14 @@ jobs:
55
55
  toolchain-e2e:
56
56
  runs-on: ubuntu-latest
57
57
  steps:
58
- - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
59
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
58
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
59
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
60
60
  with:
61
61
  python-version: "3.13"
62
62
  - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
63
63
  with:
64
64
  node-version: "22"
65
- - uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0
65
+ - uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
66
66
  with:
67
67
  distribution: temurin
68
68
  java-version: "17"
@@ -84,10 +84,10 @@ jobs:
84
84
  agent-corpus:
85
85
  runs-on: ubuntu-latest
86
86
  steps:
87
- - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
87
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
88
88
  with:
89
89
  persist-credentials: false
90
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
90
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
91
91
  with:
92
92
  python-version: "3.13"
93
93
  - run: python -m pip install -c requirements-dev.lock -e ".[dev]"
@@ -110,11 +110,11 @@ jobs:
110
110
  contents: read
111
111
  security-events: write
112
112
  steps:
113
- - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
113
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
114
114
  with:
115
115
  fetch-depth: 0
116
116
  persist-credentials: false
117
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
117
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
118
118
  with:
119
119
  python-version: "3.13"
120
120
  - run: python -m pip install -c requirements-dev.lock -e ".[dev]"
@@ -126,6 +126,53 @@ jobs:
126
126
  run: cat .ai/reports/agent-plan.md >> "$GITHUB_STEP_SUMMARY"
127
127
  - name: Upload SARIF to GitHub code scanning
128
128
  if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
129
- uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4
129
+ uses: github/codeql-action/upload-sarif@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4
130
130
  with:
131
131
  sarif_file: .ai/reports/ai-dev.sarif
132
+
133
+ collector-postgres-e2e:
134
+ runs-on: ubuntu-latest
135
+ services:
136
+ postgres:
137
+ image: postgres:16-alpine
138
+ env:
139
+ POSTGRES_DB: telemetry
140
+ POSTGRES_USER: telemetry_user
141
+ POSTGRES_PASSWORD: test_ci_password_123
142
+ ports:
143
+ - 5432:5432
144
+ options: >-
145
+ --health-cmd pg_isready
146
+ --health-interval 5s
147
+ --health-timeout 5s
148
+ --health-retries 5
149
+ steps:
150
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
151
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
152
+ with:
153
+ python-version: "3.13"
154
+ - run: python -m pip install --upgrade pip
155
+ - run: python -m pip install -r collector/requirements.txt -e .
156
+ - name: Test Alembic migration against PostgreSQL
157
+ env:
158
+ DATABASE_URL: postgresql+psycopg://telemetry_user:test_ci_password_123@localhost:5432/telemetry
159
+ run: |
160
+ python -m alembic -c collector/alembic.ini upgrade head
161
+ python -m alembic -c collector/alembic.ini current
162
+ - name: Build Docker collector image
163
+ run: docker build -f collector/Dockerfile -t ai-dev-collector:test .
164
+ - name: Run Docker collector container E2E ingestion test
165
+ env:
166
+ DATABASE_URL: postgresql+psycopg://telemetry_user:test_ci_password_123@localhost:5432/telemetry
167
+ COLLECTOR_URL: http://127.0.0.1:8000
168
+ PYTHONPATH: .
169
+ run: |
170
+ docker run -d --name test-collector --network host \
171
+ -e DATABASE_URL=postgresql+psycopg://telemetry_user:test_ci_password_123@localhost:5432/telemetry \
172
+ -e ENVIRONMENT=production \
173
+ ai-dev-collector:test
174
+ sleep 3
175
+ docker logs test-collector
176
+ python scripts/test_collector_postgres_e2e.py
177
+ docker stop test-collector
178
+ docker rm test-collector
@@ -17,12 +17,12 @@ jobs:
17
17
  name: Analyze Python
18
18
  runs-on: ubuntu-latest
19
19
  steps:
20
- - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
20
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
21
21
  with:
22
22
  persist-credentials: false
23
- - uses: github/codeql-action/init@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4
23
+ - uses: github/codeql-action/init@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4
24
24
  with:
25
25
  languages: python
26
26
  build-mode: none
27
27
  queries: security-extended
28
- - uses: github/codeql-action/analyze@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4
28
+ - uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4
@@ -8,8 +8,8 @@ jobs:
8
8
  docs:
9
9
  runs-on: ubuntu-latest
10
10
  steps:
11
- - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
12
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
11
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
12
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
13
13
  with:
14
14
  python-version: "3.12"
15
15
  - run: python -m pip install -c requirements-dev.lock -e ".[dev]"
@@ -14,11 +14,11 @@ jobs:
14
14
  name: Validate manually promoted release artifacts
15
15
  runs-on: ubuntu-latest
16
16
  steps:
17
- - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
17
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
18
18
  with:
19
19
  persist-credentials: false
20
20
  ref: ${{ github.event.release.tag_name }}
21
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
21
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
22
22
  with:
23
23
  python-version: "3.13"
24
24
  - name: Download artifacts attached by the TestPyPI workflow
@@ -71,11 +71,11 @@ jobs:
71
71
  needs: publish-pypi
72
72
  runs-on: ubuntu-latest
73
73
  steps:
74
- - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
74
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
75
75
  with:
76
76
  persist-credentials: false
77
77
  ref: ${{ github.event.release.tag_name }}
78
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
78
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
79
79
  with:
80
80
  python-version: "3.13"
81
81
  - name: Install and smoke test from PyPI through pipx
@@ -13,10 +13,10 @@ jobs:
13
13
  name: Build and validate distribution
14
14
  runs-on: ubuntu-latest
15
15
  steps:
16
- - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
16
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
17
17
  with:
18
18
  persist-credentials: false
19
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
19
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
20
20
  with:
21
21
  python-version: "3.13"
22
22
  - name: Validate tag and source version
@@ -65,10 +65,10 @@ jobs:
65
65
  needs: publish-testpypi
66
66
  runs-on: ubuntu-latest
67
67
  steps:
68
- - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
68
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
69
69
  with:
70
70
  persist-credentials: false
71
- - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
71
+ - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
72
72
  with:
73
73
  python-version: "3.13"
74
74
  - name: Install and smoke test from TestPyPI
@@ -84,7 +84,7 @@ jobs:
84
84
  permissions:
85
85
  contents: write
86
86
  steps:
87
- - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
87
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
88
88
  with:
89
89
  persist-credentials: false
90
90
  - name: Download TestPyPI-verified distribution artifact
@@ -18,3 +18,6 @@ dist/
18
18
  *.egg-info/
19
19
  __pycache__/
20
20
  *.py[cod]
21
+ *.db
22
+ *.sqlite
23
+ *.sqlite3
@@ -1,6 +1,29 @@
1
1
  # Changelog
2
2
 
3
- ## Unreleased
3
+ ## 1.3.0 - 2026-09-15
4
+
5
+ - **Community Telemetry**: Add privacy-preserving, voluntary, opt-in telemetry (`OFF`, `BASIC`, `RESEARCH`).
6
+ - Strict client allowlist schema; source code, prompts, model responses, repository names, file paths, user identifiers, and credentials are never collected.
7
+ - Transparent user control via `ai-dev telemetry sharing` commands (`status`, `enable basic`, `enable research`, `disable`, `preview`, `flush`).
8
+ - Bounded local disk queue with automatic retention pruning (max 1,000 events, max 7 days, max 32 KB per event).
9
+ - Single-flight non-blocking background transport worker.
10
+ - Support for research-level provider usage metrics collected via MCP tool (`record_usage`) and CLI usage imports.
11
+ - **Production Telemetry Collector**: Introduce the self-contained production backend collector (`collector/`):
12
+ - Fast, auditable FastAPI ingestion endpoint (`POST /v1/events`) with liveness (`/health`) and readiness (`/ready`) probes.
13
+ - Fail-closed payload validation and streaming body size enforcement (32 KB limit).
14
+ - In-memory bounded sliding-window rate limiter with single-IP trusted reverse proxy sanitization.
15
+ - Idempotent deduplication on primary key `event_id`.
16
+ - PostgreSQL 16 storage backed by versioned Alembic migrations.
17
+ - Automated 90-day retention cleanup.
18
+ - Privacy-safe logging with zero client input, path, or credential leakage.
19
+ - Configured default HTTPS production endpoint (`https://35.209.177.185.sslip.io/v1/events`).
20
+ - **Validation & Runner Hardening**:
21
+ - Fix #78: Recognize Node spec/TAP summaries without matching `recoverable` as coverage.
22
+ - Fix #79: Execute selected `.mjs`/`.cjs` tests, retain broad fallback commands, and fail explicitly when selected tests have no runnable validation plan.
23
+ - Fix #80: Preserve source prefixes under small content budgets, document content-only `max_chars`, measure actual artifact sizes, and distinguish receipt/content truncation.
24
+ - Preserve numeric parser error counts and restrict pytest arguments to Python selections.
25
+ - Prevent `finish` from approving incomplete, blocked, or invalid validation.
26
+ - Drain cancellable subprocess pipes while waiting and preserve output captured before timeout.
4
27
 
5
28
  ## 1.2.2 - 2026-09-08
6
29
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ai-dev-cli-tools
3
- Version: 1.2.2
3
+ Version: 1.3.0
4
4
  Summary: Cross-platform CLI helpers that give AI coding agents concise, deterministic development reports.
5
5
  Project-URL: Homepage, https://github.com/MatthiasLew/ai-dev-cli-tools
6
6
  Project-URL: Repository, https://github.com/MatthiasLew/ai-dev-cli-tools
@@ -21,12 +21,25 @@ Classifier: Programming Language :: Python :: 3.14
21
21
  Classifier: Topic :: Software Development :: Quality Assurance
22
22
  Requires-Python: >=3.11
23
23
  Requires-Dist: watchdog<7,>=4
24
+ Provides-Extra: collector
25
+ Requires-Dist: alembic>=1.13; extra == 'collector'
26
+ Requires-Dist: fastapi>=0.115; extra == 'collector'
27
+ Requires-Dist: httpx>=0.27; extra == 'collector'
28
+ Requires-Dist: pydantic>=2.8; extra == 'collector'
29
+ Requires-Dist: sqlalchemy>=2.0; extra == 'collector'
30
+ Requires-Dist: uvicorn>=0.30; extra == 'collector'
24
31
  Provides-Extra: dev
32
+ Requires-Dist: alembic>=1.13; extra == 'dev'
25
33
  Requires-Dist: build>=1.2; extra == 'dev'
26
34
  Requires-Dist: coverage[toml]>=7.6; extra == 'dev'
35
+ Requires-Dist: fastapi>=0.115; extra == 'dev'
36
+ Requires-Dist: httpx>=0.27; extra == 'dev'
27
37
  Requires-Dist: mypy>=1.11; extra == 'dev'
38
+ Requires-Dist: pydantic>=2.8; extra == 'dev'
28
39
  Requires-Dist: pytest>=8.3; extra == 'dev'
29
40
  Requires-Dist: ruff>=0.6; extra == 'dev'
41
+ Requires-Dist: sqlalchemy>=2.0; extra == 'dev'
42
+ Requires-Dist: uvicorn>=0.30; extra == 'dev'
30
43
  Provides-Extra: semantic
31
44
  Requires-Dist: tree-sitter-language-pack>=0.9; extra == 'semantic'
32
45
  Provides-Extra: tokenizers
@@ -54,11 +67,59 @@ artifacts may be removed when no longer needed; cache, runtime, and temporary st
54
67
  be safe for `ai-dev` to recreate.
55
68
  ```
56
69
 
70
+ ## Help improve ai-dev
71
+
72
+ `ai-dev` is being evaluated on real-world coding-agent workflows.
73
+
74
+ If you want to support development, you can optionally enable privacy-preserving opt-in telemetry without persistent user identifiers.
75
+
76
+ Community Telemetry is **OFF by default**. Installation never automatically activates it.
77
+
78
+ ### Commands
79
+
80
+ ```bash
81
+ ai-dev telemetry sharing status
82
+ ai-dev telemetry sharing enable basic
83
+ ai-dev telemetry sharing enable research
84
+ ai-dev telemetry sharing disable
85
+ ai-dev telemetry sharing preview
86
+ ai-dev telemetry sharing flush
87
+ ```
88
+
89
+ - **OFF**: Nothing is collected or sent.
90
+ - **BASIC**: Minimal operational metrics (command name, category, outcome, duration bucket, OS family, Python version).
91
+ - **RESEARCH**: BASIC metrics plus model provider usage (model name, token counts, task outcome, repo size bucket).
92
+
93
+ Default production endpoint: `https://35.209.177.185.sslip.io/v1/events` (can be overridden with `AI_DEV_COMMUNITY_TELEMETRY_ENDPOINT`).
94
+
95
+ Never shared:
96
+ - source code
97
+ - prompts
98
+ - model responses
99
+ - repository names
100
+ - file names or paths
101
+ - usernames/emails
102
+ - secrets/API keys
103
+
104
+ Preview what data fields would be shared from your repository:
105
+
106
+ ```bash
107
+ ai-dev telemetry sharing preview --level research
108
+ ```
109
+
110
+ Or view a synthetic example payload:
111
+
112
+ ```bash
113
+ ai-dev telemetry sharing preview --level research --sample
114
+ ```
115
+
116
+ For complete details on data handling, allowed scalar metrics, and local queueing, see [docs/community-telemetry.md](docs/community-telemetry.md).
117
+
57
118
  ## Install
58
119
 
59
120
  ```bash
60
121
  python -m pip install --upgrade pipx
61
- pipx install ai-dev-cli-tools==1.2.2
122
+ pipx install ai-dev-cli-tools==1.3.0
62
123
  ai-dev --help
63
124
  ```
64
125
 
@@ -19,11 +19,59 @@ artifacts may be removed when no longer needed; cache, runtime, and temporary st
19
19
  be safe for `ai-dev` to recreate.
20
20
  ```
21
21
 
22
+ ## Help improve ai-dev
23
+
24
+ `ai-dev` is being evaluated on real-world coding-agent workflows.
25
+
26
+ If you want to support development, you can optionally enable privacy-preserving opt-in telemetry without persistent user identifiers.
27
+
28
+ Community Telemetry is **OFF by default**. Installation never automatically activates it.
29
+
30
+ ### Commands
31
+
32
+ ```bash
33
+ ai-dev telemetry sharing status
34
+ ai-dev telemetry sharing enable basic
35
+ ai-dev telemetry sharing enable research
36
+ ai-dev telemetry sharing disable
37
+ ai-dev telemetry sharing preview
38
+ ai-dev telemetry sharing flush
39
+ ```
40
+
41
+ - **OFF**: Nothing is collected or sent.
42
+ - **BASIC**: Minimal operational metrics (command name, category, outcome, duration bucket, OS family, Python version).
43
+ - **RESEARCH**: BASIC metrics plus model provider usage (model name, token counts, task outcome, repo size bucket).
44
+
45
+ Default production endpoint: `https://35.209.177.185.sslip.io/v1/events` (can be overridden with `AI_DEV_COMMUNITY_TELEMETRY_ENDPOINT`).
46
+
47
+ Never shared:
48
+ - source code
49
+ - prompts
50
+ - model responses
51
+ - repository names
52
+ - file names or paths
53
+ - usernames/emails
54
+ - secrets/API keys
55
+
56
+ Preview what data fields would be shared from your repository:
57
+
58
+ ```bash
59
+ ai-dev telemetry sharing preview --level research
60
+ ```
61
+
62
+ Or view a synthetic example payload:
63
+
64
+ ```bash
65
+ ai-dev telemetry sharing preview --level research --sample
66
+ ```
67
+
68
+ For complete details on data handling, allowed scalar metrics, and local queueing, see [docs/community-telemetry.md](docs/community-telemetry.md).
69
+
22
70
  ## Install
23
71
 
24
72
  ```bash
25
73
  python -m pip install --upgrade pipx
26
- pipx install ai-dev-cli-tools==1.2.2
74
+ pipx install ai-dev-cli-tools==1.3.0
27
75
  ai-dev --help
28
76
  ```
29
77
 
@@ -0,0 +1,27 @@
1
+ __pycache__
2
+ *.pyc
3
+ *.pyo
4
+ *.pyd
5
+ .Python
6
+ env/
7
+ venv/
8
+ .venv/
9
+ pip-log.txt
10
+ pip-delete-this-directory.txt
11
+ .tox/
12
+ .coverage
13
+ .coverage.*
14
+ .cache
15
+ nosetests.xml
16
+ coverage.xml
17
+ *.cover
18
+ *.log
19
+ .git
20
+ .gitignore
21
+ .mypy_cache
22
+ .pytest_cache
23
+ .ruff_cache
24
+ tests/
25
+ *.db
26
+ *.sqlite
27
+ .env
@@ -0,0 +1,19 @@
1
+ # Community Telemetry Collector Environment Configuration
2
+ # Copy this file to .env and configure your values. Never commit credentials to version control.
3
+
4
+ # Database connection URL
5
+ # For SQLite (local dev/testing): sqlite:///./telemetry.db
6
+ # For PostgreSQL (production): postgresql+psycopg://username:password@hostname:5432/dbname
7
+ DATABASE_URL=sqlite:///./telemetry.db
8
+
9
+ # In-memory rate limit per client IP (requests per minute)
10
+ RATE_LIMIT_PER_MINUTE=60
11
+
12
+ # Raw event retention period (days)
13
+ RETENTION_DAYS=90
14
+
15
+ # Environment mode (development / production)
16
+ ENVIRONMENT=development
17
+
18
+ # Server port (default 8000)
19
+ PORT=8000
@@ -0,0 +1,59 @@
1
+ # Multi-stage minimal production Dockerfile for Community Telemetry Collector
2
+ # Build context MUST be the repository root:
3
+ # docker build -f collector/Dockerfile -t ai-dev-collector:latest .
4
+
5
+ FROM python:3.13-slim AS builder
6
+
7
+ WORKDIR /build
8
+
9
+ RUN apt-get update && apt-get install -y --no-install-recommends \
10
+ build-essential \
11
+ && rm -rf /var/lib/apt/lists/*
12
+
13
+ RUN python -m venv /opt/venv
14
+ ENV PATH="/opt/venv/bin:$PATH"
15
+
16
+ # 1. Install collector dependencies
17
+ COPY collector/requirements.txt .
18
+ RUN pip install --no-cache-dir -r requirements.txt
19
+
20
+ # 2. Build and install ai-dev-cli-tools package for schema validation without external dev tools
21
+ COPY pyproject.toml README.md ./
22
+ COPY src/ ./src/
23
+ RUN pip install --no-cache-dir build hatchling && \
24
+ python -m build --wheel --no-isolation --outdir /wheels . && \
25
+ pip install --no-cache-dir --no-deps /wheels/*.whl
26
+
27
+
28
+ FROM python:3.13-slim AS runner
29
+
30
+ # Security: Create non-root user
31
+ RUN groupadd -r appuser && useradd -r -g appuser -d /app -s /sbin/nologin -c "Docker image user" appuser
32
+
33
+ WORKDIR /app
34
+
35
+ # Copy virtualenv from builder
36
+ COPY --from=builder /opt/venv /opt/venv
37
+ ENV PATH="/opt/venv/bin:$PATH"
38
+ ENV PYTHONPATH="/app"
39
+ ENV PYTHONUNBUFFERED=1
40
+ ENV PYTHONDONTWRITEBYTECODE=1
41
+
42
+ # Copy application source & Alembic migrations
43
+ COPY collector/app/ /app/collector/app/
44
+ COPY collector/alembic/ /app/collector/alembic/
45
+ COPY collector/alembic.ini /app/collector/alembic.ini
46
+
47
+ # Set ownership to non-root user
48
+ RUN chown -R appuser:appuser /app
49
+
50
+ USER appuser
51
+
52
+ EXPOSE 8000
53
+
54
+ # Health check without curl dependency (probes liveness endpoint)
55
+ HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
56
+ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" || exit 1
57
+
58
+ # Start uvicorn with access logging disabled (privacy preservation for client IPs)
59
+ CMD ["uvicorn", "collector.app.main:app", "--host", "0.0.0.0", "--port", "8000", "--no-access-log"]
@@ -0,0 +1,115 @@
1
+ # ai-dev Community Telemetry Collector
2
+
3
+ Lightweight, privacy-preserving, fail-closed production collector for `ai-dev` Community Telemetry (`schema_version = 1`).
4
+
5
+ ---
6
+
7
+ ## Key Privacy & Security Guarantees
8
+
9
+ 1. **No User Tracking**: Does not assign, store, or generate user IDs, device fingerprints, or machine identifiers.
10
+ 2. **No Persistent IP Logging**: IP addresses are used solely in transient in-memory token buckets for rate limiting and are never written to disk or database. Access logs must be disabled or sanitized at the edge reverse proxy.
11
+ 3. **Strict Trusted Proxy Model & Single-IP Defense-in-Depth**: By default, `TRUST_PROXY_HEADERS=false` and client IP is extracted from the direct peer (`request.client.host`). `X-Forwarded-For` is only parsed if explicitly enabled and the connecting peer IP matches `TRUSTED_PROXY_IPS` networks. Furthermore, the reverse proxy must sanitize `X-Forwarded-For: $remote_addr;` and the collector strictly accepts only a single forwarded IP (any multi-value comma-separated header is rejected and falls back to peer IP).
12
+ 4. **Hard-Bounded Rate Limiter**: Rate limiter state is backed by an `OrderedDict` with LRU and stale eviction, guaranteeing `len(_buckets) <= MAX_ENTRIES` (bounds: 100 to 1,000,000) under adversarial key generation.
13
+ 5. **Streaming Body Limit**: Request body is read incrementally via streaming chunks. Payloads exceeding 32 KB (`32,768 bytes`) are aborted immediately with `413 Content Too Large` without full buffer allocation.
14
+ 6. **Explicit Schema Migrations**: Managed by Alembic (`collector/alembic/`). Production startup never performs silent `create_all()` mutations.
15
+ 7. **No Code, Prompts, or Paths**: Strict fail-closed schema validation automatically rejects any payload containing unknown keys, file paths, code snippets, or prompt text.
16
+ 8. **Privacy-Safe Application Logging**: Application logs never record raw payload contents, field values, model names, paths, emails, client IPs, or database credentials. Validation errors log controlled category codes only, and storage failures log exception type names only.
17
+ 9. **90-Day Raw Retention**: Automated retention script purges raw records older than 90 days based strictly on server `received_at` timestamp.
18
+ 10. **Idempotent Ingestion**: `event_id` is an RFC 4122 UUIDv4 used exclusively as a deduplication primary key (`ON CONFLICT DO NOTHING`). Duplicate submissions return `200 OK` (`{"status": "accepted", "duplicate": true}`) without duplicate writes.
19
+
20
+ ---
21
+
22
+ ## API Endpoints
23
+
24
+ ### 1. Liveness Probe: `GET /health`
25
+ Confirms the collector process is running and responsive.
26
+ - **Response** (`200 OK`):
27
+ ```json
28
+ {
29
+ "status": "ok",
30
+ "schema_version": 1
31
+ }
32
+ ```
33
+
34
+ ### 2. Readiness Probe: `GET /ready`
35
+ Confirms connectivity to the backing database.
36
+ - **Response** (`200 OK`):
37
+ ```json
38
+ {
39
+ "status": "ready",
40
+ "database": "connected"
41
+ }
42
+ ```
43
+ - **Error Response** (`503 Service Unavailable`):
44
+ ```json
45
+ {
46
+ "status": "degraded",
47
+ "error": "database_unavailable"
48
+ }
49
+ ```
50
+
51
+ ### 3. Ingest Event: `POST /v1/events`
52
+ - **Headers**:
53
+ - `Content-Type: application/json`
54
+ - `X-Content-Type-Options: nosniff` (applied to response)
55
+ - **Limits**: Body size $\le 32\text{ KB}$, 60 req/min per transient client IP.
56
+ - **Success Response** (`202 Accepted`):
57
+ ```json
58
+ {
59
+ "status": "accepted",
60
+ "duplicate": false
61
+ }
62
+ ```
63
+ - **Duplicate Response** (`200 OK`):
64
+ ```json
65
+ {
66
+ "status": "accepted",
67
+ "duplicate": true
68
+ }
69
+ ```
70
+ - **Error Responses**:
71
+ - `400 Bad Request`: `{"status": "rejected", "error": "validation_failed"}`
72
+ - `413 Content Too Large`: `{"status": "rejected", "error": "payload_too_large"}`
73
+ - `415 Unsupported Media Type`: `{"status": "rejected", "error": "unsupported_media_type"}`
74
+ - `429 Too Many Requests`: `{"status": "rejected", "error": "rate_limited"}` (with `Retry-After` header)
75
+ - `500 Server Error`: `{"status": "error", "error": "storage_failed"}`
76
+
77
+ ---
78
+
79
+ ## Local Development vs. Production
80
+
81
+ ### Local Development (SQLite or Docker Compose)
82
+ In development, SQLite is permitted and the database can be initialized automatically or via Alembic:
83
+ ```bash
84
+ # 1. Run migrations locally
85
+ python -m alembic -c collector/alembic.ini upgrade head
86
+
87
+ # 2. Run collector locally
88
+ uvicorn collector.app.main:app --host 127.0.0.1 --port 8000
89
+ ```
90
+ Or with Docker Compose:
91
+ ```bash
92
+ docker compose -f collector/docker-compose.yml up -d --build
93
+ ```
94
+
95
+ ### Production Deployment (PostgreSQL Required)
96
+ In production (`ENVIRONMENT=production`):
97
+ - `DATABASE_URL` **must** be a PostgreSQL connection string (`postgresql+psycopg://...`). SQLite will fail fast on startup.
98
+ - Migrations **must** be executed before launching the collector:
99
+ ```bash
100
+ alembic -c collector/alembic.ini upgrade head
101
+ ```
102
+ - Set `TRUST_PROXY_HEADERS=true` only if deployed behind a verified reverse proxy (e.g. Caddy / Nginx) and configure `TRUSTED_PROXY_IPS`.
103
+
104
+ ---
105
+
106
+ ## Running Retention Cleanup
107
+
108
+ To purge events older than 90 days:
109
+ ```bash
110
+ python -m collector.app.retention --days 90
111
+ ```
112
+ Dry run mode (preview without deletion):
113
+ ```bash
114
+ python -m collector.app.retention --days 90 --dry-run
115
+ ```
@@ -0,0 +1 @@
1
+ """Community Telemetry Collector package."""