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,53 @@
|
|
|
1
|
+
"""Presenter for schema update output."""
|
|
2
|
+
|
|
3
|
+
from cli.infrastructure.formatting.fields import (
|
|
4
|
+
format_datetime,
|
|
5
|
+
format_optional,
|
|
6
|
+
format_uuid,
|
|
7
|
+
)
|
|
8
|
+
from cli.infrastructure.output import OutputService
|
|
9
|
+
from cli.infrastructure.renderers.entity_renderer import FieldConfig
|
|
10
|
+
from alloy_runtime_types.dtos.schemas import UpdateSchemaResponse
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _derive_scope(response: UpdateSchemaResponse) -> str:
|
|
14
|
+
"""Derive scope string from organization_id and user_id fields."""
|
|
15
|
+
if response.organization_id is not None and response.user_id is None:
|
|
16
|
+
return "organization"
|
|
17
|
+
elif response.user_id is not None:
|
|
18
|
+
return "user"
|
|
19
|
+
else:
|
|
20
|
+
return "global"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def present_schema_update_success(response: UpdateSchemaResponse) -> None:
|
|
24
|
+
"""Present successful schema update.
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
response: Schema update response from server
|
|
28
|
+
"""
|
|
29
|
+
output = OutputService.get()
|
|
30
|
+
output.success("Schema updated successfully")
|
|
31
|
+
|
|
32
|
+
fields = [
|
|
33
|
+
FieldConfig("id", "ID", lambda v: format_uuid(v, short=False)),
|
|
34
|
+
FieldConfig("schema_name", "Name"),
|
|
35
|
+
FieldConfig("schema_format_id", "Format"),
|
|
36
|
+
FieldConfig("version", "Version", str),
|
|
37
|
+
FieldConfig("description", "Description", format_optional),
|
|
38
|
+
FieldConfig("scope", "Scope", lambda _: _derive_scope(response)),
|
|
39
|
+
FieldConfig(
|
|
40
|
+
"organization_id",
|
|
41
|
+
"Organization ID",
|
|
42
|
+
lambda v: format_optional(v, lambda x: format_uuid(x, short=True)),
|
|
43
|
+
),
|
|
44
|
+
FieldConfig(
|
|
45
|
+
"user_id",
|
|
46
|
+
"User ID",
|
|
47
|
+
lambda v: format_optional(v, lambda x: format_uuid(x, short=True)),
|
|
48
|
+
),
|
|
49
|
+
FieldConfig("is_latest", "Is Latest", str),
|
|
50
|
+
FieldConfig("created_at", "Created At", format_datetime),
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
output.entity(response, f"Schema: {response.schema_name}", fields)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Empty per project convention - import directly from submodules
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Empty per project convention - import directly from submodules
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"""Session delete command implementation."""
|
|
2
|
+
|
|
3
|
+
from uuid import UUID
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from cli.commands.flag_utils import validate_uuid
|
|
8
|
+
from cli.commands.sessions.delete.presenter import present_delete_result
|
|
9
|
+
from cli.infrastructure.command import async_command, authenticated_client
|
|
10
|
+
from cli.infrastructure.console import Confirm
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def sessions_delete_command(
|
|
14
|
+
session_id: str = typer.Argument(
|
|
15
|
+
...,
|
|
16
|
+
help="Session UUID",
|
|
17
|
+
),
|
|
18
|
+
yes: bool = typer.Option(
|
|
19
|
+
False,
|
|
20
|
+
"-y",
|
|
21
|
+
"--yes",
|
|
22
|
+
help="Skip confirmation",
|
|
23
|
+
),
|
|
24
|
+
) -> None:
|
|
25
|
+
"""Delete a chat session and all its messages.
|
|
26
|
+
|
|
27
|
+
Examples:
|
|
28
|
+
ai sessions delete 123e4567-89ab-cdef-0123-456789abcdef
|
|
29
|
+
ai sessions delete 123e4567-89ab... -y
|
|
30
|
+
"""
|
|
31
|
+
session_uuid = validate_uuid(session_id, "session")
|
|
32
|
+
|
|
33
|
+
if not yes:
|
|
34
|
+
confirmed = Confirm.ask(f"[yellow]Delete session {session_id}?[/yellow]")
|
|
35
|
+
if not confirmed:
|
|
36
|
+
raise typer.Abort()
|
|
37
|
+
|
|
38
|
+
_execute_delete(session_id=session_uuid)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@async_command
|
|
42
|
+
async def _execute_delete(session_id: UUID) -> None:
|
|
43
|
+
"""Execute delete session operation."""
|
|
44
|
+
async with authenticated_client() as (_config, client):
|
|
45
|
+
response = await client.delete_session(session_id)
|
|
46
|
+
|
|
47
|
+
present_delete_result(response)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""Presenter for session delete command output."""
|
|
2
|
+
|
|
3
|
+
from cli.infrastructure.output import OutputService
|
|
4
|
+
from alloy_runtime_types.dtos.sessions import DeleteSessionResponse
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def present_delete_result(response: DeleteSessionResponse) -> None:
|
|
8
|
+
"""Present session deletion result."""
|
|
9
|
+
output = OutputService.get()
|
|
10
|
+
output.success(f"Deleted session {response.deleted_session.id}")
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Empty per project convention - import directly from submodules
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"""Session get command implementation."""
|
|
2
|
+
|
|
3
|
+
from uuid import UUID
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from cli.commands.flag_utils import validate_uuid
|
|
8
|
+
from cli.commands.sessions.get.presenter import present_session
|
|
9
|
+
from cli.infrastructure.command import async_command, authenticated_client
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def sessions_get_command(
|
|
13
|
+
session_id: str = typer.Argument(
|
|
14
|
+
...,
|
|
15
|
+
help="Session UUID",
|
|
16
|
+
),
|
|
17
|
+
limit: int = typer.Option(
|
|
18
|
+
20,
|
|
19
|
+
"-l",
|
|
20
|
+
"--limit",
|
|
21
|
+
min=1,
|
|
22
|
+
max=100,
|
|
23
|
+
help="Max messages to include",
|
|
24
|
+
),
|
|
25
|
+
) -> None:
|
|
26
|
+
"""Get details of a chat session.
|
|
27
|
+
|
|
28
|
+
Examples:
|
|
29
|
+
ai sessions get 123e4567-89ab-cdef-0123-456789abcdef
|
|
30
|
+
ai sessions get 123e4567-89ab... -l 50
|
|
31
|
+
"""
|
|
32
|
+
session_uuid = validate_uuid(session_id, "session")
|
|
33
|
+
_execute_get(session_id=session_uuid, limit=limit)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@async_command
|
|
37
|
+
async def _execute_get(session_id: UUID, limit: int) -> None:
|
|
38
|
+
"""Execute get session operation."""
|
|
39
|
+
async with authenticated_client() as (_config, client):
|
|
40
|
+
response = await client.get_session(session_id, limit=limit)
|
|
41
|
+
|
|
42
|
+
present_session(response)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""Presenter for session get command output."""
|
|
2
|
+
|
|
3
|
+
from rich.panel import Panel
|
|
4
|
+
from rich.table import Table
|
|
5
|
+
|
|
6
|
+
from alloy_runtime_types.dtos.sessions import SessionDetailResponse
|
|
7
|
+
|
|
8
|
+
from cli.infrastructure.output import OutputService
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _truncate(text: str | None, max_len: int = 200) -> str:
|
|
12
|
+
"""Truncate text for display."""
|
|
13
|
+
if not text:
|
|
14
|
+
return "-"
|
|
15
|
+
if len(text) > max_len:
|
|
16
|
+
return text[: max_len - 3] + "..."
|
|
17
|
+
return text
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def present_session(response: SessionDetailResponse) -> None:
|
|
21
|
+
"""Present session details with Rich formatting."""
|
|
22
|
+
output = OutputService.get()
|
|
23
|
+
|
|
24
|
+
# Create session info table
|
|
25
|
+
table = Table(show_header=False, box=None, padding=(0, 2))
|
|
26
|
+
table.add_column("Field", style="cyan")
|
|
27
|
+
table.add_column("Value")
|
|
28
|
+
|
|
29
|
+
table.add_row("ID", str(response.id))
|
|
30
|
+
table.add_row("Name", response.name or "(unnamed)")
|
|
31
|
+
table.add_row("Message Count", str(response.total_messages))
|
|
32
|
+
table.add_row("Created", response.created_at.strftime("%Y-%m-%d %H:%M:%S"))
|
|
33
|
+
|
|
34
|
+
output.console.print(
|
|
35
|
+
Panel(table, title=f"Session: {response.name or str(response.id)}")
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
# Show recent messages if available
|
|
39
|
+
if response.messages:
|
|
40
|
+
output.info(f"\nRecent Messages ({len(response.messages)}):")
|
|
41
|
+
for msg in response.messages:
|
|
42
|
+
role_style = {
|
|
43
|
+
"user": "green",
|
|
44
|
+
"assistant": "blue",
|
|
45
|
+
"system": "yellow",
|
|
46
|
+
"tool": "magenta",
|
|
47
|
+
}.get(msg.role, "white")
|
|
48
|
+
|
|
49
|
+
# Get content preview
|
|
50
|
+
content_preview = "-"
|
|
51
|
+
if msg.content_parts:
|
|
52
|
+
first_part = msg.content_parts[0]
|
|
53
|
+
if first_part.content_text:
|
|
54
|
+
content_preview = _truncate(first_part.content_text, 100)
|
|
55
|
+
|
|
56
|
+
output.console.print(
|
|
57
|
+
f" [{role_style}]{msg.role}[/{role_style}] "
|
|
58
|
+
f"({msg.sequence_number}): {content_preview}"
|
|
59
|
+
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Empty per project convention - import directly from submodules
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""Sessions list command implementation."""
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from cli.commands.sessions.list.presenter import present_sessions_list
|
|
8
|
+
from cli.infrastructure.command import async_command, authenticated_client
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def sessions_list_command(
|
|
12
|
+
search: Optional[str] = typer.Option(
|
|
13
|
+
None,
|
|
14
|
+
"-s",
|
|
15
|
+
"--search",
|
|
16
|
+
help="Fuzzy search terms",
|
|
17
|
+
),
|
|
18
|
+
named_only: bool = typer.Option(
|
|
19
|
+
False,
|
|
20
|
+
"--named-only",
|
|
21
|
+
help="Only show named sessions",
|
|
22
|
+
),
|
|
23
|
+
limit: int = typer.Option(
|
|
24
|
+
50,
|
|
25
|
+
"-l",
|
|
26
|
+
"--limit",
|
|
27
|
+
min=1,
|
|
28
|
+
max=100,
|
|
29
|
+
help="Max results",
|
|
30
|
+
),
|
|
31
|
+
offset: int = typer.Option(
|
|
32
|
+
0,
|
|
33
|
+
"--offset",
|
|
34
|
+
min=0,
|
|
35
|
+
help="Skip N results",
|
|
36
|
+
),
|
|
37
|
+
) -> None:
|
|
38
|
+
"""List chat sessions accessible to you.
|
|
39
|
+
|
|
40
|
+
Examples:
|
|
41
|
+
ai sessions list
|
|
42
|
+
ai sessions list -s "research"
|
|
43
|
+
ai sessions list --named-only
|
|
44
|
+
"""
|
|
45
|
+
_execute_list(search=search, named_only=named_only, limit=limit, offset=offset)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@async_command
|
|
49
|
+
async def _execute_list(
|
|
50
|
+
search: Optional[str], named_only: bool, limit: int, offset: int
|
|
51
|
+
) -> None:
|
|
52
|
+
"""Execute list sessions operation."""
|
|
53
|
+
async with authenticated_client() as (_config, client):
|
|
54
|
+
response = await client.list_sessions(
|
|
55
|
+
search=search,
|
|
56
|
+
named_only=named_only,
|
|
57
|
+
limit=limit,
|
|
58
|
+
offset=offset,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
present_sessions_list(response)
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"""Presenter for sessions list command output."""
|
|
2
|
+
|
|
3
|
+
from alloy_runtime_types.dtos.sessions import ListSessionsResponse
|
|
4
|
+
|
|
5
|
+
from cli.infrastructure.output import OutputService
|
|
6
|
+
from cli.infrastructure.renderers.list_renderer import ColumnConfig
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def _format_name(name: str | None) -> str:
|
|
10
|
+
"""Format session name."""
|
|
11
|
+
if not name:
|
|
12
|
+
return "(unnamed)"
|
|
13
|
+
if len(name) > 50:
|
|
14
|
+
return name[:47] + "..."
|
|
15
|
+
return name
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def present_sessions_list(response: ListSessionsResponse) -> None:
|
|
19
|
+
"""Present list of sessions with Rich table formatting."""
|
|
20
|
+
output = OutputService.get()
|
|
21
|
+
|
|
22
|
+
if not response.sessions:
|
|
23
|
+
output.info("No sessions found")
|
|
24
|
+
return
|
|
25
|
+
|
|
26
|
+
columns = [
|
|
27
|
+
ColumnConfig(
|
|
28
|
+
source_field="id",
|
|
29
|
+
header_label="ID",
|
|
30
|
+
compact_line=1,
|
|
31
|
+
compact_style="cyan",
|
|
32
|
+
),
|
|
33
|
+
ColumnConfig(
|
|
34
|
+
source_field="message_count",
|
|
35
|
+
header_label="Messages",
|
|
36
|
+
align="right",
|
|
37
|
+
formatter=lambda x: f"{x} msgs" if x else "0 msgs",
|
|
38
|
+
compact_line=1,
|
|
39
|
+
compact_style="green",
|
|
40
|
+
),
|
|
41
|
+
ColumnConfig(
|
|
42
|
+
source_field="created_at",
|
|
43
|
+
header_label="Created",
|
|
44
|
+
formatter=lambda x: x.strftime("%Y-%m-%d %H:%M") if x else "-",
|
|
45
|
+
compact_line=1,
|
|
46
|
+
compact_style="blue",
|
|
47
|
+
),
|
|
48
|
+
ColumnConfig(
|
|
49
|
+
source_field="name",
|
|
50
|
+
header_label="Name",
|
|
51
|
+
formatter=_format_name,
|
|
52
|
+
compact_line=2,
|
|
53
|
+
compact_style="white bold",
|
|
54
|
+
),
|
|
55
|
+
ColumnConfig(
|
|
56
|
+
source_field="agent_name",
|
|
57
|
+
header_label="Agent",
|
|
58
|
+
formatter=lambda x: x or "-",
|
|
59
|
+
compact_line=2,
|
|
60
|
+
compact_style="dim",
|
|
61
|
+
),
|
|
62
|
+
]
|
|
63
|
+
|
|
64
|
+
output.table(
|
|
65
|
+
items=response.sessions, # type: ignore[arg-type]
|
|
66
|
+
title=f"Sessions ({response.total})",
|
|
67
|
+
columns=columns,
|
|
68
|
+
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Empty per project convention - import directly from submodules
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"""Session messages list command implementation."""
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
from uuid import UUID
|
|
5
|
+
|
|
6
|
+
import typer
|
|
7
|
+
|
|
8
|
+
from cli.commands.flag_utils import validate_uuid
|
|
9
|
+
from cli.commands.sessions.messages.presenter import present_messages_list
|
|
10
|
+
from cli.infrastructure.command import async_command, authenticated_client
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def sessions_messages_command(
|
|
14
|
+
session_id: str = typer.Argument(
|
|
15
|
+
...,
|
|
16
|
+
help="Session UUID",
|
|
17
|
+
),
|
|
18
|
+
role: Optional[str] = typer.Option(
|
|
19
|
+
None,
|
|
20
|
+
"--role",
|
|
21
|
+
help="Filter by role (user, assistant, system, tool)",
|
|
22
|
+
),
|
|
23
|
+
limit: int = typer.Option(
|
|
24
|
+
50,
|
|
25
|
+
"-l",
|
|
26
|
+
"--limit",
|
|
27
|
+
min=1,
|
|
28
|
+
max=100,
|
|
29
|
+
help="Max results",
|
|
30
|
+
),
|
|
31
|
+
offset: int = typer.Option(
|
|
32
|
+
0,
|
|
33
|
+
"--offset",
|
|
34
|
+
min=0,
|
|
35
|
+
help="Skip N results",
|
|
36
|
+
),
|
|
37
|
+
order: str = typer.Option(
|
|
38
|
+
"asc",
|
|
39
|
+
"--order",
|
|
40
|
+
help="Sort order (asc or desc)",
|
|
41
|
+
),
|
|
42
|
+
) -> None:
|
|
43
|
+
"""List messages in a chat session.
|
|
44
|
+
|
|
45
|
+
Examples:
|
|
46
|
+
ai sessions messages 123e4567-89ab...
|
|
47
|
+
ai sessions messages 123e4567-89ab... --role assistant
|
|
48
|
+
ai sessions messages 123e4567-89ab... --order desc -l 10
|
|
49
|
+
"""
|
|
50
|
+
session_uuid = validate_uuid(session_id, "session")
|
|
51
|
+
_execute_list(
|
|
52
|
+
session_id=session_uuid,
|
|
53
|
+
role=role,
|
|
54
|
+
limit=limit,
|
|
55
|
+
offset=offset,
|
|
56
|
+
order=order,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
@async_command
|
|
61
|
+
async def _execute_list(
|
|
62
|
+
session_id: UUID,
|
|
63
|
+
role: Optional[str],
|
|
64
|
+
limit: int,
|
|
65
|
+
offset: int,
|
|
66
|
+
order: str,
|
|
67
|
+
) -> None:
|
|
68
|
+
"""Execute list messages operation."""
|
|
69
|
+
async with authenticated_client() as (_config, client):
|
|
70
|
+
response = await client.list_session_messages(
|
|
71
|
+
session_id,
|
|
72
|
+
role=role,
|
|
73
|
+
limit=limit,
|
|
74
|
+
offset=offset,
|
|
75
|
+
order=order,
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
present_messages_list(response)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""Presenter for session messages command output."""
|
|
2
|
+
|
|
3
|
+
from alloy_runtime_types.dtos.sessions import (
|
|
4
|
+
ListSessionMessagesResponse,
|
|
5
|
+
MessageResponse,
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
from cli.infrastructure.output import OutputService
|
|
9
|
+
from cli.infrastructure.renderers.list_renderer import ColumnConfig
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _format_content(msg: MessageResponse) -> str:
|
|
13
|
+
"""Format message content for display."""
|
|
14
|
+
if not msg.content_parts:
|
|
15
|
+
return "-"
|
|
16
|
+
first_part = msg.content_parts[0]
|
|
17
|
+
text = first_part.content_text or ""
|
|
18
|
+
if len(text) > 80:
|
|
19
|
+
return text[:77] + "..."
|
|
20
|
+
return text or "-"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def present_messages_list(response: ListSessionMessagesResponse) -> None:
|
|
24
|
+
"""Present list of messages with Rich table formatting."""
|
|
25
|
+
output = OutputService.get()
|
|
26
|
+
|
|
27
|
+
if not response.messages:
|
|
28
|
+
output.info("No messages found")
|
|
29
|
+
return
|
|
30
|
+
|
|
31
|
+
columns = [
|
|
32
|
+
ColumnConfig(
|
|
33
|
+
source_field="sequence_number",
|
|
34
|
+
header_label="#",
|
|
35
|
+
align="right",
|
|
36
|
+
compact_line=1,
|
|
37
|
+
compact_style="cyan",
|
|
38
|
+
),
|
|
39
|
+
ColumnConfig(
|
|
40
|
+
source_field="role",
|
|
41
|
+
header_label="Role",
|
|
42
|
+
compact_line=1,
|
|
43
|
+
compact_style="yellow",
|
|
44
|
+
),
|
|
45
|
+
ColumnConfig(
|
|
46
|
+
source_field="created_at",
|
|
47
|
+
header_label="Time",
|
|
48
|
+
formatter=lambda x: x.strftime("%H:%M:%S") if x else "-",
|
|
49
|
+
compact_line=1,
|
|
50
|
+
compact_style="blue",
|
|
51
|
+
),
|
|
52
|
+
ColumnConfig(
|
|
53
|
+
source_field="id",
|
|
54
|
+
header_label="ID",
|
|
55
|
+
compact_line=2,
|
|
56
|
+
compact_style="dim",
|
|
57
|
+
),
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
output.table(
|
|
61
|
+
items=response.messages, # type: ignore[arg-type]
|
|
62
|
+
title=f"Messages ({response.total})",
|
|
63
|
+
columns=columns,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
# Show content preview for each message
|
|
67
|
+
output.info("\nContent:")
|
|
68
|
+
for msg in response.messages:
|
|
69
|
+
role_style = {
|
|
70
|
+
"user": "green",
|
|
71
|
+
"assistant": "blue",
|
|
72
|
+
"system": "yellow",
|
|
73
|
+
"tool": "magenta",
|
|
74
|
+
}.get(msg.role, "white")
|
|
75
|
+
|
|
76
|
+
content = _format_content(msg)
|
|
77
|
+
output.console.print(
|
|
78
|
+
f" [{role_style}]{msg.sequence_number}. {msg.role}[/{role_style}]: {content}"
|
|
79
|
+
)
|