alloy-runtime-cli 0.1.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.
- alloy_runtime_cli-0.1.0.dist-info/METADATA +61 -0
- alloy_runtime_cli-0.1.0.dist-info/RECORD +451 -0
- alloy_runtime_cli-0.1.0.dist-info/WHEEL +5 -0
- alloy_runtime_cli-0.1.0.dist-info/entry_points.txt +2 -0
- alloy_runtime_cli-0.1.0.dist-info/top_level.txt +1 -0
- cli/__init__.py +0 -0
- cli/commands/__init__.py +0 -0
- cli/commands/admin/__init__.py +0 -0
- cli/commands/admin/bootstrap_command.py +118 -0
- cli/commands/admin/credentials/__init__.py +0 -0
- cli/commands/admin/credentials/create/__init__.py +0 -0
- cli/commands/admin/credentials/create/command.py +148 -0
- cli/commands/admin/credentials/create/presenter.py +16 -0
- cli/commands/admin/credentials/grant/__init__.py +0 -0
- cli/commands/admin/credentials/grant/command.py +119 -0
- cli/commands/admin/credentials/grant/fields.py +33 -0
- cli/commands/admin/credentials/grant/presenter.py +23 -0
- cli/commands/agents/__init__.py +0 -0
- cli/commands/agents/create/__init__.py +0 -0
- cli/commands/agents/create/command.py +475 -0
- cli/commands/agents/create/fields.py +64 -0
- cli/commands/agents/create/presenter.py +68 -0
- cli/commands/agents/delete/__init__.py +0 -0
- cli/commands/agents/delete/command.py +47 -0
- cli/commands/agents/delete/presenter.py +16 -0
- cli/commands/agents/get/command.py +37 -0
- cli/commands/agents/get/presenter.py +32 -0
- cli/commands/agents/list/__init__.py +1 -0
- cli/commands/agents/list/command.py +54 -0
- cli/commands/agents/list/presenter.py +82 -0
- cli/commands/agents/update/__init__.py +0 -0
- cli/commands/agents/update/command.py +435 -0
- cli/commands/agents/update/fields.py +40 -0
- cli/commands/agents/update/presenter.py +68 -0
- cli/commands/audio/__init__.py +0 -0
- cli/commands/audio/transcribe/__init__.py +0 -0
- cli/commands/audio/transcribe/command.py +144 -0
- cli/commands/audio/transcribe/presenter.py +15 -0
- cli/commands/auth/__init__.py +0 -0
- cli/commands/auth/login/__init__.py +0 -0
- cli/commands/auth/login/command.py +80 -0
- cli/commands/auth/signup/__init__.py +0 -0
- cli/commands/auth/signup/command.py +115 -0
- cli/commands/billing/__init__.py +1 -0
- cli/commands/billing/costs/__init__.py +1 -0
- cli/commands/billing/costs/by_agent/__init__.py +1 -0
- cli/commands/billing/costs/by_agent/command.py +57 -0
- cli/commands/billing/costs/by_agent/presenter.py +81 -0
- cli/commands/billing/costs/by_model/__init__.py +1 -0
- cli/commands/billing/costs/by_model/command.py +57 -0
- cli/commands/billing/costs/by_model/presenter.py +80 -0
- cli/commands/billing/costs/daily/__init__.py +1 -0
- cli/commands/billing/costs/daily/command.py +55 -0
- cli/commands/billing/costs/daily/presenter.py +75 -0
- cli/commands/billing/costs/summary/__init__.py +1 -0
- cli/commands/billing/costs/summary/command.py +57 -0
- cli/commands/billing/costs/summary/presenter.py +42 -0
- cli/commands/billing/projects/__init__.py +1 -0
- cli/commands/billing/projects/create/__init__.py +1 -0
- cli/commands/billing/projects/create/command.py +60 -0
- cli/commands/billing/projects/create/presenter.py +26 -0
- cli/commands/billing/projects/get/__init__.py +1 -0
- cli/commands/billing/projects/get/command.py +33 -0
- cli/commands/billing/projects/get/presenter.py +32 -0
- cli/commands/billing/projects/list/__init__.py +1 -0
- cli/commands/billing/projects/list/command.py +40 -0
- cli/commands/billing/projects/list/presenter.py +57 -0
- cli/commands/content/__init__.py +1 -0
- cli/commands/content/delete/__init__.py +0 -0
- cli/commands/content/delete/command.py +49 -0
- cli/commands/content/delete/presenter.py +18 -0
- cli/commands/content/edit/__init__.py +1 -0
- cli/commands/content/edit/command.py +155 -0
- cli/commands/content/edit/editor.py +150 -0
- cli/commands/content/edit/presenter.py +146 -0
- cli/commands/content/get/__init__.py +1 -0
- cli/commands/content/get/command.py +39 -0
- cli/commands/content/get/presenter.py +176 -0
- cli/commands/content/list/__init__.py +1 -0
- cli/commands/content/list/command.py +347 -0
- cli/commands/content/list/export_formatters.py +409 -0
- cli/commands/content/list/export_handler.py +165 -0
- cli/commands/content/list/presenter.py +190 -0
- cli/commands/credentials/__init__.py +0 -0
- cli/commands/credentials/create/__init__.py +0 -0
- cli/commands/credentials/create/command.py +165 -0
- cli/commands/credentials/create/fields.py +38 -0
- cli/commands/credentials/create/presenter.py +20 -0
- cli/commands/credentials/update/__init__.py +0 -0
- cli/commands/credentials/update/command.py +53 -0
- cli/commands/credentials/update/fields.py +71 -0
- cli/commands/credentials/update/presenter.py +16 -0
- cli/commands/flag_utils.py +366 -0
- cli/commands/generate/__init__.py +0 -0
- cli/commands/generate/cancel/__init__.py +1 -0
- cli/commands/generate/cancel/command.py +44 -0
- cli/commands/generate/cancel/presenter.py +26 -0
- cli/commands/generate/status/__init__.py +1 -0
- cli/commands/generate/status/command.py +58 -0
- cli/commands/generate/status/presenter.py +78 -0
- cli/commands/generate/text/__init__.py +0 -0
- cli/commands/generate/text/command.py +1325 -0
- cli/commands/generate/text/concurrent_renderer.py +355 -0
- cli/commands/generate/text/presenter.py +287 -0
- cli/commands/generate/text/stream_renderer.py +129 -0
- cli/commands/knowledge/__init__.py +0 -0
- cli/commands/knowledge/collections/__init__.py +0 -0
- cli/commands/knowledge/collections/cluster/__init__.py +0 -0
- cli/commands/knowledge/collections/cluster/command.py +64 -0
- cli/commands/knowledge/collections/cluster/presenter.py +74 -0
- cli/commands/knowledge/collections/cluster_status/__init__.py +0 -0
- cli/commands/knowledge/collections/cluster_status/command.py +46 -0
- cli/commands/knowledge/collections/cluster_status/presenter.py +10 -0
- cli/commands/knowledge/collections/create/__init__.py +0 -0
- cli/commands/knowledge/collections/create/command.py +137 -0
- cli/commands/knowledge/collections/create/presenter.py +38 -0
- cli/commands/knowledge/collections/delete/__init__.py +1 -0
- cli/commands/knowledge/collections/delete/command.py +47 -0
- cli/commands/knowledge/collections/delete/presenter.py +20 -0
- cli/commands/knowledge/collections/get/__init__.py +1 -0
- cli/commands/knowledge/collections/get/command.py +30 -0
- cli/commands/knowledge/collections/get/presenter.py +44 -0
- cli/commands/knowledge/collections/list/__init__.py +1 -0
- cli/commands/knowledge/collections/list/command.py +41 -0
- cli/commands/knowledge/collections/list/presenter.py +68 -0
- cli/commands/knowledge/collections/update/__init__.py +0 -0
- cli/commands/knowledge/collections/update/command.py +97 -0
- cli/commands/knowledge/collections/update/presenter.py +42 -0
- cli/commands/knowledge/documents/__init__.py +0 -0
- cli/commands/knowledge/documents/bulk_metadata/__init__.py +0 -0
- cli/commands/knowledge/documents/bulk_metadata/command.py +119 -0
- cli/commands/knowledge/documents/bulk_metadata/presenter.py +36 -0
- cli/commands/knowledge/documents/delete/__init__.py +0 -0
- cli/commands/knowledge/documents/delete/command.py +47 -0
- cli/commands/knowledge/documents/delete/presenter.py +20 -0
- cli/commands/knowledge/documents/get/__init__.py +0 -0
- cli/commands/knowledge/documents/get/command.py +39 -0
- cli/commands/knowledge/documents/get/presenter.py +78 -0
- cli/commands/knowledge/documents/ingest/__init__.py +0 -0
- cli/commands/knowledge/documents/ingest/command.py +222 -0
- cli/commands/knowledge/documents/ingest/presenter.py +41 -0
- cli/commands/knowledge/documents/list/__init__.py +0 -0
- cli/commands/knowledge/documents/list/command.py +69 -0
- cli/commands/knowledge/documents/list/presenter.py +86 -0
- cli/commands/knowledge/documents/reingest/__init__.py +0 -0
- cli/commands/knowledge/documents/reingest/command.py +102 -0
- cli/commands/knowledge/documents/reingest/presenter.py +70 -0
- cli/commands/knowledge/documents/update/__init__.py +0 -0
- cli/commands/knowledge/documents/update/command.py +85 -0
- cli/commands/knowledge/documents/update/presenter.py +37 -0
- cli/commands/knowledge/recover/__init__.py +0 -0
- cli/commands/knowledge/recover/command.py +46 -0
- cli/commands/knowledge/recover/presenter.py +79 -0
- cli/commands/knowledge/search/__init__.py +0 -0
- cli/commands/knowledge/search/command.py +218 -0
- cli/commands/knowledge/search/presenter.py +111 -0
- cli/commands/knowledge/synthesis/__init__.py +0 -0
- cli/commands/knowledge/synthesis/create/__init__.py +0 -0
- cli/commands/knowledge/synthesis/create/command.py +127 -0
- cli/commands/knowledge/synthesis/create/presenter.py +33 -0
- cli/commands/knowledge/synthesis/delete/__init__.py +0 -0
- cli/commands/knowledge/synthesis/delete/command.py +53 -0
- cli/commands/knowledge/synthesis/delete/presenter.py +31 -0
- cli/commands/knowledge/synthesis/get/__init__.py +0 -0
- cli/commands/knowledge/synthesis/get/command.py +55 -0
- cli/commands/knowledge/synthesis/get/presenter.py +114 -0
- cli/commands/knowledge/synthesis/list/__init__.py +0 -0
- cli/commands/knowledge/synthesis/list/command.py +132 -0
- cli/commands/knowledge/synthesis/list/presenter.py +84 -0
- cli/commands/knowledge/synthesis/refresh/__init__.py +0 -0
- cli/commands/knowledge/synthesis/refresh/command.py +42 -0
- cli/commands/knowledge/synthesis/refresh/presenter.py +33 -0
- cli/commands/knowledge/synthesis/update/__init__.py +0 -0
- cli/commands/knowledge/synthesis/update/command.py +76 -0
- cli/commands/knowledge/synthesis/update/presenter.py +41 -0
- cli/commands/models/__init__.py +0 -0
- cli/commands/models/list/__init__.py +0 -0
- cli/commands/models/list/command.py +84 -0
- cli/commands/models/list/presenter.py +114 -0
- cli/commands/organizations/__init__.py +0 -0
- cli/commands/organizations/create/command.py +32 -0
- cli/commands/organizations/create/presenter.py +9 -0
- cli/commands/pipelines/__init__.py +1 -0
- cli/commands/pipelines/approvals/__init__.py +1 -0
- cli/commands/pipelines/approvals/decide_command.py +77 -0
- cli/commands/pipelines/approvals/get_command.py +44 -0
- cli/commands/pipelines/approvals/presenter.py +56 -0
- cli/commands/pipelines/costs/__init__.py +1 -0
- cli/commands/pipelines/costs/command.py +57 -0
- cli/commands/pipelines/costs/daily_command.py +54 -0
- cli/commands/pipelines/costs/daily_presenter.py +59 -0
- cli/commands/pipelines/costs/presenter.py +37 -0
- cli/commands/pipelines/create/__init__.py +1 -0
- cli/commands/pipelines/create/command.py +103 -0
- cli/commands/pipelines/create/presenter.py +22 -0
- cli/commands/pipelines/env_vars/__init__.py +1 -0
- cli/commands/pipelines/env_vars/command.py +51 -0
- cli/commands/pipelines/env_vars/presenter.py +16 -0
- cli/commands/pipelines/execute/__init__.py +1 -0
- cli/commands/pipelines/execute/command.py +142 -0
- cli/commands/pipelines/execute/presenter.py +47 -0
- cli/commands/pipelines/executions/__init__.py +1 -0
- cli/commands/pipelines/executions/costs/__init__.py +1 -0
- cli/commands/pipelines/executions/costs/command.py +48 -0
- cli/commands/pipelines/executions/costs/presenter.py +29 -0
- cli/commands/pipelines/executions/costs_by_model/__init__.py +1 -0
- cli/commands/pipelines/executions/costs_by_model/command.py +50 -0
- cli/commands/pipelines/executions/costs_by_model/presenter.py +78 -0
- cli/commands/pipelines/executions/costs_by_step/__init__.py +1 -0
- cli/commands/pipelines/executions/costs_by_step/command.py +50 -0
- cli/commands/pipelines/executions/costs_by_step/presenter.py +72 -0
- cli/commands/pipelines/executions/get_command.py +38 -0
- cli/commands/pipelines/executions/list_command.py +123 -0
- cli/commands/pipelines/executions/presenter.py +131 -0
- cli/commands/pipelines/executions/rerun_command.py +41 -0
- cli/commands/pipelines/executions/update/__init__.py +1 -0
- cli/commands/pipelines/executions/update/command.py +110 -0
- cli/commands/pipelines/executions/update/presenter.py +28 -0
- cli/commands/pipelines/get/__init__.py +1 -0
- cli/commands/pipelines/get/command.py +33 -0
- cli/commands/pipelines/get/presenter.py +48 -0
- cli/commands/pipelines/list/__init__.py +1 -0
- cli/commands/pipelines/list/command.py +53 -0
- cli/commands/pipelines/list/presenter.py +66 -0
- cli/commands/pipelines/schedules/__init__.py +1 -0
- cli/commands/pipelines/schedules/create_command.py +119 -0
- cli/commands/pipelines/schedules/create_presenter.py +35 -0
- cli/commands/pipelines/schedules/delete_command.py +52 -0
- cli/commands/pipelines/schedules/env_vars_command.py +59 -0
- cli/commands/pipelines/schedules/env_vars_presenter.py +16 -0
- cli/commands/pipelines/schedules/get_command.py +38 -0
- cli/commands/pipelines/schedules/list_command.py +33 -0
- cli/commands/pipelines/schedules/once_command.py +90 -0
- cli/commands/pipelines/schedules/once_presenter.py +30 -0
- cli/commands/pipelines/schedules/presenter.py +104 -0
- cli/commands/pipelines/schedules/update_command.py +139 -0
- cli/commands/pipelines/schedules/update_presenter.py +29 -0
- cli/commands/render/__init__.py +0 -0
- cli/commands/render/html_to_image/__init__.py +0 -0
- cli/commands/render/html_to_image/command.py +170 -0
- cli/commands/schemas/__init__.py +0 -0
- cli/commands/schemas/create/__init__.py +0 -0
- cli/commands/schemas/create/command.py +122 -0
- cli/commands/schemas/create/presenter.py +53 -0
- cli/commands/schemas/delete/command.py +45 -0
- cli/commands/schemas/delete/presenter.py +9 -0
- cli/commands/schemas/get/__init__.py +0 -0
- cli/commands/schemas/get/command.py +56 -0
- cli/commands/schemas/get/presenter.py +129 -0
- cli/commands/schemas/list/__init__.py +0 -0
- cli/commands/schemas/list/command.py +64 -0
- cli/commands/schemas/list/presenter.py +133 -0
- cli/commands/schemas/update/__init__.py +0 -0
- cli/commands/schemas/update/command.py +369 -0
- cli/commands/schemas/update/presenter.py +53 -0
- cli/commands/sessions/__init__.py +1 -0
- cli/commands/sessions/delete/__init__.py +1 -0
- cli/commands/sessions/delete/command.py +47 -0
- cli/commands/sessions/delete/presenter.py +10 -0
- cli/commands/sessions/get/__init__.py +1 -0
- cli/commands/sessions/get/command.py +42 -0
- cli/commands/sessions/get/presenter.py +59 -0
- cli/commands/sessions/list/__init__.py +1 -0
- cli/commands/sessions/list/command.py +61 -0
- cli/commands/sessions/list/presenter.py +68 -0
- cli/commands/sessions/messages/__init__.py +1 -0
- cli/commands/sessions/messages/command.py +78 -0
- cli/commands/sessions/messages/presenter.py +79 -0
- cli/commands/shared_flags.py +500 -0
- cli/commands/sync/__init__.py +0 -0
- cli/commands/sync/command.py +45 -0
- cli/commands/sync/presenter.py +49 -0
- cli/commands/tags/__init__.py +1 -0
- cli/commands/tags/create/__init__.py +1 -0
- cli/commands/tags/create/command.py +60 -0
- cli/commands/tags/delete/__init__.py +1 -0
- cli/commands/tags/delete/command.py +47 -0
- cli/commands/tags/delete/presenter.py +10 -0
- cli/commands/tags/get/command.py +31 -0
- cli/commands/tags/get/presenter.py +23 -0
- cli/commands/tags/list/__init__.py +1 -0
- cli/commands/tags/list/command.py +52 -0
- cli/commands/tags/list/presenter.py +49 -0
- cli/commands/tags/update/command.py +64 -0
- cli/commands/tags/update/presenter.py +9 -0
- cli/commands/templates/__init__.py +0 -0
- cli/commands/templates/create/__init__.py +0 -0
- cli/commands/templates/create/command.py +152 -0
- cli/commands/templates/create/presenter.py +86 -0
- cli/commands/templates/delete/__init__.py +0 -0
- cli/commands/templates/delete/command.py +47 -0
- cli/commands/templates/delete/presenter.py +16 -0
- cli/commands/templates/get/__init__.py +0 -0
- cli/commands/templates/get/command.py +52 -0
- cli/commands/templates/get/presenter.py +233 -0
- cli/commands/templates/get_by_version/command.py +32 -0
- cli/commands/templates/get_by_version/presenter.py +30 -0
- cli/commands/templates/list/__init__.py +1 -0
- cli/commands/templates/list/command.py +102 -0
- cli/commands/templates/list/presenter.py +93 -0
- cli/commands/templates/render/__init__.py +0 -0
- cli/commands/templates/render/command.py +115 -0
- cli/commands/templates/render/presenter.py +276 -0
- cli/commands/templates/update/__init__.py +0 -0
- cli/commands/templates/update/command.py +199 -0
- cli/commands/templates/update/presenter.py +94 -0
- cli/commands/templates/version/__init__.py +1 -0
- cli/commands/templates/version/command.py +116 -0
- cli/commands/templates/version/presenter.py +100 -0
- cli/commands/tool_configs/__init__.py +0 -0
- cli/commands/tool_configs/create/__init__.py +0 -0
- cli/commands/tool_configs/create/command.py +118 -0
- cli/commands/tool_configs/create/presenter.py +53 -0
- cli/commands/tool_configs/delete/__init__.py +0 -0
- cli/commands/tool_configs/delete/command.py +47 -0
- cli/commands/tool_configs/delete/presenter.py +18 -0
- cli/commands/tool_configs/get/__init__.py +0 -0
- cli/commands/tool_configs/get/command.py +31 -0
- cli/commands/tool_configs/get/presenter.py +62 -0
- cli/commands/tool_configs/list/__init__.py +0 -0
- cli/commands/tool_configs/list/command.py +59 -0
- cli/commands/tool_configs/list/presenter.py +60 -0
- cli/commands/tool_configs/update/__init__.py +0 -0
- cli/commands/tool_configs/update/command.py +128 -0
- cli/commands/tool_configs/update/presenter.py +53 -0
- cli/commands/tools/__init__.py +1 -0
- cli/commands/tools/get/__init__.py +1 -0
- cli/commands/tools/get/command.py +42 -0
- cli/commands/tools/get/presenter.py +45 -0
- cli/commands/tools/list/__init__.py +1 -0
- cli/commands/tools/list/command.py +56 -0
- cli/commands/tools/list/presenter.py +44 -0
- cli/commands/users/__init__.py +0 -0
- cli/commands/users/create/command.py +53 -0
- cli/commands/users/create/presenter.py +9 -0
- cli/commands/whoami/__init__.py +0 -0
- cli/commands/whoami/command.py +42 -0
- cli/infrastructure/__init__.py +0 -0
- cli/infrastructure/auth_storage.py +71 -0
- cli/infrastructure/client_factory.py +36 -0
- cli/infrastructure/command.py +75 -0
- cli/infrastructure/config.py +188 -0
- cli/infrastructure/console.py +27 -0
- cli/infrastructure/editor.py +138 -0
- cli/infrastructure/error_display.py +178 -0
- cli/infrastructure/field_extractor.py +360 -0
- cli/infrastructure/file_content.py +210 -0
- cli/infrastructure/filter_parser.py +256 -0
- cli/infrastructure/formatters/__init__.py +0 -0
- cli/infrastructure/formatters/base.py +99 -0
- cli/infrastructure/formatters/compact_formatter.py +245 -0
- cli/infrastructure/formatters/json_formatter.py +84 -0
- cli/infrastructure/formatters/lines_formatter.py +102 -0
- cli/infrastructure/formatting/__init__.py +0 -0
- cli/infrastructure/formatting/fields.py +193 -0
- cli/infrastructure/forms/__init__.py +0 -0
- cli/infrastructure/forms/agent_picker.py +123 -0
- cli/infrastructure/forms/agent_tool_editor.py +384 -0
- cli/infrastructure/forms/agent_tools_manager.py +212 -0
- cli/infrastructure/forms/base_picker.py +469 -0
- cli/infrastructure/forms/components.py +126 -0
- cli/infrastructure/forms/json_schema_builder.py +149 -0
- cli/infrastructure/forms/model_picker.py +134 -0
- cli/infrastructure/forms/parsers.py +173 -0
- cli/infrastructure/forms/resolution_modal.py +302 -0
- cli/infrastructure/forms/schema_picker.py +137 -0
- cli/infrastructure/forms/tag_management_modal.py +103 -0
- cli/infrastructure/forms/tag_picker.py +207 -0
- cli/infrastructure/forms/template_picker.py +131 -0
- cli/infrastructure/forms/tool_config_picker.py +130 -0
- cli/infrastructure/forms/tool_picker.py +103 -0
- cli/infrastructure/injection/__init__.py +0 -0
- cli/infrastructure/injection/parser.py +302 -0
- cli/infrastructure/injection/resolver.py +399 -0
- cli/infrastructure/kv_parser.py +130 -0
- cli/infrastructure/local_storage.py +227 -0
- cli/infrastructure/macro_parser.py +215 -0
- cli/infrastructure/output.py +192 -0
- cli/infrastructure/provider_setup.py +81 -0
- cli/infrastructure/renderers/__init__.py +0 -0
- cli/infrastructure/renderers/entity_renderer.py +77 -0
- cli/infrastructure/renderers/list_renderer.py +114 -0
- cli/infrastructure/scope_utils.py +47 -0
- cli/infrastructure/spinner.py +101 -0
- cli/infrastructure/tui/__init__.py +0 -0
- cli/infrastructure/tui/clipboard.py +41 -0
- cli/infrastructure/tui/formatters.py +105 -0
- cli/infrastructure/tui/preview.py +14 -0
- cli/infrastructure/tui/selectable.py +198 -0
- cli/infrastructure/validation/__init__.py +0 -0
- cli/infrastructure/validation/tag_validation.py +74 -0
- cli/main.py +759 -0
- cli/tui/__init__.py +0 -0
- cli/tui/app.py +199 -0
- cli/tui/app_store.py +73 -0
- cli/tui/chat/__init__.py +0 -0
- cli/tui/chat/commands/__init__.py +0 -0
- cli/tui/chat/commands/base.py +65 -0
- cli/tui/chat/commands/create_session.py +135 -0
- cli/tui/chat/commands/load_session.py +119 -0
- cli/tui/chat/commands/regenerate.py +120 -0
- cli/tui/chat/commands/reload_session.py +63 -0
- cli/tui/chat/commands/send_message.py +190 -0
- cli/tui/chat/commands/undo.py +66 -0
- cli/tui/chat/editor.py +71 -0
- cli/tui/chat/messages.py +223 -0
- cli/tui/chat/pane.py +141 -0
- cli/tui/chat/renderers/__init__.py +0 -0
- cli/tui/chat/renderers/base.py +72 -0
- cli/tui/chat/renderers/markdown.py +250 -0
- cli/tui/chat/renderers/plain.py +83 -0
- cli/tui/chat/screen.py +1155 -0
- cli/tui/chat/services/__init__.py +0 -0
- cli/tui/chat/services/injection.py +386 -0
- cli/tui/chat/services/name_generator.py +256 -0
- cli/tui/chat/slash_commands.py +424 -0
- cli/tui/chat/store.py +280 -0
- cli/tui/chat/types.py +220 -0
- cli/tui/chat/widgets/__init__.py +0 -0
- cli/tui/chat/widgets/chat_header.py +75 -0
- cli/tui/chat/widgets/chat_input.py +362 -0
- cli/tui/chat/widgets/injection_popup.py +161 -0
- cli/tui/chat/widgets/message_display.py +287 -0
- cli/tui/chat/widgets/session_sidebar.py +214 -0
- cli/tui/chat/widgets/welcome_screen.py +290 -0
- cli/tui/screens/__init__.py +0 -0
- cli/tui/screens/agents.py +344 -0
- cli/tui/screens/base.py +301 -0
- cli/tui/screens/content.py +508 -0
- cli/tui/screens/dashboard.py +89 -0
- cli/tui/screens/models.py +96 -0
- cli/tui/screens/nav_screen.py +186 -0
- cli/tui/screens/schemas.py +522 -0
- cli/tui/screens/templates.py +734 -0
- cli/tui/screens/tool_configs.py +335 -0
- cli/tui/styles/__init__.py +0 -0
- cli/tui/widgets/__init__.py +0 -0
- cli/tui/widgets/agent_create_modal.py +139 -0
- cli/tui/widgets/agent_form_modal.py +659 -0
- cli/tui/widgets/agent_update_modal.py +299 -0
- cli/tui/widgets/base_form_modal.py +77 -0
- cli/tui/widgets/confirm_modal.py +75 -0
- cli/tui/widgets/help_modal.py +145 -0
- cli/tui/widgets/new_session_modal.py +328 -0
- cli/tui/widgets/schema_create_modal.py +271 -0
- cli/tui/widgets/schema_update_modal.py +188 -0
- cli/tui/widgets/status_footer.py +147 -0
- cli/tui/widgets/template_create_modal.py +502 -0
- cli/tui/widgets/template_update_modal.py +308 -0
- cli/tui/widgets/tool_config_create_modal.py +216 -0
- cli/tui/widgets/tool_config_update_modal.py +208 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""Presenter for template version creation output."""
|
|
2
|
+
|
|
3
|
+
from rich.panel import Panel
|
|
4
|
+
from rich.table import Table
|
|
5
|
+
from rich.text import Text
|
|
6
|
+
|
|
7
|
+
from cli.infrastructure.formatting.fields import (
|
|
8
|
+
format_datetime,
|
|
9
|
+
format_optional,
|
|
10
|
+
format_uuid,
|
|
11
|
+
)
|
|
12
|
+
from cli.infrastructure.output import OutputService
|
|
13
|
+
from alloy_runtime_types.dtos.templates import CreateTemplateVersionResponse
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def present_version_create_success(response: CreateTemplateVersionResponse) -> None:
|
|
17
|
+
"""Present successful template version creation.
|
|
18
|
+
|
|
19
|
+
Args:
|
|
20
|
+
response: Template version creation response from server
|
|
21
|
+
"""
|
|
22
|
+
output = OutputService.get()
|
|
23
|
+
|
|
24
|
+
template = response.template
|
|
25
|
+
version = response.version
|
|
26
|
+
dependencies = response.dependencies
|
|
27
|
+
|
|
28
|
+
output.success(f"Template version {version.version} created successfully")
|
|
29
|
+
|
|
30
|
+
# Build a table for template display
|
|
31
|
+
table = Table(show_header=False, box=None, padding=(0, 1))
|
|
32
|
+
table.add_column("Field", style="dim")
|
|
33
|
+
table.add_column("Value")
|
|
34
|
+
|
|
35
|
+
# Template info
|
|
36
|
+
table.add_row("Template ID", format_uuid(template.id, short=False))
|
|
37
|
+
table.add_row("Name", template.name)
|
|
38
|
+
table.add_row("Content Type", template.content_type_id)
|
|
39
|
+
table.add_row("Visibility", template.visibility_id)
|
|
40
|
+
table.add_row("Description", format_optional(template.description))
|
|
41
|
+
|
|
42
|
+
# Version info
|
|
43
|
+
table.add_row("", "") # Spacer
|
|
44
|
+
table.add_row("New Version", str(version.version))
|
|
45
|
+
table.add_row("Version ID", format_uuid(version.id, short=True))
|
|
46
|
+
table.add_row("Is Latest", "Yes" if version.is_latest else "No")
|
|
47
|
+
table.add_row("Content Length", f"{len(version.content)} chars")
|
|
48
|
+
|
|
49
|
+
# Required variables
|
|
50
|
+
if version.required_variables:
|
|
51
|
+
vars_str = ", ".join(version.required_variables)
|
|
52
|
+
table.add_row("Required Variables", vars_str)
|
|
53
|
+
else:
|
|
54
|
+
table.add_row("Required Variables", "(none)")
|
|
55
|
+
|
|
56
|
+
# Tags
|
|
57
|
+
if template.tags:
|
|
58
|
+
tag_str = ", ".join(t.tag_path for t in template.tags)
|
|
59
|
+
table.add_row("Tags", tag_str)
|
|
60
|
+
else:
|
|
61
|
+
table.add_row("Tags", "(none)")
|
|
62
|
+
|
|
63
|
+
# Dependencies
|
|
64
|
+
if dependencies:
|
|
65
|
+
dep_str = ", ".join(d.child_template_name for d in dependencies)
|
|
66
|
+
table.add_row("Dependencies", dep_str)
|
|
67
|
+
else:
|
|
68
|
+
table.add_row("Dependencies", "(none)")
|
|
69
|
+
|
|
70
|
+
# Ownership
|
|
71
|
+
table.add_row("", "") # Spacer
|
|
72
|
+
table.add_row(
|
|
73
|
+
"Organization ID",
|
|
74
|
+
format_optional(template.organization_id, lambda x: format_uuid(x, short=True)),
|
|
75
|
+
)
|
|
76
|
+
table.add_row(
|
|
77
|
+
"User ID",
|
|
78
|
+
format_optional(template.user_id, lambda x: format_uuid(x, short=True)),
|
|
79
|
+
)
|
|
80
|
+
table.add_row("Version Created At", format_datetime(version.created_at))
|
|
81
|
+
|
|
82
|
+
panel = Panel(
|
|
83
|
+
table,
|
|
84
|
+
title=f"Template Version: {template.name} v{version.version}",
|
|
85
|
+
border_style="green",
|
|
86
|
+
)
|
|
87
|
+
output.console.print(panel)
|
|
88
|
+
|
|
89
|
+
# Show content preview
|
|
90
|
+
if version.content:
|
|
91
|
+
content_preview = version.content
|
|
92
|
+
if len(content_preview) > 500:
|
|
93
|
+
content_preview = content_preview[:500] + "\n... (truncated)"
|
|
94
|
+
|
|
95
|
+
content_panel = Panel(
|
|
96
|
+
Text(content_preview, style="dim"),
|
|
97
|
+
title="Content Preview",
|
|
98
|
+
border_style="blue",
|
|
99
|
+
)
|
|
100
|
+
output.console.print(content_panel)
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""Tool config create command implementation."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
from typing import Any, Optional, cast
|
|
5
|
+
|
|
6
|
+
import typer
|
|
7
|
+
|
|
8
|
+
from cli.commands.flag_utils import validate_scope
|
|
9
|
+
from cli.commands.tool_configs.create.presenter import (
|
|
10
|
+
present_tool_config_create_success,
|
|
11
|
+
)
|
|
12
|
+
from cli.infrastructure.command import async_command, authenticated_client
|
|
13
|
+
from cli.infrastructure.file_content import FileContentError, resolve_content
|
|
14
|
+
from alloy_runtime_types.dtos.tool_configs import CreateToolConfigRequest
|
|
15
|
+
from alloy_runtime_types.enums.ownership_scope import OwnershipScope
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def tool_configs_create_command(
|
|
19
|
+
name: str = typer.Option(
|
|
20
|
+
...,
|
|
21
|
+
"-n",
|
|
22
|
+
"--name",
|
|
23
|
+
help="Human-readable name for this tool config",
|
|
24
|
+
),
|
|
25
|
+
tool_id: str = typer.Option(
|
|
26
|
+
...,
|
|
27
|
+
"--tool-id",
|
|
28
|
+
help="Tool implementation ID (e.g., 'rag_search', 'web_search')",
|
|
29
|
+
),
|
|
30
|
+
config: str = typer.Option(
|
|
31
|
+
...,
|
|
32
|
+
"-c",
|
|
33
|
+
"--config",
|
|
34
|
+
help="Tool configuration as JSON (or @file.json to read from file)",
|
|
35
|
+
),
|
|
36
|
+
description: Optional[str] = typer.Option(
|
|
37
|
+
None,
|
|
38
|
+
"-d",
|
|
39
|
+
"--description",
|
|
40
|
+
help="Optional description of what this config is for",
|
|
41
|
+
),
|
|
42
|
+
scope: Optional[str] = typer.Option(
|
|
43
|
+
None,
|
|
44
|
+
"--scope",
|
|
45
|
+
help="Scope: user (default), organization, global",
|
|
46
|
+
),
|
|
47
|
+
) -> None:
|
|
48
|
+
"""Create a reusable tool configuration.
|
|
49
|
+
|
|
50
|
+
Tool configs store validated configurations that can be referenced by multiple
|
|
51
|
+
agents, eliminating duplication.
|
|
52
|
+
|
|
53
|
+
Examples:
|
|
54
|
+
ai tool-configs create -n "RAG with HyDE" --tool-id rag_search -c '{"top_k": 10}'
|
|
55
|
+
ai tool-configs create -n "Web Search" --tool-id web_search -c @config.json
|
|
56
|
+
ai tc create -n "Search" --tool-id rag_search -c '{}' --scope organization
|
|
57
|
+
"""
|
|
58
|
+
_execute_create_from_flags(
|
|
59
|
+
name=name,
|
|
60
|
+
tool_id=tool_id,
|
|
61
|
+
config=config,
|
|
62
|
+
description=description,
|
|
63
|
+
scope=scope,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@async_command
|
|
68
|
+
async def _execute_create(request: CreateToolConfigRequest) -> None:
|
|
69
|
+
"""Execute the tool config creation with the given request."""
|
|
70
|
+
async with authenticated_client() as (_config, client):
|
|
71
|
+
response = await client.create_tool_config(request)
|
|
72
|
+
|
|
73
|
+
present_tool_config_create_success(response)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _execute_create_from_flags(
|
|
77
|
+
name: str,
|
|
78
|
+
tool_id: str,
|
|
79
|
+
config: str,
|
|
80
|
+
description: Optional[str],
|
|
81
|
+
scope: Optional[str],
|
|
82
|
+
) -> None:
|
|
83
|
+
"""Build and execute tool config creation from command flags."""
|
|
84
|
+
# Resolve @file reference for config
|
|
85
|
+
try:
|
|
86
|
+
config_content = resolve_content(config)
|
|
87
|
+
except FileContentError as e:
|
|
88
|
+
raise typer.BadParameter(str(e))
|
|
89
|
+
|
|
90
|
+
if not config_content:
|
|
91
|
+
raise typer.BadParameter("Config cannot be empty")
|
|
92
|
+
|
|
93
|
+
# Parse config as JSON
|
|
94
|
+
try:
|
|
95
|
+
config_dict_raw = json.loads(config_content)
|
|
96
|
+
except json.JSONDecodeError as e:
|
|
97
|
+
raise typer.BadParameter(f"Invalid JSON in config: {e}")
|
|
98
|
+
|
|
99
|
+
if not isinstance(config_dict_raw, dict):
|
|
100
|
+
raise typer.BadParameter("Config must be a JSON object")
|
|
101
|
+
|
|
102
|
+
config_dict = cast(dict[str, Any], config_dict_raw)
|
|
103
|
+
|
|
104
|
+
# Parse scope
|
|
105
|
+
ownership_scope = OwnershipScope.USER
|
|
106
|
+
if scope:
|
|
107
|
+
ownership_scope = validate_scope(scope)
|
|
108
|
+
|
|
109
|
+
# Build request
|
|
110
|
+
request = CreateToolConfigRequest(
|
|
111
|
+
name=name,
|
|
112
|
+
tool_id=tool_id,
|
|
113
|
+
config=config_dict,
|
|
114
|
+
description=description,
|
|
115
|
+
scope=ownership_scope,
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
_execute_create(request)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"""Presenter for tool config creation output."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
from rich.panel import Panel
|
|
6
|
+
from rich.syntax import Syntax
|
|
7
|
+
from rich.table import Table
|
|
8
|
+
|
|
9
|
+
from cli.infrastructure.formatting.fields import (
|
|
10
|
+
format_optional,
|
|
11
|
+
format_uuid,
|
|
12
|
+
)
|
|
13
|
+
from cli.infrastructure.output import OutputService
|
|
14
|
+
from alloy_runtime_types.dtos.tool_configs import CreateToolConfigResponse
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def present_tool_config_create_success(response: CreateToolConfigResponse) -> None:
|
|
18
|
+
"""Present successful tool config creation.
|
|
19
|
+
|
|
20
|
+
Args:
|
|
21
|
+
response: Tool config creation response from server
|
|
22
|
+
"""
|
|
23
|
+
output = OutputService.get()
|
|
24
|
+
|
|
25
|
+
output.success("Tool config created successfully")
|
|
26
|
+
|
|
27
|
+
# Build a simple table for entity display
|
|
28
|
+
table = Table(show_header=False, box=None, padding=(0, 1))
|
|
29
|
+
table.add_column("Field", style="dim")
|
|
30
|
+
table.add_column("Value")
|
|
31
|
+
|
|
32
|
+
table.add_row("ID", format_uuid(response.id, short=False))
|
|
33
|
+
table.add_row("Slug", response.slug)
|
|
34
|
+
table.add_row("Name", response.name)
|
|
35
|
+
table.add_row("Tool ID", response.tool_id)
|
|
36
|
+
table.add_row("Description", format_optional(response.description))
|
|
37
|
+
|
|
38
|
+
# Format ownership
|
|
39
|
+
if response.user_id:
|
|
40
|
+
table.add_row("Scope", "User")
|
|
41
|
+
elif response.organization_id:
|
|
42
|
+
table.add_row("Scope", "Organization")
|
|
43
|
+
else:
|
|
44
|
+
table.add_row("Scope", "Global")
|
|
45
|
+
|
|
46
|
+
panel = Panel(table, title=f"Tool Config: {response.name}", border_style="green")
|
|
47
|
+
output.console.print(panel)
|
|
48
|
+
|
|
49
|
+
# Display config as syntax-highlighted JSON
|
|
50
|
+
config_json = json.dumps(response.config, indent=2)
|
|
51
|
+
syntax = Syntax(config_json, "json", theme="monokai", word_wrap=True)
|
|
52
|
+
config_panel = Panel(syntax, title="Configuration", border_style="blue")
|
|
53
|
+
output.console.print(config_panel)
|
|
File without changes
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Tool config delete command implementation."""
|
|
2
|
+
|
|
3
|
+
import typer
|
|
4
|
+
|
|
5
|
+
from cli.commands.tool_configs.delete.presenter import present_tool_config_delete_result
|
|
6
|
+
from cli.infrastructure.command import async_command, authenticated_client
|
|
7
|
+
from cli.infrastructure.console import Confirm
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def tool_configs_delete_command(
|
|
11
|
+
identifier: str = typer.Argument(
|
|
12
|
+
...,
|
|
13
|
+
help="Tool config UUID or slug",
|
|
14
|
+
),
|
|
15
|
+
yes: bool = typer.Option(
|
|
16
|
+
False,
|
|
17
|
+
"-y",
|
|
18
|
+
"--yes",
|
|
19
|
+
help="Skip confirmation",
|
|
20
|
+
),
|
|
21
|
+
) -> None:
|
|
22
|
+
"""Delete a tool config.
|
|
23
|
+
|
|
24
|
+
Deletion fails if the tool config is currently referenced by any agent.
|
|
25
|
+
|
|
26
|
+
Examples:
|
|
27
|
+
ai tool-configs delete my-config
|
|
28
|
+
ai tool-configs delete 550e8400-e29b-41d4-a716-446655440000 -y
|
|
29
|
+
ai tc delete my-config -y
|
|
30
|
+
"""
|
|
31
|
+
_execute_delete(identifier=identifier, skip_confirm=yes)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@async_command
|
|
35
|
+
async def _execute_delete(identifier: str, skip_confirm: bool) -> None:
|
|
36
|
+
"""Execute delete tool config operation."""
|
|
37
|
+
if not skip_confirm:
|
|
38
|
+
confirmed = Confirm.ask(
|
|
39
|
+
f"[yellow]Delete tool config '{identifier}'?[/yellow] This cannot be undone"
|
|
40
|
+
)
|
|
41
|
+
if not confirmed:
|
|
42
|
+
raise typer.Abort()
|
|
43
|
+
|
|
44
|
+
async with authenticated_client() as (_config, client):
|
|
45
|
+
response = await client.delete_tool_config(identifier)
|
|
46
|
+
|
|
47
|
+
present_tool_config_delete_result(response)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"""Presenter for tool config delete command output."""
|
|
2
|
+
|
|
3
|
+
from cli.infrastructure.output import OutputService
|
|
4
|
+
from alloy_runtime_types.dtos.tool_configs import DeleteToolConfigResponse
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def present_tool_config_delete_result(response: DeleteToolConfigResponse) -> None:
|
|
8
|
+
"""Present tool config deletion result.
|
|
9
|
+
|
|
10
|
+
Args:
|
|
11
|
+
response: DeleteToolConfigResponse from server
|
|
12
|
+
"""
|
|
13
|
+
output = OutputService.get()
|
|
14
|
+
|
|
15
|
+
output.success(
|
|
16
|
+
f"Tool config '{response.deleted_tool_config.name}' "
|
|
17
|
+
f"(slug: {response.deleted_tool_config.slug}) deleted successfully"
|
|
18
|
+
)
|
|
File without changes
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""Tool config get command implementation."""
|
|
2
|
+
|
|
3
|
+
import typer
|
|
4
|
+
|
|
5
|
+
from cli.commands.tool_configs.get.presenter import present_tool_config_details
|
|
6
|
+
from cli.infrastructure.command import async_command, authenticated_client
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def tool_configs_get_command(
|
|
10
|
+
identifier: str = typer.Argument(
|
|
11
|
+
...,
|
|
12
|
+
help="Tool config UUID or slug",
|
|
13
|
+
),
|
|
14
|
+
) -> None:
|
|
15
|
+
"""Get tool config details.
|
|
16
|
+
|
|
17
|
+
Examples:
|
|
18
|
+
ai tool-configs get rag-with-hyde
|
|
19
|
+
ai tool-configs get 550e8400-e29b-41d4-a716-446655440000
|
|
20
|
+
ai tc get my-search-config
|
|
21
|
+
"""
|
|
22
|
+
_execute_get(identifier=identifier)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@async_command
|
|
26
|
+
async def _execute_get(identifier: str) -> None:
|
|
27
|
+
"""Execute get tool config operation."""
|
|
28
|
+
async with authenticated_client() as (_config, client):
|
|
29
|
+
response = await client.get_tool_config(identifier)
|
|
30
|
+
|
|
31
|
+
present_tool_config_details(response)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""Presenter for tool config get command output."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
from rich.panel import Panel
|
|
6
|
+
from rich.syntax import Syntax
|
|
7
|
+
from rich.table import Table
|
|
8
|
+
|
|
9
|
+
from cli.infrastructure.formatting.fields import (
|
|
10
|
+
format_datetime,
|
|
11
|
+
format_optional,
|
|
12
|
+
format_uuid,
|
|
13
|
+
)
|
|
14
|
+
from cli.infrastructure.output import OutputService
|
|
15
|
+
from alloy_runtime_types.dtos.tool_configs import GetToolConfigResponse
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def present_tool_config_details(response: GetToolConfigResponse) -> None:
|
|
19
|
+
"""Present tool config details with Rich formatting.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
response: GetToolConfigResponse from server
|
|
23
|
+
"""
|
|
24
|
+
output = OutputService.get()
|
|
25
|
+
|
|
26
|
+
table = Table(show_header=False, box=None, padding=(0, 1))
|
|
27
|
+
table.add_column("Field", style="dim")
|
|
28
|
+
table.add_column("Value")
|
|
29
|
+
|
|
30
|
+
table.add_row("ID", format_uuid(response.id, short=False))
|
|
31
|
+
table.add_row("Slug", response.slug)
|
|
32
|
+
table.add_row("Name", response.name)
|
|
33
|
+
table.add_row("Tool ID", response.tool_id)
|
|
34
|
+
table.add_row("Description", format_optional(response.description))
|
|
35
|
+
|
|
36
|
+
# Format ownership
|
|
37
|
+
if response.user_id:
|
|
38
|
+
table.add_row("Scope", "User")
|
|
39
|
+
table.add_row("User ID", format_uuid(response.user_id, short=True))
|
|
40
|
+
elif response.organization_id:
|
|
41
|
+
table.add_row("Scope", "Organization")
|
|
42
|
+
table.add_row(
|
|
43
|
+
"Organization ID", format_uuid(response.organization_id, short=True)
|
|
44
|
+
)
|
|
45
|
+
else:
|
|
46
|
+
table.add_row("Scope", "Global")
|
|
47
|
+
|
|
48
|
+
table.add_row("Created At", format_datetime(response.created_at))
|
|
49
|
+
table.add_row("Updated At", format_datetime(response.updated_at))
|
|
50
|
+
|
|
51
|
+
panel = Panel(
|
|
52
|
+
table,
|
|
53
|
+
title=f"Tool Config: {response.name}",
|
|
54
|
+
border_style="green",
|
|
55
|
+
)
|
|
56
|
+
output.console.print(panel)
|
|
57
|
+
|
|
58
|
+
# Display config as syntax-highlighted JSON
|
|
59
|
+
config_json = json.dumps(response.config, indent=2)
|
|
60
|
+
syntax = Syntax(config_json, "json", theme="monokai", word_wrap=True)
|
|
61
|
+
config_panel = Panel(syntax, title="Configuration", border_style="blue")
|
|
62
|
+
output.console.print(config_panel)
|
|
File without changes
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""Tool configs list command implementation."""
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from cli.commands.tool_configs.list.presenter import present_tool_configs_list
|
|
8
|
+
from cli.infrastructure.command import async_command, authenticated_client
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def tool_configs_list_command(
|
|
12
|
+
search: Optional[str] = typer.Option(
|
|
13
|
+
None,
|
|
14
|
+
"-s",
|
|
15
|
+
"--search",
|
|
16
|
+
help="Fuzzy search by name or description",
|
|
17
|
+
),
|
|
18
|
+
limit: int = typer.Option(
|
|
19
|
+
50,
|
|
20
|
+
"-l",
|
|
21
|
+
"--limit",
|
|
22
|
+
min=1,
|
|
23
|
+
max=100,
|
|
24
|
+
help="Max results",
|
|
25
|
+
),
|
|
26
|
+
offset: int = typer.Option(
|
|
27
|
+
0,
|
|
28
|
+
"--offset",
|
|
29
|
+
min=0,
|
|
30
|
+
help="Skip N results",
|
|
31
|
+
),
|
|
32
|
+
) -> None:
|
|
33
|
+
"""List tool configs accessible to you.
|
|
34
|
+
|
|
35
|
+
Shows tool configs owned by you, your organization, or global configs.
|
|
36
|
+
|
|
37
|
+
Examples:
|
|
38
|
+
ai tool-configs list
|
|
39
|
+
ai tool-configs list -s "rag"
|
|
40
|
+
ai tc list -l 20
|
|
41
|
+
"""
|
|
42
|
+
_execute_list(search=search, limit=limit, offset=offset)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@async_command
|
|
46
|
+
async def _execute_list(
|
|
47
|
+
search: Optional[str],
|
|
48
|
+
limit: int,
|
|
49
|
+
offset: int,
|
|
50
|
+
) -> None:
|
|
51
|
+
"""Execute list tool configs operation."""
|
|
52
|
+
async with authenticated_client() as (_config, client):
|
|
53
|
+
response = await client.list_tool_configs(
|
|
54
|
+
search=search,
|
|
55
|
+
limit=limit,
|
|
56
|
+
offset=offset,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
present_tool_configs_list(response)
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""Presenter for tool configs list command output."""
|
|
2
|
+
|
|
3
|
+
from alloy_runtime_types.dtos.tool_configs import ListToolConfigsResponse
|
|
4
|
+
|
|
5
|
+
from cli.infrastructure.output import OutputService
|
|
6
|
+
from cli.infrastructure.renderers.list_renderer import ColumnConfig
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def present_tool_configs_list(response: ListToolConfigsResponse) -> None:
|
|
10
|
+
"""Present list of tool configs with Rich table formatting.
|
|
11
|
+
|
|
12
|
+
Args:
|
|
13
|
+
response: List tool configs response from server
|
|
14
|
+
"""
|
|
15
|
+
output = OutputService.get()
|
|
16
|
+
|
|
17
|
+
if not response.tool_configs:
|
|
18
|
+
output.info("No tool configs found")
|
|
19
|
+
return
|
|
20
|
+
|
|
21
|
+
columns = [
|
|
22
|
+
ColumnConfig(
|
|
23
|
+
source_field="slug",
|
|
24
|
+
header_label="Slug",
|
|
25
|
+
compact_line=1,
|
|
26
|
+
compact_style="cyan",
|
|
27
|
+
),
|
|
28
|
+
ColumnConfig(
|
|
29
|
+
source_field="tool_id",
|
|
30
|
+
header_label="Tool",
|
|
31
|
+
compact_line=1,
|
|
32
|
+
compact_style="green",
|
|
33
|
+
),
|
|
34
|
+
ColumnConfig(
|
|
35
|
+
source_field="updated_at",
|
|
36
|
+
header_label="Updated",
|
|
37
|
+
formatter=lambda x: x.strftime("%Y-%m-%d") if x else "-",
|
|
38
|
+
compact_line=1,
|
|
39
|
+
compact_style="dim",
|
|
40
|
+
),
|
|
41
|
+
ColumnConfig(
|
|
42
|
+
source_field="name",
|
|
43
|
+
header_label="Name",
|
|
44
|
+
compact_line=2,
|
|
45
|
+
compact_style="white bold",
|
|
46
|
+
),
|
|
47
|
+
ColumnConfig(
|
|
48
|
+
source_field="description",
|
|
49
|
+
header_label="Description",
|
|
50
|
+
formatter=lambda x: x[:60] + "..." if x and len(x) > 60 else (x or "-"),
|
|
51
|
+
compact_line=2,
|
|
52
|
+
compact_style="dim",
|
|
53
|
+
),
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
output.table(
|
|
57
|
+
items=response.tool_configs, # type: ignore[arg-type]
|
|
58
|
+
title=f"Tool Configs ({response.total})",
|
|
59
|
+
columns=columns,
|
|
60
|
+
)
|
|
File without changes
|