idun-agent-engine 0.3.8__py3-none-any.whl → 0.4.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 (39) hide show
  1. idun_agent_engine/_version.py +1 -1
  2. idun_agent_engine/agent/langgraph/langgraph.py +1 -1
  3. idun_agent_engine/core/app_factory.py +1 -1
  4. idun_agent_engine/core/config_builder.py +5 -6
  5. idun_agent_engine/guardrails/guardrails_hub/__init__.py +2 -2
  6. idun_agent_engine/mcp/__init__.py +18 -2
  7. idun_agent_engine/mcp/helpers.py +95 -45
  8. idun_agent_engine/mcp/registry.py +7 -1
  9. idun_agent_engine/server/lifespan.py +22 -0
  10. idun_agent_engine/telemetry/__init__.py +19 -0
  11. idun_agent_engine/telemetry/config.py +29 -0
  12. idun_agent_engine/telemetry/telemetry.py +248 -0
  13. {idun_agent_engine-0.3.8.dist-info → idun_agent_engine-0.4.0.dist-info}/METADATA +12 -8
  14. {idun_agent_engine-0.3.8.dist-info → idun_agent_engine-0.4.0.dist-info}/RECORD +39 -14
  15. idun_platform_cli/groups/init.py +23 -0
  16. idun_platform_cli/main.py +3 -0
  17. idun_platform_cli/tui/__init__.py +0 -0
  18. idun_platform_cli/tui/css/__init__.py +0 -0
  19. idun_platform_cli/tui/css/create_agent.py +789 -0
  20. idun_platform_cli/tui/css/main.py +92 -0
  21. idun_platform_cli/tui/main.py +87 -0
  22. idun_platform_cli/tui/schemas/__init__.py +0 -0
  23. idun_platform_cli/tui/schemas/create_agent.py +60 -0
  24. idun_platform_cli/tui/screens/__init__.py +0 -0
  25. idun_platform_cli/tui/screens/create_agent.py +482 -0
  26. idun_platform_cli/tui/utils/__init__.py +0 -0
  27. idun_platform_cli/tui/utils/config.py +161 -0
  28. idun_platform_cli/tui/validators/__init__.py +0 -0
  29. idun_platform_cli/tui/validators/guardrails.py +76 -0
  30. idun_platform_cli/tui/validators/mcps.py +84 -0
  31. idun_platform_cli/tui/validators/observability.py +65 -0
  32. idun_platform_cli/tui/widgets/__init__.py +15 -0
  33. idun_platform_cli/tui/widgets/guardrails_widget.py +348 -0
  34. idun_platform_cli/tui/widgets/identity_widget.py +234 -0
  35. idun_platform_cli/tui/widgets/mcps_widget.py +230 -0
  36. idun_platform_cli/tui/widgets/observability_widget.py +384 -0
  37. idun_platform_cli/tui/widgets/serve_widget.py +78 -0
  38. {idun_agent_engine-0.3.8.dist-info → idun_agent_engine-0.4.0.dist-info}/WHEEL +0 -0
  39. {idun_agent_engine-0.3.8.dist-info → idun_agent_engine-0.4.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,789 @@
1
+ CREATE_AGENT_CSS = """
2
+ Screen {
3
+ layout: vertical;
4
+ align: center middle;
5
+ }
6
+
7
+ .app-container {
8
+ width: 98%;
9
+ max-width: 200;
10
+ height: 90%;
11
+ max-height: 55;
12
+ border: round white;
13
+ border-title-color: yellow;
14
+ border-title-background: $surface;
15
+ border-title-style: bold;
16
+ border-title-align: center;
17
+ }
18
+
19
+ .main-layout {
20
+ width: 100%;
21
+ height: 100%;
22
+ }
23
+
24
+ .nav-container {
25
+ width: 28;
26
+ height: 100%;
27
+ border: round white;
28
+ border-title-color: yellow;
29
+ border-title-background: $surface;
30
+ border-title-style: bold;
31
+ border-title-align: center;
32
+ margin-right: 1;
33
+ padding: 1;
34
+ padding-bottom: 0;
35
+ }
36
+
37
+ .nav-container-active {
38
+ border: round cyan;
39
+ border-title-color: cyan;
40
+ }
41
+
42
+ .nav-pane {
43
+ width: 100%;
44
+ height: auto;
45
+ min-height: 3;
46
+ margin-bottom: 1;
47
+ padding: 0 1 1 1;
48
+ border: round white;
49
+ border-title-color: yellow;
50
+ border-title-background: $surface;
51
+ border-title-style: bold;
52
+ border-title-align: left;
53
+ color: gray;
54
+ }
55
+
56
+ .nav-pane Label {
57
+ margin: 0;
58
+ padding: 0;
59
+ width: 100%;
60
+ }
61
+
62
+ .nav-pane-active {
63
+ border: round cyan;
64
+ color: white;
65
+ border-title-color: cyan;
66
+ background: $surface;
67
+ }
68
+
69
+ .nav-pane-validated {
70
+ border: round green;
71
+ border-title-color: green;
72
+ }
73
+
74
+ .nav-pane:last-child {
75
+ margin-bottom: 0;
76
+ }
77
+
78
+ .content-area {
79
+ width: 1fr;
80
+ height: 100%;
81
+ padding: 0 1;
82
+ overflow-y: auto;
83
+ }
84
+
85
+ #widget-identity, #widget-observability, #widget-guardrails, #widget-mcps, #widget-serve {
86
+ width: 100%;
87
+ height: auto;
88
+ }
89
+
90
+ .header {
91
+ width: 100%;
92
+ height: 3;
93
+ text-align: center;
94
+ color: yellow;
95
+ text-style: bold;
96
+ background: $surface;
97
+ border-bottom: solid white;
98
+ margin-bottom: 1;
99
+ }
100
+
101
+ .section {
102
+ width: 100%;
103
+ height: auto;
104
+ border: none;
105
+ padding: 0;
106
+ margin-bottom: 0;
107
+ }
108
+
109
+ .section-split {
110
+ height: auto;
111
+ }
112
+
113
+ .agent-info-section {
114
+ width: 100%;
115
+ height: auto;
116
+ border: round white;
117
+ padding: 1;
118
+ margin-bottom: 1;
119
+ border-title-color: yellow;
120
+ border-title-background: $surface;
121
+ border-title-style: bold;
122
+ border-title-align: center;
123
+ }
124
+
125
+ .form-fields-container {
126
+ width: 1fr;
127
+ height: auto;
128
+ border: round white;
129
+ border-title-color: yellow;
130
+ border-title-background: $surface;
131
+ border-title-style: bold;
132
+ border-title-align: left;
133
+ padding: 1;
134
+ margin-right: 1;
135
+ }
136
+
137
+ .info-panel {
138
+ width: 1fr;
139
+ height: 100%;
140
+ padding: 0 1;
141
+ margin-left: 1;
142
+ border: round cyan;
143
+ border-title-color: cyan;
144
+ border-title-align: left;
145
+ background: transparent;
146
+ overflow-y: auto;
147
+ }
148
+
149
+ .help-markdown {
150
+ color: white;
151
+ margin: 0;
152
+ }
153
+
154
+ .section-title {
155
+ display: none;
156
+ }
157
+
158
+ .help-section {
159
+ width: 100%;
160
+ border: round gray;
161
+ padding: 0 1;
162
+ height: auto;
163
+ background: $panel;
164
+ border-title-color: gray;
165
+ }
166
+
167
+ .section-description {
168
+ color: gray;
169
+ text-style: dim;
170
+ margin-bottom: 0;
171
+ }
172
+
173
+ .field-row {
174
+ width: 100%;
175
+ height: 3;
176
+ margin: 0;
177
+ align: left middle;
178
+ }
179
+
180
+ .framework-row {
181
+ height: auto;
182
+ margin-bottom: 1;
183
+ }
184
+
185
+ .framework-row .field-label {
186
+ height: auto;
187
+ padding-top: 1;
188
+ }
189
+
190
+ .field-label {
191
+ width: 11;
192
+ color: gray;
193
+ content-align: left middle;
194
+ height: 3;
195
+ }
196
+
197
+ Input {
198
+ height: 3;
199
+ color: white;
200
+ background: transparent;
201
+ margin: 0;
202
+ padding: 0 1;
203
+ border: round white;
204
+ }
205
+
206
+ Input:focus {
207
+ border: round cyan;
208
+ }
209
+
210
+ #name_input {
211
+ width: 18;
212
+ }
213
+
214
+ #port_input {
215
+ width: 12;
216
+ }
217
+
218
+ OptionList {
219
+ height: 5;
220
+ background: transparent;
221
+ border: round white;
222
+ margin: 0;
223
+ padding: 0;
224
+ }
225
+
226
+ OptionList:focus {
227
+ border: round cyan;
228
+ }
229
+
230
+ OptionList > .option-list--option {
231
+ background: transparent;
232
+ color: white;
233
+ }
234
+
235
+ OptionList > .option-list--option-highlighted {
236
+ background: transparent;
237
+ color: cyan;
238
+ text-style: bold;
239
+ }
240
+
241
+ #framework_select {
242
+ width: 20;
243
+ }
244
+
245
+ .graph-definition-section {
246
+ width: 100%;
247
+ height: 1fr;
248
+ margin: 0;
249
+ margin-bottom: 0;
250
+ padding: 1;
251
+ border: round white;
252
+ background: transparent;
253
+ border-title-color: yellow;
254
+ border-title-background: $surface;
255
+ border-title-style: bold;
256
+ border-title-align: center;
257
+ }
258
+
259
+ .field-label-standalone {
260
+ display: none;
261
+ }
262
+
263
+ .graph-def-row {
264
+ width: 100%;
265
+ height: 12;
266
+ margin-top: 0;
267
+ }
268
+
269
+ .tree-container {
270
+ width: 2fr;
271
+ height: 100%;
272
+ margin-right: 1;
273
+ border: round white;
274
+ border-title-color: yellow;
275
+ border-title-background: $surface;
276
+ border-title-style: bold;
277
+ border-title-align: left;
278
+ padding: 1;
279
+ }
280
+
281
+ .var-container {
282
+ width: 1fr;
283
+ height: 100%;
284
+ border: round white;
285
+ border-title-color: yellow;
286
+ border-title-background: $surface;
287
+ border-title-style: bold;
288
+ border-title-align: left;
289
+ padding: 1;
290
+ }
291
+
292
+ .tree-label, .var-label {
293
+ display: none;
294
+ }
295
+
296
+ .var-list {
297
+ width: 100%;
298
+ height: 100%;
299
+ background: transparent;
300
+ border: none;
301
+ }
302
+
303
+ .var-list:focus {
304
+ border: none;
305
+ }
306
+
307
+ .path-display-container {
308
+ width: 100%;
309
+ height: 4;
310
+ border: round white;
311
+ border-title-color: yellow;
312
+ border-title-background: $surface;
313
+ border-title-style: bold;
314
+ border-title-align: center;
315
+ padding: 0 1;
316
+ margin-top: 1;
317
+ }
318
+
319
+ .full-definition-display {
320
+ color: yellow;
321
+ text-style: bold;
322
+ padding: 0;
323
+ width: 100%;
324
+ height: 100%;
325
+ content-align: left middle;
326
+ }
327
+
328
+ DirectoryTree {
329
+ height: 100%;
330
+ border: none;
331
+ background: transparent;
332
+ scrollbar-size: 1 1;
333
+ }
334
+
335
+ .error-message {
336
+ color: red;
337
+ text-style: bold;
338
+ margin: 0;
339
+ }
340
+
341
+ .button-row {
342
+ width: 100%;
343
+ margin-top: 1;
344
+ align: center middle;
345
+ height: 3;
346
+ }
347
+
348
+ Button {
349
+ background: transparent;
350
+ border: round white;
351
+ padding: 0 2;
352
+ margin: 0 2;
353
+ min-width: 12;
354
+ height: 3;
355
+ }
356
+
357
+ Button:hover {
358
+ background: transparent;
359
+ text-style: bold;
360
+ }
361
+
362
+ Button:focus {
363
+ background: transparent;
364
+ border: round cyan;
365
+ }
366
+
367
+ .action-buttons {
368
+ width: 100%;
369
+ height: 3;
370
+ dock: bottom;
371
+ padding: 0 1;
372
+ border-top: none;
373
+ align: left middle;
374
+ }
375
+
376
+ .action-btn {
377
+ background: transparent;
378
+ border: none;
379
+ color: yellow;
380
+ text-style: bold;
381
+ height: 3;
382
+ }
383
+
384
+ #back_button {
385
+ width: auto;
386
+ min-width: 8;
387
+ padding-left: 0;
388
+ }
389
+
390
+ #next_button {
391
+ width: 1fr;
392
+ content-align: right middle;
393
+ }
394
+
395
+ .action-btn:hover {
396
+ color: cyan;
397
+ text-style: bold;
398
+ }
399
+
400
+ .action-btn:focus {
401
+ color: cyan;
402
+ text-style: bold;
403
+ }
404
+
405
+ .back-btn {
406
+ width: 100%;
407
+ height: 3;
408
+ background: transparent;
409
+ border: none;
410
+ border-top: solid white;
411
+ padding: 0;
412
+ margin-top: 1;
413
+ text-align: center;
414
+ }
415
+
416
+ .back-btn:focus {
417
+ text-style: bold;
418
+ color: cyan;
419
+ }
420
+
421
+ .next-btn {
422
+ background: transparent;
423
+ border: none;
424
+ padding: 0;
425
+ margin-left: 4;
426
+ }
427
+
428
+ Markdown {
429
+ background: transparent;
430
+ color: white;
431
+ padding: 0;
432
+ margin: 0;
433
+ }
434
+
435
+ Footer {
436
+ height: 3;
437
+ background: $surface;
438
+ dock: bottom;
439
+ width: 100%;
440
+ align-horizontal: center;
441
+ }
442
+
443
+ Footer > .footer--highlight {
444
+ background: transparent;
445
+ align-horizontal: center;
446
+ }
447
+
448
+ Footer > .footer--highlight-key {
449
+ background: cyan;
450
+ color: black;
451
+ text-style: bold;
452
+ }
453
+
454
+ Footer > .footer--key {
455
+ background: yellow;
456
+ color: black;
457
+ text-style: bold;
458
+ padding: 0 1;
459
+ }
460
+
461
+ Footer > .footer--description {
462
+ color: white;
463
+ padding: 0 1;
464
+ }
465
+
466
+ #widget-serve {
467
+ padding: 2;
468
+ }
469
+
470
+ .serve-summary {
471
+ width: 100%;
472
+ border: round white;
473
+ border-title-color: yellow;
474
+ border-title-style: bold;
475
+ padding: 2;
476
+ margin-bottom: 2;
477
+ }
478
+
479
+ .summary-box {
480
+ width: 100%;
481
+ border: round cyan;
482
+ border-title-color: cyan;
483
+ border-title-style: bold;
484
+ padding: 1;
485
+ margin-bottom: 1;
486
+ }
487
+
488
+ .summary-box:last-child {
489
+ margin-bottom: 0;
490
+ }
491
+
492
+ .validate-run-btn {
493
+ width: 100%;
494
+ height: 3;
495
+ background: green;
496
+ color: white;
497
+ text-style: bold;
498
+ border: round white;
499
+ }
500
+
501
+ .validate-run-btn:hover {
502
+ background: cyan;
503
+ color: black;
504
+ }
505
+
506
+ .validate-run-btn:focus {
507
+ background: cyan;
508
+ color: black;
509
+ border: round yellow;
510
+ }
511
+
512
+ Button#validate_run_button.kill-mode {
513
+ background: red;
514
+ }
515
+
516
+ Button#validate_run_button.kill-mode:hover {
517
+ background: darkred;
518
+ color: white;
519
+ }
520
+
521
+ Button#validate_run_button.kill-mode:focus {
522
+ background: darkred;
523
+ color: white;
524
+ border: round yellow;
525
+ }
526
+
527
+ .serve-logs {
528
+ width: 100%;
529
+ height: 1fr;
530
+ border: round white;
531
+ border-title-color: yellow;
532
+ border-title-style: bold;
533
+ padding: 1;
534
+ margin-top: 2;
535
+ }
536
+
537
+ #server_logs {
538
+ width: 100%;
539
+ height: 100%;
540
+ background: black;
541
+ color: white;
542
+ }
543
+
544
+ .global-api-key-section {
545
+ width: 100%;
546
+ height: auto;
547
+ border: round yellow;
548
+ border-title-color: yellow;
549
+ border-title-style: bold;
550
+ padding: 1;
551
+ margin-bottom: 1;
552
+ }
553
+
554
+ .guardrails-grid {
555
+ layout: grid;
556
+ grid-size: 2 3;
557
+ grid-gutter: 1 2;
558
+ padding: 1;
559
+ width: 100%;
560
+ height: auto;
561
+ }
562
+
563
+ .guardrail-card {
564
+ border: round cyan;
565
+ border-title-color: cyan;
566
+ border-title-style: bold;
567
+ padding: 0 1;
568
+ height: auto;
569
+ max-height: 14;
570
+ overflow-y: auto;
571
+ }
572
+
573
+ .guardrail-card-enabled {
574
+ border: round green;
575
+ border-title-color: green;
576
+ max-height: 30;
577
+ }
578
+
579
+ .guardrail-header {
580
+ width: 100%;
581
+ height: auto;
582
+ margin-bottom: 0;
583
+ }
584
+
585
+ .gr-label {
586
+ width: auto;
587
+ padding-right: 1;
588
+ }
589
+
590
+ .gr-label-small {
591
+ width: 100%;
592
+ margin-top: 0;
593
+ margin-bottom: 0;
594
+ color: gray;
595
+ }
596
+
597
+ .applies-to-section {
598
+ width: 100%;
599
+ margin-bottom: 0;
600
+ border-top: solid white;
601
+ padding-top: 0;
602
+ padding-bottom: 0;
603
+ margin-top: 1;
604
+ }
605
+
606
+ .config-section {
607
+ width: 100%;
608
+ border-top: solid yellow;
609
+ padding-top: 0;
610
+ margin-top: 0;
611
+ }
612
+
613
+ TextArea.gr-textarea {
614
+ width: 100%;
615
+ height: 3;
616
+ margin: 0;
617
+ background: transparent;
618
+ border: round white;
619
+ padding: 0 1;
620
+ color: white;
621
+ }
622
+
623
+ TextArea.gr-textarea > .text-area--cursor-line {
624
+ background: transparent;
625
+ }
626
+
627
+ TextArea.gr-textarea:focus {
628
+ border: round cyan;
629
+ }
630
+
631
+ RadioSet {
632
+ background: transparent;
633
+ padding: 0;
634
+ border: none;
635
+ height: auto;
636
+ margin: 0;
637
+ }
638
+
639
+ RadioSet:focus {
640
+ background: transparent;
641
+ }
642
+
643
+ RadioButton {
644
+ background: transparent;
645
+ padding: 0 1;
646
+ height: 1;
647
+ margin: 0;
648
+ }
649
+
650
+ Switch {
651
+ width: 10;
652
+ }
653
+
654
+ .mcps-templates-section {
655
+ width: 100%;
656
+ height: auto;
657
+ border: round yellow;
658
+ padding: 1;
659
+ margin-bottom: 1;
660
+ }
661
+
662
+ .templates-row {
663
+ width: 100%;
664
+ height: auto;
665
+ }
666
+
667
+ .template-selector {
668
+ width: 1fr;
669
+ height: 6;
670
+ margin-right: 1;
671
+ }
672
+
673
+ .add-template-btn {
674
+ width: 20;
675
+ height: 3;
676
+ background: transparent;
677
+ border: round cyan;
678
+ color: cyan;
679
+ }
680
+
681
+ .add-template-btn:hover {
682
+ background: cyan;
683
+ color: black;
684
+ }
685
+
686
+ .add-custom-btn {
687
+ width: 100%;
688
+ height: 3;
689
+ background: transparent;
690
+ border: round green;
691
+ color: green;
692
+ margin-bottom: 1;
693
+ }
694
+
695
+ .add-custom-btn:hover {
696
+ background: green;
697
+ color: white;
698
+ }
699
+
700
+ .mcps-container {
701
+ width: 100%;
702
+ height: auto;
703
+ }
704
+
705
+ .mcp-card {
706
+ width: 100%;
707
+ height: auto;
708
+ border: round cyan;
709
+ padding: 1;
710
+ margin-bottom: 1;
711
+ }
712
+
713
+ .mcp-header {
714
+ width: 100%;
715
+ height: auto;
716
+ margin-bottom: 1;
717
+ }
718
+
719
+ .mcp-name-display {
720
+ width: 1fr;
721
+ color: yellow;
722
+ text-style: bold;
723
+ }
724
+
725
+ .remove-mcp-btn {
726
+ width: 15;
727
+ height: 3;
728
+ background: transparent;
729
+ border: round red;
730
+ color: red;
731
+ }
732
+
733
+ .remove-mcp-btn:hover {
734
+ background: red;
735
+ color: white;
736
+ }
737
+
738
+ .mcp-field-row {
739
+ width: 100%;
740
+ height: auto;
741
+ margin-bottom: 1;
742
+ }
743
+
744
+ .mcp-label {
745
+ width: 15;
746
+ color: gray;
747
+ }
748
+
749
+ .mcp-input {
750
+ width: 1fr;
751
+ height: 3;
752
+ border: round white;
753
+ background: transparent;
754
+ }
755
+
756
+ .mcp-input:focus {
757
+ border: round cyan;
758
+ }
759
+
760
+ .mcp-textarea {
761
+ width: 1fr;
762
+ height: 4;
763
+ border: round white;
764
+ background: transparent;
765
+ padding: 0 1;
766
+ }
767
+
768
+ .mcp-textarea:focus {
769
+ border: round cyan;
770
+ }
771
+
772
+ .http-fields-container, .stdio-fields-container {
773
+ width: 100%;
774
+ height: auto;
775
+ padding: 1;
776
+ border: round yellow;
777
+ margin-top: 1;
778
+ }
779
+
780
+ .custom-footer {
781
+ dock: bottom;
782
+ width: 100%;
783
+ height: 1;
784
+ background: $surface;
785
+ color: yellow;
786
+ text-align: center;
787
+ text-style: bold;
788
+ }
789
+ """