swarm-agent 0.1.0__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.
- swarm_agent-0.1.0/.dockerignore +26 -0
- swarm_agent-0.1.0/.github/workflows/ci.yml +41 -0
- swarm_agent-0.1.0/.gitignore +50 -0
- swarm_agent-0.1.0/.pre-commit-config.yaml +7 -0
- swarm_agent-0.1.0/CHANGELOG.md +67 -0
- swarm_agent-0.1.0/CODE_OF_CONDUCT.md +49 -0
- swarm_agent-0.1.0/CONTRIBUTING.md +85 -0
- swarm_agent-0.1.0/LICENSE +21 -0
- swarm_agent-0.1.0/PKG-INFO +377 -0
- swarm_agent-0.1.0/README.md +338 -0
- swarm_agent-0.1.0/SECURITY.md +68 -0
- swarm_agent-0.1.0/agent/__init__.py +19 -0
- swarm_agent-0.1.0/agent/context.py +306 -0
- swarm_agent-0.1.0/agent/loop.py +1039 -0
- swarm_agent-0.1.0/agent/runner.py +394 -0
- swarm_agent-0.1.0/agent/subagent.py +190 -0
- swarm_agent-0.1.0/auth/__init__.py +5 -0
- swarm_agent-0.1.0/auth/callback_server.py +132 -0
- swarm_agent-0.1.0/auth/middleware.py +62 -0
- swarm_agent-0.1.0/auth/oauth.py +145 -0
- swarm_agent-0.1.0/auth/token_store.py +109 -0
- swarm_agent-0.1.0/bus/__init__.py +5 -0
- swarm_agent-0.1.0/bus/queue.py +85 -0
- swarm_agent-0.1.0/cli/__init__.py +1 -0
- swarm_agent-0.1.0/cli/chat.py +84 -0
- swarm_agent-0.1.0/cli/main.py +201 -0
- swarm_agent-0.1.0/cli/stream.py +35 -0
- swarm_agent-0.1.0/config/__init__.py +5 -0
- swarm_agent-0.1.0/config/loader.py +77 -0
- swarm_agent-0.1.0/config/paths.py +59 -0
- swarm_agent-0.1.0/config/schema.py +120 -0
- swarm_agent-0.1.0/config.yaml.example +130 -0
- swarm_agent-0.1.0/cron/__init__.py +6 -0
- swarm_agent-0.1.0/cron/jobs/__init__.py +1 -0
- swarm_agent-0.1.0/cron/parser.py +289 -0
- swarm_agent-0.1.0/cron/scheduler.py +103 -0
- swarm_agent-0.1.0/cron/store.py +72 -0
- swarm_agent-0.1.0/delivery/__init__.py +5 -0
- swarm_agent-0.1.0/delivery/delivery.py +150 -0
- swarm_agent-0.1.0/docker/Dockerfile +43 -0
- swarm_agent-0.1.0/docker/docker-compose.yml +30 -0
- swarm_agent-0.1.0/docker/entrypoint.sh +26 -0
- swarm_agent-0.1.0/docs/architecture.md +264 -0
- swarm_agent-0.1.0/docs/auth.md +118 -0
- swarm_agent-0.1.0/docs/configuration.md +266 -0
- swarm_agent-0.1.0/docs/deployment.md +226 -0
- swarm_agent-0.1.0/docs/feishu-setup.md +108 -0
- swarm_agent-0.1.0/docs/logging.md +171 -0
- swarm_agent-0.1.0/docs/plugins.md +166 -0
- swarm_agent-0.1.0/docs/quickstart.md +110 -0
- swarm_agent-0.1.0/docs/skills.md +138 -0
- swarm_agent-0.1.0/docs/superpowers/plans/2026-06-06-swarm-framework-plan.md +4947 -0
- swarm_agent-0.1.0/docs/superpowers/specs/2026-06-06-swarm-framework-design.md +999 -0
- swarm_agent-0.1.0/docs/tools.md +153 -0
- swarm_agent-0.1.0/events/__init__.py +5 -0
- swarm_agent-0.1.0/events/bus.py +139 -0
- swarm_agent-0.1.0/events/subscribers/__init__.py +6 -0
- swarm_agent-0.1.0/events/subscribers/logging.py +21 -0
- swarm_agent-0.1.0/events/subscribers/metrics.py +59 -0
- swarm_agent-0.1.0/examples/basic-bot/README.md +36 -0
- swarm_agent-0.1.0/examples/basic-bot/SOUL.md +14 -0
- swarm_agent-0.1.0/examples/custom-tool/README.md +38 -0
- swarm_agent-0.1.0/examples/custom-tool/my_tools.py +61 -0
- swarm_agent-0.1.0/gateway/__init__.py +1 -0
- swarm_agent-0.1.0/gateway/feishu_actions.py +139 -0
- swarm_agent-0.1.0/gateway/feishu_events.py +207 -0
- swarm_agent-0.1.0/gateway/feishu_media.py +92 -0
- swarm_agent-0.1.0/gateway/feishu_message.py +105 -0
- swarm_agent-0.1.0/gateway/feishu_reply.py +296 -0
- swarm_agent-0.1.0/gateway/feishu_streaming.py +186 -0
- swarm_agent-0.1.0/gateway/feishu_token.py +53 -0
- swarm_agent-0.1.0/gateway/feishu_ws.py +422 -0
- swarm_agent-0.1.0/logging_/__init__.py +12 -0
- swarm_agent-0.1.0/logging_/handlers.py +80 -0
- swarm_agent-0.1.0/logging_/setup.py +96 -0
- swarm_agent-0.1.0/logging_/trace.py +41 -0
- swarm_agent-0.1.0/mcp/__init__.py +6 -0
- swarm_agent-0.1.0/mcp/client.py +178 -0
- swarm_agent-0.1.0/mcp/server.py +36 -0
- swarm_agent-0.1.0/memory/__init__.py +15 -0
- swarm_agent-0.1.0/memory/compressor.py +148 -0
- swarm_agent-0.1.0/memory/dream.py +201 -0
- swarm_agent-0.1.0/memory/knowledge_graph.py +176 -0
- swarm_agent-0.1.0/memory/recall.py +43 -0
- swarm_agent-0.1.0/memory/short_term.py +99 -0
- swarm_agent-0.1.0/memory/store.py +100 -0
- swarm_agent-0.1.0/plugins/__init__.py +5 -0
- swarm_agent-0.1.0/plugins/loader.py +140 -0
- swarm_agent-0.1.0/plugins/protocol.py +53 -0
- swarm_agent-0.1.0/providers/__init__.py +13 -0
- swarm_agent-0.1.0/providers/anthropic.py +345 -0
- swarm_agent-0.1.0/providers/base.py +76 -0
- swarm_agent-0.1.0/providers/factory.py +51 -0
- swarm_agent-0.1.0/providers/fallback.py +58 -0
- swarm_agent-0.1.0/providers/openai_compat.py +291 -0
- swarm_agent-0.1.0/providers/retry.py +100 -0
- swarm_agent-0.1.0/providers/token_counter.py +44 -0
- swarm_agent-0.1.0/pyproject.toml +78 -0
- swarm_agent-0.1.0/session/__init__.py +5 -0
- swarm_agent-0.1.0/session/continuation.py +15 -0
- swarm_agent-0.1.0/session/goal_state.py +16 -0
- swarm_agent-0.1.0/session/manager.py +187 -0
- swarm_agent-0.1.0/skills/__init__.py +1 -0
- swarm_agent-0.1.0/skills/loader.py +175 -0
- swarm_agent-0.1.0/skills_builtin/base-assistant/SKILL.md +45 -0
- swarm_agent-0.1.0/skills_builtin/calendar/SKILL.md +42 -0
- swarm_agent-0.1.0/skills_builtin/code-review/SKILL.md +59 -0
- swarm_agent-0.1.0/skills_builtin/customer-support/SKILL.md +58 -0
- swarm_agent-0.1.0/skills_builtin/data-analysis/SKILL.md +66 -0
- swarm_agent-0.1.0/skills_builtin/feishu-docs/SKILL.md +65 -0
- swarm_agent-0.1.0/skills_builtin/meeting-notes/SKILL.md +78 -0
- swarm_agent-0.1.0/skills_builtin/reminder/SKILL.md +54 -0
- swarm_agent-0.1.0/skills_builtin/summary/SKILL.md +55 -0
- swarm_agent-0.1.0/skills_builtin/translator/SKILL.md +47 -0
- swarm_agent-0.1.0/state/__init__.py +1 -0
- swarm_agent-0.1.0/state/migration.py +45 -0
- swarm_agent-0.1.0/state/snapshot.py +66 -0
- swarm_agent-0.1.0/state/store.py +117 -0
- swarm_agent-0.1.0/tests/__init__.py +1 -0
- swarm_agent-0.1.0/tests/conftest.py +45 -0
- swarm_agent-0.1.0/tests/test_agent.py +128 -0
- swarm_agent-0.1.0/tests/test_auth.py +52 -0
- swarm_agent-0.1.0/tests/test_bus.py +52 -0
- swarm_agent-0.1.0/tests/test_cli_commands.py +115 -0
- swarm_agent-0.1.0/tests/test_compressor.py +71 -0
- swarm_agent-0.1.0/tests/test_concurrency.py +129 -0
- swarm_agent-0.1.0/tests/test_config.py +62 -0
- swarm_agent-0.1.0/tests/test_context.py +96 -0
- swarm_agent-0.1.0/tests/test_cron.py +169 -0
- swarm_agent-0.1.0/tests/test_delivery.py +87 -0
- swarm_agent-0.1.0/tests/test_discovery.py +47 -0
- swarm_agent-0.1.0/tests/test_dream.py +112 -0
- swarm_agent-0.1.0/tests/test_edge_cases.py +180 -0
- swarm_agent-0.1.0/tests/test_events.py +87 -0
- swarm_agent-0.1.0/tests/test_feishu_events.py +151 -0
- swarm_agent-0.1.0/tests/test_feishu_message.py +47 -0
- swarm_agent-0.1.0/tests/test_feishu_reply.py +163 -0
- swarm_agent-0.1.0/tests/test_feishu_streaming.py +90 -0
- swarm_agent-0.1.0/tests/test_integration.py +694 -0
- swarm_agent-0.1.0/tests/test_mcp.py +119 -0
- swarm_agent-0.1.0/tests/test_memory_advanced.py +91 -0
- swarm_agent-0.1.0/tests/test_memory_store.py +124 -0
- swarm_agent-0.1.0/tests/test_permissions.py +61 -0
- swarm_agent-0.1.0/tests/test_plugins.py +147 -0
- swarm_agent-0.1.0/tests/test_providers_deep.py +201 -0
- swarm_agent-0.1.0/tests/test_recall.py +105 -0
- swarm_agent-0.1.0/tests/test_schema_tools.py +98 -0
- swarm_agent-0.1.0/tests/test_serialization.py +169 -0
- swarm_agent-0.1.0/tests/test_session.py +77 -0
- swarm_agent-0.1.0/tests/test_skills.py +111 -0
- swarm_agent-0.1.0/tests/test_state.py +128 -0
- swarm_agent-0.1.0/tests/test_subagent.py +137 -0
- swarm_agent-0.1.0/tests/test_token_store.py +140 -0
- swarm_agent-0.1.0/tests/test_tools.py +75 -0
- swarm_agent-0.1.0/tools/__init__.py +7 -0
- swarm_agent-0.1.0/tools/base.py +46 -0
- swarm_agent-0.1.0/tools/builtin/__init__.py +1 -0
- swarm_agent-0.1.0/tools/builtin/cron.py +92 -0
- swarm_agent-0.1.0/tools/builtin/file.py +88 -0
- swarm_agent-0.1.0/tools/builtin/message.py +115 -0
- swarm_agent-0.1.0/tools/builtin/system.py +31 -0
- swarm_agent-0.1.0/tools/builtin/web_fetch.py +97 -0
- swarm_agent-0.1.0/tools/builtin/web_search.py +93 -0
- swarm_agent-0.1.0/tools/discovery.py +83 -0
- swarm_agent-0.1.0/tools/permission.py +60 -0
- swarm_agent-0.1.0/tools/registry.py +76 -0
- swarm_agent-0.1.0/tools/schema.py +70 -0
- swarm_agent-0.1.0/utils/__init__.py +16 -0
- swarm_agent-0.1.0/utils/helpers.py +13 -0
- swarm_agent-0.1.0/utils/media.py +25 -0
- swarm_agent-0.1.0/utils/template.py +13 -0
- swarm_agent-0.1.0/utils/text.py +28 -0
- swarm_agent-0.1.0/utils/tokens.py +74 -0
- swarm_agent-0.1.0/version.py +10 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.pyc
|
|
4
|
+
.venv/
|
|
5
|
+
*.egg-info/
|
|
6
|
+
|
|
7
|
+
# Git
|
|
8
|
+
.git/
|
|
9
|
+
|
|
10
|
+
# IDE
|
|
11
|
+
.vscode/
|
|
12
|
+
.idea/
|
|
13
|
+
|
|
14
|
+
# Reference projects (large)
|
|
15
|
+
_ref/
|
|
16
|
+
|
|
17
|
+
# Test/output artifacts
|
|
18
|
+
.pytest_cache/
|
|
19
|
+
htmlcov/
|
|
20
|
+
*.zip
|
|
21
|
+
|
|
22
|
+
# Config (mounted at runtime)
|
|
23
|
+
config.yaml
|
|
24
|
+
|
|
25
|
+
# Data directories
|
|
26
|
+
data/
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
strategy:
|
|
13
|
+
matrix:
|
|
14
|
+
python-version: ["3.10", "3.11", "3.12", "3.13"]
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
- uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: ${{ matrix.python-version }}
|
|
21
|
+
|
|
22
|
+
- name: Install dependencies
|
|
23
|
+
run: |
|
|
24
|
+
python -m pip install --upgrade pip
|
|
25
|
+
pip install -e ".[dev]"
|
|
26
|
+
|
|
27
|
+
- name: Lint
|
|
28
|
+
run: ruff check .
|
|
29
|
+
|
|
30
|
+
- name: Format check
|
|
31
|
+
run: ruff format --check .
|
|
32
|
+
|
|
33
|
+
- name: Test
|
|
34
|
+
run: pytest tests/ -v --cov=. --cov-report=term --cov-report=xml
|
|
35
|
+
|
|
36
|
+
- name: Upload coverage
|
|
37
|
+
uses: codecov/codecov-action@v4
|
|
38
|
+
with:
|
|
39
|
+
file: ./coverage.xml
|
|
40
|
+
flags: unittests
|
|
41
|
+
name: codecov-${{ matrix.python-version }}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Bytecode
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
|
|
6
|
+
# Build
|
|
7
|
+
dist/
|
|
8
|
+
build/
|
|
9
|
+
|
|
10
|
+
# Virtual environments
|
|
11
|
+
.venv/
|
|
12
|
+
venv/
|
|
13
|
+
.env
|
|
14
|
+
|
|
15
|
+
# IDE
|
|
16
|
+
.vscode/
|
|
17
|
+
.idea/
|
|
18
|
+
|
|
19
|
+
# OS
|
|
20
|
+
.DS_Store
|
|
21
|
+
Thumbs.db
|
|
22
|
+
|
|
23
|
+
# Configuration (contains secrets)
|
|
24
|
+
config.yaml
|
|
25
|
+
|
|
26
|
+
# Data directories
|
|
27
|
+
data/
|
|
28
|
+
*.db
|
|
29
|
+
*.db-journal
|
|
30
|
+
*.db-wal
|
|
31
|
+
|
|
32
|
+
# Logs
|
|
33
|
+
*.log
|
|
34
|
+
*.log.gz
|
|
35
|
+
|
|
36
|
+
# Test artifacts
|
|
37
|
+
.pytest_cache/
|
|
38
|
+
.coverage
|
|
39
|
+
htmlcov/
|
|
40
|
+
.ruff_cache/
|
|
41
|
+
|
|
42
|
+
# Misc
|
|
43
|
+
*.swp
|
|
44
|
+
*.swo
|
|
45
|
+
*~
|
|
46
|
+
# Claude Code / IDE session data
|
|
47
|
+
.claude/
|
|
48
|
+
.opencode/
|
|
49
|
+
.superpowers/
|
|
50
|
+
.agents/
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Swarm will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.1.0] — 2026-06-07
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Initial release of Swarm framework
|
|
12
|
+
- 5-state AgentLoop (RESTORE → BUILD → RUN → SAVE → RESPOND)
|
|
13
|
+
- Immutable RequestContext for concurrency-safe multi-tenant isolation
|
|
14
|
+
- Per-chat_id asyncio.Lock for serial session processing
|
|
15
|
+
- ChromaDB vector memory with per-chat_id collections
|
|
16
|
+
- SQLite short-term message store
|
|
17
|
+
- Dream two-phase memory consolidation (LLM extraction + vector storage)
|
|
18
|
+
- Context compressor with trajectory-preserving truncation
|
|
19
|
+
- Knowledge graph for cross-session entity relationships
|
|
20
|
+
- Hybrid memory recall (vector similarity + time decay + importance)
|
|
21
|
+
- Feishu WebSocket long connection support
|
|
22
|
+
- Full Feishu message type parser (text, post, image, audio, file, sticker, interactive, share_chat, merge_forward)
|
|
23
|
+
- CardKit streaming output engine
|
|
24
|
+
- Interactive card action handling
|
|
25
|
+
- Feishu OAuth 2.0 user authorization flow
|
|
26
|
+
- AES-256-GCM encrypted token storage with auto-refresh
|
|
27
|
+
- User identity injection for tool operations
|
|
28
|
+
- Async message bus (asyncio.Queue)
|
|
29
|
+
- OpenAI-compatible provider (supports vLLM, Ollama, custom endpoints)
|
|
30
|
+
- Anthropic provider (supports DeepSeek Anthropic-compatible API)
|
|
31
|
+
- Provider fallback chain with automatic failover
|
|
32
|
+
- Exponential backoff retry with jitter
|
|
33
|
+
- Token counting (tiktoken-based + heuristic fallback)
|
|
34
|
+
- Tool registry with auto-discovery
|
|
35
|
+
- Tool permission system with declarative access control
|
|
36
|
+
- Web search tool (DuckDuckGo)
|
|
37
|
+
- Web fetch tool (URL content extraction)
|
|
38
|
+
- Feishu message operations tool (send, react)
|
|
39
|
+
- Feishu file operations tool (list, info)
|
|
40
|
+
- Cron management tool (create, list, delete)
|
|
41
|
+
- System command tool (help, status)
|
|
42
|
+
- Subagent system with concurrency limiting and timeout
|
|
43
|
+
- Markdown Skills loader with frontmatter support
|
|
44
|
+
- 10 built-in skills (base-assistant, calendar, summary, translator, code-review, reminder, customer-support, data-analysis, meeting-notes, feishu-docs)
|
|
45
|
+
- MCP client for connecting to external MCP servers
|
|
46
|
+
- MCP server for exposing Swarm tools
|
|
47
|
+
- Plugin manifest protocol with lifecycle management
|
|
48
|
+
- Plugin loader (filesystem + setuptools entry points)
|
|
49
|
+
- Publish/subscribe event bus for runtime observability
|
|
50
|
+
- Metrics collector for monitoring (latency, throughput, errors)
|
|
51
|
+
- APScheduler-based cron with SQLite persistence
|
|
52
|
+
- Natural language → cron expression parser
|
|
53
|
+
- Persistent state store with snapshots and migration
|
|
54
|
+
- Outbound message delivery layer (per-chat queues, rate limiting, retry)
|
|
55
|
+
- Interactive CLI with Rich and prompt_toolkit
|
|
56
|
+
- Commands: `swarm chat`, `swarm ws`, `swarm init`, `swarm validate`, `swarm version`
|
|
57
|
+
- structlog-based structured JSON logging
|
|
58
|
+
- Log rotation with gzip compression
|
|
59
|
+
- Separate audit log and error log
|
|
60
|
+
- Configurable log retention
|
|
61
|
+
- Pydantic v2 configuration schema with YAML loader
|
|
62
|
+
- ${ENV_VAR} substitution in config files
|
|
63
|
+
- Graceful shutdown with checkpoint preservation
|
|
64
|
+
- Docker deployment with docker-compose
|
|
65
|
+
- Systemd and supervisor service templates
|
|
66
|
+
- 220+ unit and integration tests
|
|
67
|
+
- Comprehensive documentation
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as members, contributors, and leaders pledge to make participation in our
|
|
6
|
+
community a harassment-free experience for everyone, regardless of age, body
|
|
7
|
+
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
|
8
|
+
identity and expression, level of experience, education, socio-economic status,
|
|
9
|
+
nationality, personal appearance, race, religion, or sexual identity
|
|
10
|
+
and orientation.
|
|
11
|
+
|
|
12
|
+
We pledge to act and interact in ways that contribute to an open, welcoming,
|
|
13
|
+
diverse, inclusive, and healthy community.
|
|
14
|
+
|
|
15
|
+
## Our Standards
|
|
16
|
+
|
|
17
|
+
Examples of behavior that contributes to a positive environment:
|
|
18
|
+
|
|
19
|
+
* Demonstrating empathy and kindness toward other people
|
|
20
|
+
* Being respectful of differing opinions, viewpoints, and experiences
|
|
21
|
+
* Giving and gracefully accepting constructive feedback
|
|
22
|
+
* Accepting responsibility and apologizing to those affected by our mistakes
|
|
23
|
+
* Focusing on what is best for the overall community
|
|
24
|
+
|
|
25
|
+
Examples of unacceptable behavior:
|
|
26
|
+
|
|
27
|
+
* The use of sexualized language or imagery, and sexual attention of any kind
|
|
28
|
+
* Trolling, insulting or derogatory comments, and personal or political attacks
|
|
29
|
+
* Public or private harassment
|
|
30
|
+
* Publishing others' private information without explicit permission
|
|
31
|
+
* Other conduct which could reasonably be considered inappropriate
|
|
32
|
+
|
|
33
|
+
## Enforcement
|
|
34
|
+
|
|
35
|
+
Community leaders are responsible for clarifying and enforcing our standards of
|
|
36
|
+
acceptable behavior and will take appropriate and fair corrective action in
|
|
37
|
+
response to any behavior that they deem inappropriate, threatening, offensive,
|
|
38
|
+
or harmful.
|
|
39
|
+
|
|
40
|
+
## Scope
|
|
41
|
+
|
|
42
|
+
This Code of Conduct applies within all community spaces, and also applies when
|
|
43
|
+
an individual is officially representing the community in public spaces.
|
|
44
|
+
|
|
45
|
+
## Attribution
|
|
46
|
+
|
|
47
|
+
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org),
|
|
48
|
+
version 2.0, available at
|
|
49
|
+
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Contributing to Swarm
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing! This document outlines the process and guidelines.
|
|
4
|
+
|
|
5
|
+
## Development Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
git clone https://github.com/your-org/swarm.git
|
|
9
|
+
cd swarm
|
|
10
|
+
python -m venv venv
|
|
11
|
+
source venv/bin/activate
|
|
12
|
+
pip install -e ".[dev]"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Code Style
|
|
16
|
+
|
|
17
|
+
- Python 3.10+ with type hints
|
|
18
|
+
- Line length: 100 characters
|
|
19
|
+
- Follow existing patterns in the codebase
|
|
20
|
+
- Lint with ruff: `ruff check swarm/`
|
|
21
|
+
|
|
22
|
+
## Testing
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Run all tests
|
|
26
|
+
pytest tests/ -v
|
|
27
|
+
|
|
28
|
+
# With coverage
|
|
29
|
+
pytest tests/ -v --cov=swarm --cov-report=term
|
|
30
|
+
|
|
31
|
+
# Run specific test file
|
|
32
|
+
pytest tests/test_agent.py -v
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Aim for 80%+ test coverage on new code.
|
|
36
|
+
|
|
37
|
+
## Commit Convention
|
|
38
|
+
|
|
39
|
+
We use conventional commits:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
feat: add new feature
|
|
43
|
+
fix: fix bug description
|
|
44
|
+
docs: update documentation
|
|
45
|
+
test: add tests for X
|
|
46
|
+
refactor: restructure Y module
|
|
47
|
+
chore: update dependencies
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Pull Request Process
|
|
51
|
+
|
|
52
|
+
1. Fork the repository
|
|
53
|
+
2. Create a feature branch (`git checkout -b feat/amazing-feature`)
|
|
54
|
+
3. Write tests for your changes
|
|
55
|
+
4. Ensure all tests pass (`pytest tests/ -v`)
|
|
56
|
+
5. Lint your code (`ruff check swarm/`)
|
|
57
|
+
6. Commit with conventional commit messages
|
|
58
|
+
7. Push and create a Pull Request
|
|
59
|
+
|
|
60
|
+
## Project Structure
|
|
61
|
+
|
|
62
|
+
See the [Architecture Guide](docs/architecture.md) for a detailed walkthrough.
|
|
63
|
+
|
|
64
|
+
## Adding a New Tool
|
|
65
|
+
|
|
66
|
+
1. Create tool class in `swarm/tools/builtin/` or your plugin
|
|
67
|
+
2. Extend `ToolBase` with `name`, `description`, `parameters`
|
|
68
|
+
3. Implement `async def execute(self, args, ctx) -> str`
|
|
69
|
+
4. Register in `ToolRegistry`
|
|
70
|
+
5. Write tests
|
|
71
|
+
|
|
72
|
+
## Adding a New Skill
|
|
73
|
+
|
|
74
|
+
1. Create directory: `skills_builtin/skill-name/`
|
|
75
|
+
2. Create `SKILL.md` with YAML frontmatter
|
|
76
|
+
3. Write clear instructions and examples
|
|
77
|
+
4. Test by loading with `SkillsLoader`
|
|
78
|
+
|
|
79
|
+
## Code of Conduct
|
|
80
|
+
|
|
81
|
+
See [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
|
|
82
|
+
|
|
83
|
+
## Questions?
|
|
84
|
+
|
|
85
|
+
Open an issue or discussion on GitHub.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Swarm Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|