Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions DEVELOPER.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,10 +94,13 @@ just build

### Adding a new package

1. Create a new directory in `packages/`
2. Initialize the package: `uv init packages/your-package-name`
3. Update the package's `pyproject.toml` with appropriate metadata
4. The package will automatically be included in the workspace
1. Create the package directory in `packages/` and write its `pyproject.toml` before any source files.
2. Register the package in the root `pyproject.toml`:
- Add `"packages/your-package-name"` to `[tool.uv.workspace] members`.
- Add `keycardai-your-package-name = { workspace = true }` under `[tool.uv.sources]`.
3. Run `uv lock` to update the workspace lockfile.

Workspace members are listed explicitly (no `packages/*` glob) so a half-bootstrapped or stray directory under `packages/` cannot accidentally enter the workspace.

## Package Structure

Expand Down
11 changes: 8 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,17 @@ Repository = "https://github.com/keycardai/python-sdk"
Issues = "https://github.com/keycardai/python-sdk/issues"

[tool.uv.workspace]
# Listed explicitly so stray or half-bootstrapped dirs under packages/ cannot leak in.
members = [
".",
"packages/*",
"packages/*/examples/*"
"packages/oauth",
"packages/starlette",
"packages/mcp",
"packages/mcp-fastmcp",
"packages/fastmcp",
"packages/a2a",
"packages/*/examples/*",
]
# Exclude any packages that shouldn't be part of the workspace
exclude = []

[tool.uv.sources]
Expand Down
Loading