sondera-harness 0.6.0__tar.gz → 0.6.1__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.
- {sondera_harness-0.6.0/src/sondera_harness.egg-info → sondera_harness-0.6.1}/PKG-INFO +1 -1
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/pyproject.toml +2 -2
- sondera_harness-0.6.1/src/sondera/tui/app.tcss +460 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1/src/sondera_harness.egg-info}/PKG-INFO +1 -1
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera_harness.egg-info/SOURCES.txt +1 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/LICENSE +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/README.md +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/setup.cfg +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/__main__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/adk/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/adk/analyze.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/adk/plugin.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/cli.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/exceptions.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/abc.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/cedar/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/cedar/harness.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/cedar/schema.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/sondera/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/sondera/_grpc.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/sondera/harness.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/langgraph/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/langgraph/analyze.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/langgraph/exceptions.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/langgraph/graph.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/langgraph/middleware.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/any_pb2.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/any_pb2.pyi +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/any_pb2_grpc.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/duration_pb2.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/duration_pb2.pyi +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/duration_pb2_grpc.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/empty_pb2.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/empty_pb2.pyi +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/empty_pb2_grpc.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/struct_pb2.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/struct_pb2.pyi +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/struct_pb2_grpc.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/timestamp_pb2.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/timestamp_pb2.pyi +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/timestamp_pb2_grpc.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/wrappers_pb2.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/wrappers_pb2.pyi +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/wrappers_pb2_grpc.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/v1/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/v1/primitives_pb2.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/v1/primitives_pb2.pyi +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/v1/primitives_pb2_grpc.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/v1/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/v1/harness_pb2.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/v1/harness_pb2.pyi +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/v1/harness_pb2_grpc.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/py.typed +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/settings.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/strands/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/strands/analyze.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/strands/harness.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/app.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/screens/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/screens/adjudication.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/screens/agent.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/screens/trajectory.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/__init__.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/agent_card.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/agent_list.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/recent_adjudications.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/recent_trajectories.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/summary.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/tool_card.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/violation_panel.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/violations_list.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/violations_summary.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/types.py +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera_harness.egg-info/dependency_links.txt +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera_harness.egg-info/entry_points.txt +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera_harness.egg-info/requires.txt +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera_harness.egg-info/top_level.txt +0 -0
- {sondera_harness-0.6.0 → sondera_harness-0.6.1}/tests/test_harness.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sondera-harness"
|
|
7
|
-
version = "0.6.
|
|
7
|
+
version = "0.6.1"
|
|
8
8
|
description = "Sondera Harness SDK for Python - Agent governance and policy enforcement"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12,<3.15"
|
|
@@ -48,7 +48,7 @@ Changelog = "https://github.com/sondera-ai/harness-sdk-python/blob/main/CHANGELO
|
|
|
48
48
|
sondera = "sondera.cli:cli"
|
|
49
49
|
|
|
50
50
|
[tool.setuptools.package-data]
|
|
51
|
-
sondera = ["py.typed"]
|
|
51
|
+
sondera = ["py.typed", "tui/*.tcss"]
|
|
52
52
|
|
|
53
53
|
[project.optional-dependencies]
|
|
54
54
|
adk = ["google-adk>=1.22.0"]
|
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
Screen {
|
|
2
|
+
layout: grid;
|
|
3
|
+
grid-size: 1;
|
|
4
|
+
grid-rows: 30% 70%;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.panel {
|
|
8
|
+
height: 1fr;
|
|
9
|
+
padding: 1;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/* Summary panel - auto height */
|
|
13
|
+
.panel:first-child {
|
|
14
|
+
height: auto;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* Summary widget styles */
|
|
18
|
+
Summary {
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
Summary .summary-section {
|
|
22
|
+
height: auto;
|
|
23
|
+
padding-bottom: 1;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
Summary .section-label {
|
|
27
|
+
width: 16;
|
|
28
|
+
padding-top: 1;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
Summary .stat {
|
|
32
|
+
width: 1fr;
|
|
33
|
+
height: auto;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
Summary .stat-label {
|
|
37
|
+
color: $text-muted;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
Summary Digits {
|
|
41
|
+
height: auto;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* Trajectory status colors */
|
|
45
|
+
Summary .stat-running {
|
|
46
|
+
color: $primary;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
Summary .stat-suspended {
|
|
50
|
+
color: $warning;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
Summary .stat-completed {
|
|
54
|
+
color: $success;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
Summary .stat-pending {
|
|
58
|
+
color: $text-muted;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
Summary .stat-failed {
|
|
62
|
+
color: $error;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* Policy colors */
|
|
66
|
+
Summary .stat-violations {
|
|
67
|
+
color: $error;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
Summary .stat-approved {
|
|
71
|
+
color: $success;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
.step {
|
|
76
|
+
border: solid $primary;
|
|
77
|
+
padding: 1;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.step-hovered {
|
|
81
|
+
border: solid $primary;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.step-highlight {
|
|
85
|
+
border: solid $primary;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.card {
|
|
89
|
+
width: 1fr;
|
|
90
|
+
height: 100%;
|
|
91
|
+
border: solid $primary;
|
|
92
|
+
padding: 1;
|
|
93
|
+
background: $surface;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* Main tabs */
|
|
97
|
+
#main-tabs {
|
|
98
|
+
height: 100%;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
#main-tabs ContentSwitcher {
|
|
102
|
+
height: 1fr;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
#main-tabs TabPane {
|
|
106
|
+
height: 100%;
|
|
107
|
+
padding: 0;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
RecentTrajectories {
|
|
111
|
+
height: 100%;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
RecentTrajectories DataTable {
|
|
115
|
+
height: 100%;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
RecentAdjudications {
|
|
119
|
+
height: 100%;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
RecentAdjudications DataTable {
|
|
123
|
+
height: 100%;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
AgentList {
|
|
127
|
+
height: 100%;
|
|
128
|
+
border: solid $primary;
|
|
129
|
+
background: $surface;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
AgentList .header {
|
|
133
|
+
height: 3;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
AgentList .header-column {
|
|
137
|
+
width: 1fr;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
AgentItem {
|
|
141
|
+
border: solid $primary;
|
|
142
|
+
height: 10;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
AgentItem .column {
|
|
146
|
+
width: 1fr;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
Sparkline {
|
|
150
|
+
width: 100%;
|
|
151
|
+
margin: 2;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
ListView {
|
|
155
|
+
& > ListItem {
|
|
156
|
+
&.-highlight {
|
|
157
|
+
background: $block-hover-background;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
TrajectoryScreen {
|
|
163
|
+
layout: horizontal
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
#sidebar {
|
|
167
|
+
width: 0.33fr;
|
|
168
|
+
height: 100%;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/* AgentScreen styles */
|
|
172
|
+
AgentScreen {
|
|
173
|
+
layout:horizontal ;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
#agent-screen-content {
|
|
177
|
+
height: 1fr;
|
|
178
|
+
padding: 1;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
#agent-card {
|
|
182
|
+
width: 0.4fr;
|
|
183
|
+
height: 100%;
|
|
184
|
+
border: solid $primary;
|
|
185
|
+
padding: 1;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
#agent-card-container {
|
|
189
|
+
height: 100%;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
#agent-details-grid {
|
|
193
|
+
grid-size: 2;
|
|
194
|
+
grid-columns: auto 1fr;
|
|
195
|
+
grid-rows: auto;
|
|
196
|
+
height: auto;
|
|
197
|
+
padding: 1;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
#agent-details-grid .label {
|
|
201
|
+
padding-right: 2;
|
|
202
|
+
color: $text-muted;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
#agent-details-grid .value {
|
|
206
|
+
padding-bottom: 1;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
#agent-details-grid .description,
|
|
210
|
+
#agent-details-grid .instruction {
|
|
211
|
+
max-height: 4;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.section-header {
|
|
215
|
+
padding: 1 0;
|
|
216
|
+
border-bottom: solid $primary;
|
|
217
|
+
margin-bottom: 1;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
#tools-list {
|
|
221
|
+
height: 1fr;
|
|
222
|
+
border: solid $secondary;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
#agent-tabs {
|
|
226
|
+
width: 0.6fr;
|
|
227
|
+
height: 100%;
|
|
228
|
+
border: solid $primary;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
#agent-trajectories-table {
|
|
232
|
+
height: 100%;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/* ToolCard styles */
|
|
236
|
+
ToolCard {
|
|
237
|
+
border: solid $secondary;
|
|
238
|
+
height: auto;
|
|
239
|
+
padding: 1;
|
|
240
|
+
margin-bottom: 1;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.tool-card-content {
|
|
244
|
+
height: auto;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.tool-description {
|
|
248
|
+
padding-bottom: 1;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.tool-parameters {
|
|
252
|
+
color: $text-muted;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.tool-response {
|
|
256
|
+
color: $text-muted;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* AdjudicationScreen styles */
|
|
260
|
+
AdjudicationScreen {
|
|
261
|
+
layout: vertical;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.adjudication-content {
|
|
265
|
+
height: 1fr;
|
|
266
|
+
padding: 1;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
#adjudication-left-panel {
|
|
270
|
+
width: 0.6fr;
|
|
271
|
+
height: 100%;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
#violations-summary {
|
|
275
|
+
height: 0.45fr;
|
|
276
|
+
border: solid $primary;
|
|
277
|
+
padding: 1;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
#violations-list {
|
|
281
|
+
height: 0.55fr;
|
|
282
|
+
border: solid $primary;
|
|
283
|
+
padding: 1;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
#violation-panel {
|
|
287
|
+
width: 0.4fr;
|
|
288
|
+
height: 100%;
|
|
289
|
+
border: solid $primary;
|
|
290
|
+
padding: 1;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/* ViolationsSummary styles */
|
|
294
|
+
ViolationsSummary .section-header {
|
|
295
|
+
padding: 1 0;
|
|
296
|
+
border-bottom: solid $primary;
|
|
297
|
+
margin-bottom: 1;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
ViolationsSummary .summary-row {
|
|
301
|
+
height: auto;
|
|
302
|
+
padding: 1 0;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
ViolationsSummary .summary-item {
|
|
306
|
+
width: 1fr;
|
|
307
|
+
height: auto;
|
|
308
|
+
padding: 0 1;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
ViolationsSummary .summary-digit {
|
|
312
|
+
width: 100%;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
ViolationsSummary .stat-violations {
|
|
316
|
+
color: $error;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
ViolationsSummary .stat-escalated {
|
|
320
|
+
color: $warning;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
ViolationsSummary .stat-allowed {
|
|
324
|
+
color: $success;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
ViolationsSummary .digit-violations {
|
|
328
|
+
color: $error;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
ViolationsSummary .digit-escalated {
|
|
332
|
+
color: $warning;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
ViolationsSummary .digit-allowed {
|
|
336
|
+
color: $success;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
ViolationsSummary .agent-label,
|
|
340
|
+
ViolationsSummary .policy-label {
|
|
341
|
+
color: $text-muted;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
ViolationsSummary .empty-message {
|
|
345
|
+
color: $text-muted;
|
|
346
|
+
padding: 1;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/* ViolationPanel styles */
|
|
350
|
+
ViolationPanel .section-header {
|
|
351
|
+
padding: 1 0;
|
|
352
|
+
border-bottom: solid $primary;
|
|
353
|
+
margin-bottom: 1;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
ViolationPanel .empty-message {
|
|
357
|
+
color: $text-muted;
|
|
358
|
+
padding: 2;
|
|
359
|
+
text-align: center;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
ViolationPanel .decision-badge {
|
|
363
|
+
padding: 1;
|
|
364
|
+
text-align: center;
|
|
365
|
+
text-style: bold;
|
|
366
|
+
margin-bottom: 1;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
ViolationPanel .decision-deny {
|
|
370
|
+
background: $error 30%;
|
|
371
|
+
color: $error;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
ViolationPanel .decision-escalate {
|
|
375
|
+
background: $warning 30%;
|
|
376
|
+
color: $warning;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
ViolationPanel .decision-allow {
|
|
380
|
+
background: $success 30%;
|
|
381
|
+
color: $success;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
#violation-details-grid {
|
|
385
|
+
grid-size: 2;
|
|
386
|
+
grid-columns: auto 1fr;
|
|
387
|
+
grid-rows: auto;
|
|
388
|
+
height: auto;
|
|
389
|
+
padding: 1;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
#violation-details-grid .label {
|
|
393
|
+
padding-right: 2;
|
|
394
|
+
color: $text-muted;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
#violation-details-grid .value {
|
|
398
|
+
padding-bottom: 1;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
ViolationPanel .reason-container {
|
|
402
|
+
height: auto;
|
|
403
|
+
padding: 1;
|
|
404
|
+
border: solid $secondary;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
ViolationPanel .reason-text {
|
|
408
|
+
height: auto;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/* Annotation styles */
|
|
412
|
+
ViolationPanel .annotations-container {
|
|
413
|
+
height: auto;
|
|
414
|
+
max-height: 20;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
ViolationPanel .annotation-card {
|
|
418
|
+
height: auto;
|
|
419
|
+
padding: 1;
|
|
420
|
+
margin-bottom: 1;
|
|
421
|
+
border: solid $secondary;
|
|
422
|
+
background: $surface-darken-1;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
ViolationPanel .annotation-id {
|
|
426
|
+
color: $primary;
|
|
427
|
+
padding-bottom: 1;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
ViolationPanel .annotation-description {
|
|
431
|
+
color: $text;
|
|
432
|
+
padding-bottom: 1;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
ViolationPanel .annotation-custom-grid {
|
|
436
|
+
grid-size: 2;
|
|
437
|
+
grid-columns: auto 1fr;
|
|
438
|
+
grid-rows: auto;
|
|
439
|
+
height: auto;
|
|
440
|
+
padding-top: 1;
|
|
441
|
+
border-top: dashed $secondary;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
ViolationPanel .annotation-custom-grid .label {
|
|
445
|
+
padding-right: 2;
|
|
446
|
+
color: $text-muted;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
ViolationPanel .annotation-custom-grid .value {
|
|
450
|
+
color: $text;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/* RecentViolations styles */
|
|
454
|
+
RecentViolations {
|
|
455
|
+
height: 100%;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
RecentViolations DataTable {
|
|
459
|
+
height: 100%;
|
|
460
|
+
}
|
|
@@ -58,6 +58,7 @@ src/sondera/strands/analyze.py
|
|
|
58
58
|
src/sondera/strands/harness.py
|
|
59
59
|
src/sondera/tui/__init__.py
|
|
60
60
|
src/sondera/tui/app.py
|
|
61
|
+
src/sondera/tui/app.tcss
|
|
61
62
|
src/sondera/tui/screens/__init__.py
|
|
62
63
|
src/sondera/tui/screens/adjudication.py
|
|
63
64
|
src/sondera/tui/screens/agent.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/any_pb2.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/any_pb2.pyi
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/any_pb2_grpc.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/duration_pb2.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/duration_pb2.pyi
RENAMED
|
File without changes
|
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/empty_pb2.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/empty_pb2.pyi
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/empty_pb2_grpc.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/struct_pb2.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/struct_pb2.pyi
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/struct_pb2_grpc.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/timestamp_pb2.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/timestamp_pb2.pyi
RENAMED
|
File without changes
|
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/wrappers_pb2.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/wrappers_pb2.pyi
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/v1/__init__.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/v1/primitives_pb2.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/v1/primitives_pb2.pyi
RENAMED
|
File without changes
|
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/__init__.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/v1/__init__.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/v1/harness_pb2.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/v1/harness_pb2.pyi
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/recent_adjudications.py
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/recent_trajectories.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/violations_summary.py
RENAMED
|
File without changes
|
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera_harness.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera_harness.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|