diff --git a/.claude/commands/update-bolt.md b/.claude/commands/update-bolt.md new file mode 100644 index 0000000..2405b57 --- /dev/null +++ b/.claude/commands/update-bolt.md @@ -0,0 +1,38 @@ +Update the vendored bolt-python wheel to the latest commit on the `main` branch. + +## Steps + +1. If `.bolt-python-build/` exists, `cd` into it and run `git pull`. Otherwise, clone bolt-python: + ``` + git clone --depth 1 https://github.com/slackapi/bolt-python.git .bolt-python-build + ``` + +2. `cd .bolt-python-build` and get the HEAD commit SHA (short form, 7 chars): + ``` + SHA=$(git rev-parse --short HEAD) + ``` + +3. Read the current version from `slack_bolt/version.py` and patch it to append `+` as a PEP 440 local version identifier: + ``` + sed -i '' "s/__version__ = \"\(.*\)\"/__version__ = \"\1+$SHA\"/" slack_bolt/version.py + ``` + +4. Build the wheel: + ``` + python -m build --wheel + ``` + +5. Remove any old `.whl` files from `vendor/` and copy the new one in: + ``` + rm -f ../vendor/slack_bolt-*.whl + cp dist/slack_bolt-*.whl ../vendor/ + ``` + +6. Update the whl filename in all three `requirements.txt` files (`claude-agent-sdk/requirements.txt`, `openai-agents-sdk/requirements.txt`, `pydantic-ai/requirements.txt`). Replace the existing `../vendor/slack_bolt-*.whl` line with the new filename. + +7. Clean up the build directory: + ``` + cd .. && rm -rf .bolt-python-build + ``` + +8. Report the old version/SHA vs new version/SHA to the user. Do NOT commit — let the user review first. diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 44b6c91..ebedf95 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,6 +11,9 @@ updates: labels: - "pip" - "dependencies" + ignore: + - dependency-name: "slack-bolt" + # Vendored from bolt-python main — managed via /project:update-bolt - package-ecosystem: "github-actions" directory: "/" schedule: diff --git a/.gitignore b/.gitignore index 4508aa9..9bd6bb3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ # Claude .claude/*.local.json + +# bolt-python build scratch (used by /project:update-bolt command) +.bolt-python-build/ diff --git a/README.md b/README.md index 8feea20..45694ca 100644 --- a/README.md +++ b/README.md @@ -27,3 +27,21 @@ Casey gives your team instant IT support through three entry points: Behind the scenes, Casey has access to five simulated tools: knowledge base search, support ticket creation, password reset, system status checks, and user permissions lookup. > **Note:** All tools return simulated data for demonstration purposes. In a production app, these would connect to your actual IT systems. + +## Local Development + +This repo uses a vendored (pre-release) build of `slack-bolt` from the [bolt-python](https://github.com/slackapi/bolt-python) `main` branch. The `.whl` file lives in `vendor/` and is referenced by each app's `requirements.txt`. + +Always install dependencies with: + +```sh +pip install -r requirements.txt +``` + +Do not use `pip install .` or `pip install -e .` — those read from `pyproject.toml`, which does not reference the vendored wheel. + +To update the vendored bolt-python to the latest `main`, run the Claude Code slash command: + +``` +/project:update-bolt +``` diff --git a/claude-agent-sdk/README.md b/claude-agent-sdk/README.md index 2485edc..f566c93 100644 --- a/claude-agent-sdk/README.md +++ b/claude-agent-sdk/README.md @@ -101,7 +101,6 @@ source .venv/bin/activate # for Windows OS, .\.venv\Scripts\Activate instead sh ```sh pip install -r requirements.txt -# or pip install -e . ``` ## Providers diff --git a/claude-agent-sdk/pyproject.toml b/claude-agent-sdk/pyproject.toml index e1246cc..8c7b35e 100644 --- a/claude-agent-sdk/pyproject.toml +++ b/claude-agent-sdk/pyproject.toml @@ -4,7 +4,7 @@ version = "0.1.0" requires-python = ">=3.12" dependencies = [ "slack-sdk==3.40.1", - "slack-bolt==1.27.0", + # slack-bolt is installed from a vendored whl — see ../vendor/ "slack-cli-hooks<1.0.0", "claude-agent-sdk>=0.1.36", "aiohttp>=3.13.3", diff --git a/claude-agent-sdk/requirements.txt b/claude-agent-sdk/requirements.txt index cf51080..b533ed1 100644 --- a/claude-agent-sdk/requirements.txt +++ b/claude-agent-sdk/requirements.txt @@ -1,5 +1,5 @@ slack-sdk==3.40.1 -slack-bolt==1.27.0 +../vendor/slack_bolt-1.27.0+837e120-py2.py3-none-any.whl slack-cli-hooks<1.0.0 claude-agent-sdk>=0.1.36 aiohttp>=3.13.3 diff --git a/openai-agents-sdk/README.md b/openai-agents-sdk/README.md index 1584f65..30eea49 100644 --- a/openai-agents-sdk/README.md +++ b/openai-agents-sdk/README.md @@ -101,7 +101,6 @@ source .venv/bin/activate # for Windows OS, .\.venv\Scripts\Activate instead sh ```sh pip install -r requirements.txt -# or pip install -e . ``` ## Providers diff --git a/openai-agents-sdk/pyproject.toml b/openai-agents-sdk/pyproject.toml index 97bd883..9982ddf 100644 --- a/openai-agents-sdk/pyproject.toml +++ b/openai-agents-sdk/pyproject.toml @@ -4,7 +4,7 @@ version = "0.1.0" requires-python = ">=3.10" dependencies = [ "slack-sdk==3.40.1", - "slack-bolt==1.27.0", + # slack-bolt is installed from a vendored whl — see ../vendor/ "slack-cli-hooks<1.0.0", "openai-agents", "python-dotenv==1.2.1", diff --git a/openai-agents-sdk/requirements.txt b/openai-agents-sdk/requirements.txt index bdb6adb..96a2074 100644 --- a/openai-agents-sdk/requirements.txt +++ b/openai-agents-sdk/requirements.txt @@ -1,5 +1,5 @@ slack-sdk==3.40.1 -slack-bolt==1.27.0 +../vendor/slack_bolt-1.27.0+837e120-py2.py3-none-any.whl slack-cli-hooks<1.0.0 openai-agents python-dotenv==1.2.1 diff --git a/pydantic-ai/README.md b/pydantic-ai/README.md index 0de321b..6764e73 100644 --- a/pydantic-ai/README.md +++ b/pydantic-ai/README.md @@ -101,7 +101,6 @@ source .venv/bin/activate # for Windows OS, .\.venv\Scripts\Activate instead sh ```sh pip install -r requirements.txt -# or pip install -e . ``` ## Providers diff --git a/pydantic-ai/pyproject.toml b/pydantic-ai/pyproject.toml index 85b8770..4fe0aa4 100644 --- a/pydantic-ai/pyproject.toml +++ b/pydantic-ai/pyproject.toml @@ -4,7 +4,7 @@ version = "0.1.0" requires-python = ">=3.10" dependencies = [ "slack-sdk==3.40.1", - "slack-bolt==1.27.0", + # slack-bolt is installed from a vendored whl — see ../vendor/ "slack-cli-hooks<1.0.0", "pydantic-ai[openai]", "python-dotenv==1.2.1", diff --git a/pydantic-ai/requirements.txt b/pydantic-ai/requirements.txt index 518e028..570118f 100644 --- a/pydantic-ai/requirements.txt +++ b/pydantic-ai/requirements.txt @@ -1,5 +1,5 @@ slack-sdk==3.40.1 -slack-bolt==1.27.0 +../vendor/slack_bolt-1.27.0+837e120-py2.py3-none-any.whl slack-cli-hooks<1.0.0 pydantic-ai[openai] python-dotenv==1.2.1 diff --git a/vendor/slack_bolt-1.27.0+837e120-py2.py3-none-any.whl b/vendor/slack_bolt-1.27.0+837e120-py2.py3-none-any.whl new file mode 100644 index 0000000..1197e3c Binary files /dev/null and b/vendor/slack_bolt-1.27.0+837e120-py2.py3-none-any.whl differ