Metadata-Version: 2.4
Name: kitino
Version: 0.1.0
Summary: Local staging bundle manager (meta.json, manifest.json, assets)
Author: Soroush
Author-email: Soroush <soroush@sor.sor>
License-Expression: Apache-2.0
License-File: LICENSE
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Typing :: Typed
Requires-Dist: pydantic>=2.5,<3
Requires-Python: >=3.11
Project-URL: Documentation, https://github.com/<your-org>/kitino#readme
Project-URL: Homepage, https://github.com/<your-org>/kitino
Project-URL: Issues, https://github.com/<your-org>/kitino/issues
Project-URL: Repository, https://github.com/<your-org>/kitino
Description-Content-Type: text/markdown

# kitino

Local staging bundle manager for multi-asset workspaces: `manifest.json`, per-bundle `meta.json`, asset lifecycle, path resolution, and Pydantic schema hooks.

## Requirements

- Python **3.11+** (3.12, 3.13, and 3.14 supported)
- [uv](https://docs.astral.sh/uv/) (recommended for development)

## Install

```bash
pip install kitino
```

## Development

```bash
git clone https://github.com/<your-org>/kitino.git
cd kitino
uv python pin 3.11
uv sync
```

## Tests

```bash
uv run python -m unittest discover -s tests -v
```

## Quick example

```python
from pathlib import Path

from kitino.bundle_manager import StagingWorkspace
from kitino.bundle_manager.meta import AssetKind
from kitino.bundle_manager.session import AssetSpec, BundleManagerSession

root = Path("staging/my-workspace")
ws = StagingWorkspace.create(root, workspace_id="demo", workspace_kind="generic")
session = BundleManagerSession.load_or_create(root / "bundle-a", "bundle-a", "demo.type")
ws.register_bundle(root / "bundle-a")

with session.prepare_asset(
    AssetSpec(key="main/data.json", kind=AssetKind.OUTPUT, created_by="example")
) as asset:
    asset.filepath.write_text('{"ok": true}', encoding="utf-8")
```

## Documentation

- [API quick reference](docs/bundle-manager.md)
- [Design boundaries](specs/design/bundle-manager-boundaries.md)

## License

Apache License 2.0 — see [LICENSE](LICENSE).

## History

Extracted from the [sdd-agents](https://github.com/) monorepo bundle-manager component.
