agenticops-control-tower 0.0.1__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.
@@ -0,0 +1,5 @@
1
+ """Scaffold package for the DeepAgentLabs control plane."""
2
+
3
+ __all__ = ["__version__"]
4
+
5
+ __version__ = "0.0.1"
@@ -0,0 +1,5 @@
1
+ """Thin ecosystem adapter placeholders."""
2
+
3
+ from .catalog import ADAPTER_NAMES
4
+
5
+ __all__ = ["ADAPTER_NAMES"]
@@ -0,0 +1,8 @@
1
+ """Named adapter placeholders for sibling projects."""
2
+
3
+ ADAPTER_NAMES = (
4
+ "agenticlens",
5
+ "agentic-sidecar",
6
+ "agentic-chaos",
7
+ "deep-agentic-core-mcp",
8
+ )
@@ -0,0 +1,5 @@
1
+ """Control-plane API placeholders."""
2
+
3
+ from .surface import ControlTowerAPI
4
+
5
+ __all__ = ["ControlTowerAPI"]
@@ -0,0 +1,28 @@
1
+ """Read-only scaffold API over the registry."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from agenticops_control_tower.discovery import CapabilityDiscoveryService
6
+ from agenticops_control_tower.models import AgentRecord
7
+ from agenticops_control_tower.registry import AgentRegistry
8
+
9
+
10
+ class ControlTowerAPI:
11
+ """Small facade that mirrors the v0.1 roadmap surface."""
12
+
13
+ def __init__(
14
+ self,
15
+ registry: AgentRegistry,
16
+ discovery: CapabilityDiscoveryService,
17
+ ) -> None:
18
+ self._registry = registry
19
+ self._discovery = discovery
20
+
21
+ def list_agents(self) -> list[AgentRecord]:
22
+ return self._registry.list_agents()
23
+
24
+ def get_agent(self, agent_id: str) -> AgentRecord:
25
+ return self._registry.get(agent_id)
26
+
27
+ def list_capabilities(self, agent_id: str) -> dict[str, str]:
28
+ return self._discovery.list_capabilities(self._registry.get(agent_id))
@@ -0,0 +1 @@
1
+ """CLI placeholders."""
@@ -0,0 +1,11 @@
1
+ """Placeholder CLI entry module.
2
+
3
+ No console script is published yet. This module exists so the scaffold already
4
+ has a stable home for future commands.
5
+ """
6
+
7
+
8
+ def main() -> str:
9
+ """Return a short scaffold message for direct import-based smoke tests."""
10
+
11
+ return "agenticops-control-tower CLI scaffold"
@@ -0,0 +1,5 @@
1
+ """Configuration placeholders."""
2
+
3
+ from .models import ConfigPatch, ConfigScope
4
+
5
+ __all__ = ["ConfigPatch", "ConfigScope"]
@@ -0,0 +1,19 @@
1
+ """Future-facing configuration models kept intentionally small."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from pydantic import BaseModel, Field
6
+
7
+
8
+ class ConfigScope(BaseModel):
9
+ """Target scope for a future centralized config operation."""
10
+
11
+ agent_id: str | None = None
12
+ environment: str | None = None
13
+ capability: str | None = None
14
+
15
+
16
+ class ConfigPatch(BaseModel):
17
+ """Opaque patch payload for the scaffold stage."""
18
+
19
+ values: dict[str, object] = Field(default_factory=dict)
@@ -0,0 +1 @@
1
+ """Web console placeholders."""
@@ -0,0 +1,7 @@
1
+ """Console placeholder surface."""
2
+
3
+
4
+ def console_status() -> str:
5
+ """Return a scaffold-only status string."""
6
+
7
+ return "AgenticOps Console scaffold"
@@ -0,0 +1,5 @@
1
+ """Capability discovery placeholders."""
2
+
3
+ from .service import CapabilityDiscoveryService
4
+
5
+ __all__ = ["CapabilityDiscoveryService"]
@@ -0,0 +1,17 @@
1
+ """Capability discovery scaffold.
2
+
3
+ The real implementation will likely combine explicit agent-reported metadata
4
+ with adapter-assisted discovery. For now this module only exposes a normalized
5
+ view over an agent's reported capabilities.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from agenticops_control_tower.models import AgentRecord
11
+
12
+
13
+ class CapabilityDiscoveryService:
14
+ """Scaffold normalization for capability inventory."""
15
+
16
+ def list_capabilities(self, agent: AgentRecord) -> dict[str, str]:
17
+ return dict(sorted(agent.capabilities.items()))
@@ -0,0 +1,5 @@
1
+ """Core models shared across scaffold modules."""
2
+
3
+ from .agent import AgentRecord, AgentStatus, HeartbeatPayload
4
+
5
+ __all__ = ["AgentRecord", "AgentStatus", "HeartbeatPayload"]
@@ -0,0 +1,38 @@
1
+ """Minimal agent inventory models for the scaffold stage."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from datetime import datetime, timezone
6
+ from enum import Enum
7
+
8
+ from pydantic import BaseModel, Field
9
+
10
+
11
+ class AgentStatus(str, Enum):
12
+ """High-level health states for the initial registry model."""
13
+
14
+ HEALTHY = "healthy"
15
+ DEGRADED = "degraded"
16
+ UNHEALTHY = "unhealthy"
17
+ UNKNOWN = "unknown"
18
+
19
+
20
+ class HeartbeatPayload(BaseModel):
21
+ """Runtime-reported status snapshot for a registered agent."""
22
+
23
+ status: AgentStatus = AgentStatus.UNKNOWN
24
+ last_seen: datetime = Field(default_factory=lambda: datetime.now(timezone.utc))
25
+ capabilities: dict[str, str] = Field(default_factory=dict)
26
+
27
+
28
+ class AgentRecord(BaseModel):
29
+ """Inventory record for one known agent."""
30
+
31
+ agent_id: str
32
+ name: str
33
+ environment: str
34
+ runtime: str
35
+ framework: str
36
+ status: AgentStatus = AgentStatus.UNKNOWN
37
+ capabilities: dict[str, str] = Field(default_factory=dict)
38
+ last_seen: datetime | None = None
@@ -0,0 +1,5 @@
1
+ """Agent registry primitives."""
2
+
3
+ from .service import AgentRegistry
4
+
5
+ __all__ = ["AgentRegistry"]
@@ -0,0 +1,29 @@
1
+ """In-memory scaffold for registration and heartbeat flows."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from agenticops_control_tower.models import AgentRecord, HeartbeatPayload
6
+
7
+
8
+ class AgentRegistry:
9
+ """Very small in-memory registry to anchor the scaffold tests."""
10
+
11
+ def __init__(self) -> None:
12
+ self._agents: dict[str, AgentRecord] = {}
13
+
14
+ def register(self, agent: AgentRecord) -> AgentRecord:
15
+ self._agents[agent.agent_id] = agent
16
+ return agent
17
+
18
+ def heartbeat(self, agent_id: str, heartbeat: HeartbeatPayload) -> AgentRecord:
19
+ agent = self._agents[agent_id]
20
+ agent.status = heartbeat.status
21
+ agent.last_seen = heartbeat.last_seen
22
+ agent.capabilities = heartbeat.capabilities
23
+ return agent
24
+
25
+ def list_agents(self) -> list[AgentRecord]:
26
+ return list(self._agents.values())
27
+
28
+ def get(self, agent_id: str) -> AgentRecord:
29
+ return self._agents[agent_id]
@@ -0,0 +1,299 @@
1
+ Metadata-Version: 2.5
2
+ Name: agenticops-control-tower
3
+ Version: 0.0.1
4
+ Summary: Unified control plane and operations console for the DeepAgentLabs ecosystem.
5
+ Project-URL: Homepage, https://github.com/DeepAgentLabs/agenticops-control-tower
6
+ Project-URL: Repository, https://github.com/DeepAgentLabs/agenticops-control-tower
7
+ Project-URL: Issues, https://github.com/DeepAgentLabs/agenticops-control-tower/issues
8
+ Project-URL: Changelog, https://github.com/DeepAgentLabs/agenticops-control-tower/blob/main/CHANGELOG.md
9
+ Author: agenticops-control-tower Contributors
10
+ License: MIT License
11
+
12
+ Copyright (c) 2026 agenticops-control-tower Contributors
13
+
14
+ Permission is hereby granted, free of charge, to any person obtaining a copy
15
+ of this software and associated documentation files (the "Software"), to deal
16
+ in the Software without restriction, including without limitation the rights
17
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18
+ copies of the Software, and to permit persons to whom the Software is
19
+ furnished to do so, subject to the following conditions:
20
+
21
+ The above copyright notice and this permission notice shall be included in all
22
+ copies or substantial portions of the Software.
23
+
24
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
+ SOFTWARE.
31
+
32
+ License-File: LICENSE
33
+ Keywords: agents,chaos,control-plane,governance,observability,operations
34
+ Classifier: Development Status :: 2 - Pre-Alpha
35
+ Classifier: Intended Audience :: Developers
36
+ Classifier: License :: OSI Approved :: MIT License
37
+ Classifier: Programming Language :: Python :: 3.10
38
+ Classifier: Programming Language :: Python :: 3.11
39
+ Classifier: Programming Language :: Python :: 3.12
40
+ Classifier: Programming Language :: Python :: 3.13
41
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
42
+ Requires-Python: >=3.10
43
+ Requires-Dist: pydantic<3,>=2.0
44
+ Provides-Extra: agentic-chaos
45
+ Requires-Dist: agentic-chaos>=0.1; extra == 'agentic-chaos'
46
+ Provides-Extra: agentic-sidecar
47
+ Requires-Dist: agentic-sidecar>=0.0.1; extra == 'agentic-sidecar'
48
+ Provides-Extra: agenticlens
49
+ Requires-Dist: agenticlens>=0.1.3; extra == 'agenticlens'
50
+ Provides-Extra: deep-agentic-core-mcp
51
+ Requires-Dist: deep-agentic-core-mcp>=0.2.0; extra == 'deep-agentic-core-mcp'
52
+ Provides-Extra: dev
53
+ Requires-Dist: build>=1.2; extra == 'dev'
54
+ Requires-Dist: mypy>=1.10; extra == 'dev'
55
+ Requires-Dist: pytest-cov>=5.0; extra == 'dev'
56
+ Requires-Dist: pytest>=8.0; extra == 'dev'
57
+ Requires-Dist: ruff>=0.6; extra == 'dev'
58
+ Requires-Dist: twine>=5.1; extra == 'dev'
59
+ Description-Content-Type: text/markdown
60
+
61
+ # agenticops-control-tower
62
+
63
+ **A unified control plane and operations console for the DeepAgentLabs ecosystem.**
64
+
65
+ > AgenticLens observes. Agentic Sidecar governs. Agentic Chaos tests. Agentic
66
+ > MCP connects. Control Tower operates.
67
+
68
+ ## Status
69
+
70
+ **Concept / pre-implementation.** This repository currently contains the
71
+ architecture proposal ([`DeepAgent Control Tower End-to-End Concept.md`](DeepAgent%20Control%20Tower%20End-to-End%20Concept.md)),
72
+ this README, and the build plan in [ROADMAP.md](ROADMAP.md).
73
+
74
+ There is **no package code, no PyPI release, no API server, no CLI, and no web
75
+ console yet**. The point of the project today is to define the control-plane
76
+ shape clearly enough that implementation can start in a narrow, believable
77
+ order.
78
+
79
+ ## Contents
80
+
81
+ - [Why this exists](#why-this-exists)
82
+ - [What Control Tower is](#what-control-tower-is)
83
+ - [What it is not](#what-it-is-not)
84
+ - [Architecture](#architecture)
85
+ - [Control Tower surfaces](#control-tower-surfaces)
86
+ - [Human operators and AI operators](#human-operators-and-ai-operators)
87
+ - [Runtime and framework position](#runtime-and-framework-position)
88
+ - [The DeepAgentLabs ecosystem](#the-deepagentlabs-ecosystem)
89
+ - [Initial scope](#initial-scope)
90
+ - [Roadmap](#roadmap)
91
+
92
+ ## Why this exists
93
+
94
+ The DeepAgentLabs projects each answer a different operational question:
95
+
96
+ - **AgenticLens** asks: what happened, why did it happen, and what should I fix?
97
+ - **Agentic Sidecar** asks: should this action happen right now, given the
98
+ user's intent and current risk?
99
+ - **Agentic Chaos** asks: what breaks under stress, failure, and silent
100
+ degradation?
101
+ - **Agentic MCP** asks: how do hosts and agents access these capabilities
102
+ through one MCP-native surface?
103
+
104
+ What is still missing is the layer above them:
105
+
106
+ > What is deployed, where is it running, which capabilities are enabled, what
107
+ > is unhealthy, and how do I operate all of it from one place?
108
+
109
+ That missing layer is the job of `agenticops-control-tower`.
110
+
111
+ ## What Control Tower is
112
+
113
+ Control Tower is intended to be the **runtime-agnostic, framework-agnostic
114
+ operations layer** for teams running multiple agents and multiple
115
+ DeepAgentLabs capabilities.
116
+
117
+ At a high level, it should eventually provide:
118
+
119
+ - a central agent registry
120
+ - capability discovery across agents and environments
121
+ - health and status visibility
122
+ - centralized configuration for supported capabilities
123
+ - a unified control API
124
+ - a human CLI
125
+ - a web console for operators
126
+
127
+ The key distinction is that Control Tower is **not just a dashboard**. The
128
+ dashboard is only one interface to the underlying control plane.
129
+
130
+ ## What it is not
131
+
132
+ - **Not a replacement for AgenticLens.** Control Tower may surface Lens
133
+ insights, but Lens remains the observability and evaluation engine.
134
+ - **Not a replacement for Agentic Sidecar.** Control Tower may surface
135
+ Sidecar decisions and governance posture, but Sidecar remains the
136
+ decision-time supervision layer.
137
+ - **Not a replacement for Agentic Chaos.** Control Tower may orchestrate or
138
+ summarize chaos posture, but Chaos remains the resilience-testing engine.
139
+ - **Not the MCP layer itself.** Agentic MCP remains an independent package
140
+ and should be able to connect both to individual DeepAgentLabs capabilities
141
+ and to Control Tower.
142
+ - **Not tied to one runtime or one framework.** The control plane should sit
143
+ above LangGraph, CrewAI, AutoGen, OpenAI Agents SDK, AWS AgentCore-style
144
+ workloads, MCP-native agents, and custom Python systems rather than
145
+ assuming one execution model.
146
+ - **Not implemented yet.** The architecture in the concept doc is broader
147
+ than what a first real release should attempt. See [ROADMAP.md](ROADMAP.md)
148
+ for the narrowed build order.
149
+
150
+ ## Architecture
151
+
152
+ The ecosystem boundary should stay crisp:
153
+
154
+ ```text
155
+ Control Tower = OPERATE
156
+ Agentic MCP = CONNECT
157
+ AgenticLens = OBSERVE
158
+ Agentic Sidecar = GOVERN
159
+ Agentic Chaos = TEST
160
+ AI Operations Specification = STANDARDIZE
161
+ ```
162
+
163
+ Conceptually:
164
+
165
+ ```text
166
+ Human operators AI operators
167
+ | |
168
+ Console / CLI / API Agentic MCP
169
+ | |
170
+ +-----------+-----------+
171
+ |
172
+ v
173
+ DeepAgent Control Tower
174
+ |
175
+ +------------------+------------------+
176
+ | | |
177
+ v v v
178
+ AgenticLens Agentic Sidecar Agentic Chaos
179
+ ```
180
+
181
+ Control Tower's role is to centralize operations across agents and
182
+ capabilities, not to absorb the implementation logic of the sibling projects.
183
+
184
+ ## Control Tower surfaces
185
+
186
+ The concept doc points to five main product surfaces:
187
+
188
+ - **Agent Registry**: inventory of known agents, runtimes, frameworks,
189
+ environments, capability versions, and last-seen status
190
+ - **Capability Discovery**: detect which DeepAgentLabs packages and features
191
+ are present on each agent wherever automatic discovery is technically
192
+ feasible
193
+ - **Configuration**: centralized configuration and policy updates for
194
+ supported capabilities
195
+ - **Unified Control API**: one programmatic interface over inventory, health,
196
+ capability status, and supported operations
197
+ - **AgenticOps Console**: the human-facing dashboard over the same control
198
+ plane used by the API and CLI
199
+
200
+ The CLI should be a first-class interface, not an afterthought. The same is
201
+ true for AI-facing operation through Agentic MCP once the underlying control
202
+ API exists.
203
+
204
+ ## Human operators and AI operators
205
+
206
+ This project is unusual in that it has two equally important operator models:
207
+
208
+ - **Humans** should be able to use a console, CLI, or API to inspect and
209
+ operate agents across environments.
210
+ - **AI systems** should be able to use Agentic MCP to inspect and operate the
211
+ same control plane through an MCP-native interface.
212
+
213
+ That separation matters:
214
+
215
+ - Control Tower does **not** require MCP
216
+ - MCP does **not** require Control Tower
217
+ - when used together, MCP becomes the AI-native interface to the control
218
+ plane
219
+
220
+ ## Runtime and framework position
221
+
222
+ Control Tower should be:
223
+
224
+ - **runtime agnostic**: local Python, containers, VMs, Kubernetes,
225
+ serverless, cloud-specific runtimes, and on-prem systems are all valid
226
+ targets
227
+ - **framework agnostic**: LangGraph, CrewAI, AutoGen, OpenAI Agents SDK,
228
+ custom harnesses, MCP-based agents, and future frameworks should all fit
229
+ the model
230
+ - **modular**: teams should be able to adopt a single DeepAgentLabs
231
+ capability without adopting the entire stack
232
+
233
+ That means deployment packaging is an implementation choice, not an
234
+ architectural dependency.
235
+
236
+ ## The DeepAgentLabs ecosystem
237
+
238
+ Control Tower only makes sense if the package boundaries stay clear:
239
+
240
+ | Project | Role |
241
+ | --- | --- |
242
+ | `agenticlens` | Observe |
243
+ | `agentic-sidecar` | Govern |
244
+ | `agentic-chaos` | Test |
245
+ | `deep-agentic-core-mcp` | Connect |
246
+ | `ai-operations-spec` | Standardize |
247
+ | `agenticops-control-tower` | Operate |
248
+
249
+ - **AgenticLens** remains package-first observability, evaluation, and
250
+ operational intelligence
251
+ - **Agentic Sidecar** remains package-first supervision and governance
252
+ - **Agentic Chaos** remains package-first resilience and fault injection
253
+ - **Agentic MCP** remains the MCP-native access layer
254
+ - **AI Operations Specification** remains the shared operational contract
255
+ - **Control Tower** becomes the centralized operate/manage layer across them
256
+
257
+ This repository should therefore stay focused on:
258
+
259
+ - inventory and registry concerns
260
+ - control-plane APIs
261
+ - capability discovery contracts
262
+ - health and readiness visibility
263
+ - centralized operations and configuration
264
+ - multi-agent, multi-environment control-room workflows
265
+
266
+ It should not quietly turn into a duplicate implementation of the sibling
267
+ projects.
268
+
269
+ ## Initial scope
270
+
271
+ The concept doc describes a very broad end state. A good first implementation
272
+ needs to be much narrower.
273
+
274
+ The first usable version should likely prove four things only:
275
+
276
+ 1. agents can register and heartbeat
277
+ 2. the system can discover installed DeepAgentLabs capabilities and versions
278
+ 3. operators can inspect that inventory through a simple API and CLI
279
+ 4. the same inventory can be surfaced later in a console without changing the
280
+ underlying control model
281
+
282
+ That is enough to validate the control-plane idea without pretending the full
283
+ dashboard, configuration orchestration, and cross-agent operations engine
284
+ already exist.
285
+
286
+ ## Roadmap
287
+
288
+ The build plan is in [ROADMAP.md](ROADMAP.md). In short, the intended order
289
+ should be:
290
+
291
+ - start with a narrow registry and discovery core
292
+ - add a real control API and CLI before building the dashboard
293
+ - surface Lens, Sidecar, and Chaos data gradually rather than simulating a
294
+ complete integration layer
295
+ - add MCP connectivity to Control Tower after the underlying control surfaces
296
+ are real
297
+
298
+ If you want the full architectural reasoning behind those choices, read the
299
+ concept doc first and the roadmap second.
@@ -0,0 +1,21 @@
1
+ agenticops_control_tower/__init__.py,sha256=61wxMKH4DGduCllcmDdiqlb_kepXCS3eMymczEGGe04,110
2
+ agenticops_control_tower/adapters/__init__.py,sha256=XtsNvzmekjd_6r3ToYas-sP0s-1uFt7TvOeYCeTPnlA,108
3
+ agenticops_control_tower/adapters/catalog.py,sha256=cmvYsVz961Y9FoyriJApo321rKTeFL4VPluOOe-OAk0,168
4
+ agenticops_control_tower/api/__init__.py,sha256=kR51genXB-bD_S6oGCjIW6x6UxTzJeoO2iDirsDWvkc,107
5
+ agenticops_control_tower/api/surface.py,sha256=MmRqDbj1qFvgk8XB5P2JO-2WF0P0qVBvl9K2xKT0oDI,899
6
+ agenticops_control_tower/cli/__init__.py,sha256=4kEEfC9ZwIa9hxFKgQqIycgy9TiUL4oC_NSEwFDQVig,24
7
+ agenticops_control_tower/cli/main.py,sha256=PFu0cLLYdsoe1FjRmlUqkPdx6QDVZyxf53vFPZCbI5I,308
8
+ agenticops_control_tower/config/__init__.py,sha256=J_Y5bKWBvYLNZchWmUVuGKsUMAvtMoupQqKm_gH0-i4,122
9
+ agenticops_control_tower/config/models.py,sha256=n6YTda_b_RULN7bTIuHsbSU_GRBWcP5LG0dMum7G_XI,490
10
+ agenticops_control_tower/console/__init__.py,sha256=fM845KVyxz8p-K8PsICMD1Bj8y_G-RUK-6A68uSJ_w0,32
11
+ agenticops_control_tower/console/app.py,sha256=G-Oy3f_1W8hzVWQzFzJVk-_QHO0EHhKwhjvHkOk-ysw,156
12
+ agenticops_control_tower/discovery/__init__.py,sha256=KLe7TpItYKZ6lzIACdNBwPDwS1ex9_W7HA92b6iURR8,132
13
+ agenticops_control_tower/discovery/service.py,sha256=2_bmnhk_se_PwbmEaq098kf_PhscaXMSmcpDY1CWjqc,555
14
+ agenticops_control_tower/models/__init__.py,sha256=taX-27pcbiU7zUAj262fOP49TkB7-YbpizOY1IOXhRw,175
15
+ agenticops_control_tower/models/agent.py,sha256=gH81kQuw5njjFBvAcRWfnsz2OSyucAidnc18OFG-ACM,1016
16
+ agenticops_control_tower/registry/__init__.py,sha256=E-YX9LmbUxoirPtoDKhJ1IFidrNfmqyI-lKuqHY82HI,98
17
+ agenticops_control_tower/registry/service.py,sha256=WEAy-H5KpNTZY66AogMvS8HeCoNK25gEZ6L0loj3yPo,939
18
+ agenticops_control_tower-0.0.1.dist-info/METADATA,sha256=iZZc8i61vNwV7z0iBPdkKYPeh5Lpc5X96UDTYeM_UrY,12192
19
+ agenticops_control_tower-0.0.1.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
20
+ agenticops_control_tower-0.0.1.dist-info/licenses/LICENSE,sha256=lvV6QrIxN4zuHKwVLpiYXXX_tQecwGTAYsiIAw3Cd3A,1095
21
+ agenticops_control_tower-0.0.1.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 agenticops-control-tower Contributors
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.
22
+