supervaizer 0.9.7__py3-none-any.whl → 0.10.0__py3-none-any.whl

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.
Files changed (58) hide show
  1. supervaizer/__init__.py +11 -2
  2. supervaizer/__version__.py +1 -1
  3. supervaizer/account.py +4 -0
  4. supervaizer/account_service.py +7 -1
  5. supervaizer/admin/routes.py +46 -7
  6. supervaizer/admin/static/js/job-start-form.js +373 -0
  7. supervaizer/admin/templates/agents.html +74 -0
  8. supervaizer/admin/templates/agents_grid.html +5 -3
  9. supervaizer/admin/templates/job_start_test.html +109 -0
  10. supervaizer/admin/templates/navigation.html +11 -1
  11. supervaizer/admin/templates/supervaize_instructions.html +212 -0
  12. supervaizer/agent.py +165 -25
  13. supervaizer/case.py +46 -14
  14. supervaizer/cli.py +248 -8
  15. supervaizer/common.py +45 -4
  16. supervaizer/deploy/__init__.py +16 -0
  17. supervaizer/deploy/cli.py +296 -0
  18. supervaizer/deploy/commands/__init__.py +9 -0
  19. supervaizer/deploy/commands/clean.py +294 -0
  20. supervaizer/deploy/commands/down.py +119 -0
  21. supervaizer/deploy/commands/local.py +460 -0
  22. supervaizer/deploy/commands/plan.py +167 -0
  23. supervaizer/deploy/commands/status.py +169 -0
  24. supervaizer/deploy/commands/up.py +281 -0
  25. supervaizer/deploy/docker.py +370 -0
  26. supervaizer/deploy/driver_factory.py +42 -0
  27. supervaizer/deploy/drivers/__init__.py +39 -0
  28. supervaizer/deploy/drivers/aws_app_runner.py +607 -0
  29. supervaizer/deploy/drivers/base.py +196 -0
  30. supervaizer/deploy/drivers/cloud_run.py +570 -0
  31. supervaizer/deploy/drivers/do_app_platform.py +504 -0
  32. supervaizer/deploy/health.py +404 -0
  33. supervaizer/deploy/state.py +210 -0
  34. supervaizer/deploy/templates/Dockerfile.template +44 -0
  35. supervaizer/deploy/templates/debug_env.py +69 -0
  36. supervaizer/deploy/templates/docker-compose.yml.template +37 -0
  37. supervaizer/deploy/templates/dockerignore.template +66 -0
  38. supervaizer/deploy/templates/entrypoint.sh +20 -0
  39. supervaizer/deploy/utils.py +41 -0
  40. supervaizer/examples/{controller-template.py → controller_template.py} +5 -4
  41. supervaizer/job.py +18 -5
  42. supervaizer/job_service.py +6 -5
  43. supervaizer/parameter.py +61 -1
  44. supervaizer/protocol/__init__.py +2 -2
  45. supervaizer/protocol/a2a/routes.py +1 -1
  46. supervaizer/routes.py +262 -12
  47. supervaizer/server.py +5 -11
  48. supervaizer/utils/__init__.py +16 -0
  49. supervaizer/utils/version_check.py +56 -0
  50. {supervaizer-0.9.7.dist-info → supervaizer-0.10.0.dist-info}/METADATA +105 -34
  51. supervaizer-0.10.0.dist-info/RECORD +76 -0
  52. {supervaizer-0.9.7.dist-info → supervaizer-0.10.0.dist-info}/WHEEL +1 -1
  53. supervaizer/protocol/acp/__init__.py +0 -21
  54. supervaizer/protocol/acp/model.py +0 -198
  55. supervaizer/protocol/acp/routes.py +0 -74
  56. supervaizer-0.9.7.dist-info/RECORD +0 -50
  57. {supervaizer-0.9.7.dist-info → supervaizer-0.10.0.dist-info}/entry_points.txt +0 -0
  58. {supervaizer-0.9.7.dist-info → supervaizer-0.10.0.dist-info}/licenses/LICENSE.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: supervaizer
3
- Version: 0.9.7
3
+ Version: 0.10.0
4
4
  Summary: Controller system for Supervaize
5
5
  Project-URL: Homepage, https://supervaize.com
6
6
  Project-URL: Repository, https://github.com/supervaize/supervaizer
@@ -16,52 +16,59 @@ Classifier: Programming Language :: Python :: 3
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  Requires-Python: >=3.12
18
18
  Requires-Dist: art>=6.5
19
- Requires-Dist: cryptography>=45.0.6
19
+ Requires-Dist: cryptography>=46.0.2
20
20
  Requires-Dist: demjson3>=3.0.6
21
21
  Requires-Dist: deprecated>=1.2.18
22
- Requires-Dist: fastapi>=0.116.1
22
+ Requires-Dist: fastapi>=0.118.0
23
23
  Requires-Dist: httpx>=0.28.1
24
24
  Requires-Dist: jinja2>=3.1.6
25
25
  Requires-Dist: loguru>=0.7.3
26
- Requires-Dist: orjson>=3.11.1
27
- Requires-Dist: psutil>=6.1.0
28
- Requires-Dist: pydantic>=2.11.7
29
- Requires-Dist: pymongo>=4.14.0
26
+ Requires-Dist: orjson>=3.11.3
27
+ Requires-Dist: packaging>=24.0
28
+ Requires-Dist: pydantic>=2.12.0
30
29
  Requires-Dist: python-slugify>=8.0.4
30
+ Requires-Dist: pyyaml>=6.0.3
31
31
  Requires-Dist: rich>=14.1.0
32
32
  Requires-Dist: shortuuid>=1.0.13
33
33
  Requires-Dist: sse-starlette>=3.0.2
34
34
  Requires-Dist: tinydb>=4.8.1
35
- Requires-Dist: typer>=0.16
36
- Requires-Dist: uvicorn>=0.35.0
35
+ Requires-Dist: typer>=0.19.2
36
+ Requires-Dist: uvicorn>=0.36.0
37
+ Provides-Extra: deploy
38
+ Requires-Dist: boto3>=1.34.0; extra == 'deploy'
39
+ Requires-Dist: docker>=7.0.0; extra == 'deploy'
40
+ Requires-Dist: google-cloud-artifact-registry>=1.8.0; extra == 'deploy'
41
+ Requires-Dist: google-cloud-run>=0.10.0; extra == 'deploy'
42
+ Requires-Dist: google-cloud-secret-manager>=2.18.0; extra == 'deploy'
43
+ Requires-Dist: psutil>=7.1.0; extra == 'deploy'
37
44
  Provides-Extra: dev
38
- Requires-Dist: hatch>=1.14.0; extra == 'dev'
39
- Requires-Dist: jsonschema>=4.25.0; extra == 'dev'
40
- Requires-Dist: mypy>=1.17.1; extra == 'dev'
45
+ Requires-Dist: hatch>=1.14.2; extra == 'dev'
46
+ Requires-Dist: jsonschema>=4.25.1; extra == 'dev'
47
+ Requires-Dist: mypy>=1.18.2; extra == 'dev'
41
48
  Requires-Dist: pre-commit>=3.7.0; extra == 'dev'
42
- Requires-Dist: pytest-asyncio>=1.1.0; extra == 'dev'
43
- Requires-Dist: pytest-cov>=6.2.1; extra == 'dev'
44
- Requires-Dist: pytest-mock>=3.14.1; extra == 'dev'
45
- Requires-Dist: pytest-sugar>=1.0.0; extra == 'dev'
46
- Requires-Dist: pytest>=8.4.1; extra == 'dev'
49
+ Requires-Dist: pytest-asyncio>=1.2.0; extra == 'dev'
50
+ Requires-Dist: pytest-cov>=7.0.0; extra == 'dev'
51
+ Requires-Dist: pytest-mock>=3.15.1; extra == 'dev'
52
+ Requires-Dist: pytest-sugar>=1.1.1; extra == 'dev'
53
+ Requires-Dist: pytest>=8.4.2; extra == 'dev'
47
54
  Requires-Dist: respx>=0.22.0; extra == 'dev'
48
- Requires-Dist: ruff>=0.12.8; extra == 'dev'
55
+ Requires-Dist: ruff>=0.13.3; extra == 'dev'
49
56
  Requires-Dist: types-deprecated>=1.2.15.20250304; extra == 'dev'
50
57
  Requires-Dist: types-python-slugify>=8.0.2.20240310; extra == 'dev'
51
58
  Description-Content-Type: text/markdown
52
59
 
53
60
  # SUPERVAIZER
54
61
 
55
- [[Operate AI Agents with confidence]]
62
+ [Operate AI Agents with confidence]
56
63
 
57
- A Python toolkit for building, managing, and connecting AI agents with full [Agent-to-Agent (A2A)](https://google.github.io/A2A/#/) and [Agent Communication Protocol (ACP)](https://github.com/i-am-bee/ACP) support.
64
+ A Python toolkit for building, managing, and connecting AI agents with full [Agent-to-Agent (A2A)](https://a2a-protocol.org/) protocol support.
58
65
 
59
66
  [![Python Version](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-blue.svg)](https://www.python.org/downloads/)
60
- [![Package Version](https://img.shields.io/badge/Supervaizer-0.9.6-yellow.svg)](https://github.com/supervaize/supervaizer)
61
- [![A2A Protocol](https://img.shields.io/badge/A2A-Protocol-orange.svg)](https://google.github.io/A2A/)
62
- [![ACP Protocol](https://img.shields.io/badge/ACP-Protocol-purple.svg)](https://github.com/i-am-bee/ACP)
67
+ [![A2A Protocol](https://img.shields.io/badge/A2A-Protocol-orange.svg)](https://a2a-protocol.org/)
63
68
  [![Test Coverage](https://img.shields.io/badge/Coverage-81%25-brightgreen.svg)](https://github.com/supervaize/supervaizer)
64
69
 
70
+ > **⚠️ Beta Disclaimer**: SUPERVAIZER is currently in beta mode. Not everything works as expected yet. Please report any issues you encounter.
71
+
65
72
  - [SUPERVAIZER](#supervaizer)
66
73
  - [Description](#description)
67
74
  - [Quick Start](#quick-start)
@@ -70,35 +77,45 @@ A Python toolkit for building, managing, and connecting AI agents with full [Age
70
77
  - [3. Scaffold the controller](#3-scaffold-the-controller)
71
78
  - [(Optional) 4. Configure your Supervaize account \& environment](#optional-4-configure-your-supervaize-account--environment)
72
79
  - [5. Start the server 🚀](#5-start-the-server-)
80
+ - [6. Optional parameters](#6-optional-parameters)
73
81
  - [What's next?](#whats-next)
74
82
  - [Features](#features)
75
83
  - [Protocol Support](#protocol-support)
84
+ - [Cloud Deployment](#cloud-deployment)
85
+ - [Quick Start](#quick-start-1)
86
+ - [Deployment Commands](#deployment-commands)
87
+ - [Features](#features-1)
88
+ - [Documentation](#documentation)
76
89
  - [Using the CLI](#using-the-cli)
77
90
  - [API Documentation \& User Interfaces](#api-documentation--user-interfaces)
78
91
  - [Admin Interface (`/admin`)](#admin-interface-admin)
79
- - [Quick Start](#quick-start-1)
92
+ - [Quick Start](#quick-start-2)
80
93
  - [Calculating costs](#calculating-costs)
81
- - [Documentation](#documentation)
94
+ - [Documentation](#documentation-1)
82
95
  - [Contributing](#contributing)
83
96
  - [License](#license)
84
97
 
85
98
  ## Description
86
99
 
87
- SUPERVAIZER is a toolkit built for the age of AI interoperability. At its core, it implements Google's Agent-to-Agent (A2A) protocol and IBM's Agent Communication Protocol (ACP), enabling seamless discovery and interaction between agents across different systems and platforms.
100
+ SUPERVAIZER is a toolkit built for the age of AI interoperability. At its core, it implements the Agent-to-Agent (A2A) protocol, enabling seamless discovery and interaction between agents across different systems and platforms.
88
101
 
89
- With comprehensive support for the A2A/ACP protocols, specification, SUPERVAIZER allows you to:
102
+ With comprehensive support for the A2A protocol specification, SUPERVAIZER allows you to:
90
103
 
91
- - Enhance the capabilities of your agents, making them automatically discoverable by other A2A/ACP compatible systems
104
+ - Enhance the capabilities of your agents, making them automatically discoverable by other A2A compatible systems
92
105
  - Expose standardized agent capabilities through agent cards
93
106
  - Monitor agent health and status through dedicated endpoints
94
107
  - Connect your agents to the growing ecosystem of A2A-compatible tools
95
108
 
96
109
  Beyond A2A interoperability, SUPERVAIZER provides a robust API for agent registration, job control, event handling, telemetry, and more, making it a crucial component for building and managing AI agent systems.
97
110
 
111
+ SUPERVAIZER is the recommended controller to integrate AI Agents into the [supervaize](https://supervaize.com) plateform.
112
+
98
113
  ## Quick Start
99
114
 
100
115
  Kickstart a **Python** agent with the **Supervaizer Controller** so it's discoverable and operable by Supervaize.
101
116
 
117
+ See full our full [documentation](https://doc.supervaize.com/docs/category/supervaizer-controller)
118
+
102
119
  ### What we'll do
103
120
 
104
121
  1. **Install Supervaizer** in that project
@@ -159,28 +176,82 @@ Once the server is running, you'll have:
159
176
  - **A2A discovery**: `/.well-known/agents.json`
160
177
  - **ACP discovery**: `/agents`
161
178
 
179
+ ### 6. Optional parameters
180
+
181
+ Configure retry behavior for HTTP requests to the Supervaize API:
182
+
183
+ - **`SUPERVAIZE_HTTP_MAX_RETRIES`**: Number of retry attempts for failed HTTP requests (default: `2`). The client will automatically retry requests that fail with status codes 429, 500, 502, 503, or 504.
184
+
185
+ ```bash
186
+ export SUPERVAIZE_MAX_HTTP_RETRIES=3 # Will attempt up to 4 times total (1 original + 3 retries)
187
+ ```
188
+
162
189
  ### What's next?
163
190
 
164
191
  - Add more **custom methods** (`chat`, `custom`) to extend control
165
- - Turn on **A2A / ACP** discovery for interoperability
192
+ - Turn on **A2A** discovery for interoperability
166
193
  - Hook your controller into Supervaize to **monitor, audit, and operate** the agent
167
194
 
168
- For detailed instructions on customizing your controller, see the [Controller Setup Guide](https://doc.supervaize.com/docs/supervaizer-controller/controller-setup-guide).
195
+ For detailed instructions on customizing your controller, see the [Controller Setup Guide](https://doc.supervaize.com/docs/supervaizer-controller/controller-setup)
169
196
 
170
197
  ## Features
171
198
 
172
199
  - **Agent Management**: Register, update, and control agents
173
200
  - **Job Control**: Create, track, and manage jobs
174
201
  - **Event Handling**: Process and respond to system events
175
- - Protocol support
176
- - **A2A Protocol **: Integration with Google's Agent-to-Agent protocol for interoperability
177
- - **ACP Protocol **: Integration with IBM/BeeAI's Agent Communication Protocol for standardized agent discovery and interaction
202
+ - **🚀 Cloud Deployment**: Automated deployment to GCP Cloud Run, AWS App Runner, and DigitalOcean App Platform
203
+ - **A2A Protocol Support**: Full integration with the Agent-to-Agent protocol for standardized agent discovery and interaction
178
204
  - **Server Communication**: Interact with SUPERVAIZE servers (see [supervaize.com](https://www.supervaize.com) for more info)
179
205
  - **Web Admin Interface**: Easy to use web-based admin dashboard for managing jobs, cases, and system monitoring
180
206
 
181
207
  ## Protocol Support
182
208
 
183
- SUPERVAIZER provides comprehensive support for multiple agent communication protocols. See [Protocol Documentation](docs/PROTOCOLS.md) for complete details.
209
+ SUPERVAIZER provides comprehensive support for the A2A agent communication protocol. See [Protocol Documentation](docs/PROTOCOLS.md) for complete details.
210
+
211
+ ## Cloud Deployment
212
+
213
+ SUPERVAIZER includes a powerful deployment CLI that automates the entire process of deploying your agents to production cloud platforms.
214
+
215
+ ### Quick Start
216
+
217
+ ```bash
218
+ # Install with deployment dependencies
219
+ pip install supervaizer[deploy]
220
+
221
+ # Test locally with Docker
222
+ supervaizer deploy local --generate-api-key --generate-rsa
223
+
224
+ # Deploy to Google Cloud Run
225
+ supervaizer deploy up --platform cloud-run --region us-central1
226
+
227
+ # Deploy to AWS App Runner
228
+ supervaizer deploy up --platform aws-app-runner --region us-east-1
229
+
230
+ # Deploy to DigitalOcean App Platform
231
+ supervaizer deploy up --platform do-app-platform --region nyc
232
+ ```
233
+
234
+ ### Deployment Commands
235
+
236
+ - **`supervaizer deploy plan`** - Preview deployment actions before applying
237
+ - **`supervaizer deploy up`** - Deploy to cloud platform with automated build, push, and verification
238
+ - **`supervaizer deploy down`** - Tear down deployment and clean up resources
239
+ - **`supervaizer deploy status`** - Check deployment status and health
240
+ - **`supervaizer deploy local`** - Local Docker testing with docker-compose
241
+ - **`supervaizer deploy clean`** - Clean up deployment artifacts and state
242
+
243
+ ### Features
244
+
245
+ - ✅ **Automated Docker Workflow**: Build → Push → Deploy → Verify
246
+ - ✅ **Secret Management**: Secure handling of API keys and RSA keys
247
+ - ✅ **Health Verification**: Automatic health checks at `/.well-known/health`
248
+ - ✅ **Idempotent Deployments**: Safe create/update operations with rollback on failure
249
+ - ✅ **Local Testing**: Full Docker Compose environment for pre-deployment testing
250
+
251
+ ### Documentation
252
+
253
+ - [RFC-001: Cloud Deployment CLI](docs/rfc/001-cloud-deployment-cli.md) - Complete specification
254
+ - [Local Testing Guide](docs/LOCAL_TESTING.md) - Docker testing documentation
184
255
 
185
256
  ## Using the CLI
186
257
 
@@ -0,0 +1,76 @@
1
+ supervaizer/__init__.py,sha256=eBbGjduMBH-FDjcGlSqeR4Kf4uo60Cf1DrRur8VGkJo,2341
2
+ supervaizer/__version__.py,sha256=eZQSzWQoSyKp81XNIoQ9MJJef8IKwkUCjUN2pdj0tlc,348
3
+ supervaizer/account.py,sha256=-K1pd590Lp2TncZ2jn442kBLxnm482G3WnQavVFxZ1s,11102
4
+ supervaizer/account_service.py,sha256=z4lw8qp8XvCrU6Ndf4VHRnQwY_071410ts5_7E8YDAs,3046
5
+ supervaizer/agent.py,sha256=Clenvdr_v-lV7_v6YCcevp8dj5JUNvpTWrBZBYM82lg,36509
6
+ supervaizer/case.py,sha256=dOgRujyf4MFcZ-937zxJbqLIPduKg6ZspHuhnWiq13Q,14385
7
+ supervaizer/cli.py,sha256=L9ZKQygBnpY-3qH_9YAbQEu0j7heSD4NGApM8mrpPH4,13525
8
+ supervaizer/common.py,sha256=6ygNS1YxliP-e6OEVX7vDuC8YAaT2rYhjqQ_8txnWlg,10066
9
+ supervaizer/event.py,sha256=2aupUV1HkF0-nBFVmO5ddvj9jb4MiWr2MCxEamHFhx4,5516
10
+ supervaizer/instructions.py,sha256=L0uoZXg8N4PnLxJiqBgD4Pbce-hHTDUx1yImRbtNZNg,4146
11
+ supervaizer/job.py,sha256=sHDic0q-Eujei7GNb64VO7rRsBd88optrWC8Z3iMZ5Q,13554
12
+ supervaizer/job_service.py,sha256=22Qe7Z5_u3R28tcNH_21YMIYciWFtJaM7I-MXtIhBMU,4681
13
+ supervaizer/lifecycle.py,sha256=5CunJN7MsM5blyNiFMJMLFDUBmTmmAsPE24QC-gSbYA,13958
14
+ supervaizer/parameter.py,sha256=sYDuGof_w6mlix0oxjB6odV0sO0QSBL1KwFZa3Y2cOA,8157
15
+ supervaizer/routes.py,sha256=o3u7pGGLE0MQzWtQNdd5xk1M0G9Y_BR_JiLVmCFtdC4,34319
16
+ supervaizer/server.py,sha256=cXwB2XfIBQJ6zFaUde4OTCPgHpb_tpsUy9cRkkXqA-Q,20805
17
+ supervaizer/server_utils.py,sha256=FMglpADQBJynkR2v-pfwANu6obsaPvR9j0BQc5Otpac,1590
18
+ supervaizer/storage.py,sha256=JO2pczuuJkQtk9o14_7z8yRV_q3bEir3Dtl6ejPIixY,14276
19
+ supervaizer/telemetry.py,sha256=XSYw8ZwoY8W6C7mhwHU67t7trJzWd7CBkkSNdsDT_HA,2596
20
+ supervaizer/admin/routes.py,sha256=r9hucWtNiTGQHgv9DsRkVpwnLbyLFaqrbse1orl-oTA,45627
21
+ supervaizer/admin/static/js/job-start-form.js,sha256=s--AGVYzgc9mE20POYeM0BNm0Wy41aBZVv99tc0cSPU,11938
22
+ supervaizer/admin/templates/agent_detail.html,sha256=DFOGfjuQNC39FOLYUW_jD0A01WpBY1umatGCslyJ0_c,7581
23
+ supervaizer/admin/templates/agents.html,sha256=orB_z1iMFE2MKhFm9XejwZjmzMC1PVT69oB-F9YZPHQ,12678
24
+ supervaizer/admin/templates/agents_grid.html,sha256=Hqgmgc4RhtnR-resuMZ8rj4uPJl6mHBOBTtZ5rLG90A,6106
25
+ supervaizer/admin/templates/base.html,sha256=ZGS-6IxGRYK41E5Jp3MVrGSwCugg8AVHtW21kKCBDvo,10405
26
+ supervaizer/admin/templates/case_detail.html,sha256=cJ4TUJI3ix3a-veb4g0Tp0AY-uJr0SducK70MZPFsZQ,13848
27
+ supervaizer/admin/templates/cases_list.html,sha256=UV4SfULzxNiOpG8aNddablpwf6hVNpRbAc6dgTmp6_E,9324
28
+ supervaizer/admin/templates/cases_table.html,sha256=VyL5mEF003FTNHym1UYBD8JkvhA9wR328ciTKNKxdb8,6619
29
+ supervaizer/admin/templates/console.html,sha256=tLGGf8vHjGK77Il6SYlgparoU_xz3nbvNpGVQRkVNCc,13966
30
+ supervaizer/admin/templates/dashboard.html,sha256=3Pu5bR78QUcPNp5MyXkyibfp-wxYdJyyf77v3O_f_hU,7873
31
+ supervaizer/admin/templates/job_detail.html,sha256=LDTMWLURyVCp7SMTxQ4M8AFqNpbbUVUx253negp9JNA,10790
32
+ supervaizer/admin/templates/job_start_test.html,sha256=eAogAit0JfuMU4N5YR7N03w0nD_Bi9mtiX8uJ7dHLPg,4270
33
+ supervaizer/admin/templates/jobs_list.html,sha256=VJ2VYe62dHXvjQQgUAVyKcn58rO5919UuP3VKgxLVhM,9136
34
+ supervaizer/admin/templates/jobs_table.html,sha256=BCOI_7QlxJ5XOra7WKou48a2lNwQYASCMFTtgzHNotw,5974
35
+ supervaizer/admin/templates/navigation.html,sha256=Ci_CMLqBuIKRt3JCFtn9Vjz1AAkqC75WMT6IQUiByFI,11724
36
+ supervaizer/admin/templates/recent_activity.html,sha256=hL06GXF1a-C_tkj3pRLrDTTDqG0KplcWMZFengFMuEc,4843
37
+ supervaizer/admin/templates/server.html,sha256=m3qIQsEojogXQKTSD6ljKj4_lrwaLJTpTbMpfnWZHxU,5650
38
+ supervaizer/admin/templates/server_status_cards.html,sha256=yJ36hkfgQpscYkiaodFDQPnmJWeb2W7gey09Z3T6JsY,7882
39
+ supervaizer/admin/templates/supervaize_instructions.html,sha256=LTLla1xgIeLpFf7bond_lxH5qdQQ2ak52Fd7hqChi1I,10225
40
+ supervaizer/deploy/__init__.py,sha256=DvngGQu8tS_Yz5FU4kKCvPpod11IGCtZWkUNeB5aVHI,557
41
+ supervaizer/deploy/cli.py,sha256=pFsQjbALSkKiZ2_OGzNZJzX_vrshGyAzdf1jGShGztk,9841
42
+ supervaizer/deploy/docker.py,sha256=RE7DN99tu1llssbmSPnAcYA8xUL-csiInFHnEsa84rc,13601
43
+ supervaizer/deploy/driver_factory.py,sha256=Qm6DYVUfV3mlRHUglk5YlslGg6JYZ754uKeoiyxXw10,1487
44
+ supervaizer/deploy/health.py,sha256=vh4SMOxy43QXi1fanQjWfWqoGTy_z1VXwwfy4Fq2bHg,13764
45
+ supervaizer/deploy/state.py,sha256=DOpHOoU3IuaI2StE6G0LqzA1HiSDiqz2WDu2xexOYvc,7734
46
+ supervaizer/deploy/utils.py,sha256=oNonJX5VD9APz2QXUFyUEvPO5FCnb8I5GwX2dYYJy3Y,1348
47
+ supervaizer/deploy/commands/__init__.py,sha256=uhdQpJ2Hly2YkkSBXKvGy77eyU0tIhNWD59C1x_6DPQ,365
48
+ supervaizer/deploy/commands/clean.py,sha256=zm76hmGTSSFAZdcQhVvn71secT4sE5IQqBM0zTDYC_g,9588
49
+ supervaizer/deploy/commands/down.py,sha256=Vo2Dw71BiTGSMCsjWNoq_oB_oecdV4oDnQ2LwIrv7oo,3929
50
+ supervaizer/deploy/commands/local.py,sha256=Ds2ECuyPeumA-G0OSoQmN0VM8iZ4CNqacWMSzy0r30k,16229
51
+ supervaizer/deploy/commands/plan.py,sha256=-wypTksSNF8CO_-3uOZgcDf6pFwLgFnSTKp_kzTgMZo,5261
52
+ supervaizer/deploy/commands/status.py,sha256=sgHg0J8qJIuNYaCTlkMUggJ9Q4Cq1W5N-EvZXG9Iif0,5816
53
+ supervaizer/deploy/commands/up.py,sha256=TFOXLtx8NEi08RMF4IJp6bP9Hi3B19NlxDLQPkrSLz8,9292
54
+ supervaizer/deploy/drivers/__init__.py,sha256=NOHsmNYea7ARfuAhbuP4CC87BtMfKKDyC-Uz5sh2PHI,974
55
+ supervaizer/deploy/drivers/aws_app_runner.py,sha256=rABJOyjUSJUKFCOTWV92SNLaJK4oKpEmaljHcnQO3G0,22170
56
+ supervaizer/deploy/drivers/base.py,sha256=2MPsw6tgXBILCeHnYXuZtBYFQriwy41Iib8iQPLbDFQ,5267
57
+ supervaizer/deploy/drivers/cloud_run.py,sha256=wge26Egt0Qgbmi51Ttg_SZfGhDcwG_2UBb80pLUVHXQ,19912
58
+ supervaizer/deploy/drivers/do_app_platform.py,sha256=yWzJG4Y6Pn8BlX-plWB6kwbEKuV49P82ivc5Ovm7v1k,17328
59
+ supervaizer/deploy/templates/Dockerfile.template,sha256=VmR_znpKy0gR5aG1pIsZNxnNol65GSm79Fd5rFMzYf4,1261
60
+ supervaizer/deploy/templates/debug_env.py,sha256=WFlxfiCAlkxM1NybNvtmmG5zJnoSvjW9L8ATVjrg26E,2246
61
+ supervaizer/deploy/templates/docker-compose.yml.template,sha256=ZcW8WyhmqMElaxBpokuZG12n0tFJL8BY7k7Tvdz6tdw,1100
62
+ supervaizer/deploy/templates/dockerignore.template,sha256=bYFRn6QGsjtRDH-Y7vzWk3-u3jIp90FajV2Ed94ah5M,515
63
+ supervaizer/deploy/templates/entrypoint.sh,sha256=z079VUotu6DJX92fJiBB3eVwCEgcP6B9D9Fvwv_FL9w,463
64
+ supervaizer/examples/controller_template.py,sha256=gAmA3GnDTdYkDk3NpVe-6Adbsl4Oxs-iZKN6mrO3WEg,6419
65
+ supervaizer/protocol/__init__.py,sha256=00GHbUsLNsf0a1rQrUPpVN2Uy-7rDz72Ps6TUVD91tE,389
66
+ supervaizer/protocol/a2a/__init__.py,sha256=1ACfPGLzS6XdZPiFxn1nVamvbasqtJJ7U1BBbSmT-nI,625
67
+ supervaizer/protocol/a2a/model.py,sha256=sWzatlA_fcva_fdtM8Yh4cioRq0KbwV5AXpNCnsOtQo,7198
68
+ supervaizer/protocol/a2a/routes.py,sha256=rkQTNBD1NTYimKCb8iOk4bVf9ldDP1LqHfOsyhRNufw,3937
69
+ supervaizer/utils/__init__.py,sha256=fd0NFwN_cen3QPms2SOnuz4jcetay3f_31dit2As7EA,458
70
+ supervaizer/utils/version_check.py,sha256=-tsOURpHVh0LNTbpQsyJDJENKszC-NzXDSO_EToEQPE,1893
71
+ supervaizer/py.typed,sha256=bHhvLx7c6MqrzXVPbdK3qAOcSxzp4wDtTx4QifMC2EY,74
72
+ supervaizer-0.10.0.dist-info/METADATA,sha256=slosrmHrXHWs2xkeBHQGwcCpmsqaberhJL5RkW319eQ,12624
73
+ supervaizer-0.10.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
74
+ supervaizer-0.10.0.dist-info/entry_points.txt,sha256=vL_IBR_AeEI2u2-6YL4PY9k2Mar4-gprG8-UxERWjmg,52
75
+ supervaizer-0.10.0.dist-info/licenses/LICENSE.md,sha256=dmdnt1vfpxNPr8Lt0BnxKE5uzUwK3CWTthTUStgOXjY,15327
76
+ supervaizer-0.10.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,21 +0,0 @@
1
- # Copyright (c) 2024-2025 Alain Prasquier - Supervaize.com. All rights reserved.
2
- #
3
- # This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
- # If a copy of the MPL was not distributed with this file, you can obtain one at
5
- # https://mozilla.org/MPL/2.0/.
6
-
7
- """ACP protocol implementation for SUPERVAIZER."""
8
-
9
- from supervaizer.protocol.acp.model import (
10
- create_agent_detail,
11
- create_health_data,
12
- list_agents,
13
- )
14
- from supervaizer.protocol.acp.routes import create_routes
15
-
16
- __all__ = [
17
- "create_agent_detail",
18
- "list_agents",
19
- "create_health_data",
20
- "create_routes",
21
- ]
@@ -1,198 +0,0 @@
1
- # Copyright (c) 2024-2025 Alain Prasquier - Supervaize.com. All rights reserved.
2
- #
3
- # This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
- # If a copy of the MPL was not distributed with this file, you can obtain one at
5
- # https://mozilla.org/MPL/2.0/.
6
-
7
- from datetime import datetime
8
- from typing import Any, Dict, List
9
-
10
- from supervaizer.agent import Agent
11
- from supervaizer.job import EntityStatus, Jobs
12
-
13
-
14
- def create_agent_detail(agent: Agent, base_url: str) -> Dict[str, Any]:
15
- """
16
- Create an ACP agent detail for the given agent.
17
-
18
- This follows the ACP protocol as defined in:
19
- https://docs.beeai.dev/acp/spec/concepts/discovery
20
-
21
- Args:
22
- agent: The Agent instance
23
- base_url: The base URL of the server
24
-
25
- Returns:
26
- A dictionary representing the agent detail in ACP format
27
- """
28
- # Build the interfaces object
29
- interfaces = {
30
- "input": "chat",
31
- "output": "chat",
32
- "awaits": [{"name": "user_response", "request": {}, "response": {}}],
33
- }
34
-
35
- # Build the metadata object
36
- metadata = {
37
- "documentation": agent.description or f"Documentation for {agent.name} agent",
38
- "license": "MPL-2.0",
39
- "programmingLanguage": "Python",
40
- "naturalLanguages": ["en"],
41
- "framework": "SUPERVAIZER",
42
- "useCases": [f"Agent services provided by {agent.name}"],
43
- "examples": [
44
- {
45
- "prompt": f"Example interaction with {agent.name}",
46
- "response": "Example response",
47
- }
48
- ],
49
- "tags": [agent.slug] + (agent.tags or []),
50
- "createdAt": datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ"),
51
- "updatedAt": datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ"),
52
- "author": {
53
- "name": agent.author or agent.developer or "SUPERVAIZER",
54
- "email": "info@supervaize.com",
55
- "url": "https://supervaize.com/",
56
- },
57
- "contributors": [
58
- {
59
- "name": agent.maintainer
60
- or agent.author
61
- or agent.developer
62
- or "SUPERVAIZER",
63
- "email": "info@supervaize.com",
64
- "url": "https://supervaize.com/",
65
- }
66
- ],
67
- "links": [
68
- {"type": "homepage", "url": f"{base_url}/agents/{agent.slug}"},
69
- {"type": "documentation", "url": f"{base_url}/docs"},
70
- {"type": "source-code", "url": "https://github.com/supervaize/supervaizer"},
71
- ],
72
- "dependencies": [{"type": "tool", "name": "supervaizer-core"}],
73
- "recommendedModels": ["gpt-4", "claude-3-opus"],
74
- }
75
-
76
- # Get job statistics for status data
77
- jobs_registry = Jobs()
78
- agent_jobs = jobs_registry.get_agent_jobs(agent.name)
79
-
80
- total_jobs = len(agent_jobs)
81
- completed_jobs = sum(
82
- 1 for j in agent_jobs.values() if j.status == EntityStatus.COMPLETED
83
- )
84
-
85
- # Calculate average runtime and success rate for status
86
- avg_run_time = 0.0
87
- if total_jobs > 0:
88
- success_rate = (completed_jobs / total_jobs) * 100
89
-
90
- # Calculate average runtime in seconds
91
- runtimes = []
92
- for job in agent_jobs.values():
93
- if (
94
- job.created_at
95
- and job.finished_at
96
- and job.status == EntityStatus.COMPLETED
97
- ):
98
- runtime = (job.finished_at - job.created_at).total_seconds()
99
- runtimes.append(runtime)
100
-
101
- if runtimes:
102
- avg_run_time = sum(runtimes) / len(runtimes)
103
- else:
104
- success_rate = 100 # If no jobs, assume 100% success rate
105
-
106
- # Build the status object
107
- status = {
108
- "avgRunTokens": 0, # Placeholder, actual token count if available
109
- "avgRunTimeSeconds": avg_run_time,
110
- "successRate": success_rate,
111
- }
112
-
113
- # Create the main agent detail
114
- agent_detail = {
115
- "name": agent.name,
116
- "description": agent.description,
117
- "interfaces": interfaces,
118
- "metadata": metadata,
119
- "status": status,
120
- }
121
-
122
- return agent_detail
123
-
124
-
125
- def list_agents(agents: List[Agent], base_url: str) -> List[Dict[str, Any]]:
126
- """
127
- Create a list of ACP agent details for all available agents.
128
-
129
- Args:
130
- agents: List of Agent instances
131
- base_url: The base URL of the server
132
-
133
- Returns:
134
- A list of dictionaries representing agent details in ACP format
135
- """
136
- return [create_agent_detail(agent, base_url) for agent in agents]
137
-
138
-
139
- def create_health_data(agents: List[Agent]) -> Dict[str, Any]:
140
- """
141
- Create health data for all agents according to ACP protocol.
142
-
143
- Args:
144
- agents: List of Agent instances
145
-
146
- Returns:
147
- A dictionary with health information for all agents
148
- """
149
- jobs_registry = Jobs()
150
-
151
- agents_health = {}
152
- for agent in agents:
153
- # Get agent jobs
154
- agent_jobs = jobs_registry.get_agent_jobs(agent.name)
155
-
156
- # Calculate job statistics
157
- total_jobs = len(agent_jobs)
158
- completed_jobs = sum(
159
- 1 for j in agent_jobs.values() if j.status == EntityStatus.COMPLETED
160
- )
161
- failed_jobs = sum(
162
- 1 for j in agent_jobs.values() if j.status == EntityStatus.FAILED
163
- )
164
- in_progress_jobs = sum(
165
- 1 for j in agent_jobs.values() if j.status == EntityStatus.IN_PROGRESS
166
- )
167
-
168
- # Set agent status based on health indicators
169
- if total_jobs == 0:
170
- status = "available"
171
- elif failed_jobs > total_jobs / 2: # If more than half are failing
172
- status = "degraded"
173
- elif in_progress_jobs > 0:
174
- status = "busy"
175
- else:
176
- status = "available"
177
-
178
- agents_health[agent.id] = {
179
- "agent_id": agent.id,
180
- "name": agent.name,
181
- "status": status,
182
- "version": agent.version,
183
- "statistics": {
184
- "total_jobs": total_jobs,
185
- "completed_jobs": completed_jobs,
186
- "failed_jobs": failed_jobs,
187
- "in_progress_jobs": in_progress_jobs,
188
- "success_rate": (completed_jobs / total_jobs * 100)
189
- if total_jobs > 0
190
- else 100,
191
- },
192
- }
193
-
194
- return {
195
- "status": "operational",
196
- "timestamp": str(datetime.now()),
197
- "agents": agents_health,
198
- }
@@ -1,74 +0,0 @@
1
- # Copyright (c) 2024-2025 Alain Prasquier - Supervaize.com. All rights reserved.
2
- #
3
- # This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
4
- # If a copy of the MPL was not distributed with this file, you can obtain one at
5
- # https://mozilla.org/MPL/2.0/.
6
-
7
- from typing import TYPE_CHECKING, Any, Dict, List
8
-
9
- from fastapi import APIRouter
10
-
11
- from supervaizer.common import log
12
- from supervaizer.protocol.acp.model import (
13
- create_agent_detail,
14
- create_health_data,
15
- list_agents,
16
- )
17
- from supervaizer.routes import handle_route_errors
18
-
19
- if TYPE_CHECKING:
20
- from supervaizer.agent import Agent
21
- from supervaizer.server import Server
22
-
23
-
24
- def create_routes(server: "Server") -> APIRouter:
25
- """Create ACP protocol routes for the server."""
26
- router = APIRouter(prefix="/agents", tags=["Protocol ACP"])
27
- base_url = server.public_url or ""
28
-
29
- @router.get(
30
- "",
31
- summary="ACP Agents Discovery",
32
- description="Returns a list of all agents according to ACP protocol specification",
33
- response_model=List[Dict[str, Any]],
34
- )
35
- @handle_route_errors()
36
- async def get_acp_agents() -> List[Dict[str, Any]]:
37
- """Get a list of all available agents in ACP format."""
38
- log.info("[ACP] GET /agents [Agent discovery]")
39
- return list_agents(server.agents, base_url)
40
-
41
- # Create explicit routes for each agent
42
- for agent in server.agents:
43
-
44
- def create_agent_route(current_agent: "Agent") -> None:
45
- route_path = f"/{current_agent.slug}"
46
-
47
- @router.get(
48
- route_path,
49
- summary=f"ACP Agent Detail for {current_agent.name}",
50
- description=f"Returns details for agent {current_agent.name} according to ACP protocol specification",
51
- response_model=Dict[str, Any],
52
- )
53
- @handle_route_errors()
54
- async def get_agent_detail() -> Dict[str, Any]:
55
- """Get details for a specific agent in ACP format."""
56
- log.info(f"[ACP] GET /agents/{current_agent.slug} [Agent detail]")
57
- return create_agent_detail(current_agent, base_url)
58
-
59
- # Call the closure function with the current agent
60
- create_agent_route(agent)
61
-
62
- @router.get(
63
- "/health",
64
- summary="ACP Health Status",
65
- description="Returns health information about the server and agents",
66
- response_model=Dict[str, Any],
67
- )
68
- @handle_route_errors()
69
- async def get_acp_health() -> Dict[str, Any]:
70
- """Get health information for the server and all agents."""
71
- log.info("[ACP] GET /agents/health [Health status]")
72
- return create_health_data(server.agents)
73
-
74
- return router
@@ -1,50 +0,0 @@
1
- supervaizer/__init__.py,sha256=PpLbTZ8lvkdlCJclSpKRY-hd2BRzyRCkM6EakPvDotg,2258
2
- supervaizer/__version__.py,sha256=jZYqDhPdal53PTI6MR7FfBlMxjmGmPH5kW3j0oj7qwE,347
3
- supervaizer/account.py,sha256=O9Rz5MjvMBPw5oJ4yD2kXKnwgcl_QU73pO0jjhE-cHk,10880
4
- supervaizer/account_service.py,sha256=7iDnaTUwPApnNY_QnXwNxAWKABF2yPNekr4UGGxZdjg,2867
5
- supervaizer/agent.py,sha256=13zVczF2fvIquRW6BYkoUO1CrXIxg0oYIjlkdWG-fUQ,29956
6
- supervaizer/case.py,sha256=hNmklwtXYr-c3CHpGAP8mKjhdvFboZYJKen-b587AjI,12887
7
- supervaizer/cli.py,sha256=tkL-0K7sLtS_0g2xHFLw4ZCJdyqvc289IZ5KTLCLOrQ,5066
8
- supervaizer/common.py,sha256=tKio7xDjfm2Vtqz1Ijb16OpiK0A44Cwge8xTLRXoMU8,8471
9
- supervaizer/event.py,sha256=2aupUV1HkF0-nBFVmO5ddvj9jb4MiWr2MCxEamHFhx4,5516
10
- supervaizer/instructions.py,sha256=L0uoZXg8N4PnLxJiqBgD4Pbce-hHTDUx1yImRbtNZNg,4146
11
- supervaizer/job.py,sha256=XGrKMar3Kzv_197ZcLD0iBOg-b7ZoEOMmm95W74Axgk,12814
12
- supervaizer/job_service.py,sha256=p7Dq_iy5G37Dj8l0MCLSWuYBbGg34vKq9T8jAegwi8g,4719
13
- supervaizer/lifecycle.py,sha256=5CunJN7MsM5blyNiFMJMLFDUBmTmmAsPE24QC-gSbYA,13958
14
- supervaizer/parameter.py,sha256=V1yxAOjcFz_JFDBI5ML_QwHQZqtOCdTh_LF9XjSI56s,5728
15
- supervaizer/routes.py,sha256=zB4AZ1gRDDl7V4UX9kzz8Rpf0oHy3IcC-uXE1PYxFsI,24142
16
- supervaizer/server.py,sha256=3dvsNFONhjl3uGC-v37oYtz7dx7OB0cqw5Ys4rwej0w,21005
17
- supervaizer/server_utils.py,sha256=FMglpADQBJynkR2v-pfwANu6obsaPvR9j0BQc5Otpac,1590
18
- supervaizer/storage.py,sha256=JO2pczuuJkQtk9o14_7z8yRV_q3bEir3Dtl6ejPIixY,14276
19
- supervaizer/telemetry.py,sha256=XSYw8ZwoY8W6C7mhwHU67t7trJzWd7CBkkSNdsDT_HA,2596
20
- supervaizer/admin/routes.py,sha256=Jc4xqLi9rSELkL9hJvDnyzFjFpqToQf99duy__Ic2BE,44298
21
- supervaizer/admin/templates/agent_detail.html,sha256=DFOGfjuQNC39FOLYUW_jD0A01WpBY1umatGCslyJ0_c,7581
22
- supervaizer/admin/templates/agents.html,sha256=rOKot2CCCZp83dQINyjAFzjWHSiCUHBgyC2qtOjHs0I,9016
23
- supervaizer/admin/templates/agents_grid.html,sha256=qIrXwaOyn5mrlnqopP2HkpCTHkV2OvSTCoT-LCDXmsI,5727
24
- supervaizer/admin/templates/base.html,sha256=ZGS-6IxGRYK41E5Jp3MVrGSwCugg8AVHtW21kKCBDvo,10405
25
- supervaizer/admin/templates/case_detail.html,sha256=cJ4TUJI3ix3a-veb4g0Tp0AY-uJr0SducK70MZPFsZQ,13848
26
- supervaizer/admin/templates/cases_list.html,sha256=UV4SfULzxNiOpG8aNddablpwf6hVNpRbAc6dgTmp6_E,9324
27
- supervaizer/admin/templates/cases_table.html,sha256=VyL5mEF003FTNHym1UYBD8JkvhA9wR328ciTKNKxdb8,6619
28
- supervaizer/admin/templates/console.html,sha256=tLGGf8vHjGK77Il6SYlgparoU_xz3nbvNpGVQRkVNCc,13966
29
- supervaizer/admin/templates/dashboard.html,sha256=3Pu5bR78QUcPNp5MyXkyibfp-wxYdJyyf77v3O_f_hU,7873
30
- supervaizer/admin/templates/job_detail.html,sha256=LDTMWLURyVCp7SMTxQ4M8AFqNpbbUVUx253negp9JNA,10790
31
- supervaizer/admin/templates/jobs_list.html,sha256=VJ2VYe62dHXvjQQgUAVyKcn58rO5919UuP3VKgxLVhM,9136
32
- supervaizer/admin/templates/jobs_table.html,sha256=BCOI_7QlxJ5XOra7WKou48a2lNwQYASCMFTtgzHNotw,5974
33
- supervaizer/admin/templates/navigation.html,sha256=bHzJ2FVjPCmtnFyfe8P58kGXv02KZvQhiBHDw5Sr-WQ,10523
34
- supervaizer/admin/templates/recent_activity.html,sha256=hL06GXF1a-C_tkj3pRLrDTTDqG0KplcWMZFengFMuEc,4843
35
- supervaizer/admin/templates/server.html,sha256=m3qIQsEojogXQKTSD6ljKj4_lrwaLJTpTbMpfnWZHxU,5650
36
- supervaizer/admin/templates/server_status_cards.html,sha256=yJ36hkfgQpscYkiaodFDQPnmJWeb2W7gey09Z3T6JsY,7882
37
- supervaizer/examples/controller-template.py,sha256=TiXBoA7EKa2REGsXllQVE6QJh4jKc0DSsbVs2SXx8n0,6280
38
- supervaizer/protocol/__init__.py,sha256=6cwvhmXjJM8Slsdsgu0Hxsi1-fTdcxD4VXQo0DUpPwg,401
39
- supervaizer/protocol/a2a/__init__.py,sha256=1ACfPGLzS6XdZPiFxn1nVamvbasqtJJ7U1BBbSmT-nI,625
40
- supervaizer/protocol/a2a/model.py,sha256=sWzatlA_fcva_fdtM8Yh4cioRq0KbwV5AXpNCnsOtQo,7198
41
- supervaizer/protocol/a2a/routes.py,sha256=XcvA5ohszIh3Rz8Jw4AElozuLugKsWefwpDerp8wB54,3935
42
- supervaizer/protocol/acp/__init__.py,sha256=rcZDUP63T2zSWfwiDklYn1JuFOSkkO2fQVeyc8UKl4E,615
43
- supervaizer/protocol/acp/model.py,sha256=Ar4GViZyx5HNa7E3hBC_drkR43S3M70kq1K4C1cwCU0,6354
44
- supervaizer/protocol/acp/routes.py,sha256=GzjCZlpmvPddTwpvXOa7Nq5lx6lUmFEvONvx8sOzu8M,2719
45
- supervaizer/py.typed,sha256=bHhvLx7c6MqrzXVPbdK3qAOcSxzp4wDtTx4QifMC2EY,74
46
- supervaizer-0.9.7.dist-info/METADATA,sha256=sKTMc6-i0Mqqwg_EEucp8xI44vP1vmI_I7ifT6JnRRg,9851
47
- supervaizer-0.9.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
48
- supervaizer-0.9.7.dist-info/entry_points.txt,sha256=vL_IBR_AeEI2u2-6YL4PY9k2Mar4-gprG8-UxERWjmg,52
49
- supervaizer-0.9.7.dist-info/licenses/LICENSE.md,sha256=dmdnt1vfpxNPr8Lt0BnxKE5uzUwK3CWTthTUStgOXjY,15327
50
- supervaizer-0.9.7.dist-info/RECORD,,