Metadata-Version: 2.4
Name: modulex-integrations
Version: 0.3.1
Summary: Community-contributable integrations (tools) for ModuleX
Project-URL: Homepage, https://github.com/ModuleXAI/modulex-integrations
Project-URL: Repository, https://github.com/ModuleXAI/modulex-integrations
Project-URL: Issues, https://github.com/ModuleXAI/modulex-integrations/issues
Author-email: ModuleX <team@modulex.dev>
License-Expression: MIT
License-File: LICENSE
Keywords: ai,integrations,langchain,modulex,tools
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Typing :: Typed
Requires-Python: >=3.12
Requires-Dist: httpx>=0.25.0
Requires-Dist: langchain-core>=0.3.0
Requires-Dist: pydantic>=2.5.0
Provides-Extra: all
Provides-Extra: dev
Requires-Dist: aiomysql>=0.2.0; extra == 'dev'
Requires-Dist: asyncpg>=0.29.0; extra == 'dev'
Requires-Dist: boto3>=1.34.0; extra == 'dev'
Requires-Dist: cryptography>=41.0; extra == 'dev'
Requires-Dist: elevenlabs>=2.0.0; extra == 'dev'
Requires-Dist: hubspot-api-client>=11.0.0; extra == 'dev'
Requires-Dist: langchain-tavily>=0.2.0; extra == 'dev'
Requires-Dist: mypy>=1.10.0; extra == 'dev'
Requires-Dist: nasdaq-data-link>=1.0.0; extra == 'dev'
Requires-Dist: pymssql>=2.2.8; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
Requires-Dist: pytest-httpx>=0.30.0; extra == 'dev'
Requires-Dist: pytest>=8.0.0; extra == 'dev'
Requires-Dist: ruff>=0.6.0; extra == 'dev'
Requires-Dist: snowflake-connector-python>=3.0.0; extra == 'dev'
Description-Content-Type: text/markdown

# modulex-integrations

[![CI](https://github.com/ModuleXAI/modulex-integrations/actions/workflows/validate.yml/badge.svg)](https://github.com/ModuleXAI/modulex-integrations/actions/workflows/validate.yml)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![PyPI](https://img.shields.io/pypi/v/modulex-integrations.svg)](https://pypi.org/project/modulex-integrations/)

Community-contributable integrations (tools) for the [ModuleX](https://github.com/ModuleXAI/modulex) runtime.

## Why this repo exists

`modulex` is a FastAPI/Python backend that, until now, bundled 45
LangChain tool integrations inline. We are extracting those 45 tools
into this standalone, publicly pip-installable package so that:

- adding a new tool is a single-repo PR, not a multi-file edit
  across the modulex monorepo,
- integration code is publicly inspectable,
- community contributions flow through the standard GitHub PR model.

LLM providers and knowledge providers stay in modulex. Only the
`tool` integrations migrate here.

## Status

**Phase 1 — early development.** The schema contract and packaging
are in place; integrations themselves will be migrated from the
modulex monorepo one at a time, starting with a `github` POC and
continuing via a scripted bulk migration. See [CHANGELOG.md](CHANGELOG.md)
for progress and [CONTRIBUTING.md](CONTRIBUTING.md) for layout rules.

## What is this?

Each integration in this package exposes one or more LangChain
`@tool` functions to the ModuleX runtime, together with credential
metadata (auth schemas, env vars, test endpoints). The runtime
discovers integrations via the Python `modulex.tools` entry-point
group and loads them at startup.

## Installation

```bash
pip install modulex-integrations
```

With every integration's optional dependencies:

```bash
pip install "modulex-integrations[all]"
```

Or only the integrations you need (extras are populated as
integrations are migrated):

```bash
pip install "modulex-integrations[github,slack]"
```

## Per-integration layout

Every integration ships in the same shape:

```
src/modulex_integrations/tools/<name>/
├── __init__.py        # re-exports manifest + TOOLS
├── manifest.py        # IntegrationManifest instance
├── tools.py           # LangChain @tool functions
├── outputs.py         # pydantic response models (UI/docs derive JSONSchema)
├── dependencies.toml  # per-integration runtime deps
├── README.md          # 5-section strict template (see CONTRIBUTING.md)
└── tests/
    └── test_<name>.py
```

The contract is enforced by pydantic types in
[`src/modulex_integrations/schema.py`](src/modulex_integrations/schema.py)
with `extra="forbid"` everywhere — a typo in a manifest fails at
import time, not at runtime.

## Development

```bash
git clone https://github.com/ModuleXAI/modulex-integrations.git
cd modulex-integrations
pip install -e ".[dev]"
pytest
ruff check src tests
mypy src/modulex_integrations
```

## Roadmap

- **Phase 1 — bootstrap (this commit).** Schema, packaging, CI,
  community meta files, cross-repo brief workflow.
- **Phase 2 — github POC migration.** One integration end-to-end:
  manifest, tools, outputs, tests, entry point, real
  `httpx.MockTransport` coverage of at least one action.
- **Phase 3 — scripted bulk migration.** The remaining 44
  integrations migrated by a one-shot script, then reviewed
  individually.

## License

MIT — see [LICENSE](LICENSE).
