chatsbom 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. chatsbom-0.2.1/.env.example +3 -0
  2. chatsbom-0.2.1/.github/workflows/release.yaml +24 -0
  3. chatsbom-0.2.1/.github/workflows/weekly.yml +22 -0
  4. chatsbom-0.2.1/.gitignore +231 -0
  5. chatsbom-0.2.1/.pre-commit-config.yaml +63 -0
  6. chatsbom-0.2.1/.python-version +1 -0
  7. chatsbom-0.2.1/PKG-INFO +125 -0
  8. chatsbom-0.2.1/README.md +103 -0
  9. chatsbom-0.2.1/chatsbom/__init__.py +0 -0
  10. chatsbom-0.2.1/chatsbom/__main__.py +27 -0
  11. chatsbom-0.2.1/chatsbom/commands/__init__.py +1 -0
  12. chatsbom-0.2.1/chatsbom/commands/chat.py +297 -0
  13. chatsbom-0.2.1/chatsbom/commands/collect.py +453 -0
  14. chatsbom-0.2.1/chatsbom/commands/convert.py +263 -0
  15. chatsbom-0.2.1/chatsbom/commands/download.py +293 -0
  16. chatsbom-0.2.1/chatsbom/commands/index.py +327 -0
  17. chatsbom-0.2.1/chatsbom/commands/query.py +174 -0
  18. chatsbom-0.2.1/chatsbom/commands/status.py +223 -0
  19. chatsbom-0.2.1/chatsbom/core/__init__.py +1 -0
  20. chatsbom-0.2.1/chatsbom/core/clickhouse.py +98 -0
  21. chatsbom-0.2.1/chatsbom/core/client.py +54 -0
  22. chatsbom-0.2.1/chatsbom/core/config.py +145 -0
  23. chatsbom-0.2.1/chatsbom/core/repository.py +327 -0
  24. chatsbom-0.2.1/chatsbom/core/schema.py +31 -0
  25. chatsbom-0.2.1/chatsbom/core/validation.py +149 -0
  26. chatsbom-0.2.1/chatsbom/models/__init__.py +0 -0
  27. chatsbom-0.2.1/chatsbom/models/framework.py +129 -0
  28. chatsbom-0.2.1/chatsbom/models/language.py +167 -0
  29. chatsbom-0.2.1/config/users.d/admin.xml +10 -0
  30. chatsbom-0.2.1/config/users.d/guest.xml +11 -0
  31. chatsbom-0.2.1/docker-compose.yaml +15 -0
  32. chatsbom-0.2.1/figures/demo.gif +0 -0
  33. chatsbom-0.2.1/figures/use-cases/gin/01.png +0 -0
  34. chatsbom-0.2.1/figures/use-cases/gin/02.png +0 -0
  35. chatsbom-0.2.1/pyproject.toml +62 -0
  36. chatsbom-0.2.1/start.sh +7 -0
  37. chatsbom-0.2.1/tests/client_test.py +35 -0
  38. chatsbom-0.2.1/tests/collect_test.py +156 -0
  39. chatsbom-0.2.1/tests/convert_sbom_test.py +74 -0
  40. chatsbom-0.2.1/tests/download_test.py +127 -0
  41. chatsbom-0.2.1/tests/framework_test.py +106 -0
  42. chatsbom-0.2.1/tests/index_test.py +98 -0
  43. chatsbom-0.2.1/tests/language_test.py +69 -0
  44. chatsbom-0.2.1/uv.lock +1364 -0
@@ -0,0 +1,3 @@
1
+ GITHUB_TOKEN=
2
+ ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
3
+ ANTHROPIC_AUTH_TOKEN=
@@ -0,0 +1,24 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - v*
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ pypi:
11
+ name: Publish to PyPI
12
+ runs-on: ubuntu-latest
13
+ permissions:
14
+ contents: read
15
+ packages: write
16
+ attestations: write
17
+ id-token: write
18
+ environment:
19
+ name: release
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - uses: astral-sh/setup-uv@v3
23
+ - run: uv build
24
+ - run: uv publish --trusted-publishing always
@@ -0,0 +1,22 @@
1
+ name: Weekly Tests
2
+
3
+ on:
4
+ schedule:
5
+ - cron: '0 0 * * 0'
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ test:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: Checkout code
13
+ uses: actions/checkout@v3
14
+
15
+ - name: Install uv
16
+ uses: astral-sh/setup-uv@v5
17
+
18
+ - name: Install dependencies
19
+ run: uv sync
20
+
21
+ - name: Run tests
22
+ run: uv run pytest
@@ -0,0 +1,231 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ *.sqlite3-shm
62
+ *.sqlite3-wal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ # Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ # poetry.lock
109
+ # poetry.toml
110
+
111
+ # pdm
112
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
113
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
114
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
115
+ # pdm.lock
116
+ # pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # pixi
121
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
122
+ # pixi.lock
123
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
124
+ # in the .venv directory. It is recommended not to include this directory in version control.
125
+ .pixi
126
+
127
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
128
+ __pypackages__/
129
+
130
+ # Celery stuff
131
+ celerybeat-schedule
132
+ celerybeat.pid
133
+
134
+ # Redis
135
+ *.rdb
136
+ *.aof
137
+ *.pid
138
+
139
+ # RabbitMQ
140
+ mnesia/
141
+ rabbitmq/
142
+ rabbitmq-data/
143
+
144
+ # ActiveMQ
145
+ activemq-data/
146
+
147
+ # SageMath parsed files
148
+ *.sage.py
149
+
150
+ # Environments
151
+ .env
152
+ .envrc
153
+ .venv
154
+ env/
155
+ venv/
156
+ ENV/
157
+ env.bak/
158
+ venv.bak/
159
+
160
+ # Spyder project settings
161
+ .spyderproject
162
+ .spyproject
163
+
164
+ # Rope project settings
165
+ .ropeproject
166
+
167
+ # mkdocs documentation
168
+ /site
169
+
170
+ # mypy
171
+ .mypy_cache/
172
+ .dmypy.json
173
+ dmypy.json
174
+
175
+ # Pyre type checker
176
+ .pyre/
177
+
178
+ # pytype static type analyzer
179
+ .pytype/
180
+
181
+ # Cython debug symbols
182
+ cython_debug/
183
+
184
+ # PyCharm
185
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
186
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
187
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
188
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
189
+ # .idea/
190
+
191
+ # Abstra
192
+ # Abstra is an AI-powered process automation framework.
193
+ # Ignore directories containing user credentials, local state, and settings.
194
+ # Learn more at https://abstra.io/docs
195
+ .abstra/
196
+
197
+ # Visual Studio Code
198
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
199
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
200
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
201
+ # you could uncomment the following to ignore the entire vscode folder
202
+ # .vscode/
203
+
204
+ # Ruff stuff:
205
+ .ruff_cache/
206
+
207
+ # PyPI configuration file
208
+ .pypirc
209
+
210
+ # Marimo
211
+ marimo/_static/
212
+ marimo/_lsp/
213
+ __marimo__/
214
+
215
+ # Streamlit
216
+ .streamlit/secrets.toml
217
+
218
+ # request-cache database file
219
+ *.sqlite
220
+ *.sqlite-journal
221
+ *.sqlite-shm
222
+ *.sqlite-wal
223
+
224
+ # Data folder
225
+ /data/
226
+
227
+ # JSONL folder
228
+ /*.jsonl
229
+
230
+ # Database folder
231
+ /database/
@@ -0,0 +1,63 @@
1
+ exclude: ^(benchmarks/(?!.*\.analysis/.*\.py)|parameters/examples/|.*\.patch|.*\.diff|.*/recipes/patches/|.*/recipes/files/)
2
+
3
+ repos:
4
+ - repo: https://github.com/pre-commit/pre-commit-hooks
5
+ rev: v5.0.0
6
+ hooks:
7
+ - id: trailing-whitespace
8
+ - id: end-of-file-fixer
9
+ - id: check-yaml
10
+ - id: debug-statements
11
+ - id: double-quote-string-fixer
12
+ - id: name-tests-test
13
+ - id: requirements-txt-fixer
14
+ - id: check-json
15
+ - id: pretty-format-json
16
+ args: [--autofix, --indent=4]
17
+ - repo: https://github.com/asottile/setup-cfg-fmt
18
+ rev: v2.8.0
19
+ hooks:
20
+ - id: setup-cfg-fmt
21
+ - repo: https://github.com/asottile/reorder-python-imports
22
+ rev: v3.15.0
23
+ hooks:
24
+ - id: reorder-python-imports
25
+ exclude: ^(pre_commit/resources/|testing/resources/python3_hooks_repo/)
26
+ args: [--py312-plus]
27
+ - repo: https://github.com/asottile/add-trailing-comma
28
+ rev: v3.2.0
29
+ hooks:
30
+ - id: add-trailing-comma
31
+ - repo: https://github.com/asottile/pyupgrade
32
+ rev: v3.20.0
33
+ hooks:
34
+ - id: pyupgrade
35
+ args: [--py312-plus]
36
+ - repo: https://github.com/hhatto/autopep8
37
+ rev: v2.3.2
38
+ hooks:
39
+ - id: autopep8
40
+ - repo: https://github.com/PyCQA/flake8
41
+ rev: 7.3.0
42
+ hooks:
43
+ - id: flake8
44
+ args: ['--ignore=E501,W504']
45
+ - repo: https://github.com/PyCQA/autoflake
46
+ rev: v2.3.1
47
+ hooks:
48
+ - id: autoflake
49
+ args: [--remove-all-unused-imports, --in-place]
50
+ - repo: https://github.com/pre-commit/mirrors-mypy
51
+ rev: v1.17.1
52
+ hooks:
53
+ - id: mypy
54
+ additional_dependencies:
55
+ - types-pyyaml
56
+ - types-requests
57
+ - pandas-stubs
58
+ - sqlmodel
59
+ exclude: ^(testing/resources/|benchmarks/)
60
+ - repo: https://github.com/citation-file-format/cffconvert
61
+ rev: 054bda51dbe278b3e86f27c890e3f3ac877d616c
62
+ hooks:
63
+ - id: validate-cff
@@ -0,0 +1 @@
1
+ 3.12
@@ -0,0 +1,125 @@
1
+ Metadata-Version: 2.4
2
+ Name: chatsbom
3
+ Version: 0.2.1
4
+ Summary: ChatSBOM - Talk to your Supply Chain. Chat with SBOMs.
5
+ Requires-Python: >=3.12
6
+ Requires-Dist: claude-agent-sdk>=0.1.0
7
+ Requires-Dist: clickhouse-connect>=0.7.0
8
+ Requires-Dist: clickhouse-connect>=0.7.16
9
+ Requires-Dist: dotenv>=0.9.9
10
+ Requires-Dist: mcp>=1.26.0
11
+ Requires-Dist: pandas>=2.0.0
12
+ Requires-Dist: prompt-toolkit>=3.0.0
13
+ Requires-Dist: pygithub>=2.8.1
14
+ Requires-Dist: ratelimit>=2.2.1
15
+ Requires-Dist: requests-cache>=1.3.0
16
+ Requires-Dist: requests>=2.32.5
17
+ Requires-Dist: rich>=14.3.2
18
+ Requires-Dist: structlog>=24.0.0
19
+ Requires-Dist: textual>=7.5.0
20
+ Requires-Dist: typer>=0.21.1
21
+ Description-Content-Type: text/markdown
22
+
23
+ # ChatSBOM
24
+
25
+ **Talk to your Supply Chain. Chat with SBOMs.**
26
+
27
+ ChatSBOM is a CLI tool for deep insights into Software Bill of Materials (SBOM) data.
28
+
29
+ ![Demo](figures/demo.gif)
30
+
31
+ ## Motivation
32
+
33
+ GitHub's Dependency Graph shows which repositories depend on your project, but there's no way to sort dependents by stars ([isaacs/github#1537](https://github.com/isaacs/github/issues/1537)). This makes it difficult for maintainers of popular packages to identify their most important downstream users. **ChatSBOM** solves this by collecting and indexing SBOM data, enabling queries like "which popular projects use my library?"
34
+
35
+ ## Key Features
36
+
37
+ - **Collect**: Find high-quality repos on GitHub (stars/language)
38
+ - **Download**: Fetch dependency files (`go.mod`, `package.json`, etc.)
39
+ - **Convert**: Transform files to standard SBOM format using Syft
40
+ - **Index**: Load SBOM data into ClickHouse database
41
+ - **Status**: View database statistics and insights
42
+ - **Query**: Search for library dependencies via CLI
43
+ - **Chat**: AI-powered natural language queries
44
+
45
+ ## Quick Start
46
+
47
+ ### Prerequisites
48
+
49
+ - [uv](https://github.com/astral-sh/uv) - Python package manager for fast installation and execution of the CLI tool
50
+ - [syft](https://github.com/anchore/syft) - SBOM generation tool for extracting dependency data from project files
51
+ - [docker](https://github.com/docker/docker) - Container runtime for running infrastructure services
52
+ - [docker-compose](https://github.com/docker/compose) - Container orchestration tool for managing multi-container deployments
53
+ - [clickhouse](https://github.com/ClickHouse/ClickHouse) - Columnar database for storing and querying SBOM metadata efficiently
54
+
55
+ ### Usage
56
+
57
+ Install `uv`
58
+
59
+ ```bash
60
+ curl -LsSf https://astral.sh/uv/install.sh | sh
61
+ ```
62
+
63
+ Run commands directly with `uvx`:
64
+
65
+ ```bash
66
+ # 1. Collect repository links from GitHub (e.g., top Go repos)
67
+ uvx chatsbom collect --language go --min-stars 1000
68
+
69
+ # 2. Download dependency files
70
+ uvx chatsbom download --language go
71
+
72
+ # 3. Convert to standard SBOM format
73
+ uvx chatsbom convert --language go
74
+
75
+ # 4. Index SBOM data into database
76
+ uvx chatsbom index --language go
77
+
78
+ # 5. Show database statistics
79
+ uvx chatsbom status
80
+
81
+ # 6. Query dependencies
82
+ uvx chatsbom query gin
83
+
84
+ # 7. Launch AI chat interface
85
+ uvx chatsbom chat
86
+ ```
87
+
88
+ ## Architecture
89
+
90
+ ChatSBOM follows a clean, modular architecture with high cohesion and low coupling:
91
+
92
+ ### Command Flow
93
+
94
+ ```
95
+ collect → download → convert → index → status/query/chat
96
+ ↓ ↓ ↓ ↓
97
+ .jsonl files/ sbom.json database
98
+ ```
99
+
100
+ ### Core Modules
101
+
102
+ - **`chatsbom.core.config`**: Centralized configuration management
103
+ - Path conventions (data directories, file naming)
104
+ - Database connection settings
105
+ - GitHub API configuration
106
+
107
+ - **`chatsbom.core.repository`**: Data access layer (Repository Pattern)
108
+ - Abstracts all database operations
109
+ - Uses generators for memory-efficient data streaming
110
+ - Supports batch operations for large datasets
111
+
112
+ - **`chatsbom.core.validation`**: Data validation utilities
113
+ - Validates data flow between commands
114
+ - Ensures data integrity
115
+
116
+ - **`chatsbom.commands.*`**: CLI commands (7 commands)
117
+ - Each command has a single responsibility
118
+ - Decoupled through configuration and repository layers
119
+
120
+ ## Use Cases
121
+
122
+ ### Asking AI Agent to retrieve the top 10 projects using gin framework.
123
+
124
+ ![01](figures/use-cases/gin/01.png)
125
+ ![02](figures/use-cases/gin/02.png)
@@ -0,0 +1,103 @@
1
+ # ChatSBOM
2
+
3
+ **Talk to your Supply Chain. Chat with SBOMs.**
4
+
5
+ ChatSBOM is a CLI tool for deep insights into Software Bill of Materials (SBOM) data.
6
+
7
+ ![Demo](figures/demo.gif)
8
+
9
+ ## Motivation
10
+
11
+ GitHub's Dependency Graph shows which repositories depend on your project, but there's no way to sort dependents by stars ([isaacs/github#1537](https://github.com/isaacs/github/issues/1537)). This makes it difficult for maintainers of popular packages to identify their most important downstream users. **ChatSBOM** solves this by collecting and indexing SBOM data, enabling queries like "which popular projects use my library?"
12
+
13
+ ## Key Features
14
+
15
+ - **Collect**: Find high-quality repos on GitHub (stars/language)
16
+ - **Download**: Fetch dependency files (`go.mod`, `package.json`, etc.)
17
+ - **Convert**: Transform files to standard SBOM format using Syft
18
+ - **Index**: Load SBOM data into ClickHouse database
19
+ - **Status**: View database statistics and insights
20
+ - **Query**: Search for library dependencies via CLI
21
+ - **Chat**: AI-powered natural language queries
22
+
23
+ ## Quick Start
24
+
25
+ ### Prerequisites
26
+
27
+ - [uv](https://github.com/astral-sh/uv) - Python package manager for fast installation and execution of the CLI tool
28
+ - [syft](https://github.com/anchore/syft) - SBOM generation tool for extracting dependency data from project files
29
+ - [docker](https://github.com/docker/docker) - Container runtime for running infrastructure services
30
+ - [docker-compose](https://github.com/docker/compose) - Container orchestration tool for managing multi-container deployments
31
+ - [clickhouse](https://github.com/ClickHouse/ClickHouse) - Columnar database for storing and querying SBOM metadata efficiently
32
+
33
+ ### Usage
34
+
35
+ Install `uv`
36
+
37
+ ```bash
38
+ curl -LsSf https://astral.sh/uv/install.sh | sh
39
+ ```
40
+
41
+ Run commands directly with `uvx`:
42
+
43
+ ```bash
44
+ # 1. Collect repository links from GitHub (e.g., top Go repos)
45
+ uvx chatsbom collect --language go --min-stars 1000
46
+
47
+ # 2. Download dependency files
48
+ uvx chatsbom download --language go
49
+
50
+ # 3. Convert to standard SBOM format
51
+ uvx chatsbom convert --language go
52
+
53
+ # 4. Index SBOM data into database
54
+ uvx chatsbom index --language go
55
+
56
+ # 5. Show database statistics
57
+ uvx chatsbom status
58
+
59
+ # 6. Query dependencies
60
+ uvx chatsbom query gin
61
+
62
+ # 7. Launch AI chat interface
63
+ uvx chatsbom chat
64
+ ```
65
+
66
+ ## Architecture
67
+
68
+ ChatSBOM follows a clean, modular architecture with high cohesion and low coupling:
69
+
70
+ ### Command Flow
71
+
72
+ ```
73
+ collect → download → convert → index → status/query/chat
74
+ ↓ ↓ ↓ ↓
75
+ .jsonl files/ sbom.json database
76
+ ```
77
+
78
+ ### Core Modules
79
+
80
+ - **`chatsbom.core.config`**: Centralized configuration management
81
+ - Path conventions (data directories, file naming)
82
+ - Database connection settings
83
+ - GitHub API configuration
84
+
85
+ - **`chatsbom.core.repository`**: Data access layer (Repository Pattern)
86
+ - Abstracts all database operations
87
+ - Uses generators for memory-efficient data streaming
88
+ - Supports batch operations for large datasets
89
+
90
+ - **`chatsbom.core.validation`**: Data validation utilities
91
+ - Validates data flow between commands
92
+ - Ensures data integrity
93
+
94
+ - **`chatsbom.commands.*`**: CLI commands (7 commands)
95
+ - Each command has a single responsibility
96
+ - Decoupled through configuration and repository layers
97
+
98
+ ## Use Cases
99
+
100
+ ### Asking AI Agent to retrieve the top 10 projects using gin framework.
101
+
102
+ ![01](figures/use-cases/gin/01.png)
103
+ ![02](figures/use-cases/gin/02.png)
File without changes
@@ -0,0 +1,27 @@
1
+ import typer
2
+
3
+ from chatsbom.commands import chat
4
+ from chatsbom.commands import collect
5
+ from chatsbom.commands import convert
6
+ from chatsbom.commands import download
7
+ from chatsbom.commands import index
8
+ from chatsbom.commands import query
9
+ from chatsbom.commands import status
10
+
11
+ app = typer.Typer(
12
+ help='ChatSBOM - Talk to your Supply Chain. Chat with SBOMs.',
13
+ no_args_is_help=True,
14
+ add_completion=False,
15
+ )
16
+
17
+ # Commands ordered by typical workflow
18
+ app.command(name='collect')(collect.main)
19
+ app.command(name='download')(download.main)
20
+ app.command(name='convert')(convert.main)
21
+ app.command(name='index')(index.main)
22
+ app.command(name='status')(status.main)
23
+ app.command(name='chat')(chat.main)
24
+ app.command(name='query')(query.main)
25
+
26
+ if __name__ == '__main__':
27
+ app()
@@ -0,0 +1 @@
1
+ # CLI Commands