python-slack-agents 0.6.0__tar.gz → 0.6.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.
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/AGENTS.md +9 -5
- python_slack_agents-0.6.2/CHANGELOG.md +80 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/PKG-INFO +12 -13
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/README.md +11 -12
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/agents/kitchen-sink/config.yaml +9 -1
- python_slack_agents-0.6.2/docs/canvas.md +118 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/private-repo.md +3 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/setup.md +25 -8
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/llms-full.txt +97 -30
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/pyproject.toml +1 -1
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/__init__.py +2 -1
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/cli/build_docker.py +22 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/cli/init.py +40 -6
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/config.py +6 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/files.py +3 -0
- python_slack_agents-0.6.2/src/slack_agents/slack/canvas_auth.py +58 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/slack/canvases.py +4 -47
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/slack/files.py +6 -1
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/tools/canvas.py +109 -88
- python_slack_agents-0.6.2/src/slack_agents/tools/canvas_importer.py +88 -0
- python_slack_agents-0.6.2/tests/test_canvas_auth.py +217 -0
- python_slack_agents-0.6.2/tests/test_canvas_importer.py +108 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/uv.lock +1 -1
- python_slack_agents-0.6.0/CHANGELOG.md +0 -22
- python_slack_agents-0.6.0/docs/canvas.md +0 -83
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/.dockerignore +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/.env.example +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/.github/workflows/ci.yml +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/.github/workflows/publish.yml +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/.gitignore +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/.pre-commit-config.yaml +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/CODE_OF_CONDUCT.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/CONTRIBUTING.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/LICENSE +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/SECURITY.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/agents/README.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/agents/docs-assistant/config.yaml +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/agents/docs-assistant/system_prompt.txt +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/agents/hello-world/config.yaml +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/agents/hello-world/system_prompt.txt +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/agents/kitchen-sink/system_prompt.txt +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/access-control.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/agents.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/cli.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/deployment.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/llm.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/media/demo.gif +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/observability.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/slack-app-manifest.json +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/storage.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/tools.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/docs/user-context.md +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/llms.txt +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/Dockerfile +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/access/__init__.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/access/allow_all.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/access/allow_list.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/access/base.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/agent_loop.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/cli/__init__.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/cli/export_conversations.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/cli/export_conversations_html.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/cli/export_usage.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/cli/export_usage_csv.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/cli/healthcheck.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/cli/run.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/conversations.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/llm/__init__.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/llm/anthropic.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/llm/base.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/llm/openai.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/main.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/observability.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/py.typed +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/scripts/__init__.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/scripts/download_fonts.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/scripts/generate_llms_full.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/slack/__init__.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/slack/actions.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/slack/agent.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/slack/format.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/slack/streaming.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/slack/streaming_formatter.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/slack/tool_blocks.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/storage/__init__.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/storage/base.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/storage/postgres.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/storage/postgres.sql +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/storage/sqlite.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/storage/sqlite.sql +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/tools/__init__.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/tools/base.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/tools/file_exporter.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/tools/file_importer.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/tools/mcp_http.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/src/slack_agents/tools/user_context.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/__init__.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_access.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_agent_loop.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_cli.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_config.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_conversations.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_cost.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_export_documents.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_export_usage.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_file_extractors.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_format.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_llm_factory.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_mcp_client.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_openai_convert.py +0 -0
- {python_slack_agents-0.6.0 → python_slack_agents-0.6.2}/tests/test_tool_blocks.py +0 -0
|
@@ -103,16 +103,20 @@ The project includes AI-agent-friendly documentation following the llms.txt conv
|
|
|
103
103
|
## Releasing
|
|
104
104
|
|
|
105
105
|
1. Update `version` in `pyproject.toml`
|
|
106
|
-
2. Update the
|
|
107
|
-
3.
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
2. Update `CHANGELOG.md` with the new version and changes
|
|
107
|
+
3. Run `python3 src/slack_agents/scripts/generate_llms_full.py` to regenerate `llms-full.txt`
|
|
108
|
+
4. Commit and push to `main`
|
|
109
|
+
5. Create a GitHub Release (which creates a git tag)
|
|
110
|
+
6. The `publish.yml` workflow automatically builds and publishes to PyPI via trusted publishing
|
|
110
111
|
|
|
111
|
-
Do NOT publish to PyPI manually — the GitHub Release trigger handles it.
|
|
112
|
+
The PyPI deployment requires manual approval in the GitHub Actions UI. Do NOT publish to PyPI manually — the GitHub Release trigger handles it.
|
|
112
113
|
|
|
113
114
|
## Style
|
|
114
115
|
|
|
116
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for full coding and commit conventions.
|
|
117
|
+
|
|
115
118
|
- Python 3.12+, line length 100
|
|
116
119
|
- Ruff rules: E, F, I (errors, pyflakes, isort)
|
|
117
120
|
- Keep it simple. Minimal abstractions, no unnecessary indirection.
|
|
118
121
|
- Commit messages: Conventional Commits — `feat:`, `fix:`, `docs:`, `chore:`, `test:`, `refactor:`. Lowercase, imperative, under 72 chars.
|
|
122
|
+
- **NEVER run `git commit` or `git push` without explicit user approval.** Always propose the commit message and file list, then STOP and wait for the user to say "go", "commit", "yes", or similar. This is non-negotiable — even if the user says "prepare a release" or "let's commit", you must present the plan and wait. "Prepare" ≠ "execute".
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
6
|
+
|
|
7
|
+
## [Unreleased]
|
|
8
|
+
|
|
9
|
+
## [0.6.2] - 2026-03-19
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Canvas user-level authorization — tools enforce requesting user's access level via `files.info` metadata
|
|
14
|
+
- Canvas file importer (`application/vnd.slack-docs`) — users can attach canvases to messages
|
|
15
|
+
- `file_id` field on `InputFile` — file import pipeline now passes Slack file IDs to handlers
|
|
16
|
+
- `org_access` parameter on `canvas_access_add` for workspace-wide access
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- Canvas tool descriptions instruct the LLM to guide users to attach canvases via Slack's + button (never ask for IDs)
|
|
21
|
+
- Canvas tool errors now return structured JSON instead of plain text
|
|
22
|
+
|
|
23
|
+
### Removed
|
|
24
|
+
|
|
25
|
+
- `canvas_list` tool (scaling concern with batch `files.info`; users discover canvases via Slack UI)
|
|
26
|
+
- `channel_id` parameter from `canvas_create` (standalone canvases only)
|
|
27
|
+
- `channel_ids` parameter from `canvas_access_add` and `canvas_access_remove`
|
|
28
|
+
|
|
29
|
+
## [0.6.1] - 2026-03-19
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- `slack-agents init` now generates `.gitignore`
|
|
34
|
+
- `.env.example` template includes comments explaining where to get each token and links to setup guide
|
|
35
|
+
- `build-docker` lists required environment variables after build completes
|
|
36
|
+
- `build-docker` errors if `req*.txt` files are found (dependencies must be in `pyproject.toml`)
|
|
37
|
+
- `init` warns when `req*.txt` files are found with migration instructions
|
|
38
|
+
|
|
39
|
+
### Changed
|
|
40
|
+
|
|
41
|
+
- `pyproject.toml` template uses `python-slack-agents<2` (no minimum pin)
|
|
42
|
+
- Setup flow uses venv-first approach: create venv, install package, then `slack-agents init`
|
|
43
|
+
- Updated README, docs/setup.md, and docs/private-repo.md with new setup flow
|
|
44
|
+
|
|
45
|
+
### Fixed
|
|
46
|
+
|
|
47
|
+
- Config loader now strips YAML comments before env var interpolation — commented-out `{ENV_VAR}` patterns no longer cause `KeyError`
|
|
48
|
+
- `init` shows proposed file content when skipping existing files
|
|
49
|
+
|
|
50
|
+
## [0.6.0] - 2026-03-18
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
|
|
54
|
+
- `slack-agents init <project_name>` CLI command to scaffold new projects
|
|
55
|
+
- `llms.txt` and `llms-full.txt` for AI agent discoverability
|
|
56
|
+
- `llms-full.txt` bundled in PyPI wheel
|
|
57
|
+
- Script to generate `llms-full.txt` from docs (`src/slack_agents/scripts/generate_llms_full.py`)
|
|
58
|
+
- "Project Structure" section in README
|
|
59
|
+
- Release process documentation in AGENTS.md
|
|
60
|
+
|
|
61
|
+
### Changed
|
|
62
|
+
|
|
63
|
+
- Simplified Dockerfile: empty placeholders for README.md and llms-full.txt so builds work for both framework and user projects
|
|
64
|
+
- Updated docs/private-repo.md to use `slack-agents init`
|
|
65
|
+
- Updated docs/cli.md with `init` command reference
|
|
66
|
+
|
|
67
|
+
## [0.5.0] - 2025-03-13
|
|
68
|
+
|
|
69
|
+
### Added
|
|
70
|
+
|
|
71
|
+
- Plugin architecture for LLM providers, storage backends, and tools
|
|
72
|
+
- Anthropic and OpenAI LLM providers
|
|
73
|
+
- SQLite and PostgreSQL storage providers
|
|
74
|
+
- MCP over HTTP tool provider
|
|
75
|
+
- Built-in document export tools (PDF, DOCX, XLSX, CSV, PPTX)
|
|
76
|
+
- Streaming output with native Slack table rendering
|
|
77
|
+
- Socket Mode support (no public URL required)
|
|
78
|
+
- OpenTelemetry observability
|
|
79
|
+
- `{ENV_VAR}` interpolation in agent configs
|
|
80
|
+
- Per-agent Docker builds via `docker-build-and-push.sh`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-slack-agents
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.2
|
|
4
4
|
Summary: A Python framework for deploying AI agents as Slack bots
|
|
5
5
|
Project-URL: Homepage, https://github.com/CompareNetworks/python-slack-agents
|
|
6
6
|
Project-URL: Repository, https://github.com/CompareNetworks/python-slack-agents
|
|
@@ -82,17 +82,16 @@ Each agent is a directory with two files: a `config.yaml` and a `system_prompt.t
|
|
|
82
82
|
## Quick Start
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
+
mkdir my-agents && cd my-agents
|
|
86
|
+
python3 -m venv .venv
|
|
87
|
+
source .venv/bin/activate
|
|
85
88
|
pip install python-slack-agents
|
|
86
89
|
|
|
87
|
-
# Scaffold
|
|
88
|
-
mkdir my-agents && cd my-agents
|
|
90
|
+
# Scaffold the project
|
|
89
91
|
slack-agents init my-agents
|
|
90
92
|
|
|
91
|
-
# Add your tokens
|
|
92
|
-
cp .env.example .env
|
|
93
|
-
# Edit .env: SLACK_BOT_TOKEN, SLACK_APP_TOKEN, ANTHROPIC_API_KEY
|
|
94
|
-
|
|
95
|
-
# Install for development (makes custom providers importable)
|
|
93
|
+
# Add your tokens and install for development
|
|
94
|
+
cp .env.example .env # add your Slack and LLM tokens
|
|
96
95
|
pip install -e .
|
|
97
96
|
|
|
98
97
|
# Run the hello-world agent
|
|
@@ -330,13 +329,13 @@ If you're an AI agent or coding assistant, see [`llms-full.txt`](https://raw.git
|
|
|
330
329
|
|
|
331
330
|
## Related Projects
|
|
332
331
|
|
|
333
|
-
|
|
332
|
+
Other projects in this space:
|
|
334
333
|
|
|
335
334
|
- **[Bolt for Python](https://github.com/slackapi/bolt-python)** — The official Slack SDK. python-slack-agents uses it internally. Use Bolt directly if you want full control over Slack interactions without an agent abstraction.
|
|
336
|
-
- **[
|
|
337
|
-
- **[bolt-python-
|
|
338
|
-
- **[
|
|
339
|
-
- **[slack-mcp-client](https://github.com/tuannvm/slack-mcp-client)** — A Go application bridging Slack and MCP servers. Deployed app rather than a library
|
|
335
|
+
- **[bolt-python-ai-chatbot](https://github.com/slack-samples/bolt-python-ai-chatbot)** — Official Slack sample app for AI chatbots. A starting point if you want to build from scratch rather than use a framework.
|
|
336
|
+
- **[bolt-python-assistant-template](https://github.com/slack-samples/bolt-python-assistant-template)** — Official Slack template for building Agents & Assistants with Bolt and OpenAI.
|
|
337
|
+
- **[langgraph-messaging-integrations](https://github.com/langchain-ai/langgraph-messaging-integrations)** — Connects LangGraph agents to Slack and other messaging platforms.
|
|
338
|
+
- **[slack-mcp-client](https://github.com/tuannvm/slack-mcp-client)** — A Go application bridging Slack and MCP servers. Deployed app rather than a library.
|
|
340
339
|
|
|
341
340
|
## Disclaimer
|
|
342
341
|
|
|
@@ -36,17 +36,16 @@ Each agent is a directory with two files: a `config.yaml` and a `system_prompt.t
|
|
|
36
36
|
## Quick Start
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
+
mkdir my-agents && cd my-agents
|
|
40
|
+
python3 -m venv .venv
|
|
41
|
+
source .venv/bin/activate
|
|
39
42
|
pip install python-slack-agents
|
|
40
43
|
|
|
41
|
-
# Scaffold
|
|
42
|
-
mkdir my-agents && cd my-agents
|
|
44
|
+
# Scaffold the project
|
|
43
45
|
slack-agents init my-agents
|
|
44
46
|
|
|
45
|
-
# Add your tokens
|
|
46
|
-
cp .env.example .env
|
|
47
|
-
# Edit .env: SLACK_BOT_TOKEN, SLACK_APP_TOKEN, ANTHROPIC_API_KEY
|
|
48
|
-
|
|
49
|
-
# Install for development (makes custom providers importable)
|
|
47
|
+
# Add your tokens and install for development
|
|
48
|
+
cp .env.example .env # add your Slack and LLM tokens
|
|
50
49
|
pip install -e .
|
|
51
50
|
|
|
52
51
|
# Run the hello-world agent
|
|
@@ -284,13 +283,13 @@ If you're an AI agent or coding assistant, see [`llms-full.txt`](https://raw.git
|
|
|
284
283
|
|
|
285
284
|
## Related Projects
|
|
286
285
|
|
|
287
|
-
|
|
286
|
+
Other projects in this space:
|
|
288
287
|
|
|
289
288
|
- **[Bolt for Python](https://github.com/slackapi/bolt-python)** — The official Slack SDK. python-slack-agents uses it internally. Use Bolt directly if you want full control over Slack interactions without an agent abstraction.
|
|
290
|
-
- **[
|
|
291
|
-
- **[bolt-python-
|
|
292
|
-
- **[
|
|
293
|
-
- **[slack-mcp-client](https://github.com/tuannvm/slack-mcp-client)** — A Go application bridging Slack and MCP servers. Deployed app rather than a library
|
|
289
|
+
- **[bolt-python-ai-chatbot](https://github.com/slack-samples/bolt-python-ai-chatbot)** — Official Slack sample app for AI chatbots. A starting point if you want to build from scratch rather than use a framework.
|
|
290
|
+
- **[bolt-python-assistant-template](https://github.com/slack-samples/bolt-python-assistant-template)** — Official Slack template for building Agents & Assistants with Bolt and OpenAI.
|
|
291
|
+
- **[langgraph-messaging-integrations](https://github.com/langchain-ai/langgraph-messaging-integrations)** — Connects LangGraph agents to Slack and other messaging platforms.
|
|
292
|
+
- **[slack-mcp-client](https://github.com/tuannvm/slack-mcp-client)** — A Go application bridging Slack and MCP servers. Deployed app rather than a library.
|
|
294
293
|
|
|
295
294
|
## Disclaimer
|
|
296
295
|
|
|
@@ -95,13 +95,21 @@ tools:
|
|
|
95
95
|
# - "export_csv"
|
|
96
96
|
# - "export_pptx"
|
|
97
97
|
|
|
98
|
-
# Slack canvases (create, read,
|
|
98
|
+
# Slack canvases (create, read, update, delete + access management)
|
|
99
99
|
# Requires Slack scopes: canvases:read, canvases:write, files:read
|
|
100
|
+
# Enforces user-level authorization — agent acts as delegate for the requesting user
|
|
100
101
|
# canvas:
|
|
101
102
|
# type: slack_agents.tools.canvas
|
|
102
103
|
# bot_token: "{SLACK_BOT_TOKEN}"
|
|
103
104
|
# allowed_functions: [".*"]
|
|
104
105
|
|
|
106
|
+
# Canvas file importer — reads canvases attached to messages
|
|
107
|
+
# Requires Slack scopes: canvases:read, files:read
|
|
108
|
+
# canvas-importer:
|
|
109
|
+
# type: slack_agents.tools.canvas_importer
|
|
110
|
+
# bot_token: "{SLACK_BOT_TOKEN}"
|
|
111
|
+
# allowed_functions: [".*"]
|
|
112
|
+
|
|
105
113
|
# Per-user memory backed by Slack canvases
|
|
106
114
|
# Remembers user preferences and context across conversations.
|
|
107
115
|
# Requires Slack scopes: canvases:read, canvases:write, files:read
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Canvas Tool
|
|
2
|
+
|
|
3
|
+
The canvas tool lets your agent create, read, update, and delete [Slack canvases](https://slack.com/features/canvas) — rich documents that live inside Slack. It exposes a simple file-like API: no section IDs or low-level operations needed.
|
|
4
|
+
|
|
5
|
+
## Setup
|
|
6
|
+
|
|
7
|
+
### 1. Add Slack scopes
|
|
8
|
+
|
|
9
|
+
In your Slack app settings (**OAuth & Permissions → Scopes → Bot Token Scopes**), add:
|
|
10
|
+
|
|
11
|
+
| Scope | Purpose |
|
|
12
|
+
|-------|---------|
|
|
13
|
+
| `canvases:read` | Read canvas content |
|
|
14
|
+
| `canvases:write` | Create, update, delete canvases and manage access |
|
|
15
|
+
| `files:read` | Read canvas content and check user access (uses `files.info` API) |
|
|
16
|
+
|
|
17
|
+
After adding scopes, reinstall the app to your workspace.
|
|
18
|
+
|
|
19
|
+
### 2. Configure the tool
|
|
20
|
+
|
|
21
|
+
Add the canvas tool to your agent's `config.yaml`:
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
tools:
|
|
25
|
+
canvas:
|
|
26
|
+
type: slack_agents.tools.canvas
|
|
27
|
+
bot_token: "{SLACK_BOT_TOKEN}"
|
|
28
|
+
allowed_functions: [".*"] # all canvas tools
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
To expose only specific tools:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
allowed_functions:
|
|
35
|
+
- "canvas_create"
|
|
36
|
+
- "canvas_get"
|
|
37
|
+
- "canvas_update"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 3. Canvas file importer (optional)
|
|
41
|
+
|
|
42
|
+
To let users attach canvases to messages and have the agent read them automatically, add the canvas importer:
|
|
43
|
+
|
|
44
|
+
```yaml
|
|
45
|
+
tools:
|
|
46
|
+
canvas-importer:
|
|
47
|
+
type: slack_agents.tools.canvas_importer
|
|
48
|
+
bot_token: "{SLACK_BOT_TOKEN}"
|
|
49
|
+
allowed_functions: [".*"]
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
When a user attaches a canvas (mimetype `application/vnd.slack-docs`) to a message, the importer reads its markdown content via the Slack API and includes it in the conversation context. Authorization is enforced — the agent only reads canvases the requesting user can access.
|
|
53
|
+
|
|
54
|
+
## Authorization model
|
|
55
|
+
|
|
56
|
+
All canvas operations enforce **user-level permissions**. The agent acts as a delegate for the requesting user — it will not access canvases the user can't access themselves.
|
|
57
|
+
|
|
58
|
+
Access is resolved from `files.info` metadata (no extra storage or scopes needed):
|
|
59
|
+
|
|
60
|
+
| Check | Source field |
|
|
61
|
+
|-------|-------------|
|
|
62
|
+
| Is user the creator? | `user` / `canvas_creator_id` |
|
|
63
|
+
| Per-user access | `dm_mpdm_users_with_file_access` |
|
|
64
|
+
| Workspace-wide access | `org_or_workspace_access` |
|
|
65
|
+
|
|
66
|
+
**Access levels** (higher includes lower): `owner` > `write` > `read`
|
|
67
|
+
|
|
68
|
+
**Required access per tool:**
|
|
69
|
+
|
|
70
|
+
| Tool | Required |
|
|
71
|
+
|------|----------|
|
|
72
|
+
| `canvas_create` | — (no existing canvas) |
|
|
73
|
+
| `canvas_get` | read |
|
|
74
|
+
| `canvas_update` | write |
|
|
75
|
+
| `canvas_delete` | owner |
|
|
76
|
+
| `canvas_access_get` | read |
|
|
77
|
+
| `canvas_access_add` | owner |
|
|
78
|
+
| `canvas_access_remove` | owner |
|
|
79
|
+
|
|
80
|
+
If the user lacks sufficient access, the tool returns an error message explaining what access level is needed.
|
|
81
|
+
|
|
82
|
+
## Canvas content format
|
|
83
|
+
|
|
84
|
+
Canvas content is **markdown**. Supported elements:
|
|
85
|
+
|
|
86
|
+
- Headings (`#`, `##`, `###`)
|
|
87
|
+
- Bullet and numbered lists
|
|
88
|
+
- Tables
|
|
89
|
+
- Code blocks
|
|
90
|
+
- Block quotes
|
|
91
|
+
- Links
|
|
92
|
+
- Mentions (`<@U1234567890>`)
|
|
93
|
+
- Unfurls / embeds (``)
|
|
94
|
+
|
|
95
|
+
Block Kit is **not** supported in canvases.
|
|
96
|
+
|
|
97
|
+
## Available tools
|
|
98
|
+
|
|
99
|
+
| Tool | Description |
|
|
100
|
+
|------|-------------|
|
|
101
|
+
| `canvas_create` | Create a standalone canvas with title + content. |
|
|
102
|
+
| `canvas_get` | Get a canvas by ID. Returns title, full markdown content, and permalink. |
|
|
103
|
+
| `canvas_update` | Update a canvas — replace content, rename title, or both. |
|
|
104
|
+
| `canvas_delete` | Permanently delete a canvas. |
|
|
105
|
+
| `canvas_access_get` | Get sharing/access info for a canvas. |
|
|
106
|
+
| `canvas_access_add` | Grant read/write/owner access to users. Optionally set `org_access` for workspace-wide access. |
|
|
107
|
+
| `canvas_access_remove` | Remove access for users. |
|
|
108
|
+
|
|
109
|
+
## Example usage
|
|
110
|
+
|
|
111
|
+
**Create a canvas:**
|
|
112
|
+
> "Create a canvas titled 'Q1 Roadmap' with our milestone list"
|
|
113
|
+
|
|
114
|
+
**Read and update a canvas:**
|
|
115
|
+
> "Get the canvas F12345 and update it with the latest status"
|
|
116
|
+
|
|
117
|
+
**Share a canvas with specific users:**
|
|
118
|
+
> "Give users U123 and U456 write access to canvas F12345"
|
|
@@ -16,6 +16,9 @@ For production agents with company-specific prompts, tools, and configs, create
|
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
mkdir my-agents && cd my-agents
|
|
19
|
+
python3 -m venv .venv
|
|
20
|
+
source .venv/bin/activate
|
|
21
|
+
pip install python-slack-agents
|
|
19
22
|
slack-agents init my-agents
|
|
20
23
|
pip install -e .
|
|
21
24
|
```
|
|
@@ -6,9 +6,32 @@
|
|
|
6
6
|
- A Slack workspace (all plans supported, including free)
|
|
7
7
|
- API key for your LLM provider (Anthropic and/or OpenAI)
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## New Project
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
+
mkdir my-agents && cd my-agents
|
|
13
|
+
python3 -m venv .venv
|
|
14
|
+
source .venv/bin/activate
|
|
15
|
+
pip install python-slack-agents
|
|
16
|
+
|
|
17
|
+
# Scaffold the project
|
|
18
|
+
slack-agents init my-agents
|
|
19
|
+
|
|
20
|
+
# Add your tokens and install for development
|
|
21
|
+
cp .env.example .env # add your Slack and LLM tokens (see below)
|
|
22
|
+
pip install -e .
|
|
23
|
+
|
|
24
|
+
# Run the hello-world agent
|
|
25
|
+
slack-agents run agents/hello-world
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Framework Development
|
|
29
|
+
|
|
30
|
+
If you're working on the framework itself:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
git clone https://github.com/CompareNetworks/python-slack-agents.git
|
|
34
|
+
cd python-slack-agents
|
|
12
35
|
python3 -m venv .venv
|
|
13
36
|
source .venv/bin/activate
|
|
14
37
|
pip install -e ".[dev]"
|
|
@@ -40,7 +63,7 @@ ANTHROPIC_API_KEY=sk-ant-...
|
|
|
40
63
|
- Copy: App Token (eg, SLACK_APP_TOKEN=xapp-...)
|
|
41
64
|
- Settings > Install App
|
|
42
65
|
- Copy: Bot User OAuth Token (eg, SLACK_BOT_TOKEN=xoxb-...)
|
|
43
|
-
3. If App does not
|
|
66
|
+
3. If App does not appear in your Slack client:
|
|
44
67
|
- ... > Tools > Apps > (search by name and add the app)
|
|
45
68
|
|
|
46
69
|
## Download Fonts
|
|
@@ -53,12 +76,6 @@ python -m slack_agents.scripts.download_fonts
|
|
|
53
76
|
|
|
54
77
|
This downloads `DejaVuSans.ttf` and `DejaVuSans-Bold.ttf` into `fonts/` (~700KB total). Without these fonts, PDF generation falls back to Helvetica (latin-1 only).
|
|
55
78
|
|
|
56
|
-
## Running an Agent
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
slack-agents run agents/hello-world
|
|
60
|
-
```
|
|
61
|
-
|
|
62
79
|
## Optional: PostgreSQL
|
|
63
80
|
|
|
64
81
|
For conversation persistence via PostgreSQL, update your agent's `config.yaml`:
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# python-slack-agents: Complete Reference
|
|
2
2
|
|
|
3
3
|
> A Python framework for deploying AI agents as Slack bots.
|
|
4
|
-
> Each agent is a YAML config and a system prompt — pick your LLM,
|
|
4
|
+
> Each agent is a YAML config and a system prompt — pick your LLM,
|
|
5
|
+
> connect some MCP tools, and `slack-agents run`.
|
|
5
6
|
|
|
6
7
|
- **Package:** `pip install python-slack-agents`
|
|
7
8
|
- **CLI entry point:** `slack-agents`
|
|
@@ -11,15 +12,26 @@
|
|
|
11
12
|
|
|
12
13
|
## How to read this document
|
|
13
14
|
|
|
14
|
-
This file is a concatenation of all documentation files,
|
|
15
|
-
|
|
15
|
+
This file is a concatenation of all documentation files,
|
|
16
|
+
designed to be consumed in a single read.
|
|
17
|
+
The sections below correspond to individual doc files
|
|
18
|
+
in the `docs/` directory.
|
|
16
19
|
|
|
17
20
|
### Key concepts
|
|
18
21
|
|
|
19
|
-
- **Config-driven:** each agent is a directory with
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
- **
|
|
22
|
+
- **Config-driven:** each agent is a directory with
|
|
23
|
+
`config.yaml` + `system_prompt.txt`.
|
|
24
|
+
All behavior is configured in YAML.
|
|
25
|
+
- **Plugin pattern:** every pluggable component (LLM, storage,
|
|
26
|
+
tools, access) uses a `type` field with a dotted Python import
|
|
27
|
+
path pointing to a module with a `Provider` class. All other
|
|
28
|
+
config keys are passed as kwargs to `Provider.__init__`.
|
|
29
|
+
- **Two kinds of tool providers:** `BaseToolProvider` (tools the
|
|
30
|
+
LLM calls) and `BaseFileImporterProvider` (file handlers the
|
|
31
|
+
*framework* calls automatically — invisible to the LLM). Both
|
|
32
|
+
are configured under `tools:` in config.yaml.
|
|
33
|
+
- **Environment variables:** `{ENV_VAR}` patterns in config values
|
|
34
|
+
are resolved from environment variables at startup.
|
|
23
35
|
|
|
24
36
|
---
|
|
25
37
|
|
|
@@ -31,9 +43,32 @@ The sections below correspond to individual doc files in the `docs/` directory.
|
|
|
31
43
|
- A Slack workspace (all plans supported, including free)
|
|
32
44
|
- API key for your LLM provider (Anthropic and/or OpenAI)
|
|
33
45
|
|
|
34
|
-
##
|
|
46
|
+
## New Project
|
|
35
47
|
|
|
36
48
|
```bash
|
|
49
|
+
mkdir my-agents && cd my-agents
|
|
50
|
+
python3 -m venv .venv
|
|
51
|
+
source .venv/bin/activate
|
|
52
|
+
pip install python-slack-agents
|
|
53
|
+
|
|
54
|
+
# Scaffold the project
|
|
55
|
+
slack-agents init my-agents
|
|
56
|
+
|
|
57
|
+
# Add your tokens and install for development
|
|
58
|
+
cp .env.example .env # add your Slack and LLM tokens (see below)
|
|
59
|
+
pip install -e .
|
|
60
|
+
|
|
61
|
+
# Run the hello-world agent
|
|
62
|
+
slack-agents run agents/hello-world
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Framework Development
|
|
66
|
+
|
|
67
|
+
If you're working on the framework itself:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
git clone https://github.com/CompareNetworks/python-slack-agents.git
|
|
71
|
+
cd python-slack-agents
|
|
37
72
|
python3 -m venv .venv
|
|
38
73
|
source .venv/bin/activate
|
|
39
74
|
pip install -e ".[dev]"
|
|
@@ -65,7 +100,7 @@ ANTHROPIC_API_KEY=sk-ant-...
|
|
|
65
100
|
- Copy: App Token (eg, SLACK_APP_TOKEN=xapp-...)
|
|
66
101
|
- Settings > Install App
|
|
67
102
|
- Copy: Bot User OAuth Token (eg, SLACK_BOT_TOKEN=xoxb-...)
|
|
68
|
-
3. If App does not
|
|
103
|
+
3. If App does not appear in your Slack client:
|
|
69
104
|
- ... > Tools > Apps > (search by name and add the app)
|
|
70
105
|
|
|
71
106
|
## Download Fonts
|
|
@@ -78,12 +113,6 @@ python -m slack_agents.scripts.download_fonts
|
|
|
78
113
|
|
|
79
114
|
This downloads `DejaVuSans.ttf` and `DejaVuSans-Bold.ttf` into `fonts/` (~700KB total). Without these fonts, PDF generation falls back to Helvetica (latin-1 only).
|
|
80
115
|
|
|
81
|
-
## Running an Agent
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
slack-agents run agents/hello-world
|
|
85
|
-
```
|
|
86
|
-
|
|
87
116
|
## Optional: PostgreSQL
|
|
88
117
|
|
|
89
118
|
For conversation persistence via PostgreSQL, update your agent's `config.yaml`:
|
|
@@ -573,7 +602,7 @@ Any extra keys beyond `type` are passed as keyword arguments to the `Provider` c
|
|
|
573
602
|
|
|
574
603
|
# Canvas Tool
|
|
575
604
|
|
|
576
|
-
The canvas tool lets your agent create, read, update,
|
|
605
|
+
The canvas tool lets your agent create, read, update, and delete [Slack canvases](https://slack.com/features/canvas) — rich documents that live inside Slack. It exposes a simple file-like API: no section IDs or low-level operations needed.
|
|
577
606
|
|
|
578
607
|
## Setup
|
|
579
608
|
|
|
@@ -583,9 +612,9 @@ In your Slack app settings (**OAuth & Permissions → Scopes → Bot Token Scope
|
|
|
583
612
|
|
|
584
613
|
| Scope | Purpose |
|
|
585
614
|
|-------|---------|
|
|
586
|
-
| `canvases:read` | Read canvas content
|
|
615
|
+
| `canvases:read` | Read canvas content |
|
|
587
616
|
| `canvases:write` | Create, update, delete canvases and manage access |
|
|
588
|
-
| `files:read` |
|
|
617
|
+
| `files:read` | Read canvas content and check user access (uses `files.info` API) |
|
|
589
618
|
|
|
590
619
|
After adding scopes, reinstall the app to your workspace.
|
|
591
620
|
|
|
@@ -608,13 +637,49 @@ To expose only specific tools:
|
|
|
608
637
|
- "canvas_create"
|
|
609
638
|
- "canvas_get"
|
|
610
639
|
- "canvas_update"
|
|
611
|
-
- "canvas_list"
|
|
612
640
|
```
|
|
613
641
|
|
|
614
|
-
|
|
642
|
+
### 3. Canvas file importer (optional)
|
|
643
|
+
|
|
644
|
+
To let users attach canvases to messages and have the agent read them automatically, add the canvas importer:
|
|
645
|
+
|
|
646
|
+
```yaml
|
|
647
|
+
tools:
|
|
648
|
+
canvas-importer:
|
|
649
|
+
type: slack_agents.tools.canvas_importer
|
|
650
|
+
bot_token: "{SLACK_BOT_TOKEN}"
|
|
651
|
+
allowed_functions: [".*"]
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
When a user attaches a canvas (mimetype `application/vnd.slack-docs`) to a message, the importer reads its markdown content via the Slack API and includes it in the conversation context. Authorization is enforced — the agent only reads canvases the requesting user can access.
|
|
615
655
|
|
|
616
|
-
|
|
617
|
-
|
|
656
|
+
## Authorization model
|
|
657
|
+
|
|
658
|
+
All canvas operations enforce **user-level permissions**. The agent acts as a delegate for the requesting user — it will not access canvases the user can't access themselves.
|
|
659
|
+
|
|
660
|
+
Access is resolved from `files.info` metadata (no extra storage or scopes needed):
|
|
661
|
+
|
|
662
|
+
| Check | Source field |
|
|
663
|
+
|-------|-------------|
|
|
664
|
+
| Is user the creator? | `user` / `canvas_creator_id` |
|
|
665
|
+
| Per-user access | `dm_mpdm_users_with_file_access` |
|
|
666
|
+
| Workspace-wide access | `org_or_workspace_access` |
|
|
667
|
+
|
|
668
|
+
**Access levels** (higher includes lower): `owner` > `write` > `read`
|
|
669
|
+
|
|
670
|
+
**Required access per tool:**
|
|
671
|
+
|
|
672
|
+
| Tool | Required |
|
|
673
|
+
|------|----------|
|
|
674
|
+
| `canvas_create` | — (no existing canvas) |
|
|
675
|
+
| `canvas_get` | read |
|
|
676
|
+
| `canvas_update` | write |
|
|
677
|
+
| `canvas_delete` | owner |
|
|
678
|
+
| `canvas_access_get` | read |
|
|
679
|
+
| `canvas_access_add` | owner |
|
|
680
|
+
| `canvas_access_remove` | owner |
|
|
681
|
+
|
|
682
|
+
If the user lacks sufficient access, the tool returns an error message explaining what access level is needed.
|
|
618
683
|
|
|
619
684
|
## Canvas content format
|
|
620
685
|
|
|
@@ -635,25 +700,24 @@ Block Kit is **not** supported in canvases.
|
|
|
635
700
|
|
|
636
701
|
| Tool | Description |
|
|
637
702
|
|------|-------------|
|
|
638
|
-
| `canvas_create` | Create a canvas with title + content.
|
|
703
|
+
| `canvas_create` | Create a standalone canvas with title + content. |
|
|
639
704
|
| `canvas_get` | Get a canvas by ID. Returns title, full markdown content, and permalink. |
|
|
640
705
|
| `canvas_update` | Update a canvas — replace content, rename title, or both. |
|
|
641
706
|
| `canvas_delete` | Permanently delete a canvas. |
|
|
642
|
-
| `canvas_list` | List canvases visible to the bot. Optional `channel_id` filter. |
|
|
643
707
|
| `canvas_access_get` | Get sharing/access info for a canvas. |
|
|
644
|
-
| `canvas_access_add` | Grant read/write/owner access to users
|
|
645
|
-
| `canvas_access_remove` | Remove access for users
|
|
708
|
+
| `canvas_access_add` | Grant read/write/owner access to users. Optionally set `org_access` for workspace-wide access. |
|
|
709
|
+
| `canvas_access_remove` | Remove access for users. |
|
|
646
710
|
|
|
647
711
|
## Example usage
|
|
648
712
|
|
|
649
|
-
**Create a canvas
|
|
650
|
-
> "Create a canvas
|
|
713
|
+
**Create a canvas:**
|
|
714
|
+
> "Create a canvas titled 'Q1 Roadmap' with our milestone list"
|
|
651
715
|
|
|
652
716
|
**Read and update a canvas:**
|
|
653
717
|
> "Get the canvas F12345 and update it with the latest status"
|
|
654
718
|
|
|
655
|
-
**Share a canvas with
|
|
656
|
-
> "Give
|
|
719
|
+
**Share a canvas with specific users:**
|
|
720
|
+
> "Give users U123 and U456 write access to canvas F12345"
|
|
657
721
|
|
|
658
722
|
---
|
|
659
723
|
|
|
@@ -1101,6 +1165,9 @@ For production agents with company-specific prompts, tools, and configs, create
|
|
|
1101
1165
|
|
|
1102
1166
|
```bash
|
|
1103
1167
|
mkdir my-agents && cd my-agents
|
|
1168
|
+
python3 -m venv .venv
|
|
1169
|
+
source .venv/bin/activate
|
|
1170
|
+
pip install python-slack-agents
|
|
1104
1171
|
slack-agents init my-agents
|
|
1105
1172
|
pip install -e .
|
|
1106
1173
|
```
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "python-slack-agents"
|
|
7
|
-
version = "0.6.
|
|
7
|
+
version = "0.6.2"
|
|
8
8
|
description = "A Python framework for deploying AI agents as Slack bots"
|
|
9
9
|
authors = [{name = "Eric Pichon", email = "epichon@comparenetworks.com"}]
|
|
10
10
|
readme = "README.md"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""slack-agents: A Python framework for deploying AI agents as Slack bots."""
|
|
2
2
|
|
|
3
3
|
from importlib.metadata import version
|
|
4
|
-
from typing import TypedDict
|
|
4
|
+
from typing import NotRequired, TypedDict
|
|
5
5
|
|
|
6
6
|
__version__ = version("python-slack-agents")
|
|
7
7
|
|
|
@@ -23,3 +23,4 @@ class InputFile(TypedDict):
|
|
|
23
23
|
file_bytes: bytes
|
|
24
24
|
mimetype: str
|
|
25
25
|
filename: str
|
|
26
|
+
file_id: NotRequired[str]
|