langchain-agentx-cli 0.3.5__tar.gz → 0.3.8__tar.gz
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.
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/PKG-INFO +1 -1
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/__init__.py +1 -1
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bootstrap.py +2 -2
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/deny_override.py +5 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/session_bridge.py +41 -1
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/cli.py +37 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/__init__.py +2 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/commands/builtin/doctor.py +74 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/config.py +2 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/health_report.py +389 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/observation/audit_subscriber.py +175 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/observation/config.py +103 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/observation/failure_counts.py +38 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/observation/failure_observation.py +64 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/observation/log_rotator.py +107 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/observation/observer.py +41 -3
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/observation/session_context.py +55 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/prompts/__init__.py +6 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/prompts/assembler.py +6 -1
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/prompts/sections.py +56 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/session_factory.py +36 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/session_options.py +2 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/tui/bootstrap.py +49 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/tui/widgets/health_view.py +95 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/welcome.py +8 -1
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/input_area.py +19 -1
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/message_events.py +4 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/message_list.py +4 -2
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/widgets/status_bar.py +46 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/task_panel.py +2 -4
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/widgets/tool_result/__init__.py +34 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/widgets/tool_result/base.py +87 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/widgets/tool_result/blocked_view.py +84 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/widgets/tool_result/error_view.py +137 -0
- langchain-agentx-cli-0.3.8/langchain_agentx_cli/widgets/tool_result/success_view.py +50 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/base.py +97 -3
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/bash/widget.py +4 -2
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli.egg-info/PKG-INFO +1 -1
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli.egg-info/SOURCES.txt +14 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli.egg-info/requires.txt +1 -1
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/pyproject.toml +14 -3
- langchain-agentx-cli-0.3.5/langchain_agentx_cli/observation/audit_subscriber.py +0 -91
- langchain-agentx-cli-0.3.5/langchain_agentx_cli/observation/config.py +0 -35
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/LICENSE +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/README.md +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/__main__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/app.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/auto_mode_config.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/auto_mode_config_apply.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/auto_mode_messages.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/auto_mode_sink.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/auto_mode_status.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/boundary_inspector.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/cli_l3_user_ui_queue.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/hook_constants.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/hook_payload.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/permission_mode_apply.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/permission_response_builder.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/bridge/permission_user_ui.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/auto_mode.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/clear.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/compact.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/grant.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/grants.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/help.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/model.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/permissions.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/quit.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/revoke.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/roots.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/builtin/theme.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/parser.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/providers/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/providers/sdk_commands.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/commands/registry.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/completion/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/completion/base.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/completion/command_source.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/completion/history_source.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/history/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/history/store.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/keybindings/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/keybindings/bindings.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/launch_config_validator.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/llm_config.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/observation/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/permissions/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/permissions/factory.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/permissions/mode.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/permissions/policy.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/permissions/session_mode.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/prompts/system_prompt.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/screens/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/screens/repl.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/session_headless.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/state/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/state/task_store.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/theme/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/theme/colors.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/theme/detection.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/theme/manager.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/theme/settings.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/theme/system_theme.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/theme/themes.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/theme/watcher.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tools/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tools/registry.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/clipboard.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/memory_paths.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/message_selection.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/cache.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/component_manager.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/config.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/consumer.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/dialog.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/models.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/persistent_rules.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/presenters/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/presenters/base.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/presenters/bash.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/presenters/fallback.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/presenters/file.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/queue.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/auto_mode_deny.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/base.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/boundary/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/boundary/extract.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/boundary/request.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/fallback/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/fallback/request.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/file/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/file/_base.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/file/diff.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/file/edit/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/file/edit/request.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/file/filesystem/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/file/filesystem/request.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/file/paths.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/file/write/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/file/write/request.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/plan_mode/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/plan_mode/request.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/shell/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/shell/bash/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/shell/bash/request.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/shell/extract.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/shell/helpers.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/skill/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/skill/request.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/webfetch/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/requests/webfetch/request.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/permissions/router.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/safe_screen.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/tui/workspace_trust.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/compact_progress.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/completion_overlay.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/footer.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/messages/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/messages/assistant_message.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/messages/auto_mode_chip.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/messages/error_message.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/messages/hook_message.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/messages/rendering.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/messages/stop_hook_summary.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/messages/thinking_message.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/messages/tool_result.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/pending_permission.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/permission_inline.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/permission_keybindings.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/presentation/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/presentation/expand_hint.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/presentation/full_output.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/presentation/message_layout.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/presentation/shell_output.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/presentation/view_mode.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/spinner.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/agent/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/agent/widget.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/ask_user_question/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/ask_user_question/widget.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/bash/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/batch_edit/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/batch_edit/widget.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/edit/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/edit/widget.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/glob/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/glob/widget.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/grep/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/grep/widget.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/helpers.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/read/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/read/widget.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/skill/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/skill/widget.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/user_message/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/user_message/widget.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/webfetch/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/webfetch/widget.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/websearch/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/websearch/widget.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/write/__init__.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli/widgets/tools/write/widget.py +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli.egg-info/dependency_links.txt +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli.egg-info/entry_points.txt +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli.egg-info/not-zip-safe +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/langchain_agentx_cli.egg-info/top_level.txt +0 -0
- {langchain-agentx-cli-0.3.5 → langchain-agentx-cli-0.3.8}/setup.cfg +0 -0
|
@@ -8,7 +8,7 @@ bootstrap.py — CLI 启动前环境检查。
|
|
|
8
8
|
CliEntry.run() 在创建 ReplApp 之前调用。
|
|
9
9
|
|
|
10
10
|
当前裁剪范围:
|
|
11
|
-
不校验 API Key
|
|
11
|
+
不校验 API Key;启动期 quick health 见 tui/bootstrap.py。
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
14
|
from __future__ import annotations
|
|
@@ -30,7 +30,7 @@ class EnvironmentChecker:
|
|
|
30
30
|
except ImportError as exc:
|
|
31
31
|
raise CliEnvironmentError(
|
|
32
32
|
"无法导入 langchain_agentx。请安装 SDK:\n"
|
|
33
|
-
' pip install "langchain-agentx-python>=0.
|
|
33
|
+
' pip install "langchain-agentx-python>=0.7.0,<0.8.0"\n'
|
|
34
34
|
"或 editable:pip install -e <langchain_agentx_python 路径>"
|
|
35
35
|
) from exc
|
|
36
36
|
|
|
@@ -131,6 +131,8 @@ def _post_replay_tool_ui(
|
|
|
131
131
|
meta.setdefault("tool_call_id", tool_call_id)
|
|
132
132
|
display = artifact.get("display") if isinstance(artifact.get("display"), dict) else None
|
|
133
133
|
output = adapter.envelope_to_tool_output(envelope)
|
|
134
|
+
err_info = artifact.get("error")
|
|
135
|
+
envelope_error = err_info if isinstance(err_info, dict) else None
|
|
134
136
|
if envelope.status == "error":
|
|
135
137
|
bridge._post_ui(
|
|
136
138
|
ToolUseCompleted(
|
|
@@ -144,6 +146,7 @@ def _post_replay_tool_ui(
|
|
|
144
146
|
display=display or {},
|
|
145
147
|
truncated=bool(envelope.truncated),
|
|
146
148
|
overflow_file=envelope.overflow_file,
|
|
149
|
+
envelope_error=envelope_error,
|
|
147
150
|
)
|
|
148
151
|
)
|
|
149
152
|
return
|
|
@@ -158,6 +161,8 @@ def _post_replay_tool_ui(
|
|
|
158
161
|
display=display or {},
|
|
159
162
|
truncated=bool(envelope.truncated),
|
|
160
163
|
overflow_file=envelope.overflow_file,
|
|
164
|
+
envelope_error=envelope_error,
|
|
165
|
+
error=output if str(envelope.status or "ok") == "error" else None,
|
|
161
166
|
)
|
|
162
167
|
)
|
|
163
168
|
|
|
@@ -216,10 +216,32 @@ class SessionBridge:
|
|
|
216
216
|
exit_on_error=False,
|
|
217
217
|
)
|
|
218
218
|
|
|
219
|
+
async def _stream_events_with_failure_observation(self, user_input: str):
|
|
220
|
+
"""转发 raw on_custom_event 给 L8/L7 sink,再 yield 给事件适配器。"""
|
|
221
|
+
handlers = getattr(self._session, "_cli_failure_handlers", None)
|
|
222
|
+
async for raw in self._session.stream_loop_events(user_input):
|
|
223
|
+
if handlers is not None and raw.get("event") == "on_custom_event":
|
|
224
|
+
name = str(raw.get("name") or "")
|
|
225
|
+
if name.startswith("tool.failure."):
|
|
226
|
+
await handlers.dispatch_raw_event(raw)
|
|
227
|
+
self._refresh_failure_footer()
|
|
228
|
+
yield raw
|
|
229
|
+
|
|
230
|
+
def _refresh_failure_footer(self) -> None:
|
|
231
|
+
try:
|
|
232
|
+
screen = self.app.screen
|
|
233
|
+
from langchain_agentx_cli.screens.repl import ReplScreen
|
|
234
|
+
from langchain_agentx_cli.widgets.input_area import InputAreaWidget
|
|
235
|
+
|
|
236
|
+
if isinstance(screen, ReplScreen):
|
|
237
|
+
screen.query_one(InputAreaWidget).refresh_auto_status_footer()
|
|
238
|
+
except Exception:
|
|
239
|
+
pass
|
|
240
|
+
|
|
219
241
|
async def _stream_turn(self, user_input: str) -> None:
|
|
220
242
|
self._adapter._reset_state()
|
|
221
243
|
self._seg.reset()
|
|
222
|
-
raw_events = self.
|
|
244
|
+
raw_events = self._stream_events_with_failure_observation(user_input)
|
|
223
245
|
try:
|
|
224
246
|
async for event in self._adapter.adapt(raw_events):
|
|
225
247
|
self._dispatch_event(event)
|
|
@@ -291,6 +313,7 @@ class SessionBridge:
|
|
|
291
313
|
type(data.get("payload")).__name__,
|
|
292
314
|
bool(data.get("display")),
|
|
293
315
|
)
|
|
316
|
+
err_info = data.get("error")
|
|
294
317
|
self._post_ui(
|
|
295
318
|
ToolUseCompleted(
|
|
296
319
|
tool_name=tool_name,
|
|
@@ -302,11 +325,18 @@ class SessionBridge:
|
|
|
302
325
|
display=data.get("display") if isinstance(data.get("display"), dict) else None,
|
|
303
326
|
truncated=bool(data.get("truncated", False)),
|
|
304
327
|
overflow_file=data.get("overflow_file"),
|
|
328
|
+
envelope_error=err_info if isinstance(err_info, dict) else None,
|
|
329
|
+
error=(
|
|
330
|
+
fallback_output
|
|
331
|
+
if str(data.get("status", "ok")) == "error"
|
|
332
|
+
else None
|
|
333
|
+
),
|
|
305
334
|
)
|
|
306
335
|
)
|
|
307
336
|
case LangchainAgentEventType.TOOL_ERROR:
|
|
308
337
|
tool_name = str(data.get("tool_name", ""))
|
|
309
338
|
error_text = str(data.get("error", ""))
|
|
339
|
+
err_info = data.get("error")
|
|
310
340
|
self._post_ui(
|
|
311
341
|
ToolUseCompleted(
|
|
312
342
|
tool_name=tool_name,
|
|
@@ -317,6 +347,9 @@ class SessionBridge:
|
|
|
317
347
|
status=str(data.get("status", "error")),
|
|
318
348
|
meta=data.get("meta") if isinstance(data.get("meta"), dict) else None,
|
|
319
349
|
display=data.get("display") if isinstance(data.get("display"), dict) else None,
|
|
350
|
+
truncated=bool(data.get("truncated", False)),
|
|
351
|
+
overflow_file=data.get("overflow_file"),
|
|
352
|
+
envelope_error=err_info if isinstance(err_info, dict) else None,
|
|
320
353
|
)
|
|
321
354
|
)
|
|
322
355
|
case LangchainAgentEventType.TOOL_PROGRESS:
|
|
@@ -402,6 +435,7 @@ class SessionBridge:
|
|
|
402
435
|
parent_tool_use_id,
|
|
403
436
|
len(str(data.get("summary", ""))),
|
|
404
437
|
)
|
|
438
|
+
err_info = data.get("error")
|
|
405
439
|
self._post_ui(
|
|
406
440
|
ToolUseCompleted(
|
|
407
441
|
tool_name=tool_name,
|
|
@@ -414,6 +448,12 @@ class SessionBridge:
|
|
|
414
448
|
truncated=bool(data.get("truncated", False)),
|
|
415
449
|
overflow_file=data.get("overflow_file"),
|
|
416
450
|
parent_tool_use_id=parent_tool_use_id,
|
|
451
|
+
envelope_error=err_info if isinstance(err_info, dict) else None,
|
|
452
|
+
error=(
|
|
453
|
+
fallback_output
|
|
454
|
+
if str(data.get("status", "ok")) == "error"
|
|
455
|
+
else None
|
|
456
|
+
),
|
|
417
457
|
)
|
|
418
458
|
)
|
|
419
459
|
case LangchainAgentEventType.HOOK_PROGRESS:
|
|
@@ -22,6 +22,8 @@ warnings.filterwarnings("ignore", message=".*allowed_objects.*")
|
|
|
22
22
|
|
|
23
23
|
from langchain_agentx_cli.app import ReplApp
|
|
24
24
|
from langchain_agentx_cli.bootstrap import CliEnvironmentError, EnvironmentChecker
|
|
25
|
+
from langchain_agentx_cli.health_report import StartupCheckMode
|
|
26
|
+
from langchain_agentx_cli.tui.bootstrap import apply_startup_health_check
|
|
25
27
|
from langchain_agentx_cli.config import AppPreferencesStore, ReplLaunchConfig
|
|
26
28
|
from langchain_agentx_cli.permissions.mode import normalize_permission_mode
|
|
27
29
|
from langchain_agentx_cli.llm_config import (
|
|
@@ -64,6 +66,7 @@ class CliEntry:
|
|
|
64
66
|
added_read_roots: tuple[Path, ...] = (),
|
|
65
67
|
extra_read_roots: tuple[Path, ...] = (),
|
|
66
68
|
extra_write_roots: tuple[Path, ...] = (),
|
|
69
|
+
startup_check: StartupCheckMode = "quiet",
|
|
67
70
|
) -> int:
|
|
68
71
|
# Mode 到 agent_home 的映射(优先级高于 --agent-home)
|
|
69
72
|
if mode:
|
|
@@ -84,6 +87,16 @@ class CliEntry:
|
|
|
84
87
|
EnvironmentChecker.emit_error(str(exc))
|
|
85
88
|
return 2
|
|
86
89
|
|
|
90
|
+
if startup_check != "off":
|
|
91
|
+
try:
|
|
92
|
+
launch_config = apply_startup_health_check(
|
|
93
|
+
launch_config,
|
|
94
|
+
startup_check,
|
|
95
|
+
)
|
|
96
|
+
except CliEnvironmentError as exc:
|
|
97
|
+
EnvironmentChecker.emit_error(str(exc))
|
|
98
|
+
return 2
|
|
99
|
+
|
|
87
100
|
if show_config:
|
|
88
101
|
cfg = resolve_llm_config(
|
|
89
102
|
cli_provider=provider,
|
|
@@ -330,6 +343,18 @@ _CONFIG_PATH = user_config_path()
|
|
|
330
343
|
type=click.Path(exists=True, file_okay=False, dir_okay=True, path_type=Path),
|
|
331
344
|
help="额外可写根(须在 workspace 或某个 read root 内,否则启动失败)",
|
|
332
345
|
)
|
|
346
|
+
@click.option(
|
|
347
|
+
"--check-env",
|
|
348
|
+
is_flag=True,
|
|
349
|
+
default=False,
|
|
350
|
+
help="启动前全量环境检查;失败时退出码 2 且不进入 REPL",
|
|
351
|
+
)
|
|
352
|
+
@click.option(
|
|
353
|
+
"--no-check-env",
|
|
354
|
+
is_flag=True,
|
|
355
|
+
default=False,
|
|
356
|
+
help="跳过启动期 quick 环境检查",
|
|
357
|
+
)
|
|
333
358
|
def main(
|
|
334
359
|
workspace_root: Path | None,
|
|
335
360
|
mode: str | None,
|
|
@@ -344,8 +369,19 @@ def main(
|
|
|
344
369
|
added_read_roots: tuple[Path, ...],
|
|
345
370
|
extra_read_roots: tuple[Path, ...],
|
|
346
371
|
extra_write_roots: tuple[Path, ...],
|
|
372
|
+
check_env: bool,
|
|
373
|
+
no_check_env: bool,
|
|
347
374
|
) -> None:
|
|
348
375
|
"""langchain-agentx 终端 REPL(MVP)。"""
|
|
376
|
+
if check_env and no_check_env:
|
|
377
|
+
raise click.UsageError("--check-env 与 --no-check-env 不能同时使用")
|
|
378
|
+
if no_check_env:
|
|
379
|
+
startup_check: StartupCheckMode = "off"
|
|
380
|
+
elif check_env:
|
|
381
|
+
startup_check = "strict"
|
|
382
|
+
else:
|
|
383
|
+
startup_check = "quiet"
|
|
384
|
+
|
|
349
385
|
code = CliEntry().run(
|
|
350
386
|
workspace_root=workspace_root,
|
|
351
387
|
mode=mode,
|
|
@@ -360,5 +396,6 @@ def main(
|
|
|
360
396
|
added_read_roots=added_read_roots,
|
|
361
397
|
extra_read_roots=extra_read_roots,
|
|
362
398
|
extra_write_roots=extra_write_roots,
|
|
399
|
+
startup_check=startup_check,
|
|
363
400
|
)
|
|
364
401
|
raise SystemExit(code)
|
|
@@ -10,6 +10,7 @@ from langchain_agentx_cli.commands.builtin.revoke import make_revoke_command
|
|
|
10
10
|
from langchain_agentx_cli.commands.builtin.roots import make_roots_command
|
|
11
11
|
from langchain_agentx_cli.commands.builtin.clear import make_clear_command
|
|
12
12
|
from langchain_agentx_cli.commands.builtin.compact import make_compact_command
|
|
13
|
+
from langchain_agentx_cli.commands.builtin.doctor import make_doctor_command
|
|
13
14
|
from langchain_agentx_cli.commands.builtin.help import make_help_command
|
|
14
15
|
from langchain_agentx_cli.commands.builtin.model import make_model_command
|
|
15
16
|
from langchain_agentx_cli.commands.builtin.quit import make_quit_command
|
|
@@ -20,6 +21,7 @@ from langchain_agentx_cli.commands.registry import CommandRegistry
|
|
|
20
21
|
def register_builtin_commands(registry: CommandRegistry) -> None:
|
|
21
22
|
for factory in (
|
|
22
23
|
make_help_command,
|
|
24
|
+
make_doctor_command,
|
|
23
25
|
make_clear_command,
|
|
24
26
|
make_quit_command,
|
|
25
27
|
make_compact_command,
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""
|
|
2
|
+
commands/builtin/doctor.py — /doctor 环境诊断(L10)。
|
|
3
|
+
|
|
4
|
+
职责:
|
|
5
|
+
调用 SDK sdk_health + preflight;合并 CLI 检查;展示 HealthReportView。
|
|
6
|
+
|
|
7
|
+
链路位置:
|
|
8
|
+
CommandRegistry;可选 --save 落盘 doctor-{ts}.json。
|
|
9
|
+
|
|
10
|
+
当前裁剪范围:
|
|
11
|
+
不重复 SDK 检查逻辑;无 --fix 自动修复。
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
from langchain_agentx_cli.commands.registry import Command, CommandContext
|
|
19
|
+
from langchain_agentx_cli.health_report import build_doctor_report, save_doctor_report
|
|
20
|
+
from langchain_agentx_cli.llm_config import resolve_llm_config
|
|
21
|
+
from langchain_agentx_cli.tui.widgets.health_view import HealthReportView
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _parse_doctor_args(args: str) -> dict[str, bool]:
|
|
25
|
+
tokens = {t.strip().lower() for t in args.split() if t.strip()}
|
|
26
|
+
return {
|
|
27
|
+
"save": "--save" in tokens,
|
|
28
|
+
"preflight_only": "--preflight-only" in tokens,
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
async def handle_doctor(ctx: CommandContext) -> str | None:
|
|
33
|
+
flags = _parse_doctor_args(ctx.args)
|
|
34
|
+
launch = ctx.app.launch_config
|
|
35
|
+
llm = resolve_llm_config(
|
|
36
|
+
cli_provider=launch.provider,
|
|
37
|
+
cli_model=launch.model,
|
|
38
|
+
)
|
|
39
|
+
try:
|
|
40
|
+
report = await build_doctor_report(
|
|
41
|
+
workspace_root=launch.workspace_root,
|
|
42
|
+
agent_home=launch.agent_home,
|
|
43
|
+
provider=launch.provider,
|
|
44
|
+
model=llm.model,
|
|
45
|
+
base_url=llm.base_url,
|
|
46
|
+
preflight_only=flags["preflight_only"],
|
|
47
|
+
)
|
|
48
|
+
except ImportError as exc:
|
|
49
|
+
msg = (
|
|
50
|
+
"health API 不可用,请升级 SDK:\n"
|
|
51
|
+
' pip install -U "langchain-agentx-python>=0.7.0,<0.8.0"\n'
|
|
52
|
+
f" ({exc})"
|
|
53
|
+
)
|
|
54
|
+
ctx.output(msg)
|
|
55
|
+
return msg
|
|
56
|
+
|
|
57
|
+
ctx.app.push_screen(HealthReportView(report))
|
|
58
|
+
|
|
59
|
+
if flags["save"]:
|
|
60
|
+
path = save_doctor_report(report)
|
|
61
|
+
note = f"Saved doctor report to {path}"
|
|
62
|
+
ctx.output(note)
|
|
63
|
+
return note
|
|
64
|
+
return None
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def make_doctor_command() -> Command:
|
|
68
|
+
return Command(
|
|
69
|
+
name="doctor",
|
|
70
|
+
description="环境诊断(SDK + 网络 preflight + CLI 检查)",
|
|
71
|
+
aliases=["health"],
|
|
72
|
+
arg_names=["--save", "--preflight-only"],
|
|
73
|
+
handler=handle_doctor,
|
|
74
|
+
)
|
|
@@ -167,3 +167,5 @@ class ReplLaunchConfig:
|
|
|
167
167
|
# 跨库边界(不含 workspace_root;透传 SDK 时再与 workspace_root 合并)
|
|
168
168
|
read_roots: tuple[Path, ...] = field(default_factory=tuple)
|
|
169
169
|
write_roots: tuple[Path, ...] = field(default_factory=tuple)
|
|
170
|
+
startup_check: str = field(default="quiet")
|
|
171
|
+
startup_health_report: object | None = field(default=None)
|