Skip to main content

tai42-storage-github

License: Apache 2.0

A GitHub-backed Storage provider for the TAI ecosystem. It stores content as files in a GitHub repository and serves the full tai42_contract.storage.Storage surface — the text methods (load / list / upload / delete / delete_dir) plus the binary/media methods (load_bytes / upload_bytes / stat).

The TAI ecosystem

TAI is an open-source runtime for MCP tools, agents, and workflows. A Storage backend is "where content physically lives" — a pluggable provider the runtime's ResourceManager loads and renders content over. This package is one such provider (GitHub); siblings back the same contract with S3 (tai42-storage-s3) and the local filesystem (tai42-storage-local). The ecosystem is open-ended: any package can back the same contract, so this repo is this provider's own full doc home, and the documentation site covers the platform-level story:

Install

Requires Python 3.13+. Install from PyPI into the environment that runs the server:

uv add tai42-storage-github

Or from source — clone this repo and add it as an editable dependency; the tai42-* dependencies resolve in-tree from the workspace.

git clone https://github.com/tai42ai/tai42   # next to your app checkout
cd /path/to/your/app
uv add --editable ../tai42/plugins/storage-github

Use

The backend is loaded by import side-effect: importing the tai42_storage_github package runs its @tai42_app.storage.register_storage decorator, making GithubStorage the active storage provider. Point a manifest's storage_module at the package:

# manifest.yml
storage_module: tai42_storage_github

Configuration

Configure through STORAGE_GITHUB_-prefixed environment variables:

Variable Default Description
STORAGE_GITHUB_USERNAME — Repository owner (user or org).
STORAGE_GITHUB_REPO — Repository name.
STORAGE_GITHUB_BRANCH main Branch to read/write.
STORAGE_GITHUB_TOKEN — Access token; omit for a public repository.
STORAGE_GITHUB_TIMEOUT_TOTAL 15.0 HTTP timeout (seconds).
STORAGE_GITHUB_MAX_CONNECTIONS 200 Connection-pool ceiling.
STORAGE_GITHUB_MAX_KEEPALIVE_CONNECTIONS 50 Keep-alive pool size.
STORAGE_GITHUB_KEEPALIVE_EXPIRY 300.0 Keep-alive expiry (seconds).

The token is held as a SecretStr; it authenticates requests but never appears in a log line, repr, or error message.

Reads and writes

  • Reads (load, load_bytes) go through the raw endpoint (raw.githubusercontent.com), which serves files of any size. The Contents API is deliberately not used for reads: it silently returns an empty body for a file over 1 MiB, so a large object would read as empty bytes. The raw endpoint is CDN-cached, so a read shortly after a write may return the previous content for up to ~5 minutes.
  • Writes (upload, upload_bytes) go through the Contents API (base64) and are capped conservatively at 1 MiB. A larger payload raises ValueError before the request rather than truncating; the API's own 422 is the backstop.
  • Listing uses the recursive Git Trees API (one request) and raises loudly on a truncated response rather than acting on a partial listing.
  • stat infers content_type from the path suffix — GitHub stores no per-object content-type.

Development

uv venv --python 3.13
uv pip install --no-sources --group dev --editable .
uv run --no-sync pytest --cov --cov-report=term-missing
uv run --no-sync ruff check .
uv run --no-sync ruff format --check .
uv run --no-sync pyright

License

Apache-2.0. See LICENSE and NOTICE.

Metadata

Release files for tai42-storage-github 1.2.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tai42-storage-github 1.2.10
File Size Uploaded
tai42_storage_github-1.2.10.tar.gz 22.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tai42-storage-github 1.2.10
File Interpreter ABI Platform
tai42_storage_github-1.2.10-py3-none-any.whl Python 3 none any Details

Total release size: 38.6 kB

Release files / tai42_storage_github-1.2.10.tar.gz

Download URL tai42_storage_github-1.2.10.tar.gz
Size 22.9 kB
Tags Source
SHA-256 checksum
How to use checksums
176953a3711e5fe5c7a186b096f127eb29ee445cd93772d9fcc2c600b18125c2
BLAKE2b-256 checksum
How to use checksums
106b234206e01ebf89a64b3bc7f3363dae3f8859159a7c39d26cc9bc7932b846
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / tai42_storage_github-1.2.10-py3-none-any.whl

Download URL tai42_storage_github-1.2.10-py3-none-any.whl
Size 15.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
910d2f2264ae50bfc14e9f5d2c9d2390d57f2e830374ff53b1e67d65d27cf8bd
BLAKE2b-256 checksum
How to use checksums
21306d4cb400b1a825672b135206a78a30fb2fa7e0d8a2938686d2b4f0d81b26
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

1.2.17

2 release files

1.2.16

2 release files

1.2.15

2 release files

1.2.14

2 release files

1.2.13

2 release files

1.2.12

2 release files

1.2.11

2 release files

This release

1.2.10 This release

2 release files

1.2.9

2 release files

1.2.8

2 release files

1.2.7

2 release files

1.2.6

2 release files

1.2.5

2 release files

1.2.4

2 release files

1.2.3

2 release files

1.2.2

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.16

2 release files

1.1.15

2 release files

1.1.14

2 release files

1.1.13

2 release files

1.1.12

2 release files

1.1.11

2 release files

1.1.10

2 release files

1.1.9

2 release files

1.1.8

2 release files

1.1.7

2 release files

1.1.6

2 release files

1.1.5

2 release files

1.1.4

2 release files

1.1.3

2 release files

1.1.2

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page