ai-dev-cli-tools 0.5.0a1__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 (169) hide show
  1. ai_dev_cli_tools-0.5.0a1/.github/workflows/ci.yml +71 -0
  2. ai_dev_cli_tools-0.5.0a1/.github/workflows/docs.yml +20 -0
  3. ai_dev_cli_tools-0.5.0a1/.github/workflows/publish-pypi.yml +85 -0
  4. ai_dev_cli_tools-0.5.0a1/.github/workflows/release.yml +102 -0
  5. ai_dev_cli_tools-0.5.0a1/.gitignore +16 -0
  6. ai_dev_cli_tools-0.5.0a1/CHANGELOG.md +51 -0
  7. ai_dev_cli_tools-0.5.0a1/CONTRIBUTING.md +18 -0
  8. ai_dev_cli_tools-0.5.0a1/LICENSE +21 -0
  9. ai_dev_cli_tools-0.5.0a1/Makefile +17 -0
  10. ai_dev_cli_tools-0.5.0a1/PKG-INFO +240 -0
  11. ai_dev_cli_tools-0.5.0a1/README.md +211 -0
  12. ai_dev_cli_tools-0.5.0a1/SECURITY.md +6 -0
  13. ai_dev_cli_tools-0.5.0a1/TODO.md +126 -0
  14. ai_dev_cli_tools-0.5.0a1/ai.ps1 +7 -0
  15. ai_dev_cli_tools-0.5.0a1/ai.sh +3 -0
  16. ai_dev_cli_tools-0.5.0a1/docs/ADDING_A_DETECTOR.md +7 -0
  17. ai_dev_cli_tools-0.5.0a1/docs/ADDING_A_RUNNER.md +7 -0
  18. ai_dev_cli_tools-0.5.0a1/docs/AGENT_EFFICIENCY_ROADMAP.md +483 -0
  19. ai_dev_cli_tools-0.5.0a1/docs/AGENT_INTEGRATION_CONTRACT.md +25 -0
  20. ai_dev_cli_tools-0.5.0a1/docs/ARCHITECTURE.md +50 -0
  21. ai_dev_cli_tools-0.5.0a1/docs/BOOTSTRAP.md +86 -0
  22. ai_dev_cli_tools-0.5.0a1/docs/CACHE_AND_INDEX.md +31 -0
  23. ai_dev_cli_tools-0.5.0a1/docs/CHANGED_TEST_SELECTION.md +21 -0
  24. ai_dev_cli_tools-0.5.0a1/docs/CONTEXT_BUILDER.md +56 -0
  25. ai_dev_cli_tools-0.5.0a1/docs/DISTRIBUTION.md +61 -0
  26. ai_dev_cli_tools-0.5.0a1/docs/MONOREPO_SUPPORT.md +26 -0
  27. ai_dev_cli_tools-0.5.0a1/docs/RELEASE_CHECKLIST.md +68 -0
  28. ai_dev_cli_tools-0.5.0a1/docs/REPORT_SCHEMA.md +83 -0
  29. ai_dev_cli_tools-0.5.0a1/docs/RUNTIME.md +44 -0
  30. ai_dev_cli_tools-0.5.0a1/docs/TOOL_OUTPUT_PARSERS.md +33 -0
  31. ai_dev_cli_tools-0.5.0a1/docs/report-schema.json +59 -0
  32. ai_dev_cli_tools-0.5.0a1/examples/consume_json_report.py +24 -0
  33. ai_dev_cli_tools-0.5.0a1/pyproject.toml +70 -0
  34. ai_dev_cli_tools-0.5.0a1/scripts/__init__.py +0 -0
  35. ai_dev_cli_tools-0.5.0a1/scripts/test_installed_package.py +145 -0
  36. ai_dev_cli_tools-0.5.0a1/scripts/validate_ci.py +103 -0
  37. ai_dev_cli_tools-0.5.0a1/scripts/validate_release.py +72 -0
  38. ai_dev_cli_tools-0.5.0a1/scripts/verify_published_package.py +157 -0
  39. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/__init__.py +3 -0
  40. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/cache/__init__.py +11 -0
  41. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/cache/graph.py +136 -0
  42. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/cache/repository.py +169 -0
  43. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/cache/validation.py +154 -0
  44. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/cli.py +387 -0
  45. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/completion.py +72 -0
  46. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/config.py +223 -0
  47. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/__init__.py +5 -0
  48. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/builder.py +506 -0
  49. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/incremental.py +107 -0
  50. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/models.py +59 -0
  51. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/profiles.py +49 -0
  52. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/selection.py +270 -0
  53. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/context/symbols.py +178 -0
  54. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/detectors/__init__.py +1 -0
  55. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/detectors/environment.py +125 -0
  56. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/detectors/project.py +189 -0
  57. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/detectors/repository_map.py +129 -0
  58. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/detectors/runtime.py +190 -0
  59. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/detectors/workspaces.py +228 -0
  60. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/git/__init__.py +1 -0
  61. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/git/inspect.py +219 -0
  62. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/models/__init__.py +1 -0
  63. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/models/report.py +95 -0
  64. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/models/workspace.py +48 -0
  65. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/parsers/__init__.py +1 -0
  66. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/parsers/logs.py +372 -0
  67. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/parsers/registry.py +60 -0
  68. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/reporters/__init__.py +1 -0
  69. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/reporters/progressive.py +161 -0
  70. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/reporters/writer.py +74 -0
  71. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/__init__.py +1 -0
  72. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/baseline.py +190 -0
  73. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/bootstrap.py +191 -0
  74. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/bootstrap_models.py +64 -0
  75. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/bootstrap_strategies.py +444 -0
  76. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/cache.py +23 -0
  77. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/check.py +509 -0
  78. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/check_checkpoint.py +50 -0
  79. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/check_models.py +51 -0
  80. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/check_scheduler.py +94 -0
  81. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/check_selection.py +267 -0
  82. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/diagnostics.py +96 -0
  83. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/feedback.py +193 -0
  84. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/finish.py +105 -0
  85. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/focused.py +37 -0
  86. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runners/index.py +44 -0
  87. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runtime/__init__.py +3 -0
  88. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runtime/runner.py +380 -0
  89. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/runtime/supervisor.py +145 -0
  90. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/security/__init__.py +1 -0
  91. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/security/secrets.py +58 -0
  92. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/utils/__init__.py +1 -0
  93. ai_dev_cli_tools-0.5.0a1/src/ai_dev_tools/utils/subprocess.py +74 -0
  94. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/cargo-fail.log +2 -0
  95. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/coverage-ok.log +2 -0
  96. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/eslint-fail.log +3 -0
  97. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/gradle-ok.log +2 -0
  98. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/jest-fail.log +2 -0
  99. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/maven-fail.log +3 -0
  100. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/maven-localized-fail.log +3 -0
  101. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/mypy-fail.log +2 -0
  102. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/phpunit-fail.log +3 -0
  103. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/pytest-9-ok.log +3 -0
  104. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/pytest-fail.log +3 -0
  105. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/pytest-multiple-failures.log +5 -0
  106. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/ruff-fail.log +2 -0
  107. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/ruff-warning.log +2 -0
  108. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/tsc-fail.log +1 -0
  109. ai_dev_cli_tools-0.5.0a1/tests/fixtures/logs/vitest-ok.log +3 -0
  110. ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/package.json +1 -0
  111. ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/packages/api/pyproject.toml +6 -0
  112. ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/packages/api/tests/test_smoke.py +2 -0
  113. ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/packages/web/package.json +1 -0
  114. ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/packages/web/test.js +1 -0
  115. ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/services/worker/Cargo.toml +4 -0
  116. ai_dev_cli_tools-0.5.0a1/tests/fixtures/monorepo-mixed/services/worker/src/lib.rs +4 -0
  117. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/gradle/build.gradle +1 -0
  118. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/gradle/gradlew.bat +1 -0
  119. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/maven/mvnw.cmd +1 -0
  120. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/maven/pom.xml +9 -0
  121. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/node-npm/package-lock.json +1 -0
  122. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/node-npm/package.json +1 -0
  123. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/node-pnpm/package.json +1 -0
  124. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/node-pnpm/pnpm-lock.yaml +1 -0
  125. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/node-yarn/package.json +1 -0
  126. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/node-yarn/yarn.lock +1 -0
  127. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/php-composer/composer.json +1 -0
  128. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/python-pip/pyproject.toml +3 -0
  129. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/python-pip/requirements.txt +1 -0
  130. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/python-poetry/pyproject.toml +5 -0
  131. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/python-uv/pyproject.toml +3 -0
  132. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/python-uv/uv.lock +1 -0
  133. ai_dev_cli_tools-0.5.0a1/tests/fixtures/projects/rust/Cargo.toml +4 -0
  134. ai_dev_cli_tools-0.5.0a1/tests/integration/test_cli.py +19 -0
  135. ai_dev_cli_tools-0.5.0a1/tests/integration/test_cross_platform_paths.py +68 -0
  136. ai_dev_cli_tools-0.5.0a1/tests/integration/test_git.py +48 -0
  137. ai_dev_cli_tools-0.5.0a1/tests/integration/test_toolchain_e2e.py +55 -0
  138. ai_dev_cli_tools-0.5.0a1/tests/unit/test_baseline.py +77 -0
  139. ai_dev_cli_tools-0.5.0a1/tests/unit/test_bootstrap.py +242 -0
  140. ai_dev_cli_tools-0.5.0a1/tests/unit/test_cache.py +183 -0
  141. ai_dev_cli_tools-0.5.0a1/tests/unit/test_check.py +58 -0
  142. ai_dev_cli_tools-0.5.0a1/tests/unit/test_check_plan.py +195 -0
  143. ai_dev_cli_tools-0.5.0a1/tests/unit/test_check_scheduler.py +107 -0
  144. ai_dev_cli_tools-0.5.0a1/tests/unit/test_cli_more.py +94 -0
  145. ai_dev_cli_tools-0.5.0a1/tests/unit/test_completion.py +27 -0
  146. ai_dev_cli_tools-0.5.0a1/tests/unit/test_config.py +32 -0
  147. ai_dev_cli_tools-0.5.0a1/tests/unit/test_context_builder.py +237 -0
  148. ai_dev_cli_tools-0.5.0a1/tests/unit/test_context_profiles.py +46 -0
  149. ai_dev_cli_tools-0.5.0a1/tests/unit/test_context_symbols.py +79 -0
  150. ai_dev_cli_tools-0.5.0a1/tests/unit/test_diagnostics.py +53 -0
  151. ai_dev_cli_tools-0.5.0a1/tests/unit/test_doctor.py +63 -0
  152. ai_dev_cli_tools-0.5.0a1/tests/unit/test_feedback.py +137 -0
  153. ai_dev_cli_tools-0.5.0a1/tests/unit/test_finish.py +52 -0
  154. ai_dev_cli_tools-0.5.0a1/tests/unit/test_logs.py +21 -0
  155. ai_dev_cli_tools-0.5.0a1/tests/unit/test_more_coverage.py +49 -0
  156. ai_dev_cli_tools-0.5.0a1/tests/unit/test_package_smoke.py +31 -0
  157. ai_dev_cli_tools-0.5.0a1/tests/unit/test_progressive_reports.py +61 -0
  158. ai_dev_cli_tools-0.5.0a1/tests/unit/test_release_scripts.py +56 -0
  159. ai_dev_cli_tools-0.5.0a1/tests/unit/test_report.py +44 -0
  160. ai_dev_cli_tools-0.5.0a1/tests/unit/test_repository_map.py +42 -0
  161. ai_dev_cli_tools-0.5.0a1/tests/unit/test_runner_failures.py +52 -0
  162. ai_dev_cli_tools-0.5.0a1/tests/unit/test_runtime.py +46 -0
  163. ai_dev_cli_tools-0.5.0a1/tests/unit/test_runtime_runner.py +293 -0
  164. ai_dev_cli_tools-0.5.0a1/tests/unit/test_runtime_supervisor.py +208 -0
  165. ai_dev_cli_tools-0.5.0a1/tests/unit/test_scan.py +23 -0
  166. ai_dev_cli_tools-0.5.0a1/tests/unit/test_secret_boundaries.py +97 -0
  167. ai_dev_cli_tools-0.5.0a1/tests/unit/test_secrets.py +13 -0
  168. ai_dev_cli_tools-0.5.0a1/tests/unit/test_tool_parsers.py +139 -0
  169. ai_dev_cli_tools-0.5.0a1/tests/unit/test_workspaces.py +71 -0
@@ -0,0 +1,71 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ jobs:
8
+ test:
9
+ strategy:
10
+ fail-fast: false
11
+ matrix:
12
+ os: [ubuntu-latest, windows-latest, macos-latest]
13
+ python-version: ["3.11", "3.12", "3.13"]
14
+ runs-on: ${{ matrix.os }}
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ - uses: actions/setup-python@v5
18
+ with:
19
+ python-version: ${{ matrix.python-version }}
20
+ - run: python -m pip install --upgrade pip
21
+ - run: python -m pip install -e ".[dev]"
22
+ - run: ruff check .
23
+ - run: mypy src tests
24
+ - run: coverage run -m pytest
25
+ - run: coverage report --fail-under=90
26
+ - run: python -m build
27
+ - run: python scripts/test_installed_package.py
28
+ - run: python scripts/validate_ci.py
29
+ - run: ai-dev --version
30
+ - run: ai-dev doctor --json
31
+ - run: ai-dev scan --json
32
+ - run: ai-dev bootstrap --explain --json
33
+ - run: ai-dev capabilities --json
34
+ - run: ai-dev context build --explain --json
35
+ - run: ai-dev git inspect --json
36
+ - uses: actions/upload-artifact@v4
37
+ if: always()
38
+ with:
39
+ name: ai-dev-reports-${{ matrix.os }}-${{ matrix.python-version }}
40
+ path: |
41
+ .ai/reports
42
+ .ai/logs
43
+ if-no-files-found: ignore
44
+ toolchain-e2e:
45
+ runs-on: ubuntu-latest
46
+ steps:
47
+ - uses: actions/checkout@v4
48
+ - uses: actions/setup-python@v5
49
+ with:
50
+ python-version: "3.13"
51
+ - uses: actions/setup-node@v4
52
+ with:
53
+ node-version: "22"
54
+ - uses: actions/setup-java@v4
55
+ with:
56
+ distribution: temurin
57
+ java-version: "17"
58
+ - uses: dtolnay/rust-toolchain@stable
59
+ - uses: shivammathur/setup-php@v2
60
+ with:
61
+ php-version: "8.3"
62
+ tools: composer
63
+ - uses: gradle/actions/setup-gradle@v4
64
+ with:
65
+ gradle-version: "8.10"
66
+ - run: python -m pip install -e ".[dev]"
67
+ - name: Execute real fixture toolchains
68
+ env:
69
+ RUN_TOOLCHAIN_E2E: "1"
70
+ E2E_TOOLCHAINS: python,node,rust,maven,gradle,php
71
+ run: python -m pytest tests/integration/test_toolchain_e2e.py -q
@@ -0,0 +1,20 @@
1
+ name: Docs
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ jobs:
8
+ docs:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ - uses: actions/setup-python@v5
13
+ with:
14
+ python-version: "3.12"
15
+ - run: python -m pip install -e ".[dev]"
16
+ - run: python -m ai_dev_tools.cli --help
17
+ - run: python -m ai_dev_tools.cli check --help
18
+ - run: test -s README.md
19
+ - run: test -s docs/ARCHITECTURE.md
20
+ - run: test -s docs/REPORT_SCHEMA.md
@@ -0,0 +1,85 @@
1
+ name: Publish PyPI
2
+
3
+ on:
4
+ release:
5
+ types:
6
+ - published
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ validate-release:
13
+ name: Validate manually promoted release artifacts
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
17
+ with:
18
+ persist-credentials: false
19
+ ref: ${{ github.event.release.tag_name }}
20
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
21
+ with:
22
+ python-version: "3.13"
23
+ - name: Download artifacts attached by the TestPyPI workflow
24
+ env:
25
+ GH_TOKEN: ${{ github.token }}
26
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
27
+ run: >-
28
+ gh release download "$RELEASE_TAG"
29
+ --pattern "ai_dev_cli_tools-*"
30
+ --dir dist/
31
+ - name: Validate tag and release artifacts
32
+ env:
33
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
34
+ run: |
35
+ python -m pip install --upgrade twine
36
+ python -m twine check dist/*
37
+ python scripts/validate_release.py --tag "$RELEASE_TAG" --dist dist
38
+ - name: Upload validated production artifact
39
+ uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
40
+ with:
41
+ name: pypi-distributions
42
+ path: dist/
43
+ if-no-files-found: error
44
+ retention-days: 7
45
+
46
+ publish-pypi:
47
+ name: Publish manually approved release to PyPI
48
+ needs: validate-release
49
+ runs-on: ubuntu-latest
50
+ environment:
51
+ name: pypi
52
+ url: https://pypi.org/p/ai-dev-cli-tools
53
+ permissions:
54
+ id-token: write
55
+ steps:
56
+ - name: Download validated production artifact
57
+ uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
58
+ with:
59
+ name: pypi-distributions
60
+ path: dist/
61
+ - name: Publish distribution to PyPI
62
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
63
+ with:
64
+ packages-dir: dist/
65
+
66
+ verify-pypi:
67
+ name: Verify PyPI pipx installation
68
+ needs: publish-pypi
69
+ runs-on: ubuntu-latest
70
+ steps:
71
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
72
+ with:
73
+ persist-credentials: false
74
+ ref: ${{ github.event.release.tag_name }}
75
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
76
+ with:
77
+ python-version: "3.13"
78
+ - name: Install and smoke test from PyPI through pipx
79
+ env:
80
+ RELEASE_TAG: ${{ github.event.release.tag_name }}
81
+ run: >-
82
+ python scripts/verify_published_package.py
83
+ --version "${RELEASE_TAG#v}"
84
+ --index-url https://pypi.org/simple/
85
+ --installer pipx
@@ -0,0 +1,102 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ build:
13
+ name: Build and validate distribution
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
17
+ with:
18
+ persist-credentials: false
19
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
20
+ with:
21
+ python-version: "3.13"
22
+ - name: Validate tag and source version
23
+ run: python scripts/validate_release.py --tag "$GITHUB_REF_NAME"
24
+ - name: Install release tooling
25
+ run: python -m pip install --upgrade build twine
26
+ - name: Build wheel and source distribution
27
+ run: python -m build
28
+ - name: Validate distributions
29
+ run: |
30
+ python -m twine check dist/*
31
+ python scripts/validate_release.py --tag "$GITHUB_REF_NAME" --dist dist
32
+ python scripts/test_installed_package.py
33
+ - name: Upload immutable distribution artifact
34
+ uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5
35
+ with:
36
+ name: python-package-distributions
37
+ path: dist/
38
+ if-no-files-found: error
39
+ retention-days: 7
40
+
41
+ publish-testpypi:
42
+ name: Publish to TestPyPI
43
+ needs: build
44
+ runs-on: ubuntu-latest
45
+ environment:
46
+ name: testpypi
47
+ url: https://test.pypi.org/p/ai-dev-cli-tools
48
+ permissions:
49
+ id-token: write
50
+ steps:
51
+ - name: Download distribution artifact
52
+ uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
53
+ with:
54
+ name: python-package-distributions
55
+ path: dist/
56
+ - name: Publish distribution to TestPyPI
57
+ uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
58
+ with:
59
+ repository-url: https://test.pypi.org/legacy/
60
+ packages-dir: dist/
61
+ attestations: false
62
+
63
+ verify-testpypi:
64
+ name: Verify TestPyPI installation
65
+ needs: publish-testpypi
66
+ runs-on: ubuntu-latest
67
+ steps:
68
+ - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6
69
+ with:
70
+ persist-credentials: false
71
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
72
+ with:
73
+ python-version: "3.13"
74
+ - name: Install and smoke test from TestPyPI
75
+ run: >-
76
+ python scripts/verify_published_package.py
77
+ --version "${GITHUB_REF_NAME#v}"
78
+ --index-url https://test.pypi.org/simple/
79
+
80
+ draft-release:
81
+ name: Create manually promoted release draft
82
+ needs: verify-testpypi
83
+ runs-on: ubuntu-latest
84
+ permissions:
85
+ contents: write
86
+ steps:
87
+ - name: Download TestPyPI-verified distribution artifact
88
+ uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6
89
+ with:
90
+ name: python-package-distributions
91
+ path: dist/
92
+ - name: Create draft GitHub release for manual PyPI promotion
93
+ env:
94
+ GH_TOKEN: ${{ github.token }}
95
+ run: >-
96
+ gh release create "$GITHUB_REF_NAME"
97
+ dist/*
98
+ --draft
99
+ --prerelease
100
+ --verify-tag
101
+ --generate-notes
102
+ --title "ai-dev $GITHUB_REF_NAME"
@@ -0,0 +1,16 @@
1
+ .ai/tmp/
2
+ .ai/runtime/
3
+ .ai/cache/
4
+ .ai/context/
5
+ .ai/logs/
6
+ .ai/reports/
7
+ .coverage
8
+ .mypy_cache/
9
+ .pytest_cache/
10
+ .ruff_cache/
11
+ .venv/
12
+ build/
13
+ dist/
14
+ *.egg-info/
15
+ __pycache__/
16
+ *.py[cod]
@@ -0,0 +1,51 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.5.0a1 - 2026-08-10
6
+
7
+ - Add workspace models and isolated check/bootstrap routing for mixed monorepos.
8
+ - Add cross-platform mixed-monorepo and Git path fixtures covering spaces, Unicode, rename, deletion, and non-UTF-8 output.
9
+ - Add runner failure matrices and real Python, Node, Rust, Maven, Gradle, and Composer fixture execution in CI.
10
+ - Detect and validate Python, Node.js, Java, Rust, and PHP runtime requirements.
11
+ - Implement safe managed `run` and `stop` with supervisor-owned process termination.
12
+ - Add HTTP/TCP readiness probes, bounded startup logs, and readiness-timeout cleanup.
13
+ - Add bounded parallel check execution with `--jobs`.
14
+ - Add a versioned repository index and content-addressed validation cache with bounded retention.
15
+ - Add incremental context manifests and `context build --incremental`.
16
+ - Add AST-aware Python symbol snippets for large context files.
17
+ - Add minimal, debug, review, and full context profiles.
18
+ - Add local diagnostics, efficiency estimates, a stable agent contract, and JSON integration example.
19
+ - Add dependency-free completion generators for Bash, Zsh, Fish, and PowerShell.
20
+ - Add stable failure signatures and a machine-readable report JSON Schema.
21
+ - Add an extensible tool-output parser registry with deterministic precedence.
22
+ - Add compatibility fixtures and prevent cross-line test-count overcounting.
23
+ - Apply defense-in-depth secret masking to command logs, diagnostics, runtime streams, and report writers.
24
+ - Raise and enforce the coverage threshold to 90%.
25
+ - Add agent-efficiency and execution TODO roadmaps.
26
+
27
+ ## 0.4.0
28
+
29
+ - Add `ai-dev bootstrap` with safe explain, dry-run, and execution modes.
30
+ - Support bootstrap strategies for Python, Node.js, Maven, Gradle, Rust, and PHP.
31
+ - Add guarded `.env.example` to `.env` creation via `--create-env`.
32
+ - Add installed-wheel entrypoint smoke validation to local and CI standards.
33
+ - Keep cross-platform CI marked as externally blocked until GitHub Actions jobs actually run.
34
+ ## 0.3.0
35
+
36
+ - Add `ai-dev context build` for bounded local AI context packages.
37
+ - Write `.ai/context/context-latest.md` and `.ai/context/context-latest.json` artifacts.
38
+ - Reuse scan, repository map, git inspect, changed-test selection, validation planning, and secret masking.
39
+ - Keep monorepo detection experimental, per-subproject runner isolation planned, and runtime validation partial.
40
+ ## 0.2.0
41
+
42
+ - Add schema 1.1 reports with exit codes and metadata.
43
+ - Add tool-specific output parser layer with fixtures for Python, JavaScript, Java, Rust, and PHP logs.
44
+ - Add `ai-dev capabilities` and `ai-dev check --explain`.
45
+ - Add `logs summarize <path> --tool auto|name` with a 50 MB input limit.
46
+ - Improve changed-file strategies with configuration-change and changed-test-direct reporting.
47
+ - Prepare package version 0.2.0 without creating a release.
48
+
49
+ ## 0.1.0
50
+
51
+ - Initial private foundation for cross-platform AI development CLI helpers.
@@ -0,0 +1,18 @@
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
+ Before pushing a larger stage, run:
6
+
7
+ ```bash
8
+ python -m ruff check .
9
+ python -m mypy src tests scripts
10
+ python -m coverage run -m pytest
11
+ python -m coverage report --fail-under=90
12
+ python -m build
13
+ python scripts/validate_ci.py
14
+ python scripts/test_installed_package.py
15
+ git diff --check
16
+ ```
17
+
18
+ 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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Mateusz Lewandowski
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,17 @@
1
+ .PHONY: test lint typecheck coverage build
2
+
3
+ test:
4
+ python -m pytest
5
+
6
+ lint:
7
+ ruff check .
8
+
9
+ typecheck:
10
+ mypy src tests
11
+
12
+ coverage:
13
+ coverage run -m pytest
14
+ coverage report --fail-under=90
15
+
16
+ build:
17
+ python -m build
@@ -0,0 +1,240 @@
1
+ Metadata-Version: 2.4
2
+ Name: ai-dev-cli-tools
3
+ Version: 0.5.0a1
4
+ Summary: Cross-platform CLI helpers that give AI coding agents concise, deterministic development reports.
5
+ Project-URL: Homepage, https://github.com/MatthiasLew/ai-dev-cli-tools
6
+ Project-URL: Repository, https://github.com/MatthiasLew/ai-dev-cli-tools
7
+ Project-URL: Issues, https://github.com/MatthiasLew/ai-dev-cli-tools/issues
8
+ Project-URL: Changelog, https://github.com/MatthiasLew/ai-dev-cli-tools/blob/main/CHANGELOG.md
9
+ Author: Mateusz Lewandowski
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: agents,ai,automation,cli,developer-tools
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Environment :: Console
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Topic :: Software Development :: Quality Assurance
21
+ Requires-Python: >=3.11
22
+ Provides-Extra: dev
23
+ Requires-Dist: build>=1.2; extra == 'dev'
24
+ Requires-Dist: coverage[toml]>=7.6; extra == 'dev'
25
+ Requires-Dist: mypy>=1.11; extra == 'dev'
26
+ Requires-Dist: pytest>=8.3; extra == 'dev'
27
+ Requires-Dist: ruff>=0.6; extra == 'dev'
28
+ Description-Content-Type: text/markdown
29
+
30
+ # AI Dev CLI Tools
31
+
32
+ Cross-platform Python CLI helpers for AI coding agents and humans who want concise, deterministic development reports instead of huge logs.
33
+
34
+ `ai-dev` runs repeatable project checks locally, stores full logs under `.ai/logs/`, and returns compact Markdown/JSON summaries under `.ai/reports/`.
35
+
36
+ ## Problem
37
+
38
+ AI coding agents often spend tokens reading full test output, repository trees, dependency noise, repeated warnings, and raw Git diffs. This project follows one rule:
39
+
40
+ ```text
41
+ Scripts do the work and collect data.
42
+ AI reads a short report and decides what to do next.
43
+ Full logs stay on disk until needed.
44
+
45
+ Generated state under `.ai/logs/`, `.ai/reports/`, `.ai/context/`, `.ai/cache/`,
46
+ `.ai/runtime/`, and `.ai/tmp/` is local and ignored by Git. Logs, reports, and context
47
+ artifacts may be removed when no longer needed; cache, runtime, and temporary state must always
48
+ be safe for `ai-dev` to recreate.
49
+ ```
50
+
51
+ ## Install
52
+
53
+ ```bash
54
+ python -m pip install --upgrade pipx
55
+ pipx install ai-dev-cli-tools==0.5.0a1
56
+ ai-dev --help
57
+ ```
58
+
59
+ For a source checkout before the public alpha is published, use `pipx install .`. See
60
+ `docs/DISTRIBUTION.md` for the Trusted Publishing and upgrade policy.
61
+
62
+ For development:
63
+
64
+ ```bash
65
+ python -m pip install -e ".[dev]"
66
+ ```
67
+
68
+ ## Windows
69
+
70
+ ```powershell
71
+ .\ai.ps1 doctor
72
+ ai-dev scan --project "C:\path with spaces\project"
73
+ ```
74
+
75
+ ## Linux and macOS
76
+
77
+ ```bash
78
+ ./ai.sh doctor
79
+ ai-dev check --mode fast --project "/path/with spaces/project"
80
+ ```
81
+
82
+ ## Commands
83
+
84
+ ```bash
85
+ ai-dev doctor
86
+ ai-dev scan
87
+ ai-dev map --max-files 500 --max-depth 6
88
+ ai-dev check --mode fast
89
+ ai-dev check --mode changed # reports changed files and falls back safely when test mapping is uncertain
90
+ ai-dev check --mode full --jobs 4
91
+ ai-dev check --mode changed --policy feedback-first --resume
92
+ ai-dev index update
93
+ ai-dev cache status
94
+ ai-dev baseline create main
95
+ ai-dev baseline compare main
96
+ ai-dev explain issue:<id> --tail 100
97
+ ai-dev feedback --task "fix authentication timeout"
98
+ ai-dev session status
99
+ ai-dev diagnostics
100
+ ai-dev completion bash
101
+ ai-dev test affected
102
+ ai-dev logs summarize
103
+ ai-dev context build
104
+ ai-dev git status
105
+ ai-dev git inspect
106
+ ai-dev finish
107
+ ```
108
+
109
+ All commands support `--project`, `--json`, `--quiet`, `--help`, and `--version` at the top level.
110
+
111
+
112
+ ## Bootstrap
113
+
114
+ `ai-dev bootstrap` prepares a detected project with conservative, project-local commands. Use `--explain` to see the plan without modifications, `--dry-run` to validate planning without executing modifying commands, and `--create-env` to allow copying `.env.example` to `.env` only when `.env` is missing.
115
+
116
+ Supported strategies include Python uv, Poetry, pip with `pyproject.toml`, pip with `requirements.txt`, Node npm/pnpm/Yarn, Maven wrapper or system Maven, Gradle wrapper or system Gradle, Cargo, and Composer.
117
+
118
+ See `docs/BOOTSTRAP.md` for safety rules and configuration.
119
+
120
+ ## Managed application runtime
121
+
122
+ `ai-dev run` supports explain, dry-run, foreground, and supervised background modes.
123
+ `ai-dev stop` sends a token-authenticated request to the matching local supervisor and never
124
+ kills an arbitrary PID read from stale state. See `docs/RUNTIME.md`.
125
+
126
+ ## Context Builder
127
+
128
+ `ai-dev context build` creates a bounded local context package for coding agents without calling any LLM, embedding API, or cloud service.
129
+
130
+ ```bash
131
+ ai-dev context build --task "fix auth tests"
132
+ ai-dev context build --changed-only --max-chars 50000
133
+ ai-dev context build --incremental # emits only candidates changed since the last pack
134
+ ai-dev context build --profile review
135
+ ai-dev context build --include "src/**/*.py" --exclude "tests/fixtures/**"
136
+ ai-dev context build --explain --json
137
+ ```
138
+
139
+ Artifacts are written to `.ai/context/context-latest.md` and `.ai/context/context-latest.json` by default. The builder includes detected technologies, git state, changed files, related tests, validation plan, recent commits, selected snippets, limited diffs, latest check errors, masked secret findings, and budget/truncation metadata. Large Python files use AST-aware symbol snippets with line ranges instead of blindly returning only the beginning of the file.
140
+
141
+ Incremental mode stores a schema-versioned manifest under `.ai/cache/` and reports changed versus reused files. Default limits are `--max-chars 50000`, `--max-files 30`, `--max-file-chars 8000`, and `--max-diff-chars 15000`. Secret-bearing and generated paths such as `.env`, private keys, caches, build output, `.ai/logs`, and `.ai/reports` are excluded from snippets.
142
+ ## Reports and Logs
143
+
144
+ Validation results are cached by default using repository, command, workspace, runtime, and platform fingerprints; use `check --no-cache` to force execution. `check --resume` reuses only exact successful checkpoint fingerprints. `--policy feedback-first` runs cheaper waves first and cancels later expensive waves after a required failure; `complete` retains comprehensive execution. `index status/update/rebuild` manages the reusable repository index, while `cache status/prune/clear` provides bounded local cache maintenance. See `docs/CACHE_AND_INDEX.md`.
145
+
146
+ Short reports are written to `.ai/reports/` as Markdown and JSON. Full command output is written to `.ai/logs/` and ignored by Git. Check summaries include exit codes, durations, first failure hints, grouped repeated messages, test counts, and full log paths.
147
+
148
+ JSON reports use schema `1.1` with `schema_version`, `tool_version`, `command`, `status`, `exit_code`, timestamps, `project_root`, `summary`, `issues`, `artifacts`, and `metadata`.
149
+
150
+ `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.
151
+
152
+ 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.
153
+
154
+ ## Auto Detection
155
+
156
+ `scan` detects Python, Node.js, Java, Rust, PHP, Docker, Make, CI workflows, package managers, scripts, entrypoints, tests, lint, formatters, type checkers, and `.env.example` variables.
157
+
158
+ Supported examples:
159
+
160
+ - Python: `pyproject.toml`, `requirements.txt`, `pytest`, `ruff`, `black`, `mypy`, `coverage`.
161
+ - Node.js: `package.json`, npm, pnpm, yarn, Jest, Vitest, ESLint, Prettier, TypeScript.
162
+ - Java: Maven, Gradle, tests, Checkstyle, SpotBugs, JaCoCo when configured.
163
+ - Rust: Cargo test, fmt, clippy.
164
+ - PHP: Composer, PHPUnit, PHPStan, PHP-CS-Fixer when configured.
165
+
166
+ ## Configuration
167
+
168
+ Optional `.ai-dev-tools.toml`:
169
+
170
+ ```toml
171
+ [project]
172
+ name = "example-project"
173
+
174
+ [commands]
175
+ test = "pytest"
176
+ lint = "ruff check ."
177
+ typecheck = "mypy src"
178
+
179
+ [ignore]
180
+ paths = ["node_modules", ".venv", "dist", "build"]
181
+
182
+ [reports]
183
+ directory = ".ai/reports"
184
+ logs_directory = ".ai/logs"
185
+ ```
186
+
187
+ Configuration takes precedence over auto detection. Invalid or unknown configuration is reported through `config_warnings` instead of crashing normal scans.
188
+ ## Local Validation
189
+
190
+ Before pushing a larger stage, run:
191
+
192
+ ```bash
193
+ python -m ruff check .
194
+ python -m mypy src tests scripts
195
+ python -m coverage run -m pytest
196
+ python -m coverage report --fail-under=90
197
+ python -m build
198
+ python scripts/validate_ci.py
199
+ python scripts/test_installed_package.py
200
+ git diff --check
201
+ ```
202
+
203
+ `python scripts/test_installed_package.py` rebuilds the wheel, installs only that wheel into a clean virtual environment in a path containing spaces, and verifies the installed `ai-dev` entrypoint without editable install or `PYTHONPATH`.
204
+
205
+ ## Command Status
206
+
207
+ | Command | Status |
208
+ | --- | --- |
209
+ | doctor | implemented |
210
+ | scan | implemented |
211
+ | map | implemented |
212
+ | check | implemented |
213
+ | check --explain | implemented |
214
+ | test affected | implemented |
215
+ | index status/update/rebuild | implemented |
216
+ | cache status/prune/clear | implemented |
217
+ | logs summarize | implemented |
218
+ | context build | implemented |
219
+ | diagnostics | implemented |
220
+ | capabilities | implemented |
221
+ | git status | implemented |
222
+ | git inspect | implemented |
223
+ | finish | implemented |
224
+ | bootstrap | implemented |
225
+ | run | implemented |
226
+ | stop | implemented |
227
+
228
+ ## Scope Notes
229
+
230
+ - Monorepo/workspace detection and per-subproject command routing: implemented.
231
+ - Per-subproject check and bootstrap working directories: implemented.
232
+ - Runtime version validation: partial.
233
+ - `context build` is implemented as a bounded local context pack builder.
234
+ - `bootstrap` is implemented as a conservative local setup planner/executor.
235
+ - Auto-commit, auto-push, and GUI remain out of scope or planned.
236
+
237
+ ## Intentional Limits
238
+ Version 0.5.0a1 does not reset, clean, commit, push, merge, clone organizations, synchronize repositories, delete containers, publish releases, or remove user files.
239
+
240
+ 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.