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.
- ai_dev_cli_tools-1.2.2/.github/dependabot.yml +12 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/.github/workflows/ci.yml +1 -1
- ai_dev_cli_tools-1.2.2/.github/workflows/codeql.yml +28 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/CHANGELOG.md +12 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/PKG-INFO +9 -6
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/README.md +7 -5
- ai_dev_cli_tools-1.2.2/SECURITY.md +36 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/AGENT_INTEGRATION_CONTRACT.md +1 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/BENCHMARKS.md +1 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/DISTRIBUTION.md +6 -6
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/INTEGRATIONS_AND_DASHBOARD.md +10 -2
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/MCP_SERVER.md +12 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/RELEASE_CHECKLIST.md +1 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/REPORT_SCHEMA.md +1 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/pyproject.toml +2 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/requirements-dev.lock +1 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/validate_ci.py +1 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/__init__.py +1 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/cache/repository.py +33 -3
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/cli.py +10 -7
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/config.py +2 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/repository_map.py +10 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/integrations.py +2 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/mcp_server.py +10 -4
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/parsers/logs.py +42 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/benchmark.py +1 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/check.py +15 -4
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/check_selection.py +21 -3
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/focused.py +19 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runtime/runner.py +24 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/telemetry.py +44 -5
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/telemetry_policy.py +1 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/token_efficiency.py +12 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_cache.py +14 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_check_plan.py +55 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_feedback.py +33 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_integrations_dashboard.py +21 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_mcp_server.py +4 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_new_cli_commands.py +43 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_report.py +1 -1
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_repository_map.py +18 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_runtime_runner.py +27 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_telemetry.py +55 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_tool_parsers.py +9 -0
- ai_dev_cli_tools-1.2.1/SECURITY.md +0 -6
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/.github/workflows/docs.yml +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/.github/workflows/publish-pypi.yml +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/.github/workflows/release.yml +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/.gitignore +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/CONTRIBUTING.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/LICENSE +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/Makefile +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/TODO.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/ai.ps1 +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/ai.sh +0 -0
- {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
- {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
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/ADDING_A_DETECTOR.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/ADDING_A_RUNNER.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/AGENT_COORDINATION.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/AGENT_EFFICIENCY_ROADMAP.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/AGENT_WORKFLOW.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/ARCHITECTURE.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/BOOTSTRAP.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/CACHE_AND_INDEX.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/CHANGED_TEST_SELECTION.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/CONTEXT_BUILDER.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/FLAKY_RETRIES.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/MONOREPO_SUPPORT.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/OBSERVATION_LIFECYCLE.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/PERFORMANCE.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/PROJECT_COMPLETE.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/RUNTIME.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/SEMANTIC_COMPRESSION.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/TOKEN_EFFICIENCY_RESEARCH.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/TOOL_OUTPUT_PARSERS.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/WARM_ENVIRONMENT.md +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/WATCH_MODE.md +0 -0
- {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
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/docs/report-schema.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-adaptive-context.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-affected-workflow.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-context-acknowledgement.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-corpus.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-feedback-delta.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-monorepo-workflow.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-multiturn-workflow.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/agent-repair-workflow.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/pyproject.toml +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/src/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/src/orders.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/src/pricing.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/tests/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/fixtures/agent-workflow/workspaces/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/mcp-recurring-status.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/output-budget-smoke.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/benchmarks/symbol-diff-context.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/examples/consume_json_report.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/benchmark_agent_workflow.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/benchmark_mcp_context_ack.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/benchmark_mcp_status.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/benchmark_symbol_diff.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/dev.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/test_installed_package.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/validate_release.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/scripts/verify_published_package.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/__main__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/cache/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/cache/graph.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/cache/prompt_layout.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/cache/validation.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/completion.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/adaptive.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/builder.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/compression.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/incremental.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/mcp_delta.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/models.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/profiles.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/refinement.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/retrieval.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/selection.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/symbols.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/context/tokens.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/dashboard.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/environment.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/project.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/runtime.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/workspaces.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/git/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/git/inspect.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/git/symbol_diff.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/index_daemon_service.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/models/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/models/report.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/models/workspace.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/parsers/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/parsers/failures.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/parsers/registry.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/reporters/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/reporters/progressive.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/reporters/sarif.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/reporters/writer.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/baseline.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/bootstrap.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/bootstrap_models.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/bootstrap_strategies.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/cache.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/check_checkpoint.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/check_models.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/check_scheduler.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/coordination.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/diagnostics.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/environment_state.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/feedback.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/feedback_delta.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/finish.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/flaky.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/index.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/index_daemon.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/observations.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/performance.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/plan.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/policy.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/task.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runners/watch.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runtime/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/runtime/supervisor.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/security/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/security/execution.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/security/secrets.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/semantic.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/semantic_backends.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/source_symbols.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/telemetry_optimizer.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/utils/__init__.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/utils/subprocess.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/cargo-fail.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/coverage-ok.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/eslint-fail.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/gradle-ok.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/jest-fail.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/maven-fail.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/maven-localized-fail.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/mypy-fail.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/phpunit-fail.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/pytest-9-ok.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/pytest-fail.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/pytest-multiple-failures.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/ruff-fail.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/ruff-warning.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/tsc-fail.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/logs/vitest-ok.log +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/monorepo-mixed/package.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/monorepo-mixed/packages/api/pyproject.toml +0 -0
- {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
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/monorepo-mixed/packages/web/package.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/monorepo-mixed/packages/web/test.js +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/monorepo-mixed/services/worker/Cargo.toml +0 -0
- {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
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/gradle/build.gradle +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/gradle/gradlew.bat +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/maven/mvnw.cmd +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/maven/pom.xml +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/node-npm/package-lock.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/node-npm/package.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/node-pnpm/package.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/node-pnpm/pnpm-lock.yaml +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/node-yarn/package.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/node-yarn/yarn.lock +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/php-composer/composer.json +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/python-pip/pyproject.toml +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/python-pip/requirements.txt +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/python-poetry/pyproject.toml +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/python-uv/pyproject.toml +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/python-uv/uv.lock +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/fixtures/projects/rust/Cargo.toml +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/integration/test_adaptive_chess_regression.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/integration/test_cli.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/integration/test_cross_platform_paths.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/integration/test_git.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/integration/test_toolchain_e2e.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_adaptive_context.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_agent_plan.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_baseline.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_benchmark.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_benchmark_gate.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_bootstrap.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_check.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_check_scheduler.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_cli_more.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_completion.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_config.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_builder.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_compression.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_mcp_delta.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_profiles.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_refinement.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_retrieval.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_context_symbols.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_coordination.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_dev_launcher.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_diagnostics.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_doctor.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_environment_state.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_execution_policy.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_failure_classification.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_feedback_delta.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_finish.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_flaky.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_index_daemon.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_index_daemon_service.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_logs.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_more_coverage.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_more_symbol_adapters.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_observations.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_package_smoke.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_performance.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_progressive_reports.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_prompt_layout.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_release_scripts.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_runner_failures.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_runtime.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_runtime_supervisor.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_sarif.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_scan.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_secret_boundaries.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_secrets.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_semantic.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_semantic_backends.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_symbol_diff.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_task.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_telemetry_optimizer.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_telemetry_policy.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_token_accounting.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_watch.py +0 -0
- {ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/tests/unit/test_workspaces.py +0 -0
|
@@ -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.
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
4
|
-
|
|
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.
|
|
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.
|
|
19
|
-
pipx install "git+https://github.com/MatthiasLew/ai-dev-cli-tools.git@v1.2.
|
|
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.
|
|
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`,
|
|
13
|
-
`mcp.ai-dev.json`. Matching reference-first task profiles are written
|
|
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.
|
|
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
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ai-dev-cli-tools"
|
|
7
|
-
version = "1.2.
|
|
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 = [
|
|
@@ -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,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
|
|
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
|
|
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",
|
|
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")
|
{ai_dev_cli_tools-1.2.1 → ai_dev_cli_tools-1.2.2}/src/ai_dev_tools/detectors/repository_map.py
RENAMED
|
@@ -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,
|
|
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,
|
|
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 (
|