ai-dev-cli-tools 1.0.0__tar.gz → 1.2.1__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 (308) hide show
  1. ai_dev_cli_tools-1.2.1/.github/workflows/ci.yml +131 -0
  2. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/.github/workflows/docs.yml +2 -2
  3. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/.github/workflows/publish-pypi.yml +5 -2
  4. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/.github/workflows/release.yml +10 -11
  5. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/.gitignore +1 -0
  6. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/CHANGELOG.md +77 -0
  7. ai_dev_cli_tools-1.2.1/CONTRIBUTING.md +44 -0
  8. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/Makefile +4 -1
  9. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/PKG-INFO +97 -8
  10. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/README.md +93 -7
  11. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/TODO.md +4 -2
  12. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/ai.ps1 +1 -1
  13. ai_dev_cli_tools-1.2.1/ai.sh +3 -0
  14. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/AGENT_EFFICIENCY_ROADMAP.md +11 -3
  15. ai_dev_cli_tools-1.2.1/docs/AGENT_INTEGRATION_CONTRACT.md +79 -0
  16. ai_dev_cli_tools-1.2.1/docs/AGENT_WORKFLOW.md +77 -0
  17. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/ARCHITECTURE.md +14 -4
  18. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/BENCHMARKS.md +35 -2
  19. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/CACHE_AND_INDEX.md +24 -0
  20. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/CONTEXT_BUILDER.md +18 -0
  21. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/DISTRIBUTION.md +8 -5
  22. ai_dev_cli_tools-1.2.1/docs/INTEGRATIONS_AND_DASHBOARD.md +169 -0
  23. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/MCP_SERVER.md +13 -3
  24. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/OBSERVATION_LIFECYCLE.md +14 -1
  25. ai_dev_cli_tools-1.2.1/docs/PROJECT_COMPLETE.md +34 -0
  26. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/RELEASE_CHECKLIST.md +7 -1
  27. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/REPORT_SCHEMA.md +32 -2
  28. ai_dev_cli_tools-1.2.1/examples/benchmarks/agent-adaptive-context.json +32 -0
  29. ai_dev_cli_tools-1.2.1/examples/benchmarks/agent-context-acknowledgement.json +12 -0
  30. ai_dev_cli_tools-1.2.1/examples/benchmarks/agent-corpus.json +22 -0
  31. ai_dev_cli_tools-1.2.1/examples/benchmarks/agent-feedback-delta.json +32 -0
  32. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/pyproject.toml +14 -2
  33. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/requirements-dev.lock +1 -0
  34. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/scripts/benchmark_agent_workflow.py +209 -7
  35. ai_dev_cli_tools-1.2.1/scripts/benchmark_mcp_context_ack.py +110 -0
  36. ai_dev_cli_tools-1.2.1/scripts/dev.py +164 -0
  37. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/scripts/test_installed_package.py +4 -1
  38. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/scripts/validate_ci.py +25 -2
  39. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/scripts/validate_release.py +8 -3
  40. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/scripts/verify_published_package.py +2 -0
  41. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/__init__.py +1 -1
  42. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/__main__.py +4 -0
  43. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/cli.py +321 -3
  44. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/completion.py +17 -5
  45. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/config.py +46 -0
  46. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/context/adaptive.py +143 -0
  47. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/context/builder.py +163 -4
  48. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/context/incremental.py +36 -7
  49. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/context/mcp_delta.py +111 -0
  50. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/context/models.py +1 -0
  51. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/context/selection.py +9 -5
  52. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/context/tokens.py +49 -4
  53. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/dashboard.py +203 -0
  54. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/index_daemon_service.py +277 -0
  55. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/integrations.py +135 -0
  56. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/mcp_server.py +435 -10
  57. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/parsers/failures.py +64 -0
  58. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/reporters/progressive.py +27 -1
  59. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/reporters/sarif.py +100 -0
  60. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/benchmark.py +306 -4
  61. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/bootstrap.py +36 -3
  62. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/check.py +87 -5
  63. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/check_selection.py +8 -0
  64. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/feedback.py +73 -18
  65. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/runners/feedback_delta.py +181 -0
  66. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/index.py +15 -0
  67. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/runners/index_daemon.py +89 -0
  68. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/performance.py +5 -1
  69. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/runners/plan.py +239 -0
  70. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/runners/policy.py +33 -0
  71. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/runners/task.py +181 -0
  72. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runtime/runner.py +140 -34
  73. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runtime/supervisor.py +81 -16
  74. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/security/execution.py +126 -0
  75. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/semantic.py +195 -0
  76. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/semantic_backends.py +253 -0
  77. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/telemetry.py +496 -0
  78. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/telemetry_optimizer.py +509 -0
  79. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/telemetry_policy.py +540 -0
  80. ai_dev_cli_tools-1.2.1/src/ai_dev_tools/token_efficiency.py +231 -0
  81. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/utils/subprocess.py +4 -0
  82. ai_dev_cli_tools-1.2.1/tests/unit/test_adaptive_context.py +188 -0
  83. ai_dev_cli_tools-1.2.1/tests/unit/test_agent_plan.py +60 -0
  84. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_benchmark.py +20 -0
  85. ai_dev_cli_tools-1.2.1/tests/unit/test_benchmark_gate.py +166 -0
  86. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_check.py +2 -0
  87. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_check_plan.py +24 -0
  88. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_check_scheduler.py +1 -1
  89. ai_dev_cli_tools-1.2.1/tests/unit/test_context_mcp_delta.py +87 -0
  90. ai_dev_cli_tools-1.2.1/tests/unit/test_dev_launcher.py +66 -0
  91. ai_dev_cli_tools-1.2.1/tests/unit/test_execution_policy.py +50 -0
  92. ai_dev_cli_tools-1.2.1/tests/unit/test_failure_classification.py +60 -0
  93. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_feedback.py +32 -1
  94. ai_dev_cli_tools-1.2.1/tests/unit/test_feedback_delta.py +119 -0
  95. ai_dev_cli_tools-1.2.1/tests/unit/test_index_daemon.py +62 -0
  96. ai_dev_cli_tools-1.2.1/tests/unit/test_index_daemon_service.py +170 -0
  97. ai_dev_cli_tools-1.2.1/tests/unit/test_integrations_dashboard.py +173 -0
  98. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_mcp_server.py +205 -0
  99. ai_dev_cli_tools-1.2.1/tests/unit/test_new_cli_commands.py +197 -0
  100. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_performance.py +3 -0
  101. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_progressive_reports.py +25 -0
  102. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_release_scripts.py +10 -2
  103. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_report.py +1 -1
  104. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_runtime_runner.py +201 -4
  105. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_runtime_supervisor.py +59 -6
  106. ai_dev_cli_tools-1.2.1/tests/unit/test_sarif.py +55 -0
  107. ai_dev_cli_tools-1.2.1/tests/unit/test_semantic.py +88 -0
  108. ai_dev_cli_tools-1.2.1/tests/unit/test_semantic_backends.py +210 -0
  109. ai_dev_cli_tools-1.2.1/tests/unit/test_task.py +64 -0
  110. ai_dev_cli_tools-1.2.1/tests/unit/test_telemetry.py +134 -0
  111. ai_dev_cli_tools-1.2.1/tests/unit/test_telemetry_optimizer.py +192 -0
  112. ai_dev_cli_tools-1.2.1/tests/unit/test_telemetry_policy.py +335 -0
  113. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_token_accounting.py +6 -0
  114. ai_dev_cli_tools-1.0.0/.github/workflows/ci.yml +0 -71
  115. ai_dev_cli_tools-1.0.0/CONTRIBUTING.md +0 -19
  116. ai_dev_cli_tools-1.0.0/ai.sh +0 -3
  117. ai_dev_cli_tools-1.0.0/docs/AGENT_INTEGRATION_CONTRACT.md +0 -43
  118. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/LICENSE +0 -0
  119. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/SECURITY.md +0 -0
  120. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/ADAPTIVECHESSAI_FULL_CHECK_FAILURE_2026-08-30.md +0 -0
  121. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/ADAPTIVECHESSAI_PYCHARM_HEADLESS_INSPECTION_FAILURE_2026-08-30.md +0 -0
  122. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/ADDING_A_DETECTOR.md +0 -0
  123. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/ADDING_A_RUNNER.md +0 -0
  124. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/AGENT_COORDINATION.md +0 -0
  125. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/BOOTSTRAP.md +0 -0
  126. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/CHANGED_TEST_SELECTION.md +0 -0
  127. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/FLAKY_RETRIES.md +0 -0
  128. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/MONOREPO_SUPPORT.md +0 -0
  129. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/PERFORMANCE.md +0 -0
  130. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/RUNTIME.md +0 -0
  131. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/SEMANTIC_COMPRESSION.md +0 -0
  132. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/TOKEN_EFFICIENCY_RESEARCH.md +0 -0
  133. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/TOOL_OUTPUT_PARSERS.md +0 -0
  134. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/WARM_ENVIRONMENT.md +0 -0
  135. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/WATCH_MODE.md +0 -0
  136. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/benchmarks/agent-workflows-windows-py314-2026-08-11.json +0 -0
  137. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/docs/report-schema.json +0 -0
  138. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/agent-affected-workflow.json +0 -0
  139. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/agent-monorepo-workflow.json +0 -0
  140. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/agent-multiturn-workflow.json +0 -0
  141. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/agent-repair-workflow.json +0 -0
  142. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/pyproject.toml +0 -0
  143. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/src/__init__.py +0 -0
  144. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/src/orders.py +0 -0
  145. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/src/pricing.py +0 -0
  146. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/__init__.py +0 -0
  147. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_orders.py +0 -0
  148. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_pricing.py +0 -0
  149. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_1.py +0 -0
  150. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_10.py +0 -0
  151. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_11.py +0 -0
  152. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_12.py +0 -0
  153. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_2.py +0 -0
  154. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_3.py +0 -0
  155. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_4.py +0 -0
  156. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_5.py +0 -0
  157. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_6.py +0 -0
  158. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_7.py +0 -0
  159. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_8.py +0 -0
  160. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/tests/test_unrelated_9.py +0 -0
  161. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/__init__.py +0 -0
  162. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/__init__.py +0 -0
  163. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/pyproject.toml +0 -0
  164. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/src/__init__.py +0 -0
  165. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/src/billing.py +0 -0
  166. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/tests/__init__.py +0 -0
  167. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/billing/tests/test_billing.py +0 -0
  168. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/__init__.py +0 -0
  169. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/pyproject.toml +0 -0
  170. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/src/__init__.py +0 -0
  171. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/src/catalog.py +0 -0
  172. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/tests/__init__.py +0 -0
  173. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/fixtures/agent-workflow/workspaces/catalog/tests/test_catalog.py +0 -0
  174. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/mcp-recurring-status.json +0 -0
  175. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/output-budget-smoke.json +0 -0
  176. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/benchmarks/symbol-diff-context.json +0 -0
  177. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/examples/consume_json_report.py +0 -0
  178. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/scripts/__init__.py +0 -0
  179. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/scripts/benchmark_mcp_status.py +0 -0
  180. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/scripts/benchmark_symbol_diff.py +0 -0
  181. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/cache/__init__.py +0 -0
  182. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/cache/graph.py +0 -0
  183. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/cache/prompt_layout.py +0 -0
  184. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/cache/repository.py +0 -0
  185. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/cache/validation.py +0 -0
  186. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/context/__init__.py +0 -0
  187. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/context/compression.py +0 -0
  188. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/context/profiles.py +0 -0
  189. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/context/refinement.py +0 -0
  190. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/context/retrieval.py +0 -0
  191. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/context/symbols.py +0 -0
  192. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/detectors/__init__.py +0 -0
  193. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/detectors/environment.py +0 -0
  194. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/detectors/project.py +0 -0
  195. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/detectors/repository_map.py +0 -0
  196. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/detectors/runtime.py +0 -0
  197. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/detectors/workspaces.py +0 -0
  198. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/git/__init__.py +0 -0
  199. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/git/inspect.py +0 -0
  200. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/git/symbol_diff.py +0 -0
  201. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/models/__init__.py +0 -0
  202. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/models/report.py +0 -0
  203. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/models/workspace.py +0 -0
  204. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/parsers/__init__.py +0 -0
  205. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/parsers/logs.py +0 -0
  206. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/parsers/registry.py +0 -0
  207. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/reporters/__init__.py +0 -0
  208. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/reporters/writer.py +0 -0
  209. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/__init__.py +0 -0
  210. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/baseline.py +0 -0
  211. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/bootstrap_models.py +0 -0
  212. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/bootstrap_strategies.py +0 -0
  213. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/cache.py +0 -0
  214. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/check_checkpoint.py +0 -0
  215. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/check_models.py +0 -0
  216. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/check_scheduler.py +0 -0
  217. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/coordination.py +0 -0
  218. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/diagnostics.py +0 -0
  219. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/environment_state.py +0 -0
  220. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/finish.py +0 -0
  221. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/flaky.py +0 -0
  222. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/focused.py +0 -0
  223. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/observations.py +0 -0
  224. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runners/watch.py +0 -0
  225. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/runtime/__init__.py +0 -0
  226. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/security/__init__.py +0 -0
  227. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/security/secrets.py +0 -0
  228. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/source_symbols.py +0 -0
  229. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/src/ai_dev_tools/utils/__init__.py +0 -0
  230. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/cargo-fail.log +0 -0
  231. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/coverage-ok.log +0 -0
  232. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/eslint-fail.log +0 -0
  233. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/gradle-ok.log +0 -0
  234. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/jest-fail.log +0 -0
  235. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/maven-fail.log +0 -0
  236. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/maven-localized-fail.log +0 -0
  237. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/mypy-fail.log +0 -0
  238. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/phpunit-fail.log +0 -0
  239. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/pytest-9-ok.log +0 -0
  240. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/pytest-fail.log +0 -0
  241. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/pytest-multiple-failures.log +0 -0
  242. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/ruff-fail.log +0 -0
  243. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/ruff-warning.log +0 -0
  244. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/tsc-fail.log +0 -0
  245. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/logs/vitest-ok.log +0 -0
  246. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/monorepo-mixed/package.json +0 -0
  247. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/monorepo-mixed/packages/api/pyproject.toml +0 -0
  248. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/monorepo-mixed/packages/api/tests/test_smoke.py +0 -0
  249. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/monorepo-mixed/packages/web/package.json +0 -0
  250. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/monorepo-mixed/packages/web/test.js +0 -0
  251. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/monorepo-mixed/services/worker/Cargo.toml +0 -0
  252. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/monorepo-mixed/services/worker/src/lib.rs +0 -0
  253. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/gradle/build.gradle +0 -0
  254. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/gradle/gradlew.bat +0 -0
  255. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/maven/mvnw.cmd +0 -0
  256. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/maven/pom.xml +0 -0
  257. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/node-npm/package-lock.json +0 -0
  258. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/node-npm/package.json +0 -0
  259. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/node-pnpm/package.json +0 -0
  260. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/node-pnpm/pnpm-lock.yaml +0 -0
  261. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/node-yarn/package.json +0 -0
  262. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/node-yarn/yarn.lock +0 -0
  263. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/php-composer/composer.json +0 -0
  264. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/python-pip/pyproject.toml +0 -0
  265. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/python-pip/requirements.txt +0 -0
  266. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/python-poetry/pyproject.toml +0 -0
  267. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/python-uv/pyproject.toml +0 -0
  268. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/python-uv/uv.lock +0 -0
  269. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/fixtures/projects/rust/Cargo.toml +0 -0
  270. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/integration/test_adaptive_chess_regression.py +0 -0
  271. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/integration/test_cli.py +0 -0
  272. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/integration/test_cross_platform_paths.py +0 -0
  273. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/integration/test_git.py +0 -0
  274. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/integration/test_toolchain_e2e.py +0 -0
  275. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_baseline.py +0 -0
  276. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_bootstrap.py +0 -0
  277. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_cache.py +0 -0
  278. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_cli_more.py +0 -0
  279. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_completion.py +0 -0
  280. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_config.py +0 -0
  281. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_context_builder.py +0 -0
  282. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_context_compression.py +0 -0
  283. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_context_profiles.py +0 -0
  284. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_context_refinement.py +0 -0
  285. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_context_retrieval.py +0 -0
  286. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_context_symbols.py +0 -0
  287. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_coordination.py +0 -0
  288. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_diagnostics.py +0 -0
  289. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_doctor.py +0 -0
  290. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_environment_state.py +0 -0
  291. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_finish.py +0 -0
  292. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_flaky.py +0 -0
  293. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_logs.py +0 -0
  294. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_more_coverage.py +0 -0
  295. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_more_symbol_adapters.py +0 -0
  296. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_observations.py +0 -0
  297. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_package_smoke.py +0 -0
  298. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_prompt_layout.py +0 -0
  299. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_repository_map.py +0 -0
  300. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_runner_failures.py +0 -0
  301. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_runtime.py +0 -0
  302. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_scan.py +0 -0
  303. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_secret_boundaries.py +0 -0
  304. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_secrets.py +0 -0
  305. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_symbol_diff.py +0 -0
  306. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_tool_parsers.py +0 -0
  307. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_watch.py +0 -0
  308. {ai_dev_cli_tools-1.0.0 → ai_dev_cli_tools-1.2.1}/tests/unit/test_workspaces.py +0 -0
@@ -0,0 +1,131 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ jobs:
8
+ launcher-smoke:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
12
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
13
+ with:
14
+ python-version: "3.13"
15
+ - run: python scripts/dev.py --diagnose
16
+ - run: python scripts/dev.py --bootstrap-only
17
+ - run: python scripts/dev.py --no-bootstrap --version
18
+
19
+ test:
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ os: [ubuntu-latest, windows-latest, macos-latest]
24
+ python-version: ["3.11", "3.12", "3.13"]
25
+ runs-on: ${{ matrix.os }}
26
+ steps:
27
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
28
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
29
+ with:
30
+ python-version: ${{ matrix.python-version }}
31
+ - run: python -m pip install --upgrade pip
32
+ - run: python -m pip install -c requirements-dev.lock -e ".[dev]"
33
+ - run: ruff check .
34
+ - run: mypy src tests
35
+ - run: coverage run -m pytest
36
+ - run: coverage report --fail-under=90
37
+ - run: python -m build
38
+ - run: python scripts/test_installed_package.py
39
+ - run: python scripts/validate_ci.py
40
+ - run: ai-dev --version
41
+ - run: ai-dev doctor --json
42
+ - run: ai-dev scan --json
43
+ - run: ai-dev bootstrap --explain --json
44
+ - run: ai-dev capabilities --json
45
+ - run: ai-dev context build --explain --json
46
+ - run: ai-dev git inspect --json
47
+ - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
48
+ if: always()
49
+ with:
50
+ name: ai-dev-reports-${{ matrix.os }}-${{ matrix.python-version }}
51
+ path: |
52
+ .ai/reports
53
+ .ai/logs
54
+ if-no-files-found: ignore
55
+ toolchain-e2e:
56
+ runs-on: ubuntu-latest
57
+ steps:
58
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
59
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
60
+ with:
61
+ python-version: "3.13"
62
+ - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
63
+ with:
64
+ node-version: "22"
65
+ - uses: actions/setup-java@dd06d9cba3e5552c54d9f8ea23572deb30010f7c # v6.0.0
66
+ with:
67
+ distribution: temurin
68
+ java-version: "17"
69
+ - uses: dtolnay/rust-toolchain@4360b52568e2003a75bf9bc1d59f33a8e3fc893c # stable 2026-08-31
70
+ - uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2
71
+ with:
72
+ php-version: "8.3"
73
+ tools: composer
74
+ - uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0
75
+ with:
76
+ gradle-version: "8.10"
77
+ - run: python -m pip install -c requirements-dev.lock -e ".[dev]"
78
+ - name: Execute real fixture toolchains
79
+ env:
80
+ RUN_TOOLCHAIN_E2E: "1"
81
+ E2E_TOOLCHAINS: python,node,rust,maven,gradle,php
82
+ run: python -m pytest tests/integration/test_toolchain_e2e.py -q
83
+
84
+ agent-corpus:
85
+ runs-on: ubuntu-latest
86
+ steps:
87
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
88
+ with:
89
+ persist-credentials: false
90
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
91
+ with:
92
+ python-version: "3.13"
93
+ - run: python -m pip install -c requirements-dev.lock -e ".[dev]"
94
+ - name: Run real-agent regression corpus
95
+ run: >-
96
+ ai-dev benchmark corpus
97
+ --manifest examples/benchmarks/agent-corpus.json
98
+ --trials 3
99
+ --timeout 60
100
+ - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
101
+ if: always()
102
+ with:
103
+ name: agent-corpus-results
104
+ path: .ai/benchmarks
105
+ if-no-files-found: error
106
+
107
+ agent-report:
108
+ runs-on: ubuntu-latest
109
+ permissions:
110
+ contents: read
111
+ security-events: write
112
+ steps:
113
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
114
+ with:
115
+ fetch-depth: 0
116
+ persist-credentials: false
117
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
118
+ with:
119
+ python-version: "3.13"
120
+ - run: python -m pip install -c requirements-dev.lock -e ".[dev]"
121
+ - name: Build bounded agent plan
122
+ run: ai-dev plan --task "Review this commit" --json
123
+ - name: Export SARIF
124
+ run: ai-dev sarif --input .ai/reports/agent-plan.json --output .ai/reports/ai-dev.sarif
125
+ - name: Add agent plan to job summary
126
+ run: cat .ai/reports/agent-plan.md >> "$GITHUB_STEP_SUMMARY"
127
+ - name: Upload SARIF to GitHub code scanning
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
130
+ with:
131
+ sarif_file: .ai/reports/ai-dev.sarif
@@ -8,8 +8,8 @@ jobs:
8
8
  docs:
9
9
  runs-on: ubuntu-latest
10
10
  steps:
11
- - uses: actions/checkout@v4
12
- - uses: actions/setup-python@v5
11
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
12
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
13
13
  with:
14
14
  python-version: "3.12"
15
15
  - run: python -m pip install -c requirements-dev.lock -e ".[dev]"
@@ -10,6 +10,7 @@ permissions:
10
10
 
11
11
  jobs:
12
12
  validate-release:
13
+ if: github.event.release.prerelease == false
13
14
  name: Validate manually promoted release artifacts
14
15
  runs-on: ubuntu-latest
15
16
  steps:
@@ -36,7 +37,7 @@ jobs:
36
37
  python -m twine check dist/*
37
38
  python scripts/validate_release.py --tag "$RELEASE_TAG" --dist dist
38
39
  - name: Upload validated production artifact
39
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
40
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
40
41
  with:
41
42
  name: pypi-distributions
42
43
  path: dist/
@@ -44,6 +45,7 @@ jobs:
44
45
  retention-days: 7
45
46
 
46
47
  publish-pypi:
48
+ if: github.event.release.prerelease == false
47
49
  name: Publish manually approved release to PyPI
48
50
  needs: validate-release
49
51
  runs-on: ubuntu-latest
@@ -54,7 +56,7 @@ jobs:
54
56
  id-token: write
55
57
  steps:
56
58
  - name: Download validated production artifact
57
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
59
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
58
60
  with:
59
61
  name: pypi-distributions
60
62
  path: dist/
@@ -64,6 +66,7 @@ jobs:
64
66
  packages-dir: dist/
65
67
 
66
68
  verify-pypi:
69
+ if: github.event.release.prerelease == false
67
70
  name: Verify PyPI pipx installation
68
71
  needs: publish-pypi
69
72
  runs-on: ubuntu-latest
@@ -31,7 +31,7 @@ jobs:
31
31
  python scripts/validate_release.py --tag "$GITHUB_REF_NAME" --dist dist
32
32
  python scripts/test_installed_package.py
33
33
  - name: Upload immutable distribution artifact
34
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
34
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
35
35
  with:
36
36
  name: python-package-distributions
37
37
  path: dist/
@@ -49,7 +49,7 @@ jobs:
49
49
  id-token: write
50
50
  steps:
51
51
  - name: Download distribution artifact
52
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
52
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
53
53
  with:
54
54
  name: python-package-distributions
55
55
  path: dist/
@@ -88,17 +88,16 @@ jobs:
88
88
  with:
89
89
  persist-credentials: false
90
90
  - name: Download TestPyPI-verified distribution artifact
91
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
91
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
92
92
  with:
93
93
  name: python-package-distributions
94
94
  path: dist/
95
- - name: Create draft GitHub release for manual PyPI promotion
95
+ - name: Create RC prerelease or stable promotion draft
96
96
  env:
97
97
  GH_TOKEN: ${{ github.token }}
98
- run: >-
99
- gh release create "$GITHUB_REF_NAME"
100
- dist/*
101
- --draft
102
- --verify-tag
103
- --generate-notes
104
- --title "ai-dev $GITHUB_REF_NAME"
98
+ run: |
99
+ if [[ "$GITHUB_REF_NAME" == *-rc.* ]]; then
100
+ gh release create "$GITHUB_REF_NAME" dist/* --prerelease --verify-tag --generate-notes --title "ai-dev $GITHUB_REF_NAME"
101
+ else
102
+ gh release create "$GITHUB_REF_NAME" dist/* --draft --verify-tag --generate-notes --title "ai-dev $GITHUB_REF_NAME"
103
+ fi
@@ -6,6 +6,7 @@
6
6
  .ai/logs/
7
7
  .ai/performance/
8
8
  .ai/reports/
9
+ .ai/token-efficiency/
9
10
  .ai/release-venv/
10
11
  .coverage
11
12
  .mypy_cache/
@@ -1,5 +1,82 @@
1
1
  # Changelog
2
2
 
3
+ ## Unreleased
4
+
5
+ ## 1.2.1 - 2026-09-01
6
+
7
+ - Fix the blank local dashboard by preserving JavaScript newline escapes and resolving dashboard
8
+ containers explicitly instead of relying on browser-created globals.
9
+ - Show a visible status card when the API request or response fails, tolerate partial status
10
+ payloads, and render all dynamic dashboard values through safe text nodes.
11
+
12
+ ## 1.2.0 - 2026-09-01
13
+
14
+ - Complete the measured optimization loop with bounded latency samples, daily trends, aggregated
15
+ JSON/CSV export, and explicit human-approved adopt/keep/rollback benchmark decisions.
16
+ - Harden managed-process startup with an observable starting/failed handshake, unique retry
17
+ identities, bounded child-spawn backoff, and preserved masked failure diagnostics.
18
+ - Declare the planned product capability set complete and move the repository to compatibility,
19
+ security, dependency, platform, and regression maintenance.
20
+
21
+ - Add an evidence-based, read-only token optimizer with p50/p95 attribution, safe budget
22
+ recommendations, and accuracy-first cheaper-model routing suggestions.
23
+ - Allow provider usage records to include bounded phase, tool, task-kind, and boolean quality
24
+ evidence without storing prompts or responses.
25
+ - Add telemetry budgets scoped globally, per client, and per model; equal-window regression gates;
26
+ immediate MCP/CLI alerts; chronological session windows; and integrity-checked, versioned pricing
27
+ snapshots with explicit activation and cost provenance.
28
+ - Add bounded OpenAI, Anthropic, and generic provider-usage adapters, MCP `record_usage`,
29
+ idempotent JSON/JSONL imports, optional project-local pricing estimates, and per-client usage
30
+ totals in the CLI and loopback dashboard without storing model input or output content.
31
+ - Add one-shot `ai-dev task` and MCP `prepare_task` workflows that combine a bounded plan,
32
+ context references, validation preview, per-client acknowledgement state, and a measurable token
33
+ savings receipt; full file content is now an explicit opt-in on this path.
34
+ - Generate token-efficient Codex, Claude Code, Cursor, and generic client profiles, expose receipt
35
+ totals in the local dashboard, and optionally require provider-reported tokens in benchmark gates.
36
+ - Make performance snapshot filenames collision-resistant on coarse-resolution clocks so rapid
37
+ measurements remain immutable and compare against the intended baseline.
38
+ - Launch detached runtime supervisors through an isolated absolute-path bootstrap and preserve
39
+ bounded supervisor startup diagnostics instead of discarding early process failures.
40
+ - Add a cross-platform developer launcher with locked `.venv` bootstrapping, isolated quality gates,
41
+ workspace-local temp routing, and machine-readable Git/ACL/proxy diagnostics.
42
+ - Give detached runtime supervisors an absolute package import path so changing their working
43
+ directory cannot invalidate editable installs or relative `PYTHONPATH` entries.
44
+ - Bind managed-process startup and stop acknowledgements to the current control token, tolerate
45
+ slow CI startup handshakes, and release Windows project handles before publishing terminal state.
46
+ - Document the repository's required squash-merge workflow and post-merge `main` verification.
47
+ - Make benchmark corpus and comparison evidence IDs resolvable through `ai-dev explain`.
48
+ - Make index-daemon state writes resilient to transient Windows sharing violations and count
49
+ repository updates only when the indexed content fingerprint actually changes.
50
+ - Add explicit MCP `build_context` acknowledgements: clients can return `acknowledged_state` to
51
+ receive a compact unchanged-context receipt, while changed, partial, or unsafe states retain
52
+ the full live payload. `delta=false` always requests full context.
53
+ - Add deterministic adaptive context budgets and task-scoped incremental memory for agent turns.
54
+ - Require a configurable minimum token reduction in A/B release corpus gates.
55
+ - Add client-acknowledged feedback deltas that replace repeated successful validation and context
56
+ with fingerprinted receipts while retaining failures and warnings live.
57
+
58
+ ## 1.1.0 - 2026-08-31
59
+
60
+ Stable promotion of `1.1.0rc1` after cross-platform CI, benchmark regression gates, and a clean
61
+ TestPyPI installation smoke test.
62
+
63
+ - Add `plan` and MCP `plan_work` for bounded, preview-only implementation plans with scope,
64
+ dependencies, validation, risk, policy assessments, and stable evidence references.
65
+ - Add built-in Tree-sitter AST and LSP document-symbol backends alongside the local structural
66
+ fallback and semantic plugin contract.
67
+ - Add a detached, localhost-authenticated index daemon using native filesystem events, IPC
68
+ start/status/stop control, lifecycle state, and no periodic repository rescans.
69
+ - Classify command failures and retry only transient infrastructure failures while preserving the
70
+ first failure and recovery evidence.
71
+ - Add configurable command allow/deny prefixes and impact limits, enforced by checks, bootstrap,
72
+ and application startup, plus a preview-only `policy assess` command.
73
+ - Extend reproducible benchmarks with precision, recall, false negatives, iterations, files read,
74
+ reported token metrics, a versioned real-agent corpus, and enforceable regression gates.
75
+ - Add ready project-scoped MCP configurations for Codex, Claude Code, Cursor, and generic clients.
76
+ - Add a loopback-only local dashboard for index, semantic, cache, runtime, daemon, and error health.
77
+ - Add deterministic report-to-SARIF conversion and a GitHub Actions code-scanning summary job.
78
+ - Upgrade and SHA-pin supported GitHub Actions used by CI, docs, and publishing workflows.
79
+
3
80
  ## 1.0.0 - 2026-08-31
4
81
 
5
82
  - Stabilize the local CLI and report schema for the 1.0 release line.
@@ -0,0 +1,44 @@
1
+ # Contributing
2
+
3
+ Keep changes small, typed, tested, and conservative. Runtime code should avoid platform-specific assumptions and prefer `pathlib` for paths.
4
+
5
+ From a fresh checkout, one cross-platform command creates or refreshes the locked `.venv` and runs
6
+ every required gate without loading user-site packages:
7
+
8
+ ```bash
9
+ python scripts/dev.py --check
10
+ ```
11
+
12
+ Use `python scripts/dev.py --diagnose` to classify Python, workspace-temp, Git-metadata, and proxy
13
+ problems without installing anything. `DEV_GIT_METADATA` means the host or sandbox must grant write
14
+ access to `.git`; it is distinct from an existing-ref collision. `DEV_WORKSPACE_TEMP` means process
15
+ tests cannot safely use the project-local temp directory in the current execution environment.
16
+
17
+ The equivalent individual commands, when already inside the locked `.venv`, are:
18
+
19
+ ```bash
20
+ python -m pip install -c requirements-dev.lock -e ".[dev]"
21
+ python -m ruff check .
22
+ python -m mypy src tests scripts
23
+ python -m coverage run -m pytest
24
+ python -m coverage report --fail-under=90
25
+ python -m build
26
+ python scripts/validate_ci.py
27
+ python scripts/test_installed_package.py
28
+ git diff --check
29
+ ```
30
+
31
+ The installed package smoke test must use a built wheel, a clean virtual environment, and the installed `ai-dev` entrypoint. Do not replace it with editable install or `PYTHONPATH` smoke tests.
32
+
33
+ ## Pull requests
34
+
35
+ Keep each pull request focused and wait for the complete Linux, Windows, and macOS CI matrix.
36
+ The repository does not allow merge commits. After required checks pass, maintainers should use a
37
+ squash merge so `main` receives one descriptive commit, then delete the merged topic branch:
38
+
39
+ ```bash
40
+ gh pr merge <number> --squash --delete-branch
41
+ ```
42
+
43
+ Do not retry a rejected `--merge` operation or force-push `main`. Refresh the pull request state
44
+ before merging and verify the resulting squash commit's `main` CI run.
@@ -1,4 +1,7 @@
1
- .PHONY: test lint typecheck coverage build
1
+ .PHONY: check test lint typecheck coverage build
2
+
3
+ check:
4
+ python scripts/dev.py --check
2
5
 
3
6
  test:
4
7
  python -m pytest
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: ai-dev-cli-tools
3
- Version: 1.0.0
3
+ Version: 1.2.1
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
@@ -19,12 +19,15 @@ Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
20
  Classifier: Topic :: Software Development :: Quality Assurance
21
21
  Requires-Python: >=3.11
22
+ Requires-Dist: watchdog<7,>=4
22
23
  Provides-Extra: dev
23
24
  Requires-Dist: build>=1.2; extra == 'dev'
24
25
  Requires-Dist: coverage[toml]>=7.6; extra == 'dev'
25
26
  Requires-Dist: mypy>=1.11; extra == 'dev'
26
27
  Requires-Dist: pytest>=8.3; extra == 'dev'
27
28
  Requires-Dist: ruff>=0.6; extra == 'dev'
29
+ Provides-Extra: semantic
30
+ Requires-Dist: tree-sitter-language-pack>=0.9; extra == 'semantic'
28
31
  Provides-Extra: tokenizers
29
32
  Requires-Dist: tiktoken>=0.7; extra == 'tokenizers'
30
33
  Description-Content-Type: text/markdown
@@ -54,7 +57,7 @@ be safe for `ai-dev` to recreate.
54
57
 
55
58
  ```bash
56
59
  python -m pip install --upgrade pipx
57
- pipx install ai-dev-cli-tools==1.0.0
60
+ pipx install ai-dev-cli-tools==1.2.1
58
61
  ai-dev --help
59
62
  ```
60
63
 
@@ -64,9 +67,13 @@ and upgrade policy.
64
67
  For development:
65
68
 
66
69
  ```bash
67
- python -m pip install -c requirements-dev.lock -e ".[dev]"
70
+ python scripts/dev.py --check
68
71
  ```
69
72
 
73
+ This creates a locked, repository-local `.venv`, disables ambient user-site packages, and routes
74
+ temporary validation files through `.ai/tmp/dev`. Run `python scripts/dev.py --diagnose` for
75
+ machine-readable Git metadata, temp-directory, Python, and proxy diagnostics without installation.
76
+
70
77
  ## Windows
71
78
 
72
79
  ```powershell
@@ -93,15 +100,37 @@ ai-dev check --mode full --jobs 4
93
100
  ai-dev check --mode changed --policy feedback-first --resume
94
101
  ai-dev check --mode changed --compare main
95
102
  ai-dev check --mode changed --retry-flaky 1
103
+ ai-dev check --mode changed --retry-infra 1
104
+ ai-dev plan --task "implement rate limiting" --mode changed
105
+ ai-dev task --task "implement rate limiting" --client codex --json
96
106
  ai-dev index update
107
+ ai-dev index daemon start
108
+ ai-dev index daemon status
109
+ ai-dev index daemon stop
110
+ ai-dev semantic status
111
+ ai-dev semantic index --backend auto
112
+ ai-dev policy assess -- python -m pytest
113
+ ai-dev sarif --input .ai/reports/agent-plan.json
97
114
  ai-dev cache status
98
115
  ai-dev cache layout
99
116
  ai-dev baseline create main
100
117
  ai-dev baseline compare main
101
118
  ai-dev benchmark run --suite examples/benchmarks/output-budget-smoke.json --variant baseline
119
+ ai-dev benchmark corpus --manifest examples/benchmarks/agent-corpus.json --trials 3
120
+ ai-dev integrations install all
121
+ ai-dev dashboard serve --port 8765
122
+ ai-dev telemetry import response.json --client codex --format openai
123
+ ai-dev telemetry status --json
124
+ ai-dev telemetry optimize --min-sessions 5 --json
125
+ ai-dev telemetry export --format csv --output .ai/telemetry-exports/usage.csv --json
126
+ ai-dev telemetry gate --json
127
+ ai-dev telemetry pricing import pricing.json --provider openai --version 2026-09-01
128
+ ai-dev telemetry pricing activate openai 2026-09-01
102
129
  ai-dev explain issue:<id> --tail 100
103
130
  ai-dev explain --symbol "src/app.py#Application.run" --tail 100
104
131
  ai-dev feedback --task "fix authentication timeout"
132
+ ai-dev feedback --task "fix authentication timeout" --ack-state <state-fingerprint>
133
+ ai-dev feedback --task "fix authentication timeout" --no-delta # force the full payload
105
134
  ai-dev watch --mode changed --debounce 500
106
135
  ai-dev session status
107
136
  ai-dev bootstrap --if-needed
@@ -123,10 +152,12 @@ All commands support `--project`, `--json`, `--quiet`, `--help`, and `--version`
123
152
 
124
153
  ## Local MCP server
125
154
 
126
- `ai-dev mcp serve` exposes project status, compact feedback, bounded context, validation,
155
+ `ai-dev mcp serve` exposes project status, implementation planning, compact feedback, bounded context, validation,
127
156
  and progressive evidence as local structured tools for Codex-compatible MCP clients. The STDIO
128
157
  server is dependency-free, has no network listener, fixes all calls to one project root, and
129
- defaults validation to preview-only.
158
+ defaults validation to preview-only. After consuming a successful `build_context` response, a
159
+ client can return its `summary.delta.state_fingerprint` as `acknowledged_state`; an identical safe
160
+ state then becomes a compact receipt, while changed or unsafe context remains live.
130
161
 
131
162
  ```bash
132
163
  codex mcp add ai-dev -- ai-dev --project "/absolute/path/to/project" mcp serve
@@ -135,6 +166,9 @@ codex mcp add ai-dev -- ai-dev --project "/absolute/path/to/project" mcp serve
135
166
  See `docs/MCP_SERVER.md` for tool schemas, approvals, project-scoped configuration, and
136
167
  security boundaries.
137
168
 
169
+ For the recommended agent loop—plan, retrieve, implement, validate, and expand only failed
170
+ evidence—see `docs/AGENT_WORKFLOW.md`.
171
+
138
172
  For agents sharing a repository, `ai-dev agents add|claim|heartbeat|release|complete|status`
139
173
  maintains an atomic local task board with expiring leases and declared-path conflict detection.
140
174
  See `docs/AGENT_COORDINATION.md` for the workflow and safety limits.
@@ -170,6 +204,7 @@ ai-dev context build --retrieval auto --explain # explains retrieval or abstent
170
204
  ai-dev context build --tokenizer o200k_base --token-budget source=8000 --token-budget diffs=2000
171
205
  ai-dev context build --refine issue:<id> --refinement-rounds 2 --refinement-max-files 5
172
206
  ai-dev context build --compression conservative
207
+ ai-dev context build --adaptive # task-aware budget; uncertainty expands, explicit limits win
173
208
  ai-dev context build --include "src/**/*.py" --exclude "tests/fixtures/**"
174
209
  ai-dev context build --explain --json
175
210
  ```
@@ -180,6 +215,38 @@ Selective retrieval defaults to `auto`: focused includes or changed files can ab
180
215
 
181
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.
182
217
 
218
+ `ai-dev task` is the default one-shot handoff for an AI client. It combines the bounded plan,
219
+ selected context, and check preview while delivering file references instead of full content.
220
+ Use `--include-content` only when the consumer truly needs the bodies. The response includes a
221
+ state fingerprint and a token savings receipt; return that fingerprint with `--ack-state` only
222
+ 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
224
+ another's assumed context. Receipts remain local under `.ai/token-efficiency/`.
225
+
226
+ Provider-reported usage can be recorded through MCP `record_usage` or imported from a bounded,
227
+ project-local JSON/JSONL file with `ai-dev telemetry import`. OpenAI Responses, Anthropic, and a
228
+ stable generic envelope for Cursor or other clients are normalized without retaining prompt or
229
+ response content. `telemetry status` and the loopback dashboard aggregate input, cached input,
230
+ output, and reasoning tokens by client. Optional cost values are local estimates computed from
231
+ `.ai-dev/telemetry-pricing.json`; no changing provider price is hardcoded and no value is presented
232
+ as a provider invoice. See `docs/INTEGRATIONS_AND_DASHBOARD.md`.
233
+ Project-local `.ai-dev/telemetry-budgets.json` can enforce rolling aggregate limits globally,
234
+ per client, and per model, and compare two chronological session windows for token or cost
235
+ regressions. `ai-dev telemetry gate` returns a failing report for violations, while MCP
236
+ `record_usage` immediately returns the active alerts and read-only `usage_status` provides a
237
+ compact pre-flight check.
238
+
239
+ `telemetry optimize` calculates deterministic p50/p95 usage, latency, cache share, cost, and
240
+ quality attribution by client, model, phase, tool, task kind, and day. It recommends rolling token ceilings
241
+ with an explicit safety margin. Cheaper-model recommendations appear only when both models have
242
+ enough local quality samples, the candidate meets the configured accuracy target, complete
243
+ same-currency cost evidence proves a saving, and the allowed accuracy drop is respected. It never
244
+ switches a model or overwrites a policy. MCP clients can call the read-only `optimize_usage` tool
245
+ for the same report.
246
+ `telemetry export` writes only this aggregated evidence as JSON or CSV inside the project. It
247
+ excludes request IDs, prompts, responses, and repository content and refuses to overwrite an
248
+ existing file.
249
+
183
250
  Incremental mode stores the latest schema-versioned manifest plus up to 50 content-addressed
184
251
  historical manifests under `.ai/cache/`, and reports changed versus reused files. Pass
185
252
  `--since <context-id>` to compare against an explicitly retained context. Default limits are
@@ -194,7 +261,7 @@ Short reports are written to `.ai/reports/` as Markdown and JSON. Full command o
194
261
 
195
262
  JSON reports use schema `1.1` with `schema_version`, `tool_version`, `command`, `status`, `exit_code`, timestamps, `project_root`, `summary`, `issues`, `artifacts`, and `metadata`.
196
263
 
197
- `ai-dev feedback` combines Git changes, changed validation, incremental context, focused rerun hints, stage timings, and local session state into one compact agent protocol report. Its observation lifecycle keeps the current failure, unresolved warnings, or final verification inline while replacing superseded results with content-addressed IDs expandable through `ai-dev explain`; see `docs/OBSERVATION_LIFECYCLE.md`.
264
+ `ai-dev feedback` combines Git changes, changed validation, adaptive incremental context, focused rerun hints, stage timings, and local session state into one compact agent protocol report. Adaptive context remains local and deterministic, scopes unchanged-file memory to a normalized task fingerprint, broadens uncertain requests, and never overrides explicit limits. A client may acknowledge the previous `delta.state_fingerprint` through `--ack-state`; only then can identical successful feedback become a small receipt. This prevents one AI client from inheriting another client's assumed context. Failures and warnings always remain live, and `--no-delta` forces the complete response. Its observation lifecycle replaces superseded results with content-addressed IDs expandable through `ai-dev explain`; see `docs/OBSERVATION_LIFECYCLE.md`.
198
265
 
199
266
  Every expandable issue, check, file, snippet, diff, workspace, and artifact receives a stable local `evidence_id`. The report metadata lists references; `ai-dev explain <evidence-id> --tail 100` retrieves only that evidence. `ai-dev baseline create <name>` stores a compact local snapshot under `.ai/cache/baselines/`, and `baseline compare <name>` leads with new/resolved failures, issue codes, and status regressions. Pass `--compare <name>` to `check` or `context build` to apply that regression contract directly to the current report. Reproducible local A/B suites use benchmark run and benchmark compare; see docs/BENCHMARKS.md.
200
267
  Research-backed context and token-efficiency recommendations are documented in `docs/TOKEN_EFFICIENCY_RESEARCH.md`.
@@ -230,6 +297,12 @@ paths = ["node_modules", ".venv", "dist", "build"]
230
297
  [reports]
231
298
  directory = ".ai/reports"
232
299
  logs_directory = ".ai/logs"
300
+
301
+ [execution]
302
+ mode = "enforce"
303
+ maximum_impact = "high"
304
+ allow_prefixes = ["python -m pytest", "python -m ruff", "python -m mypy"]
305
+ deny_prefixes = ["git reset", "git clean"]
233
306
  ```
234
307
 
235
308
  Configuration takes precedence over auto detection. Invalid or unknown configuration is reported through `config_warnings` instead of crashing normal scans.
@@ -262,13 +335,25 @@ git diff --check
262
335
  | test affected | implemented |
263
336
  | test flaky / check --retry-flaky | implemented |
264
337
  | index status/update/rebuild | implemented |
338
+ | index daemon | implemented |
339
+ | plan / MCP plan_work | implemented |
340
+ | task / MCP prepare_task | implemented with reference-first delivery and token receipts |
341
+ | semantic status/index | implemented with built-in Tree-sitter, LSP, and provider plugins |
342
+ | policy assess / execution enforcement | implemented |
343
+ | sarif | implemented |
265
344
  | cache status/prune/clear/layout | implemented |
266
345
  | logs summarize | implemented |
267
346
  | context build | implemented |
268
347
  | diagnostics | implemented |
269
348
  | mcp serve | implemented |
270
349
  | watch | implemented |
271
- | benchmark run/compare | implemented |
350
+ | benchmark run/compare/gate/corpus | implemented |
351
+ | integrations install | implemented for Codex, Claude Code, Cursor, and generic MCP |
352
+ | dashboard status/serve | implemented, loopback-only |
353
+ | telemetry import/status and MCP record_usage | implemented, provider-reported usage only |
354
+ | telemetry gate/pricing snapshots and MCP usage_status | implemented, local and fail-closed |
355
+ | p50/p95 token optimizer and accuracy-first model recommendations | implemented, read-only |
356
+ | aggregated telemetry export and latency trends | implemented, content-free |
272
357
  | performance latest/compare | implemented |
273
358
  | capabilities | implemented |
274
359
  | git status | implemented |
@@ -281,6 +366,10 @@ git diff --check
281
366
 
282
367
  ## Scope Notes
283
368
 
369
+ The planned product capability set is complete as of 1.2.0. See
370
+ [`docs/PROJECT_COMPLETE.md`](docs/PROJECT_COMPLETE.md) for the maintenance boundary and the exact
371
+ acceptance evidence required for future changes.
372
+
284
373
  - Monorepo/workspace detection and per-subproject command routing: implemented.
285
374
  - Per-subproject check and bootstrap working directories: implemented.
286
375
  - Runtime requirement detection and version validation: implemented.
@@ -289,6 +378,6 @@ git diff --check
289
378
  - Auto-commit, auto-push, destructive cleanup, remote source transmission, and GUI are intentionally out of scope.
290
379
 
291
380
  ## Intentional Limits
292
- Version 1.0.0 does not reset, clean, commit, push, merge, clone organizations, synchronize repositories, delete containers, publish releases, or remove user files.
381
+ Version 1.2.0 does not reset, clean, commit, push, merge, clone organizations, synchronize repositories, delete containers, publish releases, or remove user files.
293
382
 
294
383
  Shell completion scripts are generated with `ai-dev completion bash|zsh|fish|powershell` and can be sourced or installed using the normal mechanism for the selected shell.