idun-agent-engine 0.4.0__py3-none-any.whl → 0.4.2__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 (51) hide show
  1. idun_agent_engine/_version.py +1 -1
  2. idun_agent_engine/agent/adk/adk.py +7 -4
  3. idun_agent_engine/agent/haystack/__init__.py +0 -2
  4. idun_agent_engine/agent/haystack/haystack.py +9 -5
  5. idun_agent_engine/agent/langgraph/langgraph.py +10 -13
  6. idun_agent_engine/core/config_builder.py +33 -13
  7. idun_agent_engine/guardrails/guardrails_hub/guardrails_hub.py +52 -9
  8. idun_agent_engine/mcp/__init__.py +2 -2
  9. idun_agent_engine/mcp/helpers.py +53 -15
  10. idun_agent_engine/mcp/registry.py +5 -5
  11. idun_agent_engine/observability/base.py +11 -2
  12. idun_agent_engine/observability/gcp_trace/gcp_trace_handler.py +3 -1
  13. idun_agent_engine/observability/langfuse/langfuse_handler.py +1 -3
  14. idun_agent_engine/server/dependencies.py +7 -2
  15. idun_agent_engine/server/lifespan.py +2 -7
  16. idun_agent_engine/server/routers/agent.py +2 -1
  17. idun_agent_engine/server/routers/base.py +7 -5
  18. idun_agent_engine/telemetry/__init__.py +0 -1
  19. idun_agent_engine/telemetry/config.py +0 -1
  20. idun_agent_engine/telemetry/telemetry.py +3 -4
  21. idun_agent_engine/templates/correction.py +4 -7
  22. idun_agent_engine/templates/deep_research.py +1 -0
  23. idun_agent_engine/templates/translation.py +4 -4
  24. {idun_agent_engine-0.4.0.dist-info → idun_agent_engine-0.4.2.dist-info}/METADATA +2 -2
  25. idun_agent_engine-0.4.2.dist-info/RECORD +86 -0
  26. idun_platform_cli/groups/agent/package.py +4 -1
  27. idun_platform_cli/groups/agent/serve.py +2 -0
  28. idun_platform_cli/groups/init.py +2 -0
  29. idun_platform_cli/telemetry.py +55 -0
  30. idun_platform_cli/tui/css/create_agent.py +137 -14
  31. idun_platform_cli/tui/css/main.py +7 -10
  32. idun_platform_cli/tui/main.py +3 -3
  33. idun_platform_cli/tui/schemas/create_agent.py +8 -4
  34. idun_platform_cli/tui/screens/create_agent.py +186 -20
  35. idun_platform_cli/tui/utils/config.py +23 -2
  36. idun_platform_cli/tui/validators/guardrails.py +20 -6
  37. idun_platform_cli/tui/validators/mcps.py +9 -6
  38. idun_platform_cli/tui/widgets/__init__.py +8 -4
  39. idun_platform_cli/tui/widgets/chat_widget.py +155 -0
  40. idun_platform_cli/tui/widgets/guardrails_widget.py +12 -4
  41. idun_platform_cli/tui/widgets/identity_widget.py +28 -10
  42. idun_platform_cli/tui/widgets/mcps_widget.py +113 -25
  43. idun_platform_cli/tui/widgets/memory_widget.py +194 -0
  44. idun_platform_cli/tui/widgets/observability_widget.py +12 -14
  45. idun_platform_cli/tui/widgets/serve_widget.py +50 -47
  46. idun_agent_engine/agent/haystack/haystack_model.py +0 -13
  47. idun_agent_engine/guardrails/guardrails_hub/utils.py +0 -1
  48. idun_agent_engine/server/routers/agui.py +0 -47
  49. idun_agent_engine-0.4.0.dist-info/RECORD +0 -86
  50. {idun_agent_engine-0.4.0.dist-info → idun_agent_engine-0.4.2.dist-info}/WHEEL +0 -0
  51. {idun_agent_engine-0.4.0.dist-info → idun_agent_engine-0.4.2.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,194 @@
1
+ """Memory and checkpoint configuration widget."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from pydantic import ValidationError
8
+ from textual.app import ComposeResult
9
+ from textual.containers import Horizontal, Vertical
10
+ from textual.css.query import NoMatches
11
+ from textual.reactive import reactive
12
+ from textual.widget import Widget
13
+ from textual.widgets import Input, RadioButton, RadioSet, Static
14
+
15
+ if TYPE_CHECKING:
16
+ from idun_agent_schema.engine.langgraph import CheckpointConfig
17
+
18
+
19
+ class MemoryWidget(Widget):
20
+ selected_type = reactive("memory")
21
+
22
+ def compose(self) -> ComposeResult:
23
+ main_section = Vertical(classes="memory-main")
24
+ main_section.border_title = "Checkpoint Configuration"
25
+
26
+ with main_section, Horizontal(classes="field-row framework-row"):
27
+ yield Static("Type:", classes="field-label")
28
+ with RadioSet(id="checkpoint_type_select"):
29
+ yield RadioButton("In-Memory", id="memory", value=True)
30
+ yield RadioButton("SQLite", id="sqlite")
31
+ yield RadioButton("PostgreSQL", id="postgres")
32
+
33
+ config_container = Vertical(
34
+ classes="checkpoint-config-container",
35
+ id="checkpoint_config",
36
+ )
37
+ yield config_container
38
+
39
+ def on_mount(self) -> None:
40
+ self._update_checkpoint_config()
41
+
42
+ def on_radio_set_changed(self, event: RadioSet.Changed) -> None:
43
+ if event.radio_set.id == "checkpoint_type_select":
44
+ self.selected_type = str(event.pressed.id)
45
+ self._update_checkpoint_config()
46
+
47
+ def _update_checkpoint_config(self) -> None:
48
+ try:
49
+ config_container = self.query_one("#checkpoint_config", Vertical)
50
+ config_container.remove_children()
51
+
52
+ if self.selected_type == "memory":
53
+ pass
54
+ elif self.selected_type == "sqlite":
55
+ self._render_sqlite_config(config_container)
56
+ elif self.selected_type == "postgres":
57
+ self._render_postgres_config(config_container)
58
+ except Exception:
59
+ pass
60
+
61
+ def _render_sqlite_config(self, container: Vertical) -> None:
62
+ config_section = Vertical(
63
+ Horizontal(
64
+ Static("DB URL:", classes="field-label"),
65
+ Input(
66
+ placeholder="sqlite:///./checkpoints.db",
67
+ id="sqlite_db_url",
68
+ classes="field-input",
69
+ ),
70
+ classes="field-row",
71
+ ),
72
+ classes="checkpoint-fields-section",
73
+ )
74
+ config_section.border_title = "SQLite Configuration"
75
+ container.mount(config_section)
76
+
77
+ def _render_postgres_config(self, container: Vertical) -> None:
78
+ config_section = Vertical(
79
+ Horizontal(
80
+ Static("DB URL:", classes="field-label"),
81
+ Input(
82
+ placeholder="postgresql://user:pass@localhost:5432/db",
83
+ id="postgres_db_url",
84
+ classes="field-input",
85
+ ),
86
+ classes="field-row",
87
+ ),
88
+ classes="checkpoint-fields-section",
89
+ )
90
+ config_section.border_title = "PostgreSQL Configuration"
91
+ container.mount(config_section)
92
+
93
+ def get_data(self) -> CheckpointConfig | None:
94
+ from idun_agent_schema.engine.langgraph import (
95
+ InMemoryCheckpointConfig,
96
+ PostgresCheckpointConfig,
97
+ SqliteCheckpointConfig,
98
+ )
99
+
100
+ try:
101
+ radio_set = self.query_one("#checkpoint_type_select", RadioSet)
102
+
103
+ checkpoint_type = "memory"
104
+ if radio_set.pressed_button:
105
+ checkpoint_type = str(radio_set.pressed_button.id)
106
+
107
+ if checkpoint_type == "memory":
108
+ return InMemoryCheckpointConfig(type="memory")
109
+
110
+ elif checkpoint_type == "sqlite":
111
+ try:
112
+ db_url_input = self.query_one("#sqlite_db_url", Input)
113
+ db_url = db_url_input.value.strip()
114
+ except NoMatches:
115
+ self.app.notify(
116
+ "Configuration error. Please reselect checkpoint type.",
117
+ severity="error",
118
+ )
119
+ return None
120
+
121
+ if not db_url:
122
+ self.app.notify(
123
+ "SQLite DB URL is required",
124
+ severity="error",
125
+ )
126
+ return None
127
+
128
+ if not db_url.startswith("sqlite:///"):
129
+ self.app.notify(
130
+ "SQLite URL must start with 'sqlite:///'",
131
+ severity="error",
132
+ )
133
+ return None
134
+
135
+ try:
136
+ return SqliteCheckpointConfig(type="sqlite", db_url=db_url)
137
+ except ValidationError:
138
+ self.app.notify(
139
+ "Invalid SQLite configuration. Check your URL format.",
140
+ severity="error",
141
+ )
142
+ return None
143
+
144
+ elif checkpoint_type == "postgres":
145
+ try:
146
+ db_url_input = self.query_one("#postgres_db_url", Input)
147
+ db_url = db_url_input.value.strip()
148
+ except NoMatches:
149
+ self.app.notify(
150
+ "Configuration error. Please reselect checkpoint type.",
151
+ severity="error",
152
+ )
153
+ return None
154
+
155
+ if not db_url:
156
+ self.app.notify(
157
+ "PostgreSQL DB URL is required",
158
+ severity="error",
159
+ )
160
+ return None
161
+
162
+ if not (
163
+ db_url.startswith("postgresql://")
164
+ or db_url.startswith("postgres://")
165
+ ):
166
+ self.app.notify(
167
+ "PostgreSQL URL must start with 'postgresql://' or 'postgres://'",
168
+ severity="error",
169
+ )
170
+ return None
171
+
172
+ try:
173
+ return PostgresCheckpointConfig(type="postgres", db_url=db_url)
174
+ except ValidationError:
175
+ self.app.notify(
176
+ "Invalid PostgreSQL configuration. Check your URL format.",
177
+ severity="error",
178
+ )
179
+ return None
180
+
181
+ except NoMatches:
182
+ self.app.notify(
183
+ "Error reading checkpoint configuration",
184
+ severity="error",
185
+ )
186
+ return None
187
+ except Exception:
188
+ self.app.notify(
189
+ "Error validating checkpoint configuration",
190
+ severity="error",
191
+ )
192
+ return None
193
+
194
+ return None
@@ -4,29 +4,26 @@ from idun_agent_schema.engine.observability_v2 import (
4
4
  )
5
5
  from textual.app import ComposeResult
6
6
  from textual.containers import Horizontal, Vertical
7
- from textual.widgets import Static, Input, Switch, RadioSet, RadioButton
8
- from textual.widget import Widget
9
7
  from textual.reactive import reactive
8
+ from textual.widget import Widget
9
+ from textual.widgets import Input, RadioButton, RadioSet, Static, Switch
10
10
 
11
11
  from idun_platform_cli.tui.validators.observability import validate_observability
12
12
 
13
13
 
14
14
  class ObservabilityWidget(Widget):
15
- selected_provider = reactive("LANGFUSE")
15
+ selected_provider = reactive("OFF")
16
16
 
17
17
  def compose(self) -> ComposeResult:
18
18
  main_section = Vertical(classes="observability-main")
19
19
  main_section.border_title = "Observability"
20
20
 
21
21
  with main_section:
22
- with Horizontal(classes="field-row"):
23
- yield Static("Enabled:", classes="field-label")
24
- yield Switch(value=True, id="enabled_toggle")
25
-
26
22
  with Horizontal(classes="field-row framework-row"):
27
23
  yield Static("Provider:", classes="field-label")
28
24
  with RadioSet(id="provider_select"):
29
- yield RadioButton("LANGFUSE", id="LANGFUSE", value=True)
25
+ yield RadioButton("Off", id="OFF", value=True)
26
+ yield RadioButton("LANGFUSE", id="LANGFUSE")
30
27
  yield RadioButton("PHOENIX", id="PHOENIX")
31
28
  yield RadioButton("GCP LOGGING", id="GCP_LOGGING")
32
29
  yield RadioButton("GCP TRACE", id="GCP_TRACE")
@@ -49,7 +46,9 @@ class ObservabilityWidget(Widget):
49
46
  config_container = self.query_one("#provider_config", Vertical)
50
47
  config_container.remove_children()
51
48
 
52
- if self.selected_provider == "LANGFUSE":
49
+ if self.selected_provider == "OFF":
50
+ pass
51
+ elif self.selected_provider == "LANGFUSE":
53
52
  self._render_langfuse_config(config_container)
54
53
  elif self.selected_provider == "PHOENIX":
55
54
  self._render_phoenix_config(config_container)
@@ -305,16 +304,15 @@ class ObservabilityWidget(Widget):
305
304
  def get_data(self) -> ObservabilityConfig | None:
306
305
  radio_set = self.query_one("#provider_select", RadioSet)
307
306
 
308
- provider = ObservabilityProvider.LANGFUSE
307
+ provider = "OFF"
309
308
  if radio_set.pressed_button:
310
309
  provider = str(radio_set.pressed_button.id)
311
310
 
312
- enabled = self.query_one("#enabled_toggle", Switch).value
313
- config = {}
314
-
315
- if not enabled:
311
+ if provider == "OFF":
316
312
  return None
317
313
 
314
+ config = {}
315
+
318
316
  match provider:
319
317
  case "LANGFUSE":
320
318
  config = {
@@ -1,7 +1,9 @@
1
1
  """Serve configuration widget."""
2
2
 
3
+
4
+ from rich.syntax import Syntax
3
5
  from textual.app import ComposeResult
4
- from textual.containers import Vertical
6
+ from textual.containers import Horizontal, Vertical
5
7
  from textual.widget import Widget
6
8
  from textual.widgets import Button, RichLog, Static
7
9
 
@@ -14,23 +16,20 @@ class ServeWidget(Widget):
14
16
  self.shell_id = None
15
17
 
16
18
  def compose(self) -> ComposeResult:
17
- summary_container = Vertical(classes="serve-summary")
18
- summary_container.border_title = "Configuration Summary"
19
-
20
- with summary_container:
21
- agent_box = Vertical(classes="summary-box", id="agent_summary")
22
- agent_box.border_title = "Agent"
23
- with agent_box:
24
- yield Static("Loading...", id="agent_summary_text")
19
+ yaml_container = Vertical(classes="serve-yaml-display")
20
+ yaml_container.border_title = "Agent Configuration"
25
21
 
26
- obs_box = Vertical(classes="summary-box", id="obs_summary")
27
- obs_box.border_title = "Observability"
28
- with obs_box:
29
- yield Static("Loading...", id="obs_summary_text")
22
+ with yaml_container:
23
+ yield Static("Loading configuration...", id="yaml_content")
30
24
 
31
- yield Button(
32
- "Validate & Run", id="validate_run_button", classes="validate-run-btn"
33
- )
25
+ button_container = Horizontal(classes="serve-button-container")
26
+ with button_container:
27
+ yield Button(
28
+ "Save and Exit", id="save_exit_button", classes="validate-run-btn"
29
+ )
30
+ yield Button(
31
+ "Save and Run", id="save_run_button", classes="validate-run-btn"
32
+ )
34
33
 
35
34
  logs_container = Vertical(classes="serve-logs", id="logs_container")
36
35
  logs_container.border_title = "Server Logs"
@@ -40,37 +39,41 @@ class ServeWidget(Widget):
40
39
 
41
40
  def load_config(self, config: dict) -> None:
42
41
  self.config_data = config
43
- self._update_summary()
44
-
45
- def _update_summary(self) -> None:
46
- from idun_platform_cli.tui.schemas.create_agent import AGENT_SOURCE_KEY_MAPPING
47
-
48
- agent_info = self.config_data.get("agent", {})
49
- agent_config = agent_info.get("config", {})
50
- agent_type = agent_info.get("type")
51
- agent_name = agent_config.get("name")
52
-
53
- server_info = self.config_data.get("server", {})
54
- port = server_info.get("api", {}).get("port")
55
-
56
- graph_def_key = AGENT_SOURCE_KEY_MAPPING.get(agent_type, "graph_definition")
57
- graph_def = agent_config.get(graph_def_key)
58
-
59
- agent_text = f"Name: {agent_name}\nFramework: {agent_type}\nPort: {port}\nGraph: {graph_def}"
60
-
61
- self.query_one("#agent_summary_text", Static).update(agent_text)
62
-
63
- obs_list = self.config_data.get("observability", [])
64
- if obs_list:
65
- obs_data = obs_list[0]
66
- provider = obs_data.get("provider")
67
- enabled = obs_data.get("enabled", False)
68
- status = "Enabled" if enabled else "Disabled"
69
- obs_text = f"Provider: {provider}\nStatus: {status}"
70
- else:
71
- obs_text = "Not configured"
72
-
73
- self.query_one("#obs_summary_text", Static).update(obs_text)
42
+ self._update_yaml_display()
43
+
44
+ def _update_yaml_display(self) -> None:
45
+ import yaml
46
+
47
+ if not self.config_data:
48
+ self.query_one("#yaml_content", Static).update(
49
+ "[yellow]No configuration loaded yet.[/yellow]\n"
50
+ "[dim]Complete the previous sections to generate configuration.[/dim]"
51
+ )
52
+ return
53
+
54
+ try:
55
+ yaml_string = yaml.dump(
56
+ self.config_data,
57
+ default_flow_style=False,
58
+ sort_keys=False,
59
+ allow_unicode=True,
60
+ )
61
+
62
+ syntax = Syntax(
63
+ yaml_string,
64
+ "yaml",
65
+ theme="monokai",
66
+ line_numbers=True,
67
+ word_wrap=False,
68
+ indent_guides=True,
69
+ background_color="default",
70
+ )
71
+
72
+ self.query_one("#yaml_content", Static).update(syntax)
73
+
74
+ except Exception as e:
75
+ error_msg = f"[red]Error displaying configuration:[/red]\n{str(e)}"
76
+ self.query_one("#yaml_content", Static).update(error_msg)
74
77
 
75
78
  def get_agent_name(self) -> str:
76
79
  agent_info = self.config_data.get("agent", {})
@@ -1,13 +0,0 @@
1
- """Configuration models for Haystack agents."""
2
-
3
- from typing import Literal
4
-
5
- from idun_agent_engine.core.engine_config import BaseAgentConfig
6
-
7
-
8
- class HaystackAgentConfig(BaseAgentConfig):
9
- """Configuration model for Haystack Agents."""
10
-
11
- type: Literal["haystack"] = "haystack"
12
- component_type: Literal["pipeline", "agent"]
13
- component_definition: str
@@ -1 +0,0 @@
1
- """Utils module."""
@@ -1,47 +0,0 @@
1
- # """AGUI routes for CopilotKit integration with LangGraph agents."""
2
-
3
- # import logging
4
- # from typing import Annotated
5
-
6
- # from ag_ui_langgraph import add_langgraph_fastapi_endpoint
7
- # from copilotkit import LangGraphAGUIAgent
8
- # from ag_ui_adk import ADKAgent as ADKAGUIAgent
9
- # from ag_ui_adk import add_adk_fastapi_endpoint
10
- # from fastapi import APIRouter, Depends, HTTPException, Request
11
-
12
- # from idun_agent_engine.agent.langgraph.langgraph import LanggraphAgent
13
- # from idun_agent_engine.agent.adk.adk import AdkAgent
14
- # from idun_agent_engine.server.dependencies import get_agent
15
-
16
- # logging.basicConfig(
17
- # format="%(asctime)s %(levelname)-8s %(message)s",
18
- # level=logging.INFO,
19
- # datefmt="%Y-%m-%d %H:%M:%S",
20
- # )
21
-
22
- # logger = logging.getLogger(__name__)
23
-
24
-
25
- # def setup_agui_router(app, agent: LanggraphAgent | AdkAgent) -> LangGraphAGUIAgent | ADKAGUIAgent:
26
- # """Set up AGUI routes for CopilotKit integration.
27
-
28
- # This function adds the LangGraph agent as a CopilotKit-compatible endpoint.
29
-
30
- # Args:
31
- # app: The FastAPI application instance
32
- # agent: The initialized LangGraph agent instance
33
- # """
34
- # try:
35
- # if isinstance(agent, LanggraphAgent):
36
- # # Create the AGUI agent wrapper
37
- # agui_agent = agent.copilotkit_agent_instance
38
- # elif isinstance(agent, AdkAgent):
39
- # # Create the AGUI agent wrapper
40
- # agui_agent = agent.copilotkit_agent_instance # TODO: duplicate in agent.adk.adk.py init
41
- # else:
42
- # raise ValueError(f"Unsupported agent type: {type(agent)}")
43
- # return agui_agent
44
- # logger.info(f"✅ AGUI endpoint configured at /agui for agent: {agent.name}")
45
- # except Exception as e:
46
- # logger.error(f"❌ Failed to setup AGUI router: {e}")
47
- # raise HTTPException(status_code=500, detail=f"Failed to setup AGUI router: {e}") from e
@@ -1,86 +0,0 @@
1
- idun_agent_engine/__init__.py,sha256=PhOL6foq5V0eXaoXw7xKUeCWXIWrOHrAFB8OuJnBqyM,550
2
- idun_agent_engine/_version.py,sha256=IhNtSwHLVf0OkJXf7kUXlUOI7HCuAsywgZymi_DTmac,72
3
- idun_agent_engine/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- idun_agent_engine/agent/__init__.py,sha256=foyOoRdI_04q1b6f2A5EXEpWSCKjZxpgWMWrKcsHNl8,220
5
- idun_agent_engine/agent/base.py,sha256=c-3gljSHQpm6aY0JNDmXkaPtcW55rXdsI8Cgv9l4bCs,3294
6
- idun_agent_engine/agent/adk/__init__.py,sha256=jLV2Z9qQGZtBpF_0pQI1FRCPJ_J1G3Z6cEAzHnQyuu4,83
7
- idun_agent_engine/agent/adk/adk.py,sha256=29YC5rgLjdod-CU3a2JqgAvzYcD5u2EY7pylozGNi9c,11375
8
- idun_agent_engine/agent/haystack/__init__.py,sha256=y5ADrD8gWBeYIvV7tmu6OpPdJ8POHt-tyraIL7RkkWI,179
9
- idun_agent_engine/agent/haystack/haystack.py,sha256=k4NAx_zTBO9uiExM9NtuDAN94H1lrCWtHf1GEWEN16g,10966
10
- idun_agent_engine/agent/haystack/haystack_model.py,sha256=EtOYnsWRufcrQufTRMeB3V-rZVQqfnmwKwPsYGfZdCs,362
11
- idun_agent_engine/agent/haystack/utils.py,sha256=sKRoPhzZWFw1NPsYwCockafzMBCCq3lGOrndbNE_C3M,609
12
- idun_agent_engine/agent/langgraph/__init__.py,sha256=CoBdkp9P4livdy5B0bvj9o7ftoqKmXEr9cZv4TZLncs,107
13
- idun_agent_engine/agent/langgraph/langgraph.py,sha256=cbVrUs74a0p6omypMHWO3-1uqGLtJdiyAMrCheQHF5w,22966
14
- idun_agent_engine/core/__init__.py,sha256=F0DMDlWcSWS_1dvh3xMbrdcVvZRHVnoAFFgREuSJfBI,408
15
- idun_agent_engine/core/app_factory.py,sha256=2w4o7wV8FQCZdBTk3W7cS0vnmpUM_TdAmphFKHbL31w,2597
16
- idun_agent_engine/core/config_builder.py,sha256=oTWzdaYARZUGvVKVznMZT7pPRKKbCKQuXkCTno0Xn-8,25757
17
- idun_agent_engine/core/engine_config.py,sha256=IR8WhbenDstNSL7ORrUW8AnzgS3exFQxtwip66pFhcM,545
18
- idun_agent_engine/core/server_runner.py,sha256=DwN5kHiKVvUJLw5iSkaxs2rKRaMgOwSUZmeUPSuDbf8,4899
19
- idun_agent_engine/guardrails/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- idun_agent_engine/guardrails/base.py,sha256=rvi7gcuKK8-3GtGicWzMWYsKKv0g3LjGBI-FycxgKVU,814
21
- idun_agent_engine/guardrails/guardrails_hub/__init__.py,sha256=MwWdgrM1dNzKwuS9ZEFw5Cin91JXh2PYlMma8yZFO7o,123
22
- idun_agent_engine/guardrails/guardrails_hub/guardrails_hub.py,sha256=DgcUIDy9_bcVcpYVvDJowFe_QVlCpEkr8hntPRgRmS0,3456
23
- idun_agent_engine/guardrails/guardrails_hub/utils.py,sha256=bC6-MsCVF7xKTr48z7OzJJUeWvqAB7BiHeNTiKsme70,20
24
- idun_agent_engine/mcp/__init__.py,sha256=ygChpEQ4MzMpEifW3szi5kNiLIMhOhJEtqxy0nmewDU,501
25
- idun_agent_engine/mcp/helpers.py,sha256=KYYAi9VxX6mRvw70ZiN_6rUz2fMt_KMn3-vUFoa6GC0,5084
26
- idun_agent_engine/mcp/registry.py,sha256=8zt9o8MZmYKx55xb0E7n-qOCR_3m2-XGf7ToQEwHkTU,4229
27
- idun_agent_engine/observability/__init__.py,sha256=DCtK6b3xiX4dh0_8GBDOcSXQdcIJz2wTqqPa_ZFAES4,430
28
- idun_agent_engine/observability/base.py,sha256=C6mY_ZafDEHkMz8_ZeaEh--pyYuzJYEUqhoJ0sVP2wY,5570
29
- idun_agent_engine/observability/gcp_logging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
- idun_agent_engine/observability/gcp_logging/gcp_logging_handler.py,sha256=cMUKfukmSZhIdO2v5oWkqI2_c6umtYqlhzflnOeoq6A,1685
31
- idun_agent_engine/observability/gcp_trace/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- idun_agent_engine/observability/gcp_trace/gcp_trace_handler.py,sha256=YBlUqUwPuOPi0yDNEy9x_g52nJBlSe9a0EEHDIHIr68,3898
33
- idun_agent_engine/observability/langfuse/__init__.py,sha256=J8XcHV4aT1pF97k5EZiqrnYYPs9VjwfV5rUMihc5Pgk,128
34
- idun_agent_engine/observability/langfuse/langfuse_handler.py,sha256=RP9MXiYDRe7zWTmZmzQBn6AjRn0y8jrBnWOaUUaMxNA,2795
35
- idun_agent_engine/observability/phoenix/__init__.py,sha256=tEwJYijcvSGNhFW4QJmvBcTu1D0YVJkZRTmkNCGTteM,130
36
- idun_agent_engine/observability/phoenix/phoenix_handler.py,sha256=lGqSq-L1vmoEhAr9rbWO3KlNX5HSgBhCKESHMdZ-AfY,2539
37
- idun_agent_engine/observability/phoenix_local/__init__.py,sha256=m9dIw1GWGKAW4wP08jxA7j4yrOg0Nxq_08bwVh8YogE,146
38
- idun_agent_engine/observability/phoenix_local/phoenix_local_handler.py,sha256=wjOZuMpAxdD5D33rzxycNEzFMunETpPnYjiHjbjz5GA,4252
39
- idun_agent_engine/server/__init__.py,sha256=WaFektUsy37bNg2niAUy_TykzStukgWPnxC-t49CEwo,177
40
- idun_agent_engine/server/dependencies.py,sha256=MVH8STOQ8wu-iYE_28y5dvw5FGT5PX0uQl0ldkpxw6Y,2080
41
- idun_agent_engine/server/lifespan.py,sha256=pTPZ36R4jlx1jq249kpj4DEe-opIGYiRNUHncKlnuGs,4670
42
- idun_agent_engine/server/server_config.py,sha256=RYA7Y0c5aRw_WXaX8svFUIEtTPqzn3o-WQRm2p52C6g,213
43
- idun_agent_engine/server/routers/__init__.py,sha256=BgNzSVvHtGPGn5zhXhomwpKlDYBkeFi7xCbdcWVOgc8,102
44
- idun_agent_engine/server/routers/agent.py,sha256=qLaVRKgMIu-YfOi-tPEzLNRZKZ4DaZEQ8KQ-4HrWbbY,9194
45
- idun_agent_engine/server/routers/agui.py,sha256=Z1G4fuo57MazQWfp7ao8QZ1or2H9BXLS_JB1nFPXAkE,1891
46
- idun_agent_engine/server/routers/base.py,sha256=wICOXCokCIRjmHuDPDTWqeXqOVPes1CtDtiR_HvtsF0,3756
47
- idun_agent_engine/telemetry/__init__.py,sha256=oYmmgUYvuwM-eV1qBeTgy6HoG6H3LC_S4fMH04QiMWY,519
48
- idun_agent_engine/telemetry/config.py,sha256=APSmZWocwSqB1xSxoZkJrSTZnWlBiQdif4whdXi8uBE,845
49
- idun_agent_engine/telemetry/telemetry.py,sha256=g14ouZnSIV85A58HeAH5IlJ_IDKO_uYo7kFbWRo5PpI,7319
50
- idun_agent_engine/templates/__init__.py,sha256=xxbJZXaX6VEm_UrqzAOQcuujpEji5yqYzwQfwiqig8o,31
51
- idun_agent_engine/templates/correction.py,sha256=qApH4W99K31maxNrGf0hPVe_Wd4xjYjJrEKlu7PbRpw,1823
52
- idun_agent_engine/templates/deep_research.py,sha256=j4WypBkBz7V3EG-U8vawfNXDNhcCf2QiEK0veI4M68s,1077
53
- idun_agent_engine/templates/translation.py,sha256=vjp1yEyhDMFO4nEbq5WG7LAA7nLrhVAjznOkV7ob_Ss,2149
54
- idun_platform_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
- idun_platform_cli/main.py,sha256=B7b1x0kgfuiAWGmSCFJeu_zkWiodJjOGu0nWuNAWM-k,299
56
- idun_platform_cli/groups/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
- idun_platform_cli/groups/init.py,sha256=gQo_khZf-arvsG51bdwFXQyfaKvIBFaK9v5KU21AeDo,692
58
- idun_platform_cli/groups/agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
- idun_platform_cli/groups/agent/main.py,sha256=QMGQi3JZ76SeFI3miIjVWpMt0L-hGz5FwxtTPQX4-Uw,301
60
- idun_platform_cli/groups/agent/package.py,sha256=LdIFAcfrlUcCssmSliYQIi0NFMuVkpx6t8WhMHATan8,2525
61
- idun_platform_cli/groups/agent/serve.py,sha256=2AbL0G1WqR33jlyiGaNvAoPZ3G1o52KYUptz_HaAjIg,3863
62
- idun_platform_cli/tui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- idun_platform_cli/tui/main.py,sha256=QO63okOX7s91r5JDA5mVjvmHuDSY9IArO6GQRaDYxCk,3083
64
- idun_platform_cli/tui/css/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
- idun_platform_cli/tui/css/create_agent.py,sha256=SxqNhB-sEbBcq9B_X4fktyhi31DJgJj61ymR4s0i9PE,12264
66
- idun_platform_cli/tui/css/main.py,sha256=9ii_dobgiz2DNdFhOC6VZSRNrRybI1a6ZykXrVqn7A4,1185
67
- idun_platform_cli/tui/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- idun_platform_cli/tui/schemas/create_agent.py,sha256=2jsZ5v1sZLKmypgimdVoeVjd-wOylTE3IUYPw63eb8Y,1512
69
- idun_platform_cli/tui/screens/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
70
- idun_platform_cli/tui/screens/create_agent.py,sha256=mtuN7HtQvwloiDZVIp9olJnEA9qHBmQPy-6YdiFXkaE,18332
71
- idun_platform_cli/tui/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
- idun_platform_cli/tui/utils/config.py,sha256=An-pfUiD-sYQ12QLiE_M0NHAcpBCYo4TnxUbAmqodIA,6316
73
- idun_platform_cli/tui/validators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
- idun_platform_cli/tui/validators/guardrails.py,sha256=XIDzouBtNo63ppyGFMx9lcRHquxOvhY67ouJpF01u50,2894
75
- idun_platform_cli/tui/validators/mcps.py,sha256=oDxbxt7qOzsW8yjd_fwBnlDPOSxPqCXqbF5q8eEYRVQ,2852
76
- idun_platform_cli/tui/validators/observability.py,sha256=IWNuJg42eZUxjV-7v12kms7DpJsAs3FSSD5zLU5eKUc,2436
77
- idun_platform_cli/tui/widgets/__init__.py,sha256=d0tv94kZiFO6u7Rm8qvAXp5njDZqeVa7WfdU3A1GRdo,407
78
- idun_platform_cli/tui/widgets/guardrails_widget.py,sha256=ZYnvdDiUkOcAAp8gcR8ThpL8wVeAlmQrhPj5j-gUdOw,14299
79
- idun_platform_cli/tui/widgets/identity_widget.py,sha256=JWwfE4Dedv7F6r40tGnscHh8oevUr-_a-k5hZlXKvVg,8840
80
- idun_platform_cli/tui/widgets/mcps_widget.py,sha256=x2IS0SKIX6sfM5yBXW2d_arxWnwuaTEKUfYMTK-hZHw,10958
81
- idun_platform_cli/tui/widgets/observability_widget.py,sha256=Q2_vP7oC5LXznFUjMpse_1dLorrfGtbL11rhpEQOY8c,15064
82
- idun_platform_cli/tui/widgets/serve_widget.py,sha256=B2wK16AHo8BP-igZ0MJWhdCzuILvTzT0zn8PSJ_Szvc,2950
83
- idun_agent_engine-0.4.0.dist-info/METADATA,sha256=8PJDB-q0o90J46WfpMOrp13U9W-uJOeOYga1z2ZBeKA,10870
84
- idun_agent_engine-0.4.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
85
- idun_agent_engine-0.4.0.dist-info/entry_points.txt,sha256=XG3oxlSOaCrYKT1oyhKa0Ag1iJPMZ-WF6gaV_mzIJW4,52
86
- idun_agent_engine-0.4.0.dist-info/RECORD,,