legate 0.1.0
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.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +345 -0
- data/bin/legate +13 -0
- data/examples/00_quickstart.rb +51 -0
- data/examples/01_simple_agent.rb +105 -0
- data/examples/02_multi_tool_agent.rb +140 -0
- data/examples/03_custom_tool.rb +93 -0
- data/examples/04_agent_instructions.rb +84 -0
- data/examples/05_state_and_sessions.rb +91 -0
- data/examples/06_callbacks.rb +186 -0
- data/examples/07_async_jobs.rb +112 -0
- data/examples/08_loop_agent.rb +197 -0
- data/examples/09_sequential_workflow.rb +40 -0
- data/examples/10_parallel_workflow.rb +34 -0
- data/examples/11_agent_delegation.rb +24 -0
- data/examples/12_http_client_tool.rb +156 -0
- data/examples/13_authentication.rb +220 -0
- data/examples/14_mcp_client.rb +154 -0
- data/examples/15_mcp_server.rb +79 -0
- data/examples/16_webhooks.rb +91 -0
- data/examples/README_sequential_agents.md +164 -0
- data/examples/advanced/auth/cookie_auth_tool.rb +146 -0
- data/examples/advanced/auth/custom_auth_flows_example.rb +626 -0
- data/examples/advanced/auth/excon_middleware.rb +317 -0
- data/examples/advanced/auth/excon_middleware_auth.rb +399 -0
- data/examples/advanced/auth/fiber_auth_example.rb +281 -0
- data/examples/advanced/auth/fiber_oidc_example.rb +403 -0
- data/examples/advanced/auth/httpbin_bearer_tool.rb +159 -0
- data/examples/advanced/auth/oauth2_auth.rb +419 -0
- data/examples/advanced/auth/oidc_auth.rb +514 -0
- data/examples/advanced/auth/openweather_api.rb +251 -0
- data/examples/advanced/auth/openweather_tool.rb +153 -0
- data/examples/advanced/auth/query_param_middleware_test.rb +138 -0
- data/examples/advanced/auth/service_account.rb +135 -0
- data/examples/advanced/auth/test_with_httpbin.rb +202 -0
- data/examples/advanced/auth/token_lifecycle_example.rb +428 -0
- data/examples/advanced/callback_monitoring.rb +679 -0
- data/examples/advanced/mas/fixed_delegation_example.rb +191 -0
- data/examples/advanced/mas/loop_workflow.rb +28 -0
- data/examples/advanced/mas/mock_planner.rb +77 -0
- data/examples/advanced/mas/proper_delegation_example.rb +276 -0
- data/examples/advanced/mcp/legate_mcp_server_resource_example.rb +182 -0
- data/examples/advanced/mcp/mcp_resource_server_example.rb +309 -0
- data/examples/advanced/mcp/mcp_server_async.rb +76 -0
- data/examples/advanced/mcp/mcp_server_async_tools.rb +122 -0
- data/examples/advanced/mcp/mcp_server_legate_agent.rb +95 -0
- data/examples/advanced/mcp/mcp_server_rack.rb +89 -0
- data/examples/advanced/random_calculator.rb +104 -0
- data/examples/advanced/sleep_agent.rb +153 -0
- data/examples/advanced/webhooks/webhook_e2e_runner.rb +110 -0
- data/examples/advanced/webhooks/webhook_receiver_agent.rb +58 -0
- data/examples/advanced/workflows/task_refinement_loop_agent.rb +278 -0
- data/examples/advanced/workflows/travel_planner_auto_sequential.rb +444 -0
- data/examples/advanced/workflows/travel_planner_parallel.rb +656 -0
- data/examples/advanced/workflows/travel_planner_sequential.rb +512 -0
- data/examples/tools/oauth2_example.rb +136 -0
- data/examples/tools/sleepy_tool.rb +42 -0
- data/lib/legate/activity_log.rb +71 -0
- data/lib/legate/agent.rb +959 -0
- data/lib/legate/agent_code_generator.rb +185 -0
- data/lib/legate/agent_definition.rb +812 -0
- data/lib/legate/agentic/decision.rb +49 -0
- data/lib/legate/agentic/loop.rb +134 -0
- data/lib/legate/agentic.rb +5 -0
- data/lib/legate/agents/loop_agent.rb +248 -0
- data/lib/legate/agents/parallel_agent.rb +163 -0
- data/lib/legate/agents/sequential_agent.rb +190 -0
- data/lib/legate/agents.rb +14 -0
- data/lib/legate/auth/config.rb +148 -0
- data/lib/legate/auth/coordinator.rb +218 -0
- data/lib/legate/auth/coordinators/oauth2_coordinator.rb +99 -0
- data/lib/legate/auth/coordinators/oidc_coordinator.rb +68 -0
- data/lib/legate/auth/coordinators/service_account_coordinator.rb +122 -0
- data/lib/legate/auth/credential.rb +157 -0
- data/lib/legate/auth/encryption.rb +108 -0
- data/lib/legate/auth/error.rb +94 -0
- data/lib/legate/auth/exchanged_credential.rb +180 -0
- data/lib/legate/auth/excon_middleware.rb +285 -0
- data/lib/legate/auth/http_client_utils.rb +364 -0
- data/lib/legate/auth/manager.rb +531 -0
- data/lib/legate/auth/manager_store.rb +394 -0
- data/lib/legate/auth/middleware_factory.rb +290 -0
- data/lib/legate/auth/runner.rb +279 -0
- data/lib/legate/auth/scheme.rb +125 -0
- data/lib/legate/auth/schemes/api_key.rb +212 -0
- data/lib/legate/auth/schemes/google_service_account.rb +108 -0
- data/lib/legate/auth/schemes/http_bearer.rb +98 -0
- data/lib/legate/auth/schemes/oauth2.rb +396 -0
- data/lib/legate/auth/schemes/openid_connect.rb +346 -0
- data/lib/legate/auth/schemes/service_account.rb +388 -0
- data/lib/legate/auth/schemes.rb +40 -0
- data/lib/legate/auth/token_manager.rb +362 -0
- data/lib/legate/auth/token_store.rb +86 -0
- data/lib/legate/auth/tool_context_extension.rb +97 -0
- data/lib/legate/auth/tool_integration.rb +188 -0
- data/lib/legate/auth/url_guard.rb +81 -0
- data/lib/legate/auth.rb +453 -0
- data/lib/legate/callbacks/callback_context.rb +71 -0
- data/lib/legate/cli/agent_commands.rb +950 -0
- data/lib/legate/cli/auth_commands.rb +520 -0
- data/lib/legate/cli/base_command.rb +24 -0
- data/lib/legate/cli/deployment_commands.rb +934 -0
- data/lib/legate/cli/output_helper.rb +108 -0
- data/lib/legate/cli/session_commands.rb +138 -0
- data/lib/legate/cli/skaffold_commands.rb +223 -0
- data/lib/legate/cli/tool_commands.rb +261 -0
- data/lib/legate/cli/web_commands.rb +182 -0
- data/lib/legate/cli.rb +40 -0
- data/lib/legate/configuration/webhooks.rb +113 -0
- data/lib/legate/configuration.rb +39 -0
- data/lib/legate/definition_store.rb +23 -0
- data/lib/legate/errors.rb +118 -0
- data/lib/legate/event.rb +161 -0
- data/lib/legate/gemini_ai_beta_patch.rb +39 -0
- data/lib/legate/generators/agent_generator.rb +412 -0
- data/lib/legate/generators/code_validator.rb +48 -0
- data/lib/legate/generators/legate/install_generator.rb +35 -0
- data/lib/legate/generators/legate/templates/create_legate_tables.rb.tt +36 -0
- data/lib/legate/generators/legate/templates/initializer.rb +18 -0
- data/lib/legate/generators/runtime_tool_loader.rb +76 -0
- data/lib/legate/generators/tool_generator.rb +408 -0
- data/lib/legate/generators.rb +11 -0
- data/lib/legate/global_definition_registry.rb +506 -0
- data/lib/legate/global_tool_manager.rb +135 -0
- data/lib/legate/llm/adapter.rb +69 -0
- data/lib/legate/llm/gemini.rb +172 -0
- data/lib/legate/llm/ollama.rb +80 -0
- data/lib/legate/llm.rb +34 -0
- data/lib/legate/mcp/client.rb +320 -0
- data/lib/legate/mcp/connection/sse.rb +292 -0
- data/lib/legate/mcp/connection/stdio.rb +273 -0
- data/lib/legate/mcp/connection_manager.rb +103 -0
- data/lib/legate/mcp/server/legate_agent_adapter.rb +170 -0
- data/lib/legate/mcp/server/legate_direct_agent_adapter.rb +140 -0
- data/lib/legate/mcp/server/legate_tool_adapter.rb +119 -0
- data/lib/legate/mcp/tool_wrapper.rb +138 -0
- data/lib/legate/mcp/util/schema_converter.rb +134 -0
- data/lib/legate/mcp.rb +23 -0
- data/lib/legate/plan_executor.rb +375 -0
- data/lib/legate/planner.rb +839 -0
- data/lib/legate/rails/railtie.rb +43 -0
- data/lib/legate/rails.rb +9 -0
- data/lib/legate/redaction.rb +32 -0
- data/lib/legate/session.rb +299 -0
- data/lib/legate/session_service/active_record.rb +300 -0
- data/lib/legate/session_service/base.rb +68 -0
- data/lib/legate/session_service/event_broadcast.rb +74 -0
- data/lib/legate/session_service/in_memory.rb +188 -0
- data/lib/legate/tool/metadata_dsl.rb +122 -0
- data/lib/legate/tool.rb +276 -0
- data/lib/legate/tool_code_generator.rb +103 -0
- data/lib/legate/tool_context.rb +350 -0
- data/lib/legate/tool_loader.rb +39 -0
- data/lib/legate/tool_registry.rb +73 -0
- data/lib/legate/tool_result.rb +61 -0
- data/lib/legate/tools/agent_tool.rb +187 -0
- data/lib/legate/tools/base/http_client.rb +319 -0
- data/lib/legate/tools/base/safe_url.rb +56 -0
- data/lib/legate/tools/base_async_job_tool.rb +91 -0
- data/lib/legate/tools/calculator.rb +89 -0
- data/lib/legate/tools/cat_facts.rb +81 -0
- data/lib/legate/tools/check_job_status_tool.rb +48 -0
- data/lib/legate/tools/current_time_tool.rb +64 -0
- data/lib/legate/tools/echo.rb +43 -0
- data/lib/legate/tools/http_request_tool.rb +105 -0
- data/lib/legate/tools/random_number_tool.rb +64 -0
- data/lib/legate/tools/read_webpage_tool.rb +92 -0
- data/lib/legate/tools/sleepy_tool.rb +74 -0
- data/lib/legate/tools/webhook_tool.rb +146 -0
- data/lib/legate/version.rb +5 -0
- data/lib/legate/web/app.rb +984 -0
- data/lib/legate/web/public/css/main.css +4980 -0
- data/lib/legate/web/public/images/favicon-256.png +0 -0
- data/lib/legate/web/public/images/favicon-32.png +0 -0
- data/lib/legate/web/public/images/legate-logo-dark.png +0 -0
- data/lib/legate/web/public/images/legate-logo-light.png +0 -0
- data/lib/legate/web/public/js/legate.js +616 -0
- data/lib/legate/web/public/styles/main.scss +4402 -0
- data/lib/legate/web/routes/agent_authentication_routes.rb +530 -0
- data/lib/legate/web/routes/agent_definition_routes.rb +803 -0
- data/lib/legate/web/routes/agent_generator_routes.rb +80 -0
- data/lib/legate/web/routes/agent_interaction_routes.rb +734 -0
- data/lib/legate/web/routes/agent_runtime_routes.rb +323 -0
- data/lib/legate/web/routes/api_routes.rb +56 -0
- data/lib/legate/web/routes/authentication_routes.rb +1541 -0
- data/lib/legate/web/routes/core_routes.rb +111 -0
- data/lib/legate/web/routes/documentation_routes.rb +220 -0
- data/lib/legate/web/routes/tool_generator_routes.rb +81 -0
- data/lib/legate/web/routes/tools_ui_routes.rb +207 -0
- data/lib/legate/web/sass_compiler.rb +73 -0
- data/lib/legate/web/views/_active_session_info.slim +25 -0
- data/lib/legate/web/views/_activity_list.slim +55 -0
- data/lib/legate/web/views/_agent_card.slim +56 -0
- data/lib/legate/web/views/_agent_generator_modal.slim +382 -0
- data/lib/legate/web/views/_agent_status_controls.slim +71 -0
- data/lib/legate/web/views/_agent_tool_table.slim +74 -0
- data/lib/legate/web/views/_chat_message.slim +95 -0
- data/lib/legate/web/views/_display_agent_configuration.slim +26 -0
- data/lib/legate/web/views/_display_agent_description.slim +11 -0
- data/lib/legate/web/views/_display_agent_fallback.slim +15 -0
- data/lib/legate/web/views/_display_agent_hierarchy.slim +93 -0
- data/lib/legate/web/views/_display_agent_instruction.slim +17 -0
- data/lib/legate/web/views/_display_agent_mcp.slim +13 -0
- data/lib/legate/web/views/_display_agent_model.slim +17 -0
- data/lib/legate/web/views/_display_agent_name.slim +42 -0
- data/lib/legate/web/views/_display_agent_output_key.slim +26 -0
- data/lib/legate/web/views/_display_agent_type.slim +65 -0
- data/lib/legate/web/views/_edit_agent_configuration.slim +74 -0
- data/lib/legate/web/views/_edit_agent_description.slim +16 -0
- data/lib/legate/web/views/_edit_agent_fallback.slim +25 -0
- data/lib/legate/web/views/_edit_agent_hierarchy.slim +98 -0
- data/lib/legate/web/views/_edit_agent_instruction.slim +49 -0
- data/lib/legate/web/views/_edit_agent_mcp.slim +33 -0
- data/lib/legate/web/views/_edit_agent_model.slim +23 -0
- data/lib/legate/web/views/_edit_agent_output_key.slim +36 -0
- data/lib/legate/web/views/_edit_agent_tools.slim +40 -0
- data/lib/legate/web/views/_edit_agent_type.slim +67 -0
- data/lib/legate/web/views/_session_error.slim +4 -0
- data/lib/legate/web/views/_skeleton.slim +69 -0
- data/lib/legate/web/views/_tool_card.slim +9 -0
- data/lib/legate/web/views/_tool_generator_modal.slim +311 -0
- data/lib/legate/web/views/agent.slim +436 -0
- data/lib/legate/web/views/agent_auth.slim +562 -0
- data/lib/legate/web/views/agents.slim +369 -0
- data/lib/legate/web/views/auth.slim +112 -0
- data/lib/legate/web/views/auth_credential_detail.slim +327 -0
- data/lib/legate/web/views/auth_credentials.slim +261 -0
- data/lib/legate/web/views/auth_debug.slim +94 -0
- data/lib/legate/web/views/auth_mapping_detail.slim +151 -0
- data/lib/legate/web/views/auth_mapping_new.slim +123 -0
- data/lib/legate/web/views/auth_mappings.slim +120 -0
- data/lib/legate/web/views/auth_scheme_detail.slim +274 -0
- data/lib/legate/web/views/auth_schemes.slim +259 -0
- data/lib/legate/web/views/auth_test.slim +418 -0
- data/lib/legate/web/views/chat.slim +192 -0
- data/lib/legate/web/views/docs_index.slim +105 -0
- data/lib/legate/web/views/docs_show.slim +105 -0
- data/lib/legate/web/views/error_404.slim +5 -0
- data/lib/legate/web/views/index.slim +148 -0
- data/lib/legate/web/views/layout.slim +144 -0
- data/lib/legate/web/views/tool_detail.slim +87 -0
- data/lib/legate/web/views/tools.slim +50 -0
- data/lib/legate/web/webhook_listener.rb +367 -0
- data/lib/legate/web.rb +9 -0
- data/lib/legate.rb +220 -0
- data/public/docs/advanced/callbacks.md +828 -0
- data/public/docs/advanced/mcp_schema_conversion.md +59 -0
- data/public/docs/authentication/api_reference/config.md +210 -0
- data/public/docs/authentication/api_reference/credential.md +246 -0
- data/public/docs/authentication/api_reference/encryption.md +218 -0
- data/public/docs/authentication/api_reference/exchanged_credential.md +271 -0
- data/public/docs/authentication/api_reference/excon_middleware.md +175 -0
- data/public/docs/authentication/api_reference/index.md +30 -0
- data/public/docs/authentication/api_reference/scheme.md +250 -0
- data/public/docs/authentication/api_reference/schemes/api_key.md +175 -0
- data/public/docs/authentication/api_reference/schemes/google_service_account.md +221 -0
- data/public/docs/authentication/api_reference/schemes/http_bearer.md +169 -0
- data/public/docs/authentication/api_reference/schemes/oauth2.md +343 -0
- data/public/docs/authentication/api_reference/schemes/oidc.md +73 -0
- data/public/docs/authentication/api_reference/schemes/openid_connect.md +311 -0
- data/public/docs/authentication/api_reference/schemes/service_account.md +287 -0
- data/public/docs/authentication/api_reference/token_manager.md +221 -0
- data/public/docs/authentication/api_reference/token_store.md +146 -0
- data/public/docs/authentication/api_reference/tool_context_extension.md +166 -0
- data/public/docs/authentication/guides/api_key.md +190 -0
- data/public/docs/authentication/guides/bearer.md +172 -0
- data/public/docs/authentication/guides/configuration.md +255 -0
- data/public/docs/authentication/guides/custom_flow.md +523 -0
- data/public/docs/authentication/guides/index.md +24 -0
- data/public/docs/authentication/guides/migration.md +435 -0
- data/public/docs/authentication/guides/oauth2.md +252 -0
- data/public/docs/authentication/guides/oidc.md +241 -0
- data/public/docs/authentication/guides/overview.md +155 -0
- data/public/docs/authentication/guides/secure_storage.md +301 -0
- data/public/docs/authentication/guides/service_account.md +228 -0
- data/public/docs/authentication/guides/token_lifecycle.md +295 -0
- data/public/docs/authentication/guides/web_ui_integration.md +504 -0
- data/public/docs/authentication/index.md +58 -0
- data/public/docs/authentication/troubleshooting/credential_storage.md +550 -0
- data/public/docs/authentication/troubleshooting/environment_variables.md +540 -0
- data/public/docs/authentication/troubleshooting/index.md +11 -0
- data/public/docs/authentication/troubleshooting/oauth2_issues.md +220 -0
- data/public/docs/authentication/troubleshooting/oidc_issues.md +412 -0
- data/public/docs/authentication/troubleshooting/token_refresh.md +338 -0
- data/public/docs/cli/legate_cli_usage.md +363 -0
- data/public/docs/core_concepts/legate_agent_lifecycle.md +124 -0
- data/public/docs/core_concepts/legate_architecture_overview.md +110 -0
- data/public/docs/core_concepts/legate_configuration.md +116 -0
- data/public/docs/core_concepts/legate_definition_store.md +102 -0
- data/public/docs/core_concepts/legate_planner.md +94 -0
- data/public/docs/core_concepts/legate_session_service.md +104 -0
- data/public/docs/error_handling/legate_error_handling.md +122 -0
- data/public/docs/examples.md +199 -0
- data/public/docs/getting_started.md +111 -0
- data/public/docs/guides/agentic_agents.md +137 -0
- data/public/docs/guides/ai_code_generators.md +437 -0
- data/public/docs/guides/auto_loading.md +326 -0
- data/public/docs/guides/configuring_agent_webhooks.md +219 -0
- data/public/docs/guides/http_client_usage.md +264 -0
- data/public/docs/guides/llm_providers.md +137 -0
- data/public/docs/guides/mcp_client_integration.md +232 -0
- data/public/docs/guides/mcp_server_exposure.md +206 -0
- data/public/docs/guides/rails_integration.md +128 -0
- data/public/docs/guides/sending_outbound_webhooks.md +227 -0
- data/public/docs/guides/streaming.md +112 -0
- data/public/docs/guides/webhooks.md +288 -0
- data/public/docs/introduction.md +51 -0
- data/public/docs/multi_agent_systems/advanced_features.md +57 -0
- data/public/docs/multi_agent_systems/agent_delegation.md +190 -0
- data/public/docs/multi_agent_systems/agent_hierarchy.md +49 -0
- data/public/docs/multi_agent_systems/state_management.md +47 -0
- data/public/docs/multi_agent_systems/workflow_agents.md +72 -0
- data/public/docs/tools/legate_built_in_tools.md +332 -0
- data/public/docs/tools/legate_tools_and_registry.md +263 -0
- data/public/docs/web_ui/legate_web_ui.md +137 -0
- metadata +823 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/ File: lib/legate/web/views/_edit_agent_hierarchy.slim
|
|
2
|
+
/ Expects agent_data hash with name, agent_type, and sub_agent_names
|
|
3
|
+
/ Also expects all_agent_definitions if available for selecting sub-agents
|
|
4
|
+
|
|
5
|
+
- agent_name = agent_data[:name]
|
|
6
|
+
- agent_type = agent_data[:agent_type]&.to_sym || :llm
|
|
7
|
+
- sub_agent_names = agent_data[:sub_agent_names] || []
|
|
8
|
+
- loop_max = agent_data[:loop_max_iterations]
|
|
9
|
+
- loop_key = agent_data[:loop_condition_state_key]
|
|
10
|
+
- loop_val = agent_data[:loop_condition_expected_value]
|
|
11
|
+
|
|
12
|
+
/ Get available agent names and exclude current agent
|
|
13
|
+
- all_agent_names = defined?(all_agent_definitions) ? all_agent_definitions.map { |d| d[:name] }.reject { |n| n.to_s == agent_name.to_s } : []
|
|
14
|
+
|
|
15
|
+
.content#agent-hierarchy-display
|
|
16
|
+
form( hx-put="/agents/#{agent_name}/update/hierarchy"
|
|
17
|
+
hx-target="#agent-hierarchy-display"
|
|
18
|
+
hx-swap="outerHTML" )
|
|
19
|
+
|
|
20
|
+
h4.is-size-5
|
|
21
|
+
span.icon.mr-2
|
|
22
|
+
- type_icon = case agent_type
|
|
23
|
+
- when :sequential then "fa-list-ol"
|
|
24
|
+
- when :parallel then "fa-layer-group"
|
|
25
|
+
- when :loop then "fa-sync-alt"
|
|
26
|
+
- else "fa-sitemap"
|
|
27
|
+
i(class="fas #{type_icon}")
|
|
28
|
+
| Edit
|
|
29
|
+
= agent_type == :llm ? "Delegation Targets" : "Workflow Components"
|
|
30
|
+
|
|
31
|
+
.notification.is-light.is-info.mb-4
|
|
32
|
+
span.icon.mr-2
|
|
33
|
+
i.fas.fa-info-circle
|
|
34
|
+
- if agent_type == :llm
|
|
35
|
+
| Configure other agents that this LLM agent can delegate tasks to.
|
|
36
|
+
- elsif agent_type == :sequential
|
|
37
|
+
| Configure sub-agents that will execute in sequence. The order in the list below matters.
|
|
38
|
+
- elsif agent_type == :parallel
|
|
39
|
+
| Configure sub-agents that will execute concurrently. All selected agents will start at the same time.
|
|
40
|
+
- elsif agent_type == :loop
|
|
41
|
+
| Configure sub-agents for your loop. These will execute repeatedly until a condition is met.
|
|
42
|
+
|
|
43
|
+
/ Display error if provided
|
|
44
|
+
- if defined?(error_message) && error_message
|
|
45
|
+
.notification.is-danger.is-light.mb-4
|
|
46
|
+
button.delete(type="button" onclick="this.parentElement.remove()")
|
|
47
|
+
= error_message
|
|
48
|
+
|
|
49
|
+
.field
|
|
50
|
+
label.label = agent_type == :llm ? "Delegation Targets" : "Workflow Components"
|
|
51
|
+
- if all_agent_names.any?
|
|
52
|
+
.select.is-multiple.is-fullwidth
|
|
53
|
+
select(name="sub_agent_names[]" multiple size="5")
|
|
54
|
+
- all_agent_names.each do |name|
|
|
55
|
+
- next if name.to_s == agent_name.to_s
|
|
56
|
+
option(value=name selected=sub_agent_names.include?(name)) = name
|
|
57
|
+
p.help Select agents. Use Ctrl/Cmd+click for multiple selection.
|
|
58
|
+
- if agent_type == :sequential || agent_type == :loop
|
|
59
|
+
p.help.has-text-info.mt-1 Order matters for this workflow type.
|
|
60
|
+
- else
|
|
61
|
+
.notification.is-warning.is-light No other agents available to select. Create some first.
|
|
62
|
+
|
|
63
|
+
/ Loop Specific Configuration
|
|
64
|
+
- if agent_type == :loop
|
|
65
|
+
hr
|
|
66
|
+
h5.title.is-6 Loop Conditions
|
|
67
|
+
.columns.is-multiline
|
|
68
|
+
.column.is-one-third
|
|
69
|
+
.field
|
|
70
|
+
label.label.is-small Max Iterations
|
|
71
|
+
.control
|
|
72
|
+
input.input(type="number" name="loop_max_iterations" value=loop_max placeholder="10" min="1")
|
|
73
|
+
.column.is-one-third
|
|
74
|
+
.field
|
|
75
|
+
label.label.is-small Condition State Key
|
|
76
|
+
.control
|
|
77
|
+
input.input(type="text" name="loop_condition_state_key" value=loop_key placeholder="e.g. task_complete")
|
|
78
|
+
.column.is-one-third
|
|
79
|
+
.field
|
|
80
|
+
label.label.is-small Expected Value
|
|
81
|
+
.control
|
|
82
|
+
input.input(type="text" name="loop_condition_expected_value" value=loop_val placeholder="e.g. true")
|
|
83
|
+
|
|
84
|
+
/ Action Buttons
|
|
85
|
+
.field.is-grouped.mt-4
|
|
86
|
+
.control
|
|
87
|
+
button.button.is-light( type="button"
|
|
88
|
+
hx-get="/agents/#{agent_name}/display/hierarchy"
|
|
89
|
+
hx-target="#agent-hierarchy-display"
|
|
90
|
+
hx-swap="outerHTML" )
|
|
91
|
+
span Cancel
|
|
92
|
+
.control
|
|
93
|
+
button.button.is-success(type="submit" hx-indicator=".htmx-indicator")
|
|
94
|
+
span.icon.is-small.htmx-indicator
|
|
95
|
+
i.fas.fa-spinner.fa-spin
|
|
96
|
+
span.icon.is-small
|
|
97
|
+
i.fas.fa-check
|
|
98
|
+
span Save Changes
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/! File: lib/legate/web/views/_edit_agent_instruction.slim
|
|
2
|
+
/! This partial might become redundant if its content is fully merged
|
|
3
|
+
/! into _edit_agent_configuration.slim. If kept separate for any reason,
|
|
4
|
+
/! ensure the textarea ID is unique, e.g., #edit-instruction-textarea
|
|
5
|
+
|
|
6
|
+
/! Example content if kept separate (adjust target/swap if needed):
|
|
7
|
+
/ hr
|
|
8
|
+
/ form hx-put="/agents/#{agent_data[:name]}/update/instruction" hx-target="closest .content" / Or specific container
|
|
9
|
+
/ h3.subtitle.is-5 Instructions (System Prompt)
|
|
10
|
+
/ .field
|
|
11
|
+
/ label.label for="edit-instruction-textarea" Instructions
|
|
12
|
+
/ .control
|
|
13
|
+
/ textarea.textarea#edit-instruction-textarea name="value" rows="5" placeholder="Guide the agent's behavior, persona, and tool usage..." = agent_data[:instruction]
|
|
14
|
+
/ - if defined?(error_message) && error_message
|
|
15
|
+
/ p.help.is-danger = error_message
|
|
16
|
+
|
|
17
|
+
/ .field.is-grouped
|
|
18
|
+
/ .control
|
|
19
|
+
/ button.button.is-link type="submit" Save
|
|
20
|
+
/ .control
|
|
21
|
+
/ a.button.is-light hx-get="/agents/#{agent_data[:name]}/display/instruction" Cancel
|
|
22
|
+
|
|
23
|
+
/! Form for editing agent instructions
|
|
24
|
+
|
|
25
|
+
/ Add container ID, use correct hx-* attributes
|
|
26
|
+
form#agent-instruction-display-container hx-put="/agents/#{agent_data[:name]}/update/instruction" hx-target="#agent-instruction-display-container" hx-swap="outerHTML"
|
|
27
|
+
|
|
28
|
+
/ --- Display Error Message if Present ---
|
|
29
|
+
- if defined?(error_message) && error_message
|
|
30
|
+
.notification.is-danger.is-light.mb-3
|
|
31
|
+
button.delete type="button" onclick="this.parentElement.remove()"
|
|
32
|
+
= error_message
|
|
33
|
+
|
|
34
|
+
.field
|
|
35
|
+
label.label for="edit-instruction-textarea" Instructions (System Prompt)
|
|
36
|
+
.control
|
|
37
|
+
/ Textarea ID for CodeMirror JS
|
|
38
|
+
textarea.textarea#edit-instruction-textarea name="value" rows="5" placeholder="Guide the agent's behavior, persona, and tool usage..." == agent_data[:instruction]
|
|
39
|
+
|
|
40
|
+
.field.is-grouped.is-grouped-right.mt-4
|
|
41
|
+
.control
|
|
42
|
+
/ Cancel button targets container ID
|
|
43
|
+
button.button.is-light type="button" hx-get="/agents/#{agent_data[:name]}/display/instruction" hx-target="#agent-instruction-display-container" hx-swap="outerHTML"
|
|
44
|
+
span Cancel
|
|
45
|
+
.control
|
|
46
|
+
button.button.is-success type="submit"
|
|
47
|
+
span.icon.is-small
|
|
48
|
+
i.fas.fa-check
|
|
49
|
+
span Save Instructions
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/ File: lib/legate/web/views/_edit_agent_mcp.slim
|
|
2
|
+
/ Form for editing MCP Server JSON using CodeMirror
|
|
3
|
+
|
|
4
|
+
/! Add container ID to the form, put attributes on one line using space separation
|
|
5
|
+
form#agent-mcp-display-container hx-put="/agents/#{agent_data[:name]}/update/mcp" hx-target="#agent-mcp-display-container" hx-swap="outerHTML"
|
|
6
|
+
|
|
7
|
+
/ --- Display Error Message if Present ---
|
|
8
|
+
- if defined?(error_message) && error_message
|
|
9
|
+
.notification.is-danger.is-light.mb-3
|
|
10
|
+
button.delete type="button" onclick="this.parentElement.remove()"
|
|
11
|
+
= error_message
|
|
12
|
+
|
|
13
|
+
.field
|
|
14
|
+
label.label for="mcp-json-editor" MCP Server Configurations (JSON Array)
|
|
15
|
+
.control
|
|
16
|
+
/! Textarea will be replaced by CodeMirror via JS in layout.slim
|
|
17
|
+
textarea.textarea#mcp-json-editor name="value" rows="6" placeholder='[{"type": "stdio", "command": "...", "args": ["..."]}]' == agent_data[:mcp_servers_json]
|
|
18
|
+
p.help
|
|
19
|
+
| Enter a valid JSON array of MCP server config objects. Leave empty if none.
|
|
20
|
+
br
|
|
21
|
+
| Example: `[{"type": "stdio", "command": "npx", "args": ["@mcp/server", "/path/to/tools"]}]`
|
|
22
|
+
|
|
23
|
+
.field.is-grouped.is-grouped-right.mt-4
|
|
24
|
+
.control
|
|
25
|
+
/ Button to cancel editing and revert to display view
|
|
26
|
+
/! Ensure cancel targets the container ID
|
|
27
|
+
button.button.is-light type="button" hx-get="/agents/#{agent_data[:name]}/display/mcp" hx-target="#agent-mcp-display-container" hx-swap="outerHTML"
|
|
28
|
+
span Cancel
|
|
29
|
+
.control
|
|
30
|
+
button.button.is-success type="submit"
|
|
31
|
+
span.icon.is-small
|
|
32
|
+
i.fas.fa-check
|
|
33
|
+
span Save MCP Config
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/ File: lib/legate/web/views/_edit_agent_model.slim
|
|
2
|
+
/ Expects agent_data hash and available_models array
|
|
3
|
+
|
|
4
|
+
- current_model = agent_data[:model] || Legate::Agent::DEFAULT_MODEL
|
|
5
|
+
|
|
6
|
+
form#agent-model-display-container( hx-put="/agents/#{agent_data[:name]}/update/model" hx-target="#agent-model-display-container" hx-swap="outerHTML" )
|
|
7
|
+
.field.has-addons
|
|
8
|
+
.control.is-expanded
|
|
9
|
+
.select.is-fullwidth
|
|
10
|
+
select(name="value")
|
|
11
|
+
- available_models.each do |model_name|
|
|
12
|
+
option(value=model_name selected=(model_name == current_model)) = model_name
|
|
13
|
+
.control
|
|
14
|
+
button.button.is-success(type="submit")
|
|
15
|
+
span.icon.is-small
|
|
16
|
+
i.fas.fa-check
|
|
17
|
+
span Save
|
|
18
|
+
.field.is-grouped.is-grouped-right
|
|
19
|
+
.control
|
|
20
|
+
button.button.is-light type="button" hx-get="/agents/#{agent_data[:name]}/display/model" hx-target="#agent-model-display-container" hx-swap="outerHTML"
|
|
21
|
+
span.icon.is-small
|
|
22
|
+
i.fas.fa-times
|
|
23
|
+
span Cancel
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/ File: lib/legate/web/views/_edit_agent_output_key.slim
|
|
2
|
+
/ Expects agent_data hash with name and output_key
|
|
3
|
+
|
|
4
|
+
- agent_name = agent_data[:name]
|
|
5
|
+
- output_key = agent_data[:output_key]
|
|
6
|
+
|
|
7
|
+
.field#agent-output-key-display
|
|
8
|
+
form( hx-put="/agents/#{agent_name}/update/output_key"
|
|
9
|
+
hx-target="#agent-output-key-display"
|
|
10
|
+
hx-swap="outerHTML" )
|
|
11
|
+
|
|
12
|
+
label.label.is-small Output Key
|
|
13
|
+
|
|
14
|
+
.field.has-addons
|
|
15
|
+
.control.is-expanded
|
|
16
|
+
input.input.is-small(
|
|
17
|
+
type="text"
|
|
18
|
+
name="value"
|
|
19
|
+
value=output_key
|
|
20
|
+
placeholder="e.g. result_key"
|
|
21
|
+
autofocus=true
|
|
22
|
+
)
|
|
23
|
+
.control
|
|
24
|
+
button.button.is-small.is-success(type="submit")
|
|
25
|
+
span.icon.is-small
|
|
26
|
+
i.fas.fa-check
|
|
27
|
+
.control
|
|
28
|
+
button.button.is-small.is-light(
|
|
29
|
+
type="button"
|
|
30
|
+
hx-get="/agents/#{agent_name}/display/output_key"
|
|
31
|
+
hx-target="#agent-output-key-display"
|
|
32
|
+
hx-swap="outerHTML"
|
|
33
|
+
)
|
|
34
|
+
span.icon.is-small
|
|
35
|
+
i.fas.fa-times
|
|
36
|
+
p.help.is-size-7 Optional. Key to store the result in the session state.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/ File: lib/legate/web/views/_edit_agent_tools.slim
|
|
2
|
+
/ Expects:
|
|
3
|
+
/ agent_data (Hash: {name})
|
|
4
|
+
/ configured_tool_names (Array<String>) - Names of currently configured tools
|
|
5
|
+
/ all_available_tools (Array<Hash>: [{name: :tool_symbol, description: "...""}]) - All tools from registry
|
|
6
|
+
|
|
7
|
+
- encoded_agent_name = URI.encode_www_form_component(agent_data[:name].to_s).gsub('+', '%20')
|
|
8
|
+
|
|
9
|
+
.box.mb-5
|
|
10
|
+
h2.title.is-4 Edit Configured Tools
|
|
11
|
+
form( hx-put="/agents/#{encoded_agent_name}/update/tools" hx-target="closest .box" hx-swap="outerHTML" )
|
|
12
|
+
|
|
13
|
+
.field
|
|
14
|
+
label.label Available Tools (Select tools for this agent definition):
|
|
15
|
+
.control
|
|
16
|
+
- if all_available_tools && !all_available_tools.empty?
|
|
17
|
+
- all_available_tools.each do |tool_info|
|
|
18
|
+
- tool_name_str = tool_info[:name].to_s
|
|
19
|
+
- is_checked = configured_tool_names.include?(tool_name_str)
|
|
20
|
+
.field
|
|
21
|
+
label.checkbox class=(is_checked ? 'is-selected-tool' : '') title=tool_info[:description]
|
|
22
|
+
/ Checkbox name is 'tools[]' to submit an array
|
|
23
|
+
input(type="checkbox" name="tools[]" value=tool_name_str checked=is_checked)
|
|
24
|
+
strong.ml-2 #{tool_info[:name].to_s.capitalize}:
|
|
25
|
+
span.ml-1 #{tool_info[:description]}
|
|
26
|
+
- else
|
|
27
|
+
p.has-text-danger No tools found in the Tool Registry! Cannot configure agent.
|
|
28
|
+
|
|
29
|
+
.field.is-grouped.is-grouped-right.mt-4
|
|
30
|
+
.control
|
|
31
|
+
button.button( type="button"
|
|
32
|
+
hx-get="/agents/#{encoded_agent_name}/display/tool_table"
|
|
33
|
+
hx-target="closest .box"
|
|
34
|
+
hx-swap="outerHTML" )
|
|
35
|
+
span Cancel
|
|
36
|
+
.control
|
|
37
|
+
button.button.is-success(type="submit")
|
|
38
|
+
span.icon.is-small
|
|
39
|
+
i.fas.fa-check
|
|
40
|
+
span Save Tool Configuration
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/ File: lib/legate/web/views/_edit_agent_type.slim
|
|
2
|
+
/ Expects agent_data hash with name and agent_type
|
|
3
|
+
|
|
4
|
+
- agent_name = agent_data[:name]
|
|
5
|
+
- agent_type = agent_data[:agent_type]&.to_sym || :llm
|
|
6
|
+
- planning_strategy = agent_data[:planning_strategy]&.to_sym || :plan
|
|
7
|
+
|
|
8
|
+
.content#agent-type-display
|
|
9
|
+
form( hx-put="/agents/#{agent_name}/update/type"
|
|
10
|
+
hx-target="#agent-type-display"
|
|
11
|
+
hx-swap="outerHTML" )
|
|
12
|
+
|
|
13
|
+
h4.is-size-5 Edit Agent Type
|
|
14
|
+
|
|
15
|
+
/ Display error if provided
|
|
16
|
+
- if defined?(error_message) && error_message
|
|
17
|
+
.notification.is-danger.is-light.mb-4
|
|
18
|
+
button.delete(type="button" onclick="this.parentElement.remove()")
|
|
19
|
+
= error_message
|
|
20
|
+
|
|
21
|
+
.field
|
|
22
|
+
label.label for="agent_type" Agent Type
|
|
23
|
+
.control
|
|
24
|
+
.select.is-fullwidth
|
|
25
|
+
select#agent_type(name="agent_type")
|
|
26
|
+
option(value="llm" selected=(agent_type == :llm)) LLM Agent
|
|
27
|
+
option(value="sequential" selected=(agent_type == :sequential)) Sequential Workflow
|
|
28
|
+
option(value="parallel" selected=(agent_type == :parallel)) Parallel Workflow
|
|
29
|
+
option(value="loop" selected=(agent_type == :loop)) Loop Workflow
|
|
30
|
+
p.help
|
|
31
|
+
| LLM: AI-powered agent for task execution
|
|
32
|
+
br
|
|
33
|
+
| Sequential: Runs sub-agents in sequence
|
|
34
|
+
br
|
|
35
|
+
| Parallel: Runs sub-agents concurrently
|
|
36
|
+
br
|
|
37
|
+
| Loop: Repeatedly executes sub-agents until condition is met
|
|
38
|
+
|
|
39
|
+
.field
|
|
40
|
+
label.label for="planning_strategy" Planning Strategy
|
|
41
|
+
.control
|
|
42
|
+
.select.is-fullwidth
|
|
43
|
+
select#planning_strategy(name="planning_strategy")
|
|
44
|
+
option(value="plan" selected=(planning_strategy == :plan)) Plan (default)
|
|
45
|
+
option(value="react" selected=(planning_strategy == :react)) ReAct (agentic loop)
|
|
46
|
+
p.help
|
|
47
|
+
| Applies to LLM agents only.
|
|
48
|
+
br
|
|
49
|
+
| Plan: generate one plan up front, then execute every step.
|
|
50
|
+
br
|
|
51
|
+
| ReAct: take one action, observe the result, then decide the next — better for multi-step tasks and tool errors.
|
|
52
|
+
|
|
53
|
+
/ Action Buttons
|
|
54
|
+
.field.is-grouped.mt-4
|
|
55
|
+
.control
|
|
56
|
+
button.button.is-light( type="button"
|
|
57
|
+
hx-get="/agents/#{agent_name}/display/type"
|
|
58
|
+
hx-target="#agent-type-display"
|
|
59
|
+
hx-swap="outerHTML" )
|
|
60
|
+
span Cancel
|
|
61
|
+
.control
|
|
62
|
+
button.button.is-success(type="submit" hx-indicator=".htmx-indicator")
|
|
63
|
+
span.icon.is-small.htmx-indicator
|
|
64
|
+
i.fas.fa-spinner.fa-spin
|
|
65
|
+
span.icon.is-small
|
|
66
|
+
i.fas.fa-check
|
|
67
|
+
span Save Changes
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
.notification.is-danger.mt-2 role="alert"
|
|
2
|
+
button.delete type="button" aria-label="Dismiss" onclick="this.parentElement.classList.add('is-hidden');"
|
|
3
|
+
- msg = defined?(error_message) && !error_message.to_s.strip.empty? ? error_message : "An error occurred with the session operation."
|
|
4
|
+
= msg
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/ File: lib/legate/web/views/_skeleton.slim
|
|
2
|
+
/ Skeleton Loading Components
|
|
3
|
+
/ Usage: == slim :_skeleton, locals: { type: :text, count: 1 }
|
|
4
|
+
/ Types: :text, :title, :badge, :card, :table_row, :auth_status, :chat_interface
|
|
5
|
+
|
|
6
|
+
ruby:
|
|
7
|
+
type ||= :text
|
|
8
|
+
count ||= 1
|
|
9
|
+
columns ||= 4
|
|
10
|
+
|
|
11
|
+
- count.times do
|
|
12
|
+
- case type
|
|
13
|
+
|
|
14
|
+
- when :text
|
|
15
|
+
.skeleton.skeleton-text
|
|
16
|
+
|
|
17
|
+
- when :text_short
|
|
18
|
+
.skeleton.skeleton-text.skeleton-short
|
|
19
|
+
|
|
20
|
+
- when :title
|
|
21
|
+
.skeleton.skeleton-title
|
|
22
|
+
|
|
23
|
+
- when :badge
|
|
24
|
+
.skeleton.skeleton-badge
|
|
25
|
+
|
|
26
|
+
- when :avatar
|
|
27
|
+
.skeleton.skeleton-avatar
|
|
28
|
+
|
|
29
|
+
- when :card
|
|
30
|
+
.skeleton-card
|
|
31
|
+
.skeleton.skeleton-title
|
|
32
|
+
.skeleton.skeleton-text
|
|
33
|
+
.skeleton.skeleton-text.skeleton-short
|
|
34
|
+
|
|
35
|
+
- when :table_row
|
|
36
|
+
tr.skeleton-row
|
|
37
|
+
- columns.times do |i|
|
|
38
|
+
td
|
|
39
|
+
- if i == columns - 1
|
|
40
|
+
.skeleton.skeleton-badge
|
|
41
|
+
- elsif i == 0
|
|
42
|
+
.skeleton.skeleton-text.skeleton-medium
|
|
43
|
+
- else
|
|
44
|
+
.skeleton.skeleton-text
|
|
45
|
+
|
|
46
|
+
- when :auth_status
|
|
47
|
+
.has-text-centered
|
|
48
|
+
.skeleton.skeleton-icon.mx-auto
|
|
49
|
+
.skeleton.skeleton-text.skeleton-short.mx-auto.mt-2
|
|
50
|
+
|
|
51
|
+
- when :chat_interface
|
|
52
|
+
.skeleton-chat-container
|
|
53
|
+
.skeleton-message.skeleton-message-left
|
|
54
|
+
.skeleton.skeleton-avatar.skeleton-avatar-small
|
|
55
|
+
.skeleton-message-content
|
|
56
|
+
.skeleton.skeleton-text
|
|
57
|
+
.skeleton.skeleton-text.skeleton-short
|
|
58
|
+
.skeleton-message.skeleton-message-right
|
|
59
|
+
.skeleton-message-content
|
|
60
|
+
.skeleton.skeleton-text.skeleton-medium
|
|
61
|
+
.skeleton-message.skeleton-message-left
|
|
62
|
+
.skeleton.skeleton-avatar.skeleton-avatar-small
|
|
63
|
+
.skeleton-message-content
|
|
64
|
+
.skeleton.skeleton-text
|
|
65
|
+
.skeleton.skeleton-text
|
|
66
|
+
.skeleton.skeleton-text.skeleton-short
|
|
67
|
+
.skeleton-chat-input
|
|
68
|
+
.skeleton.skeleton-input
|
|
69
|
+
.skeleton.skeleton-button
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/ Expects 'tool_info' (a hash or object with :name and :description) in locals
|
|
2
|
+
.column.is-one-third
|
|
3
|
+
.card.tool-card
|
|
4
|
+
.card-content
|
|
5
|
+
h3.title.is-5= tool_info[:name].to_s.capitalize
|
|
6
|
+
p= tool_info[:description]
|
|
7
|
+
.card-footer
|
|
8
|
+
/ Link to the tool detail page (assuming /tools/:name exists)
|
|
9
|
+
a.card-footer-item(href="/tools/#{tool_info[:name]}") Details
|