celeste-ai 0.0.1__tar.gz → 0.0.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.
Potentially problematic release.
This version of celeste-ai might be problematic. Click here for more details.
- celeste_ai-0.0.2/.github/workflows/ci.yml +197 -0
- celeste_ai-0.0.2/.github/workflows/claude-code-review.yml +53 -0
- celeste_ai-0.0.2/.github/workflows/claude.yml +49 -0
- celeste_ai-0.0.2/.gitignore +156 -0
- celeste_ai-0.0.2/.pre-commit-config.yaml +57 -0
- celeste_ai-0.0.2/CHANGELOG.md +7 -0
- celeste_ai-0.0.2/CONTRIBUTING.md +30 -0
- celeste_ai-0.0.2/Makefile +70 -0
- {celeste_ai-0.0.1 → celeste_ai-0.0.2}/PKG-INFO +19 -5
- {celeste_ai-0.0.1 → celeste_ai-0.0.2}/README.md +4 -1
- celeste_ai-0.0.2/pyproject.toml +123 -0
- {celeste_ai-0.0.1 → celeste_ai-0.0.2}/src/celeste/__init__.py +12 -10
- celeste_ai-0.0.2/src/celeste/artifacts.py +56 -0
- celeste_ai-0.0.2/src/celeste/core.py +35 -0
- celeste_ai-0.0.2/src/celeste/credentials.py +79 -0
- celeste_ai-0.0.2/src/celeste/mime_types.py +46 -0
- celeste_ai-0.0.2/src/celeste/py.typed +0 -0
- celeste_ai-0.0.2/tests/test_artifacts.py +90 -0
- celeste_ai-0.0.2/tests/test_core.py +172 -0
- celeste_ai-0.0.2/tests/test_credentials.py +343 -0
- celeste_ai-0.0.2/tests/test_mime_types.py +156 -0
- celeste_ai-0.0.2/tests/testing_guidelines.md +288 -0
- celeste_ai-0.0.1/.gitignore +0 -22
- celeste_ai-0.0.1/pyproject.toml +0 -30
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main, develop]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main, develop]
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
lint:
|
|
14
|
+
name: Lint & Format Check
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Set up Python
|
|
20
|
+
uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.11"
|
|
23
|
+
|
|
24
|
+
- name: Install uv
|
|
25
|
+
uses: astral-sh/setup-uv@v3
|
|
26
|
+
with:
|
|
27
|
+
enable-cache: true
|
|
28
|
+
cache-dependency-glob: "**/pyproject.toml"
|
|
29
|
+
|
|
30
|
+
- name: Install dependencies
|
|
31
|
+
run: |
|
|
32
|
+
uv sync --extra dev
|
|
33
|
+
|
|
34
|
+
- name: Run Ruff check and format
|
|
35
|
+
run: |
|
|
36
|
+
uv run ruff check --output-format=github src/ tests/
|
|
37
|
+
uv run ruff format --check src/ tests/
|
|
38
|
+
|
|
39
|
+
type-check:
|
|
40
|
+
name: Type Check
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
steps:
|
|
43
|
+
- uses: actions/checkout@v4
|
|
44
|
+
|
|
45
|
+
- name: Set up Python
|
|
46
|
+
uses: actions/setup-python@v5
|
|
47
|
+
with:
|
|
48
|
+
python-version: "3.11"
|
|
49
|
+
|
|
50
|
+
- name: Install uv
|
|
51
|
+
uses: astral-sh/setup-uv@v3
|
|
52
|
+
with:
|
|
53
|
+
enable-cache: true
|
|
54
|
+
cache-dependency-glob: "**/pyproject.toml"
|
|
55
|
+
|
|
56
|
+
- name: Install dependencies
|
|
57
|
+
run: |
|
|
58
|
+
uv sync --extra dev
|
|
59
|
+
|
|
60
|
+
- name: Run mypy
|
|
61
|
+
run: |
|
|
62
|
+
uv run mypy src/
|
|
63
|
+
|
|
64
|
+
security:
|
|
65
|
+
name: Security Check
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
steps:
|
|
68
|
+
- uses: actions/checkout@v4
|
|
69
|
+
|
|
70
|
+
- name: Set up Python
|
|
71
|
+
uses: actions/setup-python@v5
|
|
72
|
+
with:
|
|
73
|
+
python-version: "3.11"
|
|
74
|
+
|
|
75
|
+
- name: Install uv
|
|
76
|
+
uses: astral-sh/setup-uv@v3
|
|
77
|
+
with:
|
|
78
|
+
enable-cache: true
|
|
79
|
+
cache-dependency-glob: "**/pyproject.toml"
|
|
80
|
+
|
|
81
|
+
- name: Install dependencies
|
|
82
|
+
run: |
|
|
83
|
+
uv sync --extra dev
|
|
84
|
+
|
|
85
|
+
- name: Run Bandit
|
|
86
|
+
run: |
|
|
87
|
+
uv run bandit -r src/ -f json -o bandit-report.json || true
|
|
88
|
+
uv run bandit -r src/ -f screen
|
|
89
|
+
|
|
90
|
+
test:
|
|
91
|
+
name: Test (Python ${{ matrix.python-version }})
|
|
92
|
+
runs-on: ${{ matrix.os }}
|
|
93
|
+
strategy:
|
|
94
|
+
fail-fast: false
|
|
95
|
+
matrix:
|
|
96
|
+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
|
|
97
|
+
os: [ubuntu-latest]
|
|
98
|
+
include:
|
|
99
|
+
# Test on other OS with one Python version
|
|
100
|
+
- python-version: "3.11"
|
|
101
|
+
os: windows-latest
|
|
102
|
+
- python-version: "3.11"
|
|
103
|
+
os: macos-latest
|
|
104
|
+
|
|
105
|
+
steps:
|
|
106
|
+
- uses: actions/checkout@v4
|
|
107
|
+
|
|
108
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
109
|
+
uses: actions/setup-python@v5
|
|
110
|
+
with:
|
|
111
|
+
python-version: ${{ matrix.python-version }}
|
|
112
|
+
|
|
113
|
+
- name: Install uv
|
|
114
|
+
uses: astral-sh/setup-uv@v3
|
|
115
|
+
with:
|
|
116
|
+
enable-cache: true
|
|
117
|
+
cache-dependency-glob: "**/pyproject.toml"
|
|
118
|
+
|
|
119
|
+
- name: Install dependencies
|
|
120
|
+
run: |
|
|
121
|
+
uv sync --extra dev
|
|
122
|
+
|
|
123
|
+
- name: Run tests with coverage
|
|
124
|
+
run: |
|
|
125
|
+
uv run pytest -v --cov=celeste --cov-report=term-missing --cov-report=xml --cov-report=html
|
|
126
|
+
|
|
127
|
+
- name: Upload coverage reports
|
|
128
|
+
uses: codecov/codecov-action@v4
|
|
129
|
+
if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.11'
|
|
130
|
+
with:
|
|
131
|
+
file: ./coverage.xml
|
|
132
|
+
flags: unittests
|
|
133
|
+
name: codecov-umbrella
|
|
134
|
+
fail_ci_if_error: false
|
|
135
|
+
|
|
136
|
+
build:
|
|
137
|
+
name: Build Package
|
|
138
|
+
runs-on: ubuntu-latest
|
|
139
|
+
needs: [test]
|
|
140
|
+
steps:
|
|
141
|
+
- uses: actions/checkout@v4
|
|
142
|
+
|
|
143
|
+
- name: Set up Python
|
|
144
|
+
uses: actions/setup-python@v5
|
|
145
|
+
with:
|
|
146
|
+
python-version: "3.11"
|
|
147
|
+
|
|
148
|
+
- name: Install uv
|
|
149
|
+
uses: astral-sh/setup-uv@v3
|
|
150
|
+
with:
|
|
151
|
+
enable-cache: true
|
|
152
|
+
cache-dependency-glob: "**/pyproject.toml"
|
|
153
|
+
|
|
154
|
+
- name: Install dependencies
|
|
155
|
+
run: |
|
|
156
|
+
uv sync --extra dev
|
|
157
|
+
|
|
158
|
+
- name: Build package
|
|
159
|
+
run: |
|
|
160
|
+
uv build
|
|
161
|
+
|
|
162
|
+
- name: Check package
|
|
163
|
+
run: |
|
|
164
|
+
uv pip install twine
|
|
165
|
+
uv run twine check dist/*
|
|
166
|
+
|
|
167
|
+
- name: Upload artifacts
|
|
168
|
+
uses: actions/upload-artifact@v4
|
|
169
|
+
with:
|
|
170
|
+
name: dist
|
|
171
|
+
path: dist/
|
|
172
|
+
|
|
173
|
+
publish:
|
|
174
|
+
name: Publish to PyPI
|
|
175
|
+
runs-on: ubuntu-latest
|
|
176
|
+
# Only publish on push to main, not on PRs
|
|
177
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
178
|
+
needs: [build] # Use the build artifacts
|
|
179
|
+
# Requires setting up Trusted Publishing on PyPI:
|
|
180
|
+
# 1. Go to https://pypi.org/manage/project/celeste-ai/settings/publishing/
|
|
181
|
+
# 2. Add GitHub publisher with: owner=celeste-kai, repo=celeste-ai, workflow=ci.yml, environment=pypi
|
|
182
|
+
environment:
|
|
183
|
+
name: pypi
|
|
184
|
+
url: https://pypi.org/project/celeste-ai/
|
|
185
|
+
permissions:
|
|
186
|
+
id-token: write # OIDC publishing
|
|
187
|
+
steps:
|
|
188
|
+
- name: Download artifacts
|
|
189
|
+
uses: actions/download-artifact@v4
|
|
190
|
+
with:
|
|
191
|
+
name: dist
|
|
192
|
+
path: dist/
|
|
193
|
+
|
|
194
|
+
- name: Publish to PyPI
|
|
195
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
196
|
+
with:
|
|
197
|
+
skip-existing: true # Skip if version already exists
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: Claude Code Review
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [opened, synchronize]
|
|
6
|
+
# Optional: Only run on specific file changes
|
|
7
|
+
# paths:
|
|
8
|
+
# - "src/**/*.ts"
|
|
9
|
+
# - "src/**/*.tsx"
|
|
10
|
+
# - "src/**/*.js"
|
|
11
|
+
# - "src/**/*.jsx"
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
claude-review:
|
|
15
|
+
# Optional: Filter by PR author
|
|
16
|
+
# if: |
|
|
17
|
+
# github.event.pull_request.user.login == 'external-contributor' ||
|
|
18
|
+
# github.event.pull_request.user.login == 'new-developer' ||
|
|
19
|
+
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
|
|
20
|
+
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
permissions:
|
|
23
|
+
contents: read
|
|
24
|
+
pull-requests: read
|
|
25
|
+
issues: read
|
|
26
|
+
id-token: write
|
|
27
|
+
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout repository
|
|
30
|
+
uses: actions/checkout@v4
|
|
31
|
+
with:
|
|
32
|
+
fetch-depth: 1
|
|
33
|
+
|
|
34
|
+
- name: Run Claude Code Review
|
|
35
|
+
id: claude-review
|
|
36
|
+
uses: anthropics/claude-code-action@v1
|
|
37
|
+
with:
|
|
38
|
+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
39
|
+
prompt: |
|
|
40
|
+
Please review this pull request and provide feedback on:
|
|
41
|
+
- Code quality and best practices
|
|
42
|
+
- Potential bugs or issues
|
|
43
|
+
- Performance considerations
|
|
44
|
+
- Security concerns
|
|
45
|
+
- Test coverage
|
|
46
|
+
|
|
47
|
+
Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.
|
|
48
|
+
|
|
49
|
+
Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.
|
|
50
|
+
|
|
51
|
+
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
|
52
|
+
# or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options
|
|
53
|
+
claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
name: Claude Code
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issue_comment:
|
|
5
|
+
types: [created]
|
|
6
|
+
pull_request_review_comment:
|
|
7
|
+
types: [created]
|
|
8
|
+
issues:
|
|
9
|
+
types: [opened, assigned]
|
|
10
|
+
pull_request_review:
|
|
11
|
+
types: [submitted]
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
claude:
|
|
15
|
+
if: |
|
|
16
|
+
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
17
|
+
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
18
|
+
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
|
19
|
+
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
pull-requests: read
|
|
24
|
+
issues: read
|
|
25
|
+
id-token: write
|
|
26
|
+
actions: read # Required for Claude to read CI results on PRs
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout repository
|
|
29
|
+
uses: actions/checkout@v4
|
|
30
|
+
with:
|
|
31
|
+
fetch-depth: 1
|
|
32
|
+
|
|
33
|
+
- name: Run Claude Code
|
|
34
|
+
id: claude
|
|
35
|
+
uses: anthropics/claude-code-action@v1
|
|
36
|
+
with:
|
|
37
|
+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
38
|
+
|
|
39
|
+
# This is an optional setting that allows Claude to read CI results on PRs
|
|
40
|
+
additional_permissions: |
|
|
41
|
+
actions: read
|
|
42
|
+
|
|
43
|
+
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
|
|
44
|
+
# prompt: 'Update the pull request description to include a summary of changes.'
|
|
45
|
+
|
|
46
|
+
# Optional: Add claude_args to customize behavior and configuration
|
|
47
|
+
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
|
48
|
+
# or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options
|
|
49
|
+
# claude_args: '--model claude-opus-4-1-20250805 --allowed-tools Bash(gh pr:*)'
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
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
|
+
*.manifest
|
|
31
|
+
*.spec
|
|
32
|
+
|
|
33
|
+
# Installer logs
|
|
34
|
+
pip-log.txt
|
|
35
|
+
pip-delete-this-directory.txt
|
|
36
|
+
|
|
37
|
+
# Unit test / coverage reports
|
|
38
|
+
htmlcov/
|
|
39
|
+
.tox/
|
|
40
|
+
.nox/
|
|
41
|
+
.coverage
|
|
42
|
+
.coverage.*
|
|
43
|
+
.cache
|
|
44
|
+
nosetests.xml
|
|
45
|
+
coverage.xml
|
|
46
|
+
*.cover
|
|
47
|
+
*.py,cover
|
|
48
|
+
.hypothesis/
|
|
49
|
+
.pytest_cache/
|
|
50
|
+
cover/
|
|
51
|
+
|
|
52
|
+
# Translations
|
|
53
|
+
*.mo
|
|
54
|
+
*.pot
|
|
55
|
+
|
|
56
|
+
# Django stuff:
|
|
57
|
+
*.log
|
|
58
|
+
local_settings.py
|
|
59
|
+
db.sqlite3
|
|
60
|
+
db.sqlite3-journal
|
|
61
|
+
|
|
62
|
+
# Flask stuff:
|
|
63
|
+
instance/
|
|
64
|
+
.webassets-cache
|
|
65
|
+
|
|
66
|
+
# Scrapy stuff:
|
|
67
|
+
.scrapy
|
|
68
|
+
|
|
69
|
+
# Sphinx documentation
|
|
70
|
+
docs/_build/
|
|
71
|
+
|
|
72
|
+
# PyBuilder
|
|
73
|
+
.pybuilder/
|
|
74
|
+
target/
|
|
75
|
+
|
|
76
|
+
# Jupyter Notebook
|
|
77
|
+
.ipynb_checkpoints
|
|
78
|
+
|
|
79
|
+
# IPython
|
|
80
|
+
profile_default/
|
|
81
|
+
ipython_config.py
|
|
82
|
+
|
|
83
|
+
# pyenv
|
|
84
|
+
.python-version
|
|
85
|
+
|
|
86
|
+
# pipenv
|
|
87
|
+
Pipfile.lock
|
|
88
|
+
|
|
89
|
+
# poetry
|
|
90
|
+
poetry.lock
|
|
91
|
+
|
|
92
|
+
# pdm
|
|
93
|
+
.pdm.toml
|
|
94
|
+
.pdm-python
|
|
95
|
+
.pdm-build/
|
|
96
|
+
|
|
97
|
+
# PEP 582
|
|
98
|
+
__pypackages__/
|
|
99
|
+
|
|
100
|
+
# Celery stuff
|
|
101
|
+
celerybeat-schedule
|
|
102
|
+
celerybeat.pid
|
|
103
|
+
|
|
104
|
+
# SageMath parsed files
|
|
105
|
+
*.sage.py
|
|
106
|
+
|
|
107
|
+
# Environments
|
|
108
|
+
.env
|
|
109
|
+
.venv
|
|
110
|
+
env/
|
|
111
|
+
venv/
|
|
112
|
+
ENV/
|
|
113
|
+
env.bak/
|
|
114
|
+
venv.bak/
|
|
115
|
+
|
|
116
|
+
# Spyder project settings
|
|
117
|
+
.spyderproject
|
|
118
|
+
.spyproject
|
|
119
|
+
|
|
120
|
+
# Rope project settings
|
|
121
|
+
.ropeproject
|
|
122
|
+
|
|
123
|
+
# mkdocs documentation
|
|
124
|
+
/site
|
|
125
|
+
|
|
126
|
+
# mypy
|
|
127
|
+
.mypy_cache/
|
|
128
|
+
.dmypy.json
|
|
129
|
+
dmypy.json
|
|
130
|
+
|
|
131
|
+
# Pyre type checker
|
|
132
|
+
.pyre/
|
|
133
|
+
|
|
134
|
+
# pytype static type analyzer
|
|
135
|
+
.pytype/
|
|
136
|
+
|
|
137
|
+
# Cython debug symbols
|
|
138
|
+
cython_debug/
|
|
139
|
+
|
|
140
|
+
# IDEs
|
|
141
|
+
.vscode/
|
|
142
|
+
.idea/
|
|
143
|
+
*.swp
|
|
144
|
+
*.swo
|
|
145
|
+
*~
|
|
146
|
+
.DS_Store
|
|
147
|
+
|
|
148
|
+
# UV
|
|
149
|
+
.uv/
|
|
150
|
+
uv.lock
|
|
151
|
+
|
|
152
|
+
# Ruff
|
|
153
|
+
.ruff_cache/
|
|
154
|
+
|
|
155
|
+
# Security reports
|
|
156
|
+
bandit-report.json
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# See https://pre-commit.com for more information
|
|
2
|
+
repos:
|
|
3
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
4
|
+
rev: v4.6.0
|
|
5
|
+
hooks:
|
|
6
|
+
- id: no-commit-to-branch
|
|
7
|
+
name: "🚫 Prevent commits to protected branches"
|
|
8
|
+
args: [--branch, main, --branch, master, --branch, develop]
|
|
9
|
+
- id: trailing-whitespace
|
|
10
|
+
- id: end-of-file-fixer
|
|
11
|
+
- id: check-yaml
|
|
12
|
+
- id: check-added-large-files
|
|
13
|
+
- id: check-toml
|
|
14
|
+
- id: check-merge-conflict
|
|
15
|
+
- id: check-json
|
|
16
|
+
- id: debug-statements # Check for print/pdb statements
|
|
17
|
+
|
|
18
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
19
|
+
rev: v0.13.1
|
|
20
|
+
hooks:
|
|
21
|
+
# Run the linter
|
|
22
|
+
- id: ruff
|
|
23
|
+
args: [--fix]
|
|
24
|
+
name: "🐍 Lint with Ruff"
|
|
25
|
+
# Run the formatter
|
|
26
|
+
- id: ruff-format
|
|
27
|
+
name: "🐍 Format with Ruff"
|
|
28
|
+
|
|
29
|
+
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
30
|
+
rev: v1.13.0
|
|
31
|
+
hooks:
|
|
32
|
+
- id: mypy
|
|
33
|
+
name: "🐍 Type check with mypy"
|
|
34
|
+
additional_dependencies: [
|
|
35
|
+
types-requests,
|
|
36
|
+
pydantic,
|
|
37
|
+
pydantic-settings,
|
|
38
|
+
pytest,
|
|
39
|
+
]
|
|
40
|
+
args: [--config-file=pyproject.toml, src/, tests/]
|
|
41
|
+
pass_filenames: false
|
|
42
|
+
|
|
43
|
+
- repo: https://github.com/PyCQA/bandit
|
|
44
|
+
rev: 1.7.10
|
|
45
|
+
hooks:
|
|
46
|
+
- id: bandit
|
|
47
|
+
name: "🔒 Security check with Bandit"
|
|
48
|
+
args: ["-c", "pyproject.toml"]
|
|
49
|
+
additional_dependencies: ["bandit[toml]"]
|
|
50
|
+
|
|
51
|
+
- repo: https://github.com/kynan/nbstripout
|
|
52
|
+
rev: 0.7.1
|
|
53
|
+
hooks:
|
|
54
|
+
- id: nbstripout
|
|
55
|
+
name: "📓 Clean Jupyter notebook outputs"
|
|
56
|
+
description: "Strip output from Jupyter notebooks"
|
|
57
|
+
args: [--max-size=5]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
## Setup
|
|
4
|
+
```bash
|
|
5
|
+
uv sync --extra dev
|
|
6
|
+
pre-commit install
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Commit Convention
|
|
10
|
+
|
|
11
|
+
We use [Conventional Commits](https://www.conventionalcommits.org/) for automatic versioning:
|
|
12
|
+
|
|
13
|
+
- `fix:` → Patch (0.0.1 → 0.0.2)
|
|
14
|
+
- `feat:` → Minor (0.0.2 → 0.1.0)
|
|
15
|
+
- `BREAKING CHANGE:` or `!` → Major (0.1.0 → 1.0.0)
|
|
16
|
+
- `docs:`, `style:`, `refactor:`, `test:`, `chore:` → No version bump
|
|
17
|
+
|
|
18
|
+
Examples:
|
|
19
|
+
```bash
|
|
20
|
+
fix: handle empty API keys
|
|
21
|
+
feat: add Claude 3.5 support
|
|
22
|
+
feat!: migrate to pydantic v2
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
1. Branch from `main`
|
|
27
|
+
2. Make changes (follow commit convention)
|
|
28
|
+
3. Run `make cicd`
|
|
29
|
+
4. Create PR
|
|
30
|
+
5. After merge, version bumps automatically
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
.PHONY: help lint format typecheck test security cicd clean
|
|
2
|
+
|
|
3
|
+
# Default target
|
|
4
|
+
help:
|
|
5
|
+
@echo "Available commands:"
|
|
6
|
+
@echo " make lint - Run Ruff linting"
|
|
7
|
+
@echo " make format - Apply Ruff formatting"
|
|
8
|
+
@echo " make typecheck - Run mypy type checking"
|
|
9
|
+
@echo " make test - Run pytest with coverage"
|
|
10
|
+
@echo " make security - Run Bandit security scan"
|
|
11
|
+
@echo " make cicd - Run full CI/CD pipeline"
|
|
12
|
+
@echo " make clean - Clean cache directories"
|
|
13
|
+
|
|
14
|
+
# Linting
|
|
15
|
+
lint:
|
|
16
|
+
uv run ruff check src/ tests/
|
|
17
|
+
|
|
18
|
+
# Formatting
|
|
19
|
+
format:
|
|
20
|
+
uv run ruff format src/ tests/
|
|
21
|
+
|
|
22
|
+
# Type checking
|
|
23
|
+
typecheck:
|
|
24
|
+
uv run mypy src/
|
|
25
|
+
uv run mypy tests/
|
|
26
|
+
|
|
27
|
+
# Testing
|
|
28
|
+
test:
|
|
29
|
+
uv run pytest tests/ --cov=celeste --cov-report=term-missing --cov-fail-under=90
|
|
30
|
+
|
|
31
|
+
# Security scanning
|
|
32
|
+
security:
|
|
33
|
+
uv run bandit -r src/ -f screen
|
|
34
|
+
|
|
35
|
+
# Full CI/CD pipeline - what GitHub Actions will run
|
|
36
|
+
cicd:
|
|
37
|
+
@echo "🔍 Running Full CI/CD Pipeline..."
|
|
38
|
+
@echo "================================="
|
|
39
|
+
@echo "1️⃣ Ruff Linting..."
|
|
40
|
+
@uv run ruff check src/ tests/ || (echo "❌ Linting failed" && exit 1)
|
|
41
|
+
@echo "✅ Linting passed"
|
|
42
|
+
@echo ""
|
|
43
|
+
@echo "2️⃣ Ruff Format Check..."
|
|
44
|
+
@uv run ruff format --check src/ tests/ || (echo "❌ Format check failed. Run 'make format' to fix." && exit 1)
|
|
45
|
+
@echo "✅ Format check passed"
|
|
46
|
+
@echo ""
|
|
47
|
+
@echo "3️⃣ MyPy Type Checking..."
|
|
48
|
+
@uv run mypy src/ || (echo "❌ Type checking failed (src)" && exit 1)
|
|
49
|
+
@uv run mypy tests/ || (echo "❌ Type checking failed (tests)" && exit 1)
|
|
50
|
+
@echo "✅ Type checking passed"
|
|
51
|
+
@echo ""
|
|
52
|
+
@echo "4️⃣ Bandit Security Scan..."
|
|
53
|
+
@uv run bandit -r src/ -q || (echo "❌ Security scan failed" && exit 1)
|
|
54
|
+
@echo "✅ Security scan passed"
|
|
55
|
+
@echo ""
|
|
56
|
+
@echo "5️⃣ Running Tests with Coverage..."
|
|
57
|
+
@uv run pytest tests/ --cov=celeste --cov-report=term --cov-fail-under=90 -q || (echo "❌ Tests failed" && exit 1)
|
|
58
|
+
@echo ""
|
|
59
|
+
@echo "================================="
|
|
60
|
+
@echo "🎉 All CI/CD checks passed! Ready to commit."
|
|
61
|
+
|
|
62
|
+
# Clean cache directories
|
|
63
|
+
clean:
|
|
64
|
+
rm -rf .pytest_cache
|
|
65
|
+
rm -rf .mypy_cache
|
|
66
|
+
rm -rf .ruff_cache
|
|
67
|
+
rm -rf __pycache__
|
|
68
|
+
find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
|
|
69
|
+
find . -type d -name ".pytest_cache" -exec rm -rf {} + 2>/dev/null || true
|
|
70
|
+
find . -type f -name "*.pyc" -delete
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: celeste-ai
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.2
|
|
4
4
|
Summary: Celeste AI Framework - Multi-modal AI interface (placeholder)
|
|
5
|
-
Project-URL: Homepage, https://
|
|
6
|
-
Project-URL: Repository, https://github.com/
|
|
7
|
-
Author-email: agent-kai <
|
|
5
|
+
Project-URL: Homepage, https://celeste-ai.co
|
|
6
|
+
Project-URL: Repository, https://github.com/celeste-kai/celeste-ai
|
|
7
|
+
Author-email: agent-kai <kai@celeste-ai.co>
|
|
8
8
|
Keywords: ai,anthropic,google,ml,multimodal,openai
|
|
9
9
|
Classifier: Development Status :: 1 - Planning
|
|
10
10
|
Classifier: Intended Audience :: Developers
|
|
@@ -16,10 +16,24 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
17
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
18
|
Requires-Python: >=3.9
|
|
19
|
+
Requires-Dist: pydantic-settings>=2.0
|
|
20
|
+
Requires-Dist: pydantic>=2.0
|
|
21
|
+
Provides-Extra: dev
|
|
22
|
+
Requires-Dist: bandit[toml]>=1.7.5; extra == 'dev'
|
|
23
|
+
Requires-Dist: mypy>=1.13.0; extra == 'dev'
|
|
24
|
+
Requires-Dist: pre-commit>=3.5.0; extra == 'dev'
|
|
25
|
+
Requires-Dist: pytest-cov>=7.0; extra == 'dev'
|
|
26
|
+
Requires-Dist: pytest-randomly>=4.0; extra == 'dev'
|
|
27
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
28
|
+
Requires-Dist: ruff>=0.8.0; extra == 'dev'
|
|
29
|
+
Requires-Dist: types-requests>=2.31.0; extra == 'dev'
|
|
19
30
|
Description-Content-Type: text/markdown
|
|
20
31
|
|
|
21
32
|
# Celeste AI Framework
|
|
22
33
|
|
|
34
|
+
[](https://github.com/semantic-release/semantic-release)
|
|
35
|
+
[](https://pypi.org/project/celeste-ai/)
|
|
36
|
+
|
|
23
37
|
> **Note: This is a placeholder package to reserve the name. The full framework is coming soon!**
|
|
24
38
|
|
|
25
39
|
Celeste AI will be a unified multi-modal AI framework providing a single interface for:
|
|
@@ -56,4 +70,4 @@ pip install "celeste-ai[vision]" # Image/video generation
|
|
|
56
70
|
|
|
57
71
|
**Status**: Package name reserved. Framework in active development.
|
|
58
72
|
|
|
59
|
-
**Contact**: [GitHub Issues](https://github.com/agent-kai/celeste-ai)
|
|
73
|
+
**Contact**: [GitHub Issues](https://github.com/agent-kai/celeste-ai)
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# Celeste AI Framework
|
|
2
2
|
|
|
3
|
+
[](https://github.com/semantic-release/semantic-release)
|
|
4
|
+
[](https://pypi.org/project/celeste-ai/)
|
|
5
|
+
|
|
3
6
|
> **Note: This is a placeholder package to reserve the name. The full framework is coming soon!**
|
|
4
7
|
|
|
5
8
|
Celeste AI will be a unified multi-modal AI framework providing a single interface for:
|
|
@@ -36,4 +39,4 @@ pip install "celeste-ai[vision]" # Image/video generation
|
|
|
36
39
|
|
|
37
40
|
**Status**: Package name reserved. Framework in active development.
|
|
38
41
|
|
|
39
|
-
**Contact**: [GitHub Issues](https://github.com/agent-kai/celeste-ai)
|
|
42
|
+
**Contact**: [GitHub Issues](https://github.com/agent-kai/celeste-ai)
|