blondie-types 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.
- blondie_types-0.1.0/.gitignore +32 -0
- blondie_types-0.1.0/LICENSE +21 -0
- blondie_types-0.1.0/PKG-INFO +172 -0
- blondie_types-0.1.0/README.md +118 -0
- blondie_types-0.1.0/pyproject.toml +60 -0
- blondie_types-0.1.0/src/blondie/__init__.py +211 -0
- blondie_types-0.1.0/src/blondie/backlog.py +731 -0
- blondie_types-0.1.0/src/blondie/ci.py +63 -0
- blondie_types-0.1.0/src/blondie/journal.py +30 -0
- blondie_types-0.1.0/src/blondie/plugins.py +219 -0
- blondie_types-0.1.0/src/blondie/py.typed +0 -0
- blondie_types-0.1.0/src/blondie/testing.py +161 -0
- blondie_types-0.1.0/src/blondie/tools.py +200 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
*$py.class
|
|
2
|
+
*.egg
|
|
3
|
+
*.egg-info/
|
|
4
|
+
*.log
|
|
5
|
+
*.py[cod]
|
|
6
|
+
.agent/secrets.env.yaml
|
|
7
|
+
.agent/llm.yaml
|
|
8
|
+
.agent/usage.yaml
|
|
9
|
+
.agent/.backlog-idempotency.json
|
|
10
|
+
.agent/.backlog.lock
|
|
11
|
+
.agent/backlog/
|
|
12
|
+
.agent/journal/webhook-dead-letter/
|
|
13
|
+
.coverage*
|
|
14
|
+
.eggs/
|
|
15
|
+
.mypy_cache/
|
|
16
|
+
.pytest_cache/
|
|
17
|
+
.ruff_cache/
|
|
18
|
+
.tox/
|
|
19
|
+
.venv/
|
|
20
|
+
__pycache__/
|
|
21
|
+
_import/
|
|
22
|
+
/_logs/
|
|
23
|
+
_tmp*
|
|
24
|
+
.tmp*
|
|
25
|
+
!/_tmp_pytest/.gitkeep
|
|
26
|
+
build/
|
|
27
|
+
dist/
|
|
28
|
+
env/
|
|
29
|
+
htmlcov/
|
|
30
|
+
log.*
|
|
31
|
+
secrets.env.yaml
|
|
32
|
+
venv/
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Ilya I
|
|
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.
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: blondie-types
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Public SDK types for authoring Blondie plugins (backlog backends, CI providers, LLM tools).
|
|
5
|
+
Project-URL: Homepage, https://github.com/iva2k/blondie
|
|
6
|
+
Project-URL: Documentation, https://github.com/iva2k/blondie/blob/main/docs/PLUGINS.md
|
|
7
|
+
Project-URL: Repository, https://github.com/iva2k/blondie
|
|
8
|
+
Project-URL: Issues, https://github.com/iva2k/blondie/issues
|
|
9
|
+
Author-email: iva2k <iva2k@yahoo.com>
|
|
10
|
+
Maintainer-email: iva2k <iva2k@yahoo.com>
|
|
11
|
+
License: MIT License
|
|
12
|
+
|
|
13
|
+
Copyright (c) 2026 Ilya I
|
|
14
|
+
|
|
15
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
16
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
17
|
+
in the Software without restriction, including without limitation the rights
|
|
18
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
19
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
20
|
+
furnished to do so, subject to the following conditions:
|
|
21
|
+
|
|
22
|
+
The above copyright notice and this permission notice shall be included in all
|
|
23
|
+
copies or substantial portions of the Software.
|
|
24
|
+
|
|
25
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
26
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
27
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
28
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
29
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
30
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
31
|
+
SOFTWARE.
|
|
32
|
+
License-File: LICENSE
|
|
33
|
+
Keywords: agent,blondie,llm,plugins,sdk
|
|
34
|
+
Classifier: Development Status :: 3 - Alpha
|
|
35
|
+
Classifier: Intended Audience :: Developers
|
|
36
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
37
|
+
Classifier: Operating System :: OS Independent
|
|
38
|
+
Classifier: Programming Language :: Python :: 3
|
|
39
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
42
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
43
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
44
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
45
|
+
Classifier: Typing :: Typed
|
|
46
|
+
Requires-Python: >=3.10
|
|
47
|
+
Requires-Dist: pydantic>=2.8.0
|
|
48
|
+
Requires-Dist: typing-extensions>=4.10.0
|
|
49
|
+
Provides-Extra: dev
|
|
50
|
+
Requires-Dist: mypy>=1.11; extra == 'dev'
|
|
51
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
52
|
+
Requires-Dist: ruff>=0.6; extra == 'dev'
|
|
53
|
+
Description-Content-Type: text/markdown
|
|
54
|
+
|
|
55
|
+
# blondie-types
|
|
56
|
+
|
|
57
|
+
Public SDK types for authoring [Blondie](https://github.com/iva2k/blondie)
|
|
58
|
+
plugins. Plugins import every Blondie type they need from this single
|
|
59
|
+
package.
|
|
60
|
+
|
|
61
|
+
* **Distribution name** (PyPI): `blondie-types`
|
|
62
|
+
* **Import name**: `blondie`
|
|
63
|
+
* **Contents**: ABCs, dataclasses, enums, error classes, capability
|
|
64
|
+
constants, and API protocols. No runtime code.
|
|
65
|
+
* **Dependencies**: stdlib + `pydantic` + `typing_extensions`.
|
|
66
|
+
|
|
67
|
+
The Blondie runtime depends on `blondie-types`; `blondie-types` does not
|
|
68
|
+
depend on the runtime. Plugins develop, test, and ship outside the
|
|
69
|
+
Blondie repo with `blondie-types` as their only Blondie-side dependency.
|
|
70
|
+
|
|
71
|
+
## Quick start
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
pip install blondie-types
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
from blondie import (
|
|
79
|
+
BacklogBackend,
|
|
80
|
+
BackendProvider,
|
|
81
|
+
Plugin,
|
|
82
|
+
PluginTool,
|
|
83
|
+
Task,
|
|
84
|
+
TaskStatus,
|
|
85
|
+
ToolProvider,
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class MyTool(PluginTool):
|
|
90
|
+
name = "my_tool"
|
|
91
|
+
description = "A tiny example."
|
|
92
|
+
|
|
93
|
+
async def execute(self, **kwargs) -> str:
|
|
94
|
+
self.api.journal.info("hello from my_tool")
|
|
95
|
+
return "ok"
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class MyPlugin(Plugin):
|
|
99
|
+
def provides(self):
|
|
100
|
+
return [ToolProvider(MyTool)]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Top-level exports
|
|
104
|
+
|
|
105
|
+
| Symbol | Kind | Module |
|
|
106
|
+
|:----------------------------|:----------|:-------------------|
|
|
107
|
+
| `Plugin` | ABC | `blondie.plugins` |
|
|
108
|
+
| `Provider` | ABC | `blondie.plugins` |
|
|
109
|
+
| `BackendProvider` | dataclass | `blondie.plugins` |
|
|
110
|
+
| `CIProviderProvider` | dataclass | `blondie.plugins` |
|
|
111
|
+
| `ToolProvider` | dataclass | `blondie.plugins` |
|
|
112
|
+
| `RegistrationContext` | dataclass | `blondie.plugins` |
|
|
113
|
+
| `PluginInfo` | dataclass | `blondie.plugins` |
|
|
114
|
+
| `PluginEvent` | dataclass | `blondie.plugins` |
|
|
115
|
+
| `PLUGIN_API_VERSION` | int | `blondie.plugins` |
|
|
116
|
+
| `PluginTool` | ABC | `blondie.tools` |
|
|
117
|
+
| `ToolAPI` | Protocol | `blondie.tools` |
|
|
118
|
+
| `BacklogBackend` | ABC | `blondie.backlog` |
|
|
119
|
+
| `BackendAPI` | Protocol | `blondie.backlog` |
|
|
120
|
+
| `Task`, `Sprint`, `Comment` | dataclass | `blondie.backlog` |
|
|
121
|
+
| `Priority`, `TaskStatus` | enum | `blondie.backlog` |
|
|
122
|
+
| `TaskFormatter` | ABC | `blondie.backlog` |
|
|
123
|
+
| `CredentialSpec` | dataclass | `blondie.backlog` |
|
|
124
|
+
| `BackendError` (+ family) | exception | `blondie.backlog` |
|
|
125
|
+
| `CAP_*` | constants | `blondie.backlog` |
|
|
126
|
+
| `CIProvider` | ABC | `blondie.ci` |
|
|
127
|
+
| `CIAPI` | Protocol | `blondie.ci` |
|
|
128
|
+
| `Journal` | Protocol | `blondie.journal` |
|
|
129
|
+
|
|
130
|
+
The flat `from blondie import X` form is preferred; per-area submodules
|
|
131
|
+
are also exposed for selective import.
|
|
132
|
+
|
|
133
|
+
## Versioning
|
|
134
|
+
|
|
135
|
+
The SDK follows [Semantic Versioning](https://semver.org/). Two version
|
|
136
|
+
numbers travel together:
|
|
137
|
+
|
|
138
|
+
* The **distribution version** in `pyproject.toml` (visible as
|
|
139
|
+
`blondie.__version__`, sourced from package metadata) — bumped on every
|
|
140
|
+
release.
|
|
141
|
+
* The **plugin contract version** `blondie.PLUGIN_API_VERSION` — bumped
|
|
142
|
+
on every breaking change to the public surface re-exported from
|
|
143
|
+
`blondie`.
|
|
144
|
+
|
|
145
|
+
Release notes live in [CHANGELOG.md](CHANGELOG.md) (Keep-a-Changelog
|
|
146
|
+
format). The release flow is automated:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# 1. Land your changes; describe them under '## [Unreleased]' in CHANGELOG.md.
|
|
150
|
+
# 2. From the repo root, run one of:
|
|
151
|
+
poe bump-types --patch # bug fixes
|
|
152
|
+
poe bump-types --minor # additive change
|
|
153
|
+
poe bump-types --major # breaking change (also bump PLUGIN_API_VERSION)
|
|
154
|
+
poe bump-types --to 1.2.3 # explicit target
|
|
155
|
+
|
|
156
|
+
# 3. The script edits pyproject.toml and CHANGELOG.md. Review:
|
|
157
|
+
git diff packages/blondie-types/
|
|
158
|
+
|
|
159
|
+
# 4. Commit, tag, push:
|
|
160
|
+
git commit -am "[#NNN] blondie-types vX.Y.Z"
|
|
161
|
+
git tag blondie-types-vX.Y.Z
|
|
162
|
+
git push && git push origin blondie-types-vX.Y.Z
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
The tag triggers `.github/workflows/blondie-types-publish.yml`, which
|
|
166
|
+
publishes to PyPI via OIDC trusted publishing and creates a matching
|
|
167
|
+
GitHub Release with the CHANGELOG section as release notes and the
|
|
168
|
+
sdist + wheel attached as assets.
|
|
169
|
+
|
|
170
|
+
## License
|
|
171
|
+
|
|
172
|
+
MIT
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# blondie-types
|
|
2
|
+
|
|
3
|
+
Public SDK types for authoring [Blondie](https://github.com/iva2k/blondie)
|
|
4
|
+
plugins. Plugins import every Blondie type they need from this single
|
|
5
|
+
package.
|
|
6
|
+
|
|
7
|
+
* **Distribution name** (PyPI): `blondie-types`
|
|
8
|
+
* **Import name**: `blondie`
|
|
9
|
+
* **Contents**: ABCs, dataclasses, enums, error classes, capability
|
|
10
|
+
constants, and API protocols. No runtime code.
|
|
11
|
+
* **Dependencies**: stdlib + `pydantic` + `typing_extensions`.
|
|
12
|
+
|
|
13
|
+
The Blondie runtime depends on `blondie-types`; `blondie-types` does not
|
|
14
|
+
depend on the runtime. Plugins develop, test, and ship outside the
|
|
15
|
+
Blondie repo with `blondie-types` as their only Blondie-side dependency.
|
|
16
|
+
|
|
17
|
+
## Quick start
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
pip install blondie-types
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
from blondie import (
|
|
25
|
+
BacklogBackend,
|
|
26
|
+
BackendProvider,
|
|
27
|
+
Plugin,
|
|
28
|
+
PluginTool,
|
|
29
|
+
Task,
|
|
30
|
+
TaskStatus,
|
|
31
|
+
ToolProvider,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class MyTool(PluginTool):
|
|
36
|
+
name = "my_tool"
|
|
37
|
+
description = "A tiny example."
|
|
38
|
+
|
|
39
|
+
async def execute(self, **kwargs) -> str:
|
|
40
|
+
self.api.journal.info("hello from my_tool")
|
|
41
|
+
return "ok"
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class MyPlugin(Plugin):
|
|
45
|
+
def provides(self):
|
|
46
|
+
return [ToolProvider(MyTool)]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Top-level exports
|
|
50
|
+
|
|
51
|
+
| Symbol | Kind | Module |
|
|
52
|
+
|:----------------------------|:----------|:-------------------|
|
|
53
|
+
| `Plugin` | ABC | `blondie.plugins` |
|
|
54
|
+
| `Provider` | ABC | `blondie.plugins` |
|
|
55
|
+
| `BackendProvider` | dataclass | `blondie.plugins` |
|
|
56
|
+
| `CIProviderProvider` | dataclass | `blondie.plugins` |
|
|
57
|
+
| `ToolProvider` | dataclass | `blondie.plugins` |
|
|
58
|
+
| `RegistrationContext` | dataclass | `blondie.plugins` |
|
|
59
|
+
| `PluginInfo` | dataclass | `blondie.plugins` |
|
|
60
|
+
| `PluginEvent` | dataclass | `blondie.plugins` |
|
|
61
|
+
| `PLUGIN_API_VERSION` | int | `blondie.plugins` |
|
|
62
|
+
| `PluginTool` | ABC | `blondie.tools` |
|
|
63
|
+
| `ToolAPI` | Protocol | `blondie.tools` |
|
|
64
|
+
| `BacklogBackend` | ABC | `blondie.backlog` |
|
|
65
|
+
| `BackendAPI` | Protocol | `blondie.backlog` |
|
|
66
|
+
| `Task`, `Sprint`, `Comment` | dataclass | `blondie.backlog` |
|
|
67
|
+
| `Priority`, `TaskStatus` | enum | `blondie.backlog` |
|
|
68
|
+
| `TaskFormatter` | ABC | `blondie.backlog` |
|
|
69
|
+
| `CredentialSpec` | dataclass | `blondie.backlog` |
|
|
70
|
+
| `BackendError` (+ family) | exception | `blondie.backlog` |
|
|
71
|
+
| `CAP_*` | constants | `blondie.backlog` |
|
|
72
|
+
| `CIProvider` | ABC | `blondie.ci` |
|
|
73
|
+
| `CIAPI` | Protocol | `blondie.ci` |
|
|
74
|
+
| `Journal` | Protocol | `blondie.journal` |
|
|
75
|
+
|
|
76
|
+
The flat `from blondie import X` form is preferred; per-area submodules
|
|
77
|
+
are also exposed for selective import.
|
|
78
|
+
|
|
79
|
+
## Versioning
|
|
80
|
+
|
|
81
|
+
The SDK follows [Semantic Versioning](https://semver.org/). Two version
|
|
82
|
+
numbers travel together:
|
|
83
|
+
|
|
84
|
+
* The **distribution version** in `pyproject.toml` (visible as
|
|
85
|
+
`blondie.__version__`, sourced from package metadata) — bumped on every
|
|
86
|
+
release.
|
|
87
|
+
* The **plugin contract version** `blondie.PLUGIN_API_VERSION` — bumped
|
|
88
|
+
on every breaking change to the public surface re-exported from
|
|
89
|
+
`blondie`.
|
|
90
|
+
|
|
91
|
+
Release notes live in [CHANGELOG.md](CHANGELOG.md) (Keep-a-Changelog
|
|
92
|
+
format). The release flow is automated:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# 1. Land your changes; describe them under '## [Unreleased]' in CHANGELOG.md.
|
|
96
|
+
# 2. From the repo root, run one of:
|
|
97
|
+
poe bump-types --patch # bug fixes
|
|
98
|
+
poe bump-types --minor # additive change
|
|
99
|
+
poe bump-types --major # breaking change (also bump PLUGIN_API_VERSION)
|
|
100
|
+
poe bump-types --to 1.2.3 # explicit target
|
|
101
|
+
|
|
102
|
+
# 3. The script edits pyproject.toml and CHANGELOG.md. Review:
|
|
103
|
+
git diff packages/blondie-types/
|
|
104
|
+
|
|
105
|
+
# 4. Commit, tag, push:
|
|
106
|
+
git commit -am "[#NNN] blondie-types vX.Y.Z"
|
|
107
|
+
git tag blondie-types-vX.Y.Z
|
|
108
|
+
git push && git push origin blondie-types-vX.Y.Z
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The tag triggers `.github/workflows/blondie-types-publish.yml`, which
|
|
112
|
+
publishes to PyPI via OIDC trusted publishing and creates a matching
|
|
113
|
+
GitHub Release with the CHANGELOG section as release notes and the
|
|
114
|
+
sdist + wheel attached as assets.
|
|
115
|
+
|
|
116
|
+
## License
|
|
117
|
+
|
|
118
|
+
MIT
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling>=1.21"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "blondie-types"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Public SDK types for authoring Blondie plugins (backlog backends, CI providers, LLM tools)."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = { file = "LICENSE" }
|
|
11
|
+
requires-python = ">=3.10"
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "iva2k", email = "iva2k@yahoo.com" },
|
|
14
|
+
]
|
|
15
|
+
maintainers = [
|
|
16
|
+
{ name = "iva2k", email = "iva2k@yahoo.com" },
|
|
17
|
+
]
|
|
18
|
+
keywords = ["blondie", "plugins", "sdk", "agent", "llm"]
|
|
19
|
+
classifiers = [
|
|
20
|
+
"Development Status :: 3 - Alpha",
|
|
21
|
+
"Intended Audience :: Developers",
|
|
22
|
+
"License :: OSI Approved :: MIT License",
|
|
23
|
+
"Operating System :: OS Independent",
|
|
24
|
+
"Programming Language :: Python :: 3",
|
|
25
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
26
|
+
"Programming Language :: Python :: 3.10",
|
|
27
|
+
"Programming Language :: Python :: 3.11",
|
|
28
|
+
"Programming Language :: Python :: 3.12",
|
|
29
|
+
"Programming Language :: Python :: 3.13",
|
|
30
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
31
|
+
"Typing :: Typed",
|
|
32
|
+
]
|
|
33
|
+
dependencies = [
|
|
34
|
+
"pydantic>=2.8.0",
|
|
35
|
+
"typing_extensions>=4.10.0",
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
[project.optional-dependencies]
|
|
39
|
+
dev = [
|
|
40
|
+
"pytest>=8.0",
|
|
41
|
+
"mypy>=1.11",
|
|
42
|
+
"ruff>=0.6",
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
[project.urls]
|
|
46
|
+
Homepage = "https://github.com/iva2k/blondie"
|
|
47
|
+
Documentation = "https://github.com/iva2k/blondie/blob/main/docs/PLUGINS.md"
|
|
48
|
+
Repository = "https://github.com/iva2k/blondie"
|
|
49
|
+
Issues = "https://github.com/iva2k/blondie/issues"
|
|
50
|
+
|
|
51
|
+
[tool.hatch.build.targets.wheel]
|
|
52
|
+
packages = ["src/blondie"]
|
|
53
|
+
|
|
54
|
+
[tool.hatch.build.targets.sdist]
|
|
55
|
+
include = [
|
|
56
|
+
"src/blondie",
|
|
57
|
+
"README.md",
|
|
58
|
+
"LICENSE",
|
|
59
|
+
"pyproject.toml",
|
|
60
|
+
]
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"""Public SDK for authoring Blondie plugins.
|
|
2
|
+
|
|
3
|
+
Plugins import every Blondie type they need from this single package.
|
|
4
|
+
The flat ``from blondie import X`` form is preferred; per-area
|
|
5
|
+
submodules (``blondie.plugins``, ``blondie.tools``, ``blondie.backlog``,
|
|
6
|
+
``blondie.ci``, ``blondie.journal``, ``blondie.testing``) are also
|
|
7
|
+
exposed for selective import.
|
|
8
|
+
|
|
9
|
+
Distribution name on PyPI: ``blondie-types``. Import name: ``blondie``.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
from importlib.metadata import PackageNotFoundError
|
|
15
|
+
from importlib.metadata import version as _pkg_version
|
|
16
|
+
|
|
17
|
+
from .backlog import (
|
|
18
|
+
BACKLOG_ABC_VERSION,
|
|
19
|
+
CAP_ADVISORY_LOCK,
|
|
20
|
+
CAP_BULK_UPDATE,
|
|
21
|
+
CAP_CLAIM_STEAL,
|
|
22
|
+
CAP_DISCUSSION,
|
|
23
|
+
CAP_DISTILLATION,
|
|
24
|
+
CAP_EXPORT_STREAMING,
|
|
25
|
+
CAP_GET_MANY,
|
|
26
|
+
CAP_HISTORY,
|
|
27
|
+
CAP_NATIVE_TIMESTAMPS,
|
|
28
|
+
CAP_WEBHOOKS,
|
|
29
|
+
CORE_CAPABILITIES,
|
|
30
|
+
BackendAPI,
|
|
31
|
+
BackendError,
|
|
32
|
+
BacklogBackend,
|
|
33
|
+
BacklogError,
|
|
34
|
+
BacklogHealth,
|
|
35
|
+
BacklogLockedError,
|
|
36
|
+
BacklogShutdownError,
|
|
37
|
+
BuilderAlreadyCommittedError,
|
|
38
|
+
Change,
|
|
39
|
+
ChangeAction,
|
|
40
|
+
ChangeEvent,
|
|
41
|
+
Claim,
|
|
42
|
+
ClaimantInfo,
|
|
43
|
+
ClaimConflictError,
|
|
44
|
+
ClaimResult,
|
|
45
|
+
Comment,
|
|
46
|
+
CredentialField,
|
|
47
|
+
CredentialSpec,
|
|
48
|
+
CredentialsProxy,
|
|
49
|
+
CredentialValidationError,
|
|
50
|
+
CyclicDependencyError,
|
|
51
|
+
DiscussionSummary,
|
|
52
|
+
Distillation,
|
|
53
|
+
DuplicateTaskError,
|
|
54
|
+
EncodingError,
|
|
55
|
+
ExportBundle,
|
|
56
|
+
ExportSchemaError,
|
|
57
|
+
ExportTooLargeError,
|
|
58
|
+
GitHelper,
|
|
59
|
+
HealthState,
|
|
60
|
+
HeartbeatResult,
|
|
61
|
+
HistoryHelper,
|
|
62
|
+
HttpHelper,
|
|
63
|
+
IdempotencyConflictError,
|
|
64
|
+
IdempotencyRecord,
|
|
65
|
+
InvalidPaginationCursorError,
|
|
66
|
+
PagedResult,
|
|
67
|
+
PermissionDeniedError,
|
|
68
|
+
Priority,
|
|
69
|
+
PromptStyle,
|
|
70
|
+
RateLimiter,
|
|
71
|
+
RateLimitExhaustedError,
|
|
72
|
+
RateLimitPolicy,
|
|
73
|
+
Release,
|
|
74
|
+
Sprint,
|
|
75
|
+
StaleSnapshotError,
|
|
76
|
+
Task,
|
|
77
|
+
TaskFormatter,
|
|
78
|
+
TaskNotFoundError,
|
|
79
|
+
TaskPreemptedError,
|
|
80
|
+
TaskStatus,
|
|
81
|
+
WebhookVerificationError,
|
|
82
|
+
)
|
|
83
|
+
from .ci import CIAPI, SUPPORTED_STRATEGIES, CIProvider
|
|
84
|
+
from .journal import Journal
|
|
85
|
+
from .plugins import (
|
|
86
|
+
PLUGIN_API_VERSION,
|
|
87
|
+
BackendProvider,
|
|
88
|
+
CIProviderProvider,
|
|
89
|
+
Plugin,
|
|
90
|
+
PluginEvent,
|
|
91
|
+
PluginEventKind,
|
|
92
|
+
PluginInfo,
|
|
93
|
+
PluginStatus,
|
|
94
|
+
Provider,
|
|
95
|
+
RegistrationContext,
|
|
96
|
+
ToolProvider,
|
|
97
|
+
)
|
|
98
|
+
from .tools import (
|
|
99
|
+
Budget,
|
|
100
|
+
Executor,
|
|
101
|
+
GitCLI,
|
|
102
|
+
Memory,
|
|
103
|
+
PluginTool,
|
|
104
|
+
Progress,
|
|
105
|
+
ToolAPI,
|
|
106
|
+
Tracer,
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
try:
|
|
110
|
+
__version__ = _pkg_version("blondie-types")
|
|
111
|
+
except PackageNotFoundError:
|
|
112
|
+
__version__ = "0.0.0+local"
|
|
113
|
+
|
|
114
|
+
__all__ = [
|
|
115
|
+
# Versioning
|
|
116
|
+
"BACKLOG_ABC_VERSION",
|
|
117
|
+
"PLUGIN_API_VERSION",
|
|
118
|
+
"__version__",
|
|
119
|
+
# Plugin entry-point
|
|
120
|
+
"Plugin",
|
|
121
|
+
"Provider",
|
|
122
|
+
"BackendProvider",
|
|
123
|
+
"CIProviderProvider",
|
|
124
|
+
"ToolProvider",
|
|
125
|
+
"RegistrationContext",
|
|
126
|
+
"PluginInfo",
|
|
127
|
+
"PluginEvent",
|
|
128
|
+
"PluginEventKind",
|
|
129
|
+
"PluginStatus",
|
|
130
|
+
# Tools
|
|
131
|
+
"PluginTool",
|
|
132
|
+
"ToolAPI",
|
|
133
|
+
"Executor",
|
|
134
|
+
"GitCLI",
|
|
135
|
+
"Progress",
|
|
136
|
+
"Memory",
|
|
137
|
+
"Tracer",
|
|
138
|
+
"Budget",
|
|
139
|
+
# Backlog domain
|
|
140
|
+
"BacklogBackend",
|
|
141
|
+
"BackendAPI",
|
|
142
|
+
"Task",
|
|
143
|
+
"Sprint",
|
|
144
|
+
"Release",
|
|
145
|
+
"Comment",
|
|
146
|
+
"Distillation",
|
|
147
|
+
"DiscussionSummary",
|
|
148
|
+
"Claim",
|
|
149
|
+
"ClaimantInfo",
|
|
150
|
+
"ClaimResult",
|
|
151
|
+
"HeartbeatResult",
|
|
152
|
+
"Change",
|
|
153
|
+
"ChangeEvent",
|
|
154
|
+
"ChangeAction",
|
|
155
|
+
"ExportBundle",
|
|
156
|
+
"BacklogHealth",
|
|
157
|
+
"IdempotencyRecord",
|
|
158
|
+
"PagedResult",
|
|
159
|
+
"Priority",
|
|
160
|
+
"TaskStatus",
|
|
161
|
+
"HealthState",
|
|
162
|
+
"PromptStyle",
|
|
163
|
+
"TaskFormatter",
|
|
164
|
+
"CredentialField",
|
|
165
|
+
"CredentialSpec",
|
|
166
|
+
"CredentialsProxy",
|
|
167
|
+
"RateLimitPolicy",
|
|
168
|
+
"RateLimiter",
|
|
169
|
+
"HistoryHelper",
|
|
170
|
+
"HttpHelper",
|
|
171
|
+
"GitHelper",
|
|
172
|
+
# Capability constants
|
|
173
|
+
"CAP_ADVISORY_LOCK",
|
|
174
|
+
"CAP_BULK_UPDATE",
|
|
175
|
+
"CAP_CLAIM_STEAL",
|
|
176
|
+
"CAP_DISCUSSION",
|
|
177
|
+
"CAP_DISTILLATION",
|
|
178
|
+
"CAP_EXPORT_STREAMING",
|
|
179
|
+
"CAP_GET_MANY",
|
|
180
|
+
"CAP_HISTORY",
|
|
181
|
+
"CAP_NATIVE_TIMESTAMPS",
|
|
182
|
+
"CAP_WEBHOOKS",
|
|
183
|
+
"CORE_CAPABILITIES",
|
|
184
|
+
# Backlog errors
|
|
185
|
+
"BacklogError",
|
|
186
|
+
"BacklogLockedError",
|
|
187
|
+
"BacklogShutdownError",
|
|
188
|
+
"BackendError",
|
|
189
|
+
"BuilderAlreadyCommittedError",
|
|
190
|
+
"ClaimConflictError",
|
|
191
|
+
"CredentialValidationError",
|
|
192
|
+
"CyclicDependencyError",
|
|
193
|
+
"DuplicateTaskError",
|
|
194
|
+
"EncodingError",
|
|
195
|
+
"ExportSchemaError",
|
|
196
|
+
"ExportTooLargeError",
|
|
197
|
+
"IdempotencyConflictError",
|
|
198
|
+
"InvalidPaginationCursorError",
|
|
199
|
+
"PermissionDeniedError",
|
|
200
|
+
"RateLimitExhaustedError",
|
|
201
|
+
"StaleSnapshotError",
|
|
202
|
+
"TaskNotFoundError",
|
|
203
|
+
"TaskPreemptedError",
|
|
204
|
+
"WebhookVerificationError",
|
|
205
|
+
# CI
|
|
206
|
+
"CIAPI",
|
|
207
|
+
"CIProvider",
|
|
208
|
+
"SUPPORTED_STRATEGIES",
|
|
209
|
+
# Journal
|
|
210
|
+
"Journal",
|
|
211
|
+
]
|