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.
Files changed (84) hide show
  1. {sondera_harness-0.6.0/src/sondera_harness.egg-info → sondera_harness-0.6.1}/PKG-INFO +1 -1
  2. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/pyproject.toml +2 -2
  3. sondera_harness-0.6.1/src/sondera/tui/app.tcss +460 -0
  4. {sondera_harness-0.6.0 → sondera_harness-0.6.1/src/sondera_harness.egg-info}/PKG-INFO +1 -1
  5. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera_harness.egg-info/SOURCES.txt +1 -0
  6. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/LICENSE +0 -0
  7. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/README.md +0 -0
  8. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/setup.cfg +0 -0
  9. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/__init__.py +0 -0
  10. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/__main__.py +0 -0
  11. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/adk/__init__.py +0 -0
  12. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/adk/analyze.py +0 -0
  13. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/adk/plugin.py +0 -0
  14. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/cli.py +0 -0
  15. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/exceptions.py +0 -0
  16. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/__init__.py +0 -0
  17. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/abc.py +0 -0
  18. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/cedar/__init__.py +0 -0
  19. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/cedar/harness.py +0 -0
  20. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/cedar/schema.py +0 -0
  21. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/sondera/__init__.py +0 -0
  22. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/sondera/_grpc.py +0 -0
  23. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/harness/sondera/harness.py +0 -0
  24. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/langgraph/__init__.py +0 -0
  25. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/langgraph/analyze.py +0 -0
  26. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/langgraph/exceptions.py +0 -0
  27. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/langgraph/graph.py +0 -0
  28. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/langgraph/middleware.py +0 -0
  29. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/any_pb2.py +0 -0
  30. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/any_pb2.pyi +0 -0
  31. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/any_pb2_grpc.py +0 -0
  32. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/duration_pb2.py +0 -0
  33. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/duration_pb2.pyi +0 -0
  34. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/duration_pb2_grpc.py +0 -0
  35. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/empty_pb2.py +0 -0
  36. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/empty_pb2.pyi +0 -0
  37. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/empty_pb2_grpc.py +0 -0
  38. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/struct_pb2.py +0 -0
  39. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/struct_pb2.pyi +0 -0
  40. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/struct_pb2_grpc.py +0 -0
  41. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/timestamp_pb2.py +0 -0
  42. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/timestamp_pb2.pyi +0 -0
  43. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/timestamp_pb2_grpc.py +0 -0
  44. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/wrappers_pb2.py +0 -0
  45. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/wrappers_pb2.pyi +0 -0
  46. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/google/protobuf/wrappers_pb2_grpc.py +0 -0
  47. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/__init__.py +0 -0
  48. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/__init__.py +0 -0
  49. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/v1/__init__.py +0 -0
  50. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/v1/primitives_pb2.py +0 -0
  51. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/v1/primitives_pb2.pyi +0 -0
  52. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/core/v1/primitives_pb2_grpc.py +0 -0
  53. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/__init__.py +0 -0
  54. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/v1/__init__.py +0 -0
  55. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/v1/harness_pb2.py +0 -0
  56. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/v1/harness_pb2.pyi +0 -0
  57. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/proto/sondera/harness/v1/harness_pb2_grpc.py +0 -0
  58. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/py.typed +0 -0
  59. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/settings.py +0 -0
  60. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/strands/__init__.py +0 -0
  61. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/strands/analyze.py +0 -0
  62. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/strands/harness.py +0 -0
  63. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/__init__.py +0 -0
  64. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/app.py +0 -0
  65. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/screens/__init__.py +0 -0
  66. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/screens/adjudication.py +0 -0
  67. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/screens/agent.py +0 -0
  68. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/screens/trajectory.py +0 -0
  69. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/__init__.py +0 -0
  70. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/agent_card.py +0 -0
  71. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/agent_list.py +0 -0
  72. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/recent_adjudications.py +0 -0
  73. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/recent_trajectories.py +0 -0
  74. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/summary.py +0 -0
  75. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/tool_card.py +0 -0
  76. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/violation_panel.py +0 -0
  77. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/violations_list.py +0 -0
  78. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/tui/widgets/violations_summary.py +0 -0
  79. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera/types.py +0 -0
  80. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera_harness.egg-info/dependency_links.txt +0 -0
  81. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera_harness.egg-info/entry_points.txt +0 -0
  82. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera_harness.egg-info/requires.txt +0 -0
  83. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/src/sondera_harness.egg-info/top_level.txt +0 -0
  84. {sondera_harness-0.6.0 → sondera_harness-0.6.1}/tests/test_harness.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sondera-harness
3
- Version: 0.6.0
3
+ Version: 0.6.1
4
4
  Summary: Sondera Harness SDK for Python - Agent governance and policy enforcement
5
5
  Author-email: Sondera AI <sdk@sondera.ai>
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sondera-harness"
7
- version = "0.6.0"
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
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sondera-harness
3
- Version: 0.6.0
3
+ Version: 0.6.1
4
4
  Summary: Sondera Harness SDK for Python - Agent governance and policy enforcement
5
5
  Author-email: Sondera AI <sdk@sondera.ai>
6
6
  License-Expression: MIT
@@ -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