ai-dev-cli-tools 1.2.1__tar.gz → 1.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. ai_dev_cli_tools-1.2.2/.github/dependabot.yml +12 -0
  2. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/.github/workflows/ci.yml +1 -1
  3. ai_dev_cli_tools-1.2.2/.github/workflows/codeql.yml +28 -0
  4. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/CHANGELOG.md +12 -0
  5. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/PKG-INFO +9 -6
  6. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/README.md +7 -5
  7. ai_dev_cli_tools-1.2.2/SECURITY.md +36 -0
  8. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/AGENT_INTEGRATION_CONTRACT.md +1 -1
  9. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/BENCHMARKS.md +1 -1
  10. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/DISTRIBUTION.md +6 -6
  11. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/INTEGRATIONS_AND_DASHBOARD.md +10 -2
  12. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/MCP_SERVER.md +12 -0
  13. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/RELEASE_CHECKLIST.md +1 -1
  14. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/REPORT_SCHEMA.md +1 -1
  15. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/pyproject.toml +2 -1
  16. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/requirements-dev.lock +1 -1
  17. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/validate_ci.py +1 -1
  18. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/__init__.py +1 -1
  19. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/cache/repository.py +33 -3
  20. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/cli.py +10 -7
  21. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/config.py +2 -0
  22. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/repository_map.py +10 -0
  23. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/integrations.py +2 -1
  24. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/mcp_server.py +10 -4
  25. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/parsers/logs.py +42 -1
  26. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/benchmark.py +1 -1
  27. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/check.py +15 -4
  28. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/check_selection.py +21 -3
  29. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/focused.py +19 -1
  30. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runtime/runner.py +24 -1
  31. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/telemetry.py +44 -5
  32. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/telemetry_policy.py +1 -1
  33. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/token_efficiency.py +12 -0
  34. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_cache.py +14 -0
  35. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_check_plan.py +55 -0
  36. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_feedback.py +33 -0
  37. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_integrations_dashboard.py +21 -0
  38. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_mcp_server.py +4 -0
  39. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_new_cli_commands.py +43 -0
  40. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_report.py +1 -1
  41. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_repository_map.py +18 -0
  42. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_runtime_runner.py +27 -0
  43. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_telemetry.py +55 -0
  44. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_tool_parsers.py +9 -0
  45. ai_dev_cli_tools-1.2.1/SECURITY.md +0 -6
  46. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/.github/workflows/docs.yml +0 -0
  47. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/.github/workflows/publish-pypi.yml +0 -0
  48. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/.github/workflows/release.yml +0 -0
  49. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/.gitignore +0 -0
  50. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/CONTRIBUTING.md +0 -0
  51. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/LICENSE +0 -0
  52. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/Makefile +0 -0
  53. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/TODO.md +0 -0
  54. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/ai.ps1 +0 -0
  55. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/ai.sh +0 -0
  56. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/ADAPTIVECHESSAI_FULL_CHECK_FAILURE_2026-08-30.md +0 -0
  57. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/ADAPTIVECHESSAI_PYCHARM_HEADLESS_INSPECTION_FAILURE_2026-08-30.md +0 -0
  58. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/ADDING_A_DETECTOR.md +0 -0
  59. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/ADDING_A_RUNNER.md +0 -0
  60. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/AGENT_COORDINATION.md +0 -0
  61. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/AGENT_EFFICIENCY_ROADMAP.md +0 -0
  62. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/AGENT_WORKFLOW.md +0 -0
  63. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/ARCHITECTURE.md +0 -0
  64. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/BOOTSTRAP.md +0 -0
  65. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/CACHE_AND_INDEX.md +0 -0
  66. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/CHANGED_TEST_SELECTION.md +0 -0
  67. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/CONTEXT_BUILDER.md +0 -0
  68. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/FLAKY_RETRIES.md +0 -0
  69. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/MONOREPO_SUPPORT.md +0 -0
  70. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/OBSERVATION_LIFECYCLE.md +0 -0
  71. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/PERFORMANCE.md +0 -0
  72. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/PROJECT_COMPLETE.md +0 -0
  73. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/RUNTIME.md +0 -0
  74. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/SEMANTIC_COMPRESSION.md +0 -0
  75. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/TOKEN_EFFICIENCY_RESEARCH.md +0 -0
  76. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/TOOL_OUTPUT_PARSERS.md +0 -0
  77. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/WARM_ENVIRONMENT.md +0 -0
  78. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/WATCH_MODE.md +0 -0
  79. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/benchmarks/agent-workflows-windows-py314-2026-08-11.json +0 -0
  80. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/report-schema.json +0 -0
  81. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-adaptive-context.json +0 -0
  82. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-affected-workflow.json +0 -0
  83. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-context-acknowledgement.json +0 -0
  84. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-corpus.json +0 -0
  85. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-feedback-delta.json +0 -0
  86. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-monorepo-workflow.json +0 -0
  87. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-multiturn-workflow.json +0 -0
  88. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-repair-workflow.json +0 -0
  89. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/pyproject.toml +0 -0
  90. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/src/__init__.py +0 -0
  91. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/src/orders.py +0 -0
  92. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/src/pricing.py +0 -0
  93. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/__init__.py +0 -0
  94. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_orders.py +0 -0
  95. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_pricing.py +0 -0
  96. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_1.py +0 -0
  97. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_10.py +0 -0
  98. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_11.py +0 -0
  99. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_12.py +0 -0
  100. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_2.py +0 -0
  101. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_3.py +0 -0
  102. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_4.py +0 -0
  103. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_5.py +0 -0
  104. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_6.py +0 -0
  105. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_7.py +0 -0
  106. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_8.py +0 -0
  107. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_9.py +0 -0
  108. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/__init__.py +0 -0
  109. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/__init__.py +0 -0
  110. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/pyproject.toml +0 -0
  111. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/src/__init__.py +0 -0
  112. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/src/billing.py +0 -0
  113. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/tests/__init__.py +0 -0
  114. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/tests/test_billing.py +0 -0
  115. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/__init__.py +0 -0
  116. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/pyproject.toml +0 -0
  117. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/src/__init__.py +0 -0
  118. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/src/catalog.py +0 -0
  119. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/tests/__init__.py +0 -0
  120. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/tests/test_catalog.py +0 -0
  121. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/mcp-recurring-status.json +0 -0
  122. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/output-budget-smoke.json +0 -0
  123. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/symbol-diff-context.json +0 -0
  124. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/consume_json_report.py +0 -0
  125. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/__init__.py +0 -0
  126. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/benchmark_agent_workflow.py +0 -0
  127. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/benchmark_mcp_context_ack.py +0 -0
  128. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/benchmark_mcp_status.py +0 -0
  129. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/benchmark_symbol_diff.py +0 -0
  130. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/dev.py +0 -0
  131. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/test_installed_package.py +0 -0
  132. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/validate_release.py +0 -0
  133. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/verify_published_package.py +0 -0
  134. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/__main__.py +0 -0
  135. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/cache/__init__.py +0 -0
  136. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/cache/graph.py +0 -0
  137. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/cache/prompt_layout.py +0 -0
  138. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/cache/validation.py +0 -0
  139. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/completion.py +0 -0
  140. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/__init__.py +0 -0
  141. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/adaptive.py +0 -0
  142. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/builder.py +0 -0
  143. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/compression.py +0 -0
  144. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/incremental.py +0 -0
  145. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/mcp_delta.py +0 -0
  146. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/models.py +0 -0
  147. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/profiles.py +0 -0
  148. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/refinement.py +0 -0
  149. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/retrieval.py +0 -0
  150. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/selection.py +0 -0
  151. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/symbols.py +0 -0
  152. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/tokens.py +0 -0
  153. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/dashboard.py +0 -0
  154. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/__init__.py +0 -0
  155. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/environment.py +0 -0
  156. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/project.py +0 -0
  157. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/runtime.py +0 -0
  158. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/workspaces.py +0 -0
  159. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/git/__init__.py +0 -0
  160. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/git/inspect.py +0 -0
  161. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/git/symbol_diff.py +0 -0
  162. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/index_daemon_service.py +0 -0
  163. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/models/__init__.py +0 -0
  164. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/models/report.py +0 -0
  165. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/models/workspace.py +0 -0
  166. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/parsers/__init__.py +0 -0
  167. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/parsers/failures.py +0 -0
  168. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/parsers/registry.py +0 -0
  169. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/reporters/__init__.py +0 -0
  170. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/reporters/progressive.py +0 -0
  171. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/reporters/sarif.py +0 -0
  172. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/reporters/writer.py +0 -0
  173. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/__init__.py +0 -0
  174. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/baseline.py +0 -0
  175. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/bootstrap.py +0 -0
  176. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/bootstrap_models.py +0 -0
  177. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/bootstrap_strategies.py +0 -0
  178. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/cache.py +0 -0
  179. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/check_checkpoint.py +0 -0
  180. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/check_models.py +0 -0
  181. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/check_scheduler.py +0 -0
  182. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/coordination.py +0 -0
  183. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/diagnostics.py +0 -0
  184. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/environment_state.py +0 -0
  185. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/feedback.py +0 -0
  186. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/feedback_delta.py +0 -0
  187. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/finish.py +0 -0
  188. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/flaky.py +0 -0
  189. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/index.py +0 -0
  190. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/index_daemon.py +0 -0
  191. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/observations.py +0 -0
  192. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/performance.py +0 -0
  193. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/plan.py +0 -0
  194. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/policy.py +0 -0
  195. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/task.py +0 -0
  196. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/watch.py +0 -0
  197. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runtime/__init__.py +0 -0
  198. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runtime/supervisor.py +0 -0
  199. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/security/__init__.py +0 -0
  200. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/security/execution.py +0 -0
  201. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/security/secrets.py +0 -0
  202. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/semantic.py +0 -0
  203. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/semantic_backends.py +0 -0
  204. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/source_symbols.py +0 -0
  205. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/telemetry_optimizer.py +0 -0
  206. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/utils/__init__.py +0 -0
  207. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/utils/subprocess.py +0 -0
  208. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/cargo-fail.log +0 -0
  209. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/coverage-ok.log +0 -0
  210. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/eslint-fail.log +0 -0
  211. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/gradle-ok.log +0 -0
  212. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/jest-fail.log +0 -0
  213. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/maven-fail.log +0 -0
  214. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/maven-localized-fail.log +0 -0
  215. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/mypy-fail.log +0 -0
  216. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/phpunit-fail.log +0 -0
  217. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/pytest-9-ok.log +0 -0
  218. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/pytest-fail.log +0 -0
  219. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/pytest-multiple-failures.log +0 -0
  220. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/ruff-fail.log +0 -0
  221. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/ruff-warning.log +0 -0
  222. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/tsc-fail.log +0 -0
  223. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/vitest-ok.log +0 -0
  224. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/monorepo-mixed/package.json +0 -0
  225. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/monorepo-mixed/packages/api/pyproject.toml +0 -0
  226. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/monorepo-mixed/packages/api/tests/test_smoke.py +0 -0
  227. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/monorepo-mixed/packages/web/package.json +0 -0
  228. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/monorepo-mixed/packages/web/test.js +0 -0
  229. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/monorepo-mixed/services/worker/Cargo.toml +0 -0
  230. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/monorepo-mixed/services/worker/src/lib.rs +0 -0
  231. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/gradle/build.gradle +0 -0
  232. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/gradle/gradlew.bat +0 -0
  233. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/maven/mvnw.cmd +0 -0
  234. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/maven/pom.xml +0 -0
  235. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/node-npm/package-lock.json +0 -0
  236. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/node-npm/package.json +0 -0
  237. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/node-pnpm/package.json +0 -0
  238. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/node-pnpm/pnpm-lock.yaml +0 -0
  239. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/node-yarn/package.json +0 -0
  240. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/node-yarn/yarn.lock +0 -0
  241. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/php-composer/composer.json +0 -0
  242. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/python-pip/pyproject.toml +0 -0
  243. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/python-pip/requirements.txt +0 -0
  244. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/python-poetry/pyproject.toml +0 -0
  245. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/python-uv/pyproject.toml +0 -0
  246. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/python-uv/uv.lock +0 -0
  247. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/rust/Cargo.toml +0 -0
  248. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/integration/test_adaptive_chess_regression.py +0 -0
  249. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/integration/test_cli.py +0 -0
  250. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/integration/test_cross_platform_paths.py +0 -0
  251. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/integration/test_git.py +0 -0
  252. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/integration/test_toolchain_e2e.py +0 -0
  253. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_adaptive_context.py +0 -0
  254. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_agent_plan.py +0 -0
  255. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_baseline.py +0 -0
  256. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_benchmark.py +0 -0
  257. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_benchmark_gate.py +0 -0
  258. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_bootstrap.py +0 -0
  259. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_check.py +0 -0
  260. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_check_scheduler.py +0 -0
  261. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_cli_more.py +0 -0
  262. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_completion.py +0 -0
  263. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_config.py +0 -0
  264. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_builder.py +0 -0
  265. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_compression.py +0 -0
  266. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_mcp_delta.py +0 -0
  267. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_profiles.py +0 -0
  268. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_refinement.py +0 -0
  269. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_retrieval.py +0 -0
  270. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_symbols.py +0 -0
  271. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_coordination.py +0 -0
  272. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_dev_launcher.py +0 -0
  273. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_diagnostics.py +0 -0
  274. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_doctor.py +0 -0
  275. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_environment_state.py +0 -0
  276. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_execution_policy.py +0 -0
  277. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_failure_classification.py +0 -0
  278. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_feedback_delta.py +0 -0
  279. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_finish.py +0 -0
  280. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_flaky.py +0 -0
  281. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_index_daemon.py +0 -0
  282. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_index_daemon_service.py +0 -0
  283. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_logs.py +0 -0
  284. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_more_coverage.py +0 -0
  285. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_more_symbol_adapters.py +0 -0
  286. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_observations.py +0 -0
  287. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_package_smoke.py +0 -0
  288. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_performance.py +0 -0
  289. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_progressive_reports.py +0 -0
  290. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_prompt_layout.py +0 -0
  291. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_release_scripts.py +0 -0
  292. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_runner_failures.py +0 -0
  293. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_runtime.py +0 -0
  294. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_runtime_supervisor.py +0 -0
  295. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_sarif.py +0 -0
  296. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_scan.py +0 -0
  297. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_secret_boundaries.py +0 -0
  298. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_secrets.py +0 -0
  299. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_semantic.py +0 -0
  300. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_semantic_backends.py +0 -0
  301. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_symbol_diff.py +0 -0
  302. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_task.py +0 -0
  303. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_telemetry_optimizer.py +0 -0
  304. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_telemetry_policy.py +0 -0
  305. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_token_accounting.py +0 -0
  306. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_watch.py +0 -0
  307. {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_workspaces.py +0 -0
@@ -0,0 +1,12 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: pip
4
+ directory: "/"
5
+ schedule:
6
+ interval: weekly
7
+ open-pull-requests-limit: 5
8
+ - package-ecosystem: github-actions
9
+ directory: "/"
10
+ schedule:
11
+ interval: weekly
12
+ open-pull-requests-limit: 5
@@ -21,7 +21,7 @@ jobs:
21
21
  fail-fast: false
22
22
  matrix:
23
23
  os: [ubuntu-latest, windows-latest, macos-latest]
24
- python-version: ["3.11", "3.12", "3.13"]
24
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
25
25
  runs-on: ${{ matrix.os }}
26
26
  steps:
27
27
  - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
@@ -0,0 +1,28 @@
1
+ name: CodeQL
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+ schedule:
9
+ - cron: "17 4 * * 1"
10
+
11
+ permissions:
12
+ contents: read
13
+ security-events: write
14
+
15
+ jobs:
16
+ analyze:
17
+ name: Analyze Python
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
21
+ with:
22
+ persist-credentials: false
23
+ - uses: github/codeql-action/init@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4
24
+ with:
25
+ languages: python
26
+ build-mode: none
27
+ queries: security-extended
28
+ - uses: github/codeql-action/analyze@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4
@@ -2,6 +2,18 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.2.2 - 2026-09-08
6
+
7
+ - Add a native Gemini CLI MCP integration, reference-first client profile, provider-reported
8
+ `usageMetadata` import, and Gemini pricing snapshot support.
9
+ - Add Python 3.14 to the supported classifiers and cross-platform CI matrix.
10
+ - Ignore named virtual environments and bytecode during changed-check selection, prefer the
11
+ project virtual-environment interpreter, and keep Ruff failures out of pytest-focused reruns.
12
+ - Add CodeQL analysis, Dependabot update configuration, and a complete security reporting and
13
+ supported-version policy.
14
+ - Make managed-process stop observe in-flight atomic supervisor state, closing a rare start/stop
15
+ race exposed by the expanded Python CI matrix.
16
+
5
17
  ## 1.2.1 - 2026-09-01
6
18
 
7
19
  - Fix the blank local dashboard by preserving JavaScript newline escapes and resolving dashboard
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ai-dev-cli-tools
3
- Version: 1.2.1
3
+ Version: 1.2.2
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
@@ -17,6 +17,7 @@ Classifier: Programming Language :: Python :: 3
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
20
21
  Classifier: Topic :: Software Development :: Quality Assurance
21
22
  Requires-Python: >=3.11
22
23
  Requires-Dist: watchdog<7,>=4
@@ -57,7 +58,7 @@ be safe for `ai-dev` to recreate.
57
58
 
58
59
  ```bash
59
60
  python -m pip install --upgrade pipx
60
- pipx install ai-dev-cli-tools==1.2.1
61
+ pipx install ai-dev-cli-tools==1.2.2
61
62
  ai-dev --help
62
63
  ```
63
64
 
@@ -118,8 +119,10 @@ ai-dev baseline compare main
118
119
  ai-dev benchmark run --suite examples/benchmarks/output-budget-smoke.json --variant baseline
119
120
  ai-dev benchmark corpus --manifest examples/benchmarks/agent-corpus.json --trials 3
120
121
  ai-dev integrations install all
122
+ ai-dev integrations install gemini
121
123
  ai-dev dashboard serve --port 8765
122
124
  ai-dev telemetry import response.json --client codex --format openai
125
+ ai-dev telemetry import gemini-response.json --client gemini --format gemini
123
126
  ai-dev telemetry status --json
124
127
  ai-dev telemetry optimize --min-sessions 5 --json
125
128
  ai-dev telemetry export --format csv --output .ai/telemetry-exports/usage.csv --json
@@ -153,7 +156,7 @@ All commands support `--project`, `--json`, `--quiet`, `--help`, and `--version`
153
156
  ## Local MCP server
154
157
 
155
158
  `ai-dev mcp serve` exposes project status, implementation planning, compact feedback, bounded context, validation,
156
- and progressive evidence as local structured tools for Codex-compatible MCP clients. The STDIO
159
+ and progressive evidence as local structured tools for clients including Gemini CLI. The STDIO
157
160
  server is dependency-free, has no network listener, fixes all calls to one project root, and
158
161
  defaults validation to preview-only. After consuming a successful `build_context` response, a
159
162
  client can return its `summary.delta.state_fingerprint` as `acknowledged_state`; an identical safe
@@ -213,14 +216,14 @@ Artifacts are written to `.ai/context/context-latest.md` and `.ai/context/contex
213
216
 
214
217
  Selective retrieval defaults to `auto`: focused includes or changed files can abstain from broad cross-file retrieval, while missing focus, broad configuration changes, and broad task scopes fall back to the full candidate set. Use `--retrieval always` to expand or `--retrieval never` to keep only focused roots and inferred related tests. The JSON and Markdown reports explain the decision and expose a related-test false-negative proxy.
215
218
 
216
- Install `ai-dev-cli-tools[tokenizers]` to enable exact local `cl100k_base` or `o200k_base` counting. Without that optional extra, accounting uses the explicit UTF-8-bytes/4 estimate and reports a fallback if an exact tokenizer was requested. Repeated `--token-budget category=N` limits source, diffs, tests, logs, maps, history, cached input, or output independently. `--provider-usage <json>` normalizes OpenAI or Anthropic usage fields from a project-local file without network access.
219
+ Install `ai-dev-cli-tools[tokenizers]` to enable exact local `cl100k_base` or `o200k_base` counting. Without that optional extra, accounting uses the explicit UTF-8-bytes/4 estimate and reports a fallback if an exact tokenizer was requested. Repeated `--token-budget category=N` limits source, diffs, tests, logs, maps, history, cached input, or output independently. `--provider-usage <json>` normalizes OpenAI, Anthropic, or Gemini usage fields from a project-local file without network access.
217
220
 
218
221
  `ai-dev task` is the default one-shot handoff for an AI client. It combines the bounded plan,
219
222
  selected context, and check preview while delivering file references instead of full content.
220
223
  Use `--include-content` only when the consumer truly needs the bodies. The response includes a
221
224
  state fingerprint and a token savings receipt; return that fingerprint with `--ack-state` only
222
225
  after consuming the response. Explicit acknowledgements are stored per client under
223
- `.ai/cache/client-state/`, so Codex, Claude Code, Cursor, and generic consumers never inherit one
226
+ `.ai/cache/client-state/`, so Codex, Claude Code, Cursor, Gemini CLI, and generic consumers never inherit one
224
227
  another's assumed context. Receipts remain local under `.ai/token-efficiency/`.
225
228
 
226
229
  Provider-reported usage can be recorded through MCP `record_usage` or imported from a bounded,
@@ -348,7 +351,7 @@ git diff --check
348
351
  | mcp serve | implemented |
349
352
  | watch | implemented |
350
353
  | benchmark run/compare/gate/corpus | implemented |
351
- | integrations install | implemented for Codex, Claude Code, Cursor, and generic MCP |
354
+ | integrations install | implemented for Codex, Claude Code, Cursor, Gemini CLI, and generic MCP |
352
355
  | dashboard status/serve | implemented, loopback-only |
353
356
  | telemetry import/status and MCP record_usage | implemented, provider-reported usage only |
354
357
  | telemetry gate/pricing snapshots and MCP usage_status | implemented, local and fail-closed |
@@ -23,7 +23,7 @@ be safe for `ai-dev` to recreate.
23
23
 
24
24
  ```bash
25
25
  python -m pip install --upgrade pipx
26
- pipx install ai-dev-cli-tools==1.2.1
26
+ pipx install ai-dev-cli-tools==1.2.2
27
27
  ai-dev --help
28
28
  ```
29
29
 
@@ -84,8 +84,10 @@ ai-dev baseline compare main
84
84
  ai-dev benchmark run --suite examples/benchmarks/output-budget-smoke.json --variant baseline
85
85
  ai-dev benchmark corpus --manifest examples/benchmarks/agent-corpus.json --trials 3
86
86
  ai-dev integrations install all
87
+ ai-dev integrations install gemini
87
88
  ai-dev dashboard serve --port 8765
88
89
  ai-dev telemetry import response.json --client codex --format openai
90
+ ai-dev telemetry import gemini-response.json --client gemini --format gemini
89
91
  ai-dev telemetry status --json
90
92
  ai-dev telemetry optimize --min-sessions 5 --json
91
93
  ai-dev telemetry export --format csv --output .ai/telemetry-exports/usage.csv --json
@@ -119,7 +121,7 @@ All commands support `--project`, `--json`, `--quiet`, `--help`, and `--version`
119
121
  ## Local MCP server
120
122
 
121
123
  `ai-dev mcp serve` exposes project status, implementation planning, compact feedback, bounded context, validation,
122
- and progressive evidence as local structured tools for Codex-compatible MCP clients. The STDIO
124
+ and progressive evidence as local structured tools for clients including Gemini CLI. The STDIO
123
125
  server is dependency-free, has no network listener, fixes all calls to one project root, and
124
126
  defaults validation to preview-only. After consuming a successful `build_context` response, a
125
127
  client can return its `summary.delta.state_fingerprint` as `acknowledged_state`; an identical safe
@@ -179,14 +181,14 @@ Artifacts are written to `.ai/context/context-latest.md` and `.ai/context/contex
179
181
 
180
182
  Selective retrieval defaults to `auto`: focused includes or changed files can abstain from broad cross-file retrieval, while missing focus, broad configuration changes, and broad task scopes fall back to the full candidate set. Use `--retrieval always` to expand or `--retrieval never` to keep only focused roots and inferred related tests. The JSON and Markdown reports explain the decision and expose a related-test false-negative proxy.
181
183
 
182
- Install `ai-dev-cli-tools[tokenizers]` to enable exact local `cl100k_base` or `o200k_base` counting. Without that optional extra, accounting uses the explicit UTF-8-bytes/4 estimate and reports a fallback if an exact tokenizer was requested. Repeated `--token-budget category=N` limits source, diffs, tests, logs, maps, history, cached input, or output independently. `--provider-usage <json>` normalizes OpenAI or Anthropic usage fields from a project-local file without network access.
184
+ Install `ai-dev-cli-tools[tokenizers]` to enable exact local `cl100k_base` or `o200k_base` counting. Without that optional extra, accounting uses the explicit UTF-8-bytes/4 estimate and reports a fallback if an exact tokenizer was requested. Repeated `--token-budget category=N` limits source, diffs, tests, logs, maps, history, cached input, or output independently. `--provider-usage <json>` normalizes OpenAI, Anthropic, or Gemini usage fields from a project-local file without network access.
183
185
 
184
186
  `ai-dev task` is the default one-shot handoff for an AI client. It combines the bounded plan,
185
187
  selected context, and check preview while delivering file references instead of full content.
186
188
  Use `--include-content` only when the consumer truly needs the bodies. The response includes a
187
189
  state fingerprint and a token savings receipt; return that fingerprint with `--ack-state` only
188
190
  after consuming the response. Explicit acknowledgements are stored per client under
189
- `.ai/cache/client-state/`, so Codex, Claude Code, Cursor, and generic consumers never inherit one
191
+ `.ai/cache/client-state/`, so Codex, Claude Code, Cursor, Gemini CLI, and generic consumers never inherit one
190
192
  another's assumed context. Receipts remain local under `.ai/token-efficiency/`.
191
193
 
192
194
  Provider-reported usage can be recorded through MCP `record_usage` or imported from a bounded,
@@ -314,7 +316,7 @@ git diff --check
314
316
  | mcp serve | implemented |
315
317
  | watch | implemented |
316
318
  | benchmark run/compare/gate/corpus | implemented |
317
- | integrations install | implemented for Codex, Claude Code, Cursor, and generic MCP |
319
+ | integrations install | implemented for Codex, Claude Code, Cursor, Gemini CLI, and generic MCP |
318
320
  | dashboard status/serve | implemented, loopback-only |
319
321
  | telemetry import/status and MCP record_usage | implemented, provider-reported usage only |
320
322
  | telemetry gate/pricing snapshots and MCP usage_status | implemented, local and fail-closed |
@@ -0,0 +1,36 @@
1
+ # Security Policy
2
+
3
+ ## Supported versions
4
+
5
+ Security fixes are provided for the latest stable release only. Users should upgrade to the
6
+ latest patch version before reporting an issue that may already be fixed. Pre-releases and source
7
+ checkouts are supported only for reproducing a report against the current `main` branch.
8
+
9
+ | Version | Supported |
10
+ | --- | --- |
11
+ | 1.2.x latest patch | Yes |
12
+ | Earlier releases | No |
13
+
14
+ ## Reporting a vulnerability
15
+
16
+ Do not open a public issue for a suspected vulnerability. Use GitHub's private vulnerability
17
+ reporting form in the repository Security tab when available, or contact the repository owner
18
+ privately through the address associated with the published package.
19
+
20
+ Include the affected version or commit, operating system, minimal reproduction, expected security
21
+ property, observed impact, and whether the report contains secrets. Do not include real
22
+ credentials, private source code, or customer data. Use synthetic evidence wherever possible.
23
+
24
+ The maintainer aims to acknowledge a report within 7 days and provide an initial assessment within
25
+ 14 days. Timelines for a fix and coordinated disclosure depend on severity and reproducibility.
26
+
27
+ ## Security boundaries
28
+
29
+ `ai-dev` analyzes repositories and runs explicitly selected local development commands. Reports,
30
+ caches, telemetry, and MCP communication remain local by default. The project intentionally does
31
+ not commit, push, merge, deploy, transmit source to a remote model, install global tools, or kill
32
+ unrelated processes.
33
+
34
+ Secret masking is a defense-in-depth control, not permission to process arbitrary secrets. Review
35
+ generated reports before sharing them, keep `.ai/` state private, and use least-privilege execution
36
+ policies for MCP clients and CI.
@@ -72,7 +72,7 @@ For repeated `build_context` calls, return the prior `summary.delta.state_finger
72
72
  `acknowledged_state`. A receipt is emitted only when repository contents, request parameters, and
73
73
  the safe successful state still match. Changed, partial, warning, error, and secret-bearing states
74
74
  return full live context. Set `delta=false` whenever a complete refresh is required.
75
- - `prepare_task` accepts `client=codex|claude|cursor|generic`. Persisted acknowledgement state is
75
+ - `prepare_task` accepts `client=codex|claude|cursor|gemini|generic`. Persisted acknowledgement state is
76
76
  updated only when the caller explicitly supplies `acknowledged_state` with `persist_ack=true`.
77
77
  - Keep infrastructure retry separate from flaky-test retry; neither may retry code failures.
78
78
 
@@ -72,7 +72,7 @@ agent-visible bytes. Missing or invalid metrics safely fall back to generic meas
72
72
  never presented as exact model-token counts. `selection_metric_trials` is zero when precision and
73
73
  recall were not reported; their zero medians must not be interpreted as measured selection quality.
74
74
 
75
- Use `--client codex|claude|cursor|generic` to label runs from a real client adapter. A real adapter
75
+ Use `--client codex|claude|cursor|gemini|generic` to label runs from a real client adapter. A real adapter
76
76
  should emit `input_tokens` or `output_tokens` in its private metrics line. The
77
77
  `--require-reported-tokens` gate fails unless every candidate trial contains provider-reported
78
78
  usage; this prevents estimated character counts from being presented as real client token data.
@@ -1,12 +1,12 @@
1
1
  # Distribution and Upgrade Policy
2
2
 
3
- Version 1.2.1 is the dashboard stability patch prepared for Trusted Publishing to TestPyPI and
4
- PyPI. The planned product capability set remains complete as of 1.2.0.
3
+ Version 1.2.2 adds Gemini integration, Python 3.14 validation, and post-1.2.1 correctness and
4
+ security maintenance. The planned product capability set remains complete as of 1.2.0.
5
5
  The recommended isolated installation is:
6
6
 
7
7
  ```bash
8
8
  python -m pip install --upgrade pipx
9
- pipx install ai-dev-cli-tools==1.2.1
9
+ pipx install ai-dev-cli-tools==1.2.2
10
10
  ai-dev --version
11
11
  ai-dev doctor
12
12
  ```
@@ -15,8 +15,8 @@ Until the release appears on PyPI, install the exact wheel from the matching Git
15
15
  pinned Git commit:
16
16
 
17
17
  ```bash
18
- python -m pip install ./dist/ai_dev_cli_tools-1.2.1-py3-none-any.whl
19
- pipx install "git+https://github.com/MatthiasLew/ai-dev-cli-tools.git@v1.2.1"
18
+ python -m pip install ./dist/ai_dev_cli_tools-1.2.2-py3-none-any.whl
19
+ pipx install "git+https://github.com/MatthiasLew/ai-dev-cli-tools.git@v1.2.2"
20
20
  ```
21
21
 
22
22
  Upgrades must pin a release tag or version, review `CHANGELOG.md`, and rerun `ai-dev doctor`.
@@ -50,7 +50,7 @@ not.
50
50
 
51
51
  1. Complete `docs/RELEASE_CHECKLIST.md` on a clean commit already present on `main`.
52
52
  2. Confirm the TestPyPI and PyPI Trusted Publisher records and GitHub environments above.
53
- 3. Create and push an annotated tag `v1.2.1` from that exact commit. If the maintainer has already
53
+ 3. Create and push an annotated tag `v1.2.2` from that exact commit. If the maintainer has already
54
54
  configured a signing key, cryptographically sign the tag and verify its signature before push;
55
55
  release automation must not generate or select a maintainer credential implicitly.
56
56
  4. Approve the `testpypi` environment if configured to require review.
@@ -7,10 +7,12 @@ ai-dev integrations install all
7
7
  ai-dev integrations install codex
8
8
  ai-dev integrations install claude
9
9
  ai-dev integrations install cursor
10
+ ai-dev integrations install gemini
10
11
  ```
11
12
 
12
- The generated files are `.codex/config.toml`, `.mcp.json`, `.cursor/mcp.json`, and
13
- `mcp.ai-dev.json`. Matching reference-first task profiles are written to `.ai-dev/clients/`.
13
+ The generated files are `.codex/config.toml`, `.mcp.json`, `.cursor/mcp.json`,
14
+ `.gemini/settings.json`, and `mcp.ai-dev.json`. Matching reference-first task profiles are written
15
+ to `.ai-dev/clients/`.
14
16
  Existing files are preserved unless `--force` is explicitly supplied. Each
15
17
  configuration launches the same Python environment as the installer via stdio and pins the
16
18
  project root, which avoids working-directory ambiguity.
@@ -47,6 +49,7 @@ Existing JSON or JSONL can be imported from inside the project:
47
49
  ai-dev telemetry import response.json --client codex --format openai --json
48
50
  ai-dev telemetry import anthropic.json --client claude --format anthropic --json
49
51
  ai-dev telemetry import cursor-usage.jsonl --client cursor --format generic --json
52
+ ai-dev telemetry import gemini-response.json --client gemini --format gemini --json
50
53
  ai-dev telemetry status --json
51
54
  ```
52
55
 
@@ -81,6 +84,11 @@ official `usage.input_tokens`, `usage.input_tokens_details.cached_tokens`,
81
84
  For Anthropic, total normalized input is the sum of uncached input, cache creation, and cache read
82
85
  fields as specified by the
83
86
  [Anthropic pricing and usage documentation](https://docs.anthropic.com/en/docs/about-claude/pricing).
87
+ The Gemini adapter reads `usageMetadata` from the REST response or `usage_metadata` from the SDK.
88
+ It treats prompt plus tool-use prompt tokens as total input, cached content as an input subset, and
89
+ candidate plus thought tokens as output, with thoughts also reported separately. The field
90
+ definitions come from the
91
+ [Gemini GenerateContent UsageMetadata reference](https://ai.google.dev/api/generate-content#UsageMetadata).
84
92
 
85
93
  ## Versioned pricing snapshots
86
94
 
@@ -40,6 +40,18 @@ tool_timeout_sec = 300
40
40
  The official Codex MCP configuration reference is available in the
41
41
  [Codex MCP documentation](https://developers.openai.com/codex/mcp/).
42
42
 
43
+ ## Connect Gemini CLI
44
+
45
+ Generate a project-scoped Gemini CLI configuration:
46
+
47
+ ```bash
48
+ ai-dev integrations install gemini
49
+ ```
50
+
51
+ This creates or safely merges `.gemini/settings.json` with an `ai-dev-tools` entry under
52
+ `mcpServers` and pins the project root and installer Python environment. Restart Gemini CLI after
53
+ changing the file. Gemini CLI prefixes discovered MCP tool names with the configured server alias.
54
+
43
55
  ## Tools
44
56
 
45
57
  | Tool | Purpose | Default behavior | MCP annotation |
@@ -69,7 +69,7 @@ local development command.
69
69
  ## Latest cross-platform evidence
70
70
 
71
71
  - GitHub Actions CI run 33323925088 passed on 2026-08-30 for Linux, Windows, and macOS across
72
- Python 3.11-3.13, including real Python, Node, Rust, Maven, Gradle, and Composer fixture
72
+ Python 3.11-3.14, including real Python, Node, Rust, Maven, Gradle, and Composer fixture
73
73
  toolchains, for commit `a86da2c`.
74
74
  - Docs run 33323925074 passed for the same commit.
75
75
 
@@ -13,7 +13,7 @@ Required fields:
13
13
  ```json
14
14
  {
15
15
  "schema_version": "1.1",
16
- "tool_version": "1.2.1",
16
+ "tool_version": "1.2.2",
17
17
  "command": "check",
18
18
  "status": "success",
19
19
  "exit_code": 0,
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "ai-dev-cli-tools"
7
- version = "1.2.1"
7
+ version = "1.2.2"
8
8
  description = "Cross-platform CLI helpers that give AI coding agents concise, deterministic development reports."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -19,6 +19,7 @@ classifiers = [
19
19
  "Programming Language :: Python :: 3.11",
20
20
  "Programming Language :: Python :: 3.12",
21
21
  "Programming Language :: Python :: 3.13",
22
+ "Programming Language :: Python :: 3.14",
22
23
  "Topic :: Software Development :: Quality Assurance",
23
24
  ]
24
25
  dependencies = [
@@ -1,4 +1,4 @@
1
- # Reproducible development-tool baseline for the 1.0 release line.
1
+ # Reproducible development-tool baseline for the 1.2 release line.
2
2
  # Install with: python -m pip install -c requirements-dev.lock -e ".[dev]"
3
3
  build==1.6.0
4
4
  coverage==7.15.1
@@ -8,7 +8,7 @@ DOCS = ROOT / ".github" / "workflows" / "docs.yml"
8
8
  RELEASE = ROOT / ".github" / "workflows" / "release.yml"
9
9
  PUBLISH = ROOT / ".github" / "workflows" / "publish-pypi.yml"
10
10
  REQUIRED_OS = ["ubuntu-latest", "windows-latest", "macos-latest"]
11
- REQUIRED_PYTHON = ['"3.11"', '"3.12"', '"3.13"']
11
+ REQUIRED_PYTHON = ['"3.11"', '"3.12"', '"3.13"', '"3.14"']
12
12
  REQUIRED_TESTPYPI_RELEASE_TOKENS = [
13
13
  'tags:',
14
14
  '- "v*"',
@@ -1,3 +1,3 @@
1
1
  """AI Dev CLI Tools."""
2
2
 
3
- __version__ = "1.2.1"
3
+ __version__ = "1.2.2"
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import fnmatch
3
4
  import hashlib
4
5
  import json
5
6
  import os
@@ -104,16 +105,45 @@ def repository_fingerprint(
104
105
  return hashlib.sha256(payload.encode("utf-8")).hexdigest()
105
106
 
106
107
 
108
+ def _is_ignored_name(name: str, ignored: set[str]) -> bool:
109
+ if name in ignored:
110
+ return True
111
+ return any(
112
+ fnmatch.fnmatch(name, pat)
113
+ or (
114
+ pat in {".venv", "venv"}
115
+ and (
116
+ name.startswith(f"{pat}-")
117
+ or name.startswith(f"{pat}_")
118
+ or (len(name) > len(pat) and name.startswith(pat))
119
+ )
120
+ )
121
+ for pat in ignored
122
+ )
123
+
124
+
125
+ def is_ignored_path(relative: str, ignored: set[str]) -> bool:
126
+ parts = relative.split("/")
127
+ if any(_is_ignored_name(part, ignored) for part in parts):
128
+ return True
129
+ return any(
130
+ relative == item
131
+ or relative.startswith(f"{item}/")
132
+ or fnmatch.fnmatch(relative, item)
133
+ or fnmatch.fnmatch(Path(relative).name, item)
134
+ for item in ignored
135
+ )
136
+
137
+
107
138
  def _project_files(root: Path) -> list[Path]:
108
139
  ignored = {item.replace(chr(92), "/").strip("/") for item in DEFAULT_IGNORES}
109
- ignored_names = {Path(item).name for item in ignored}
110
140
  files: list[Path] = []
111
141
  for current, directories, names in os.walk(root, followlinks=False):
112
142
  current_path = Path(current)
113
143
  directories[:] = sorted(
114
144
  name
115
145
  for name in directories
116
- if name not in ignored_names
146
+ if not _is_ignored_name(name, ignored)
117
147
  and not (current_path.name in {"test", "tests"} and name == "fixtures")
118
148
  )
119
149
  for name in sorted(names):
@@ -121,7 +151,7 @@ def _project_files(root: Path) -> list[Path]:
121
151
  if path.is_symlink() or not path.is_file():
122
152
  continue
123
153
  relative = path.relative_to(root).as_posix()
124
- if any(relative == item or relative.startswith(item + "/") for item in ignored):
154
+ if is_ignored_path(relative, ignored):
125
155
  continue
126
156
  files.append(path)
127
157
  return files
@@ -224,7 +224,7 @@ def build_parser() -> argparse.ArgumentParser:
224
224
  benchmark_run.add_argument("--cache-state", choices=["cold", "warm"], default="cold")
225
225
  benchmark_run.add_argument("--timeout", type=int, default=300)
226
226
  benchmark_run.add_argument(
227
- "--client", choices=["codex", "claude", "cursor", "generic"], default="generic"
227
+ "--client", choices=["codex", "claude", "cursor", "gemini", "generic"], default="generic"
228
228
  )
229
229
  benchmark_compare = benchmark_sub.add_parser("compare")
230
230
  benchmark_compare.add_argument("baseline", type=Path)
@@ -266,7 +266,10 @@ def build_parser() -> argparse.ArgumentParser:
266
266
  integrations_sub = integrations.add_subparsers(dest="integrations_command", required=True)
267
267
  integrations_install = integrations_sub.add_parser("install")
268
268
  integrations_install.add_argument(
269
- "client", nargs="?", choices=["all", "codex", "claude", "cursor", "generic"], default="all"
269
+ "client",
270
+ nargs="?",
271
+ choices=["all", "codex", "claude", "cursor", "gemini", "generic"],
272
+ default="all",
270
273
  )
271
274
  integrations_install.add_argument("--force", action="store_true")
272
275
 
@@ -282,10 +285,10 @@ def build_parser() -> argparse.ArgumentParser:
282
285
  telemetry_import = telemetry_sub.add_parser("import")
283
286
  telemetry_import.add_argument("input", type=Path)
284
287
  telemetry_import.add_argument(
285
- "--client", choices=["codex", "claude", "cursor", "generic"], required=True
288
+ "--client", choices=["codex", "claude", "cursor", "gemini", "generic"], required=True
286
289
  )
287
290
  telemetry_import.add_argument(
288
- "--format", choices=["auto", "openai", "anthropic", "generic"], default="auto"
291
+ "--format", choices=["auto", "openai", "anthropic", "gemini", "generic"], default="auto"
289
292
  )
290
293
  telemetry_import.add_argument("--pricing", type=Path)
291
294
  telemetry_import.add_argument("--phase", default="")
@@ -319,14 +322,14 @@ def build_parser() -> argparse.ArgumentParser:
319
322
  telemetry_pricing_import = telemetry_pricing_sub.add_parser("import")
320
323
  telemetry_pricing_import.add_argument("input", type=Path)
321
324
  telemetry_pricing_import.add_argument(
322
- "--provider", choices=["openai", "anthropic", "generic"], required=True
325
+ "--provider", choices=["openai", "anthropic", "gemini", "generic"], required=True
323
326
  )
324
327
  telemetry_pricing_import.add_argument("--version", required=True)
325
328
  telemetry_pricing_import.add_argument("--source", default="")
326
329
  telemetry_pricing_import.add_argument("--no-activate", action="store_false", dest="activate")
327
330
  telemetry_pricing_activate = telemetry_pricing_sub.add_parser("activate")
328
331
  telemetry_pricing_activate.add_argument(
329
- "provider", choices=["openai", "anthropic", "generic"]
332
+ "provider", choices=["openai", "anthropic", "gemini", "generic"]
330
333
  )
331
334
  telemetry_pricing_activate.add_argument("version")
332
335
 
@@ -344,7 +347,7 @@ def build_parser() -> argparse.ArgumentParser:
344
347
  default="minimal",
345
348
  )
346
349
  task.add_argument(
347
- "--client", choices=["codex", "claude", "cursor", "generic"], default="generic"
350
+ "--client", choices=["codex", "claude", "cursor", "gemini", "generic"], default="generic"
348
351
  )
349
352
  task.add_argument("--ack-state")
350
353
  task.add_argument("--no-persist-ack", action="store_false", dest="persist_ack")
@@ -14,11 +14,13 @@ DEFAULT_IGNORES = {
14
14
  ".pytest_cache",
15
15
  ".ruff_cache",
16
16
  ".venv",
17
+ ".venv*",
17
18
  "__pycache__",
18
19
  "build",
19
20
  "dist",
20
21
  "node_modules",
21
22
  "venv",
23
+ "venv*",
22
24
  }
23
25
 
24
26
 
@@ -113,6 +113,16 @@ def _ignored(rel: Path, patterns: set[str]) -> bool:
113
113
  or text.startswith(f"{pattern}/")
114
114
  or fnmatch.fnmatch(text, pattern)
115
115
  or fnmatch.fnmatch(rel.name, pattern)
116
+ or any(fnmatch.fnmatch(part, pattern) for part in parts)
117
+ or any(
118
+ pattern in {".venv", "venv"}
119
+ and (
120
+ part.startswith(f"{pattern}-")
121
+ or part.startswith(f"{pattern}_")
122
+ or (len(part) > len(pattern) and part.startswith(pattern))
123
+ )
124
+ for part in parts
125
+ )
116
126
  for pattern in normalized_patterns
117
127
  )
118
128
 
@@ -7,7 +7,7 @@ from pathlib import Path
7
7
  from ai_dev_tools.models.report import Artifact, Issue, Report
8
8
  from ai_dev_tools.token_efficiency import client_profile
9
9
 
10
- CLIENTS = ("codex", "claude", "cursor", "generic")
10
+ CLIENTS = ("codex", "claude", "cursor", "gemini", "generic")
11
11
 
12
12
 
13
13
  def install_integrations(project_root: Path, client: str = "all", *, force: bool = False) -> Report:
@@ -97,6 +97,7 @@ def _configuration(root: Path, client: str) -> tuple[Path, str]:
97
97
  paths = {
98
98
  "claude": root / ".mcp.json",
99
99
  "cursor": root / ".cursor" / "mcp.json",
100
+ "gemini": root / ".gemini" / "settings.json",
100
101
  "generic": root / "mcp.ai-dev.json",
101
102
  }
102
103
  return paths[client], json.dumps(payload, indent=2) + "\n"
@@ -165,7 +165,7 @@ class LocalMcpServer:
165
165
  },
166
166
  "client": {
167
167
  "type": "string",
168
- "enum": ["codex", "claude", "cursor", "generic"],
168
+ "enum": ["codex", "claude", "cursor", "gemini", "generic"],
169
169
  "default": "generic",
170
170
  },
171
171
  "acknowledged_state": {"type": "string", "maxLength": 64},
@@ -189,7 +189,7 @@ class LocalMcpServer:
189
189
  {
190
190
  "client": {
191
191
  "type": "string",
192
- "enum": ["codex", "claude", "cursor", "generic"],
192
+ "enum": ["codex", "claude", "cursor", "gemini", "generic"],
193
193
  },
194
194
  "input_tokens": {"type": "integer", "minimum": 0},
195
195
  "cached_input_tokens": {
@@ -579,7 +579,10 @@ class LocalMcpServer:
579
579
  {"default", "minimal", "debug", "review", "implement", "docs", "full"},
580
580
  )
581
581
  client = _choice(
582
- arguments, "client", "generic", {"codex", "claude", "cursor", "generic"}
582
+ arguments,
583
+ "client",
584
+ "generic",
585
+ {"codex", "claude", "cursor", "gemini", "generic"},
583
586
  )
584
587
  _require_project(self.project_root)
585
588
  from ai_dev_tools.runners.task import TaskOptions, run_prepare_task
@@ -647,7 +650,10 @@ class LocalMcpServer:
647
650
  },
648
651
  )
649
652
  client = _choice(
650
- arguments, "client", "generic", {"codex", "claude", "cursor", "generic"}
653
+ arguments,
654
+ "client",
655
+ "generic",
656
+ {"codex", "claude", "cursor", "gemini", "generic"},
651
657
  )
652
658
  _require_project(self.project_root)
653
659
  from ai_dev_tools.telemetry import (