deepagents-cli 0.0.35__tar.gz → 0.0.36__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.
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/CHANGELOG.md +12 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/PKG-INFO +2 -2
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/_version.py +1 -1
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/app.py +35 -3
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/command_registry.py +6 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/config.py +24 -3
- deepagents_cli-0.0.36/deepagents_cli/deploy/__init__.py +15 -0
- deepagents_cli-0.0.36/deepagents_cli/deploy/bundler.py +259 -0
- deepagents_cli-0.0.36/deepagents_cli/deploy/commands.py +403 -0
- deepagents_cli-0.0.36/deepagents_cli/deploy/config.py +381 -0
- deepagents_cli-0.0.36/deepagents_cli/deploy/templates.py +511 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/integrations/sandbox_factory.py +2 -1
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/main.py +52 -6
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/model_config.py +97 -16
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/ui.py +9 -0
- deepagents_cli-0.0.36/deepagents_cli/widgets/notification_settings.py +156 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/pyproject.toml +14 -5
- deepagents_cli-0.0.36/scripts/debug_server.sh +67 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/integration_tests/conftest.py +3 -2
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/integration_tests/test_acp_mode.py +6 -1
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/integration_tests/test_compact_resume.py +7 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/integration_tests/test_sandbox_factory.py +22 -6
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/integration_tests/test_sandbox_operations.py +7 -2
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_config.py +30 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_main.py +80 -7
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_model_config.py +87 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/uv.lock +60 -60
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/.gitignore +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/DEV.md +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/Makefile +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/README.md +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/THREAT_MODEL.md +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/__init__.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/__main__.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/_ask_user_types.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/_cli_context.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/_debug.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/_env_vars.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/_server_config.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/_session_stats.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/_testing_models.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/agent.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/app.tcss +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/ask_user.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/built_in_skills/__init__.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/built_in_skills/remember/SKILL.md +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/clipboard.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/configurable_model.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/default_agent_prompt.md +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/editor.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/file_ops.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/formatting.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/hooks.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/input.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/integrations/__init__.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/integrations/sandbox_provider.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/local_context.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/mcp_tools.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/mcp_trust.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/media_utils.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/non_interactive.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/offload.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/output.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/project_utils.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/py.typed +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/remote_client.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/server.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/server_graph.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/server_manager.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/sessions.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/skills/__init__.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/skills/commands.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/skills/invocation.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/skills/load.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/subagents.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/system_prompt.md +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/textual_adapter.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/theme.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/token_state.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/tool_display.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/tools.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/unicode_security.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/update_check.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/__init__.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/_links.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/approval.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/ask_user.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/autocomplete.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/chat_input.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/diff.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/history.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/loading.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/mcp_viewer.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/message_store.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/messages.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/model_selector.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/status.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/theme_selector.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/thread_selector.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/tool_renderers.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/tool_widgets.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/deepagents_cli/widgets/welcome.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/images/cli.png +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/scripts/check_imports.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/scripts/install.sh +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/README.md +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/integration_tests/__init__.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/integration_tests/benchmarks/__init__.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/__init__.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/conftest.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/skills/__init__.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/skills/test_commands.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/skills/test_load.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/skills/test_skills_json.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_agent.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_agent_friendly.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_app.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_approval.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_args.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_ask_user.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_ask_user_middleware.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_autocomplete.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_charset.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_chat_input.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_command_registry.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_compact_tool.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_configurable_model.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_debug.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_editor.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_end_to_end.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_env_vars.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_exception_handling.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_file_ops.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_history.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_hooks.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_imports.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_input_parsing.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_links.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_loading.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_local_context.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_main_acp_mode.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_main_args.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_mcp_tools.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_mcp_trust.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_mcp_viewer.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_media_utils.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_message_store.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_messages.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_model_selector.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_model_switch.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_non_interactive.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_offload.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_output.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_reload.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_remote_client.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_sandbox_factory.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_server.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_server_config.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_server_graph.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_server_helpers.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_server_manager.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_sessions.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_shell_allow_list.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_skill_invocation.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_status.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_subagents.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_textual_adapter.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_theme.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_thread_selector.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_token_tracker.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_ui.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_unicode_security.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_update_check.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_version.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/test_welcome.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/tools/__init__.py +0 -0
- {deepagents_cli-0.0.35 → deepagents_cli-0.0.36}/tests/unit_tests/tools/test_fetch_url.py +0 -0
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.0.36](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.35...deepagents-cli==0.0.36) (2026-04-09)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* `deepagents deploy` ([#2491](https://github.com/langchain-ai/deepagents/issues/2491)) ([01dc60e](https://github.com/langchain-ai/deepagents/commit/01dc60e394ecb56bd5336e447d32caeed8a67ec2))
|
|
8
|
+
* Warn on missing tavily key, add `/notifications` ([#2555](https://github.com/langchain-ai/deepagents/issues/2555)) ([3dff3ed](https://github.com/langchain-ai/deepagents/commit/3dff3ed6835eae9f8b420b8a73c054127faaf7d2))
|
|
9
|
+
|
|
10
|
+
### Bug Fixes
|
|
11
|
+
|
|
12
|
+
* Fail fast on missing provider credentials ([#2554](https://github.com/langchain-ai/deepagents/issues/2554)) ([50fb8ae](https://github.com/langchain-ai/deepagents/commit/50fb8aefe7e3065024e10f1d5ecd11a54d736641))
|
|
13
|
+
* Fix mktemp template in debug script for macOS ([#2603](https://github.com/langchain-ai/deepagents/issues/2603)) ([63fa537](https://github.com/langchain-ai/deepagents/commit/63fa537e9995ca2ead492ee44902227567e9a130))
|
|
14
|
+
|
|
3
15
|
## [0.0.35](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.34...deepagents-cli==0.0.35) (2026-04-07)
|
|
4
16
|
|
|
5
17
|
### Highlights
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepagents-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.36
|
|
4
4
|
Summary: Terminal interface for Deep Agents - interactive AI agent with file operations, shell access, and sub-agent capabilities.
|
|
5
5
|
Project-URL: Homepage, https://docs.langchain.com/oss/python/deepagents/overview
|
|
6
6
|
Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
|
|
@@ -27,7 +27,7 @@ Classifier: Topic :: Terminals
|
|
|
27
27
|
Requires-Python: <4.0,>=3.11
|
|
28
28
|
Requires-Dist: aiosqlite<1.0.0,>=0.19.0
|
|
29
29
|
Requires-Dist: deepagents-acp>=0.0.4
|
|
30
|
-
Requires-Dist: deepagents==0.5.
|
|
30
|
+
Requires-Dist: deepagents==0.5.1
|
|
31
31
|
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
32
32
|
Requires-Dist: langchain-anthropic<2.0.0,>=1.4.0
|
|
33
33
|
Requires-Dist: langchain-google-genai<5.0.0,>=4.2.1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Version information and lightweight constants for `deepagents-cli`."""
|
|
2
2
|
|
|
3
|
-
__version__ = "0.0.
|
|
3
|
+
__version__ = "0.0.36" # x-release-please-version
|
|
4
4
|
|
|
5
5
|
DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/cli"
|
|
6
6
|
"""URL for `deepagents-cli` documentation."""
|
|
@@ -2626,9 +2626,9 @@ class DeepAgentsApp(App):
|
|
|
2626
2626
|
await self._mount_message(UserMessage(command))
|
|
2627
2627
|
help_body = (
|
|
2628
2628
|
"Commands: /quit, /clear, /offload, /editor, /mcp, "
|
|
2629
|
-
"/model [--model-params JSON] [--default], /
|
|
2630
|
-
"/skill:<name>, /remember, /skill-creator, /theme,
|
|
2631
|
-
"/threads, /trace, "
|
|
2629
|
+
"/model [--model-params JSON] [--default], /notifications, "
|
|
2630
|
+
"/reload, /skill:<name>, /remember, /skill-creator, /theme, "
|
|
2631
|
+
"/tokens, /threads, /trace, "
|
|
2632
2632
|
"/update, /auto-update, /changelog, /docs, /feedback, /help\n\n"
|
|
2633
2633
|
"Interactive Features:\n"
|
|
2634
2634
|
" Enter Submit your message\n"
|
|
@@ -2774,6 +2774,8 @@ class DeepAgentsApp(App):
|
|
|
2774
2774
|
await self._show_mcp_viewer()
|
|
2775
2775
|
elif cmd == "/theme":
|
|
2776
2776
|
await self._show_theme_selector()
|
|
2777
|
+
elif cmd == "/notifications":
|
|
2778
|
+
await self._show_notification_settings()
|
|
2777
2779
|
elif cmd == "/model" or cmd.startswith("/model "):
|
|
2778
2780
|
model_arg = None
|
|
2779
2781
|
set_default = False
|
|
@@ -4552,6 +4554,36 @@ class DeepAgentsApp(App):
|
|
|
4552
4554
|
screen = ThemeSelectorScreen(current_theme=self.theme)
|
|
4553
4555
|
self.push_screen(screen, handle_result)
|
|
4554
4556
|
|
|
4557
|
+
async def _show_notification_settings(self) -> None:
|
|
4558
|
+
"""Show notification settings modal."""
|
|
4559
|
+
from deepagents_cli.model_config import is_warning_suppressed
|
|
4560
|
+
from deepagents_cli.widgets.notification_settings import (
|
|
4561
|
+
WARNING_TOGGLES,
|
|
4562
|
+
NotificationSettingsScreen,
|
|
4563
|
+
)
|
|
4564
|
+
|
|
4565
|
+
suppressed: set[str] = set()
|
|
4566
|
+
try:
|
|
4567
|
+
for key, _ in WARNING_TOGGLES:
|
|
4568
|
+
if await asyncio.to_thread(is_warning_suppressed, key):
|
|
4569
|
+
suppressed.add(key)
|
|
4570
|
+
except Exception:
|
|
4571
|
+
logger.warning("Failed to read notification settings", exc_info=True)
|
|
4572
|
+
suppressed = set()
|
|
4573
|
+
self.notify(
|
|
4574
|
+
"Could not read notification preferences. Showing defaults.",
|
|
4575
|
+
severity="warning",
|
|
4576
|
+
timeout=6,
|
|
4577
|
+
markup=False,
|
|
4578
|
+
)
|
|
4579
|
+
|
|
4580
|
+
def handle_result(_result: None) -> None:
|
|
4581
|
+
if self._chat_input:
|
|
4582
|
+
self._chat_input.focus_input()
|
|
4583
|
+
|
|
4584
|
+
screen = NotificationSettingsScreen(suppressed=suppressed)
|
|
4585
|
+
self.push_screen(screen, handle_result)
|
|
4586
|
+
|
|
4555
4587
|
async def _show_mcp_viewer(self) -> None:
|
|
4556
4588
|
"""Show read-only MCP server/tool viewer as a modal screen."""
|
|
4557
4589
|
from deepagents_cli.widgets.mcp_viewer import MCPViewerScreen
|
|
@@ -77,6 +77,12 @@ COMMANDS: tuple[SlashCommand, ...] = (
|
|
|
77
77
|
description="Switch or configure model (--model-params, --default)",
|
|
78
78
|
bypass_tier=BypassTier.IMMEDIATE_UI,
|
|
79
79
|
),
|
|
80
|
+
SlashCommand(
|
|
81
|
+
name="/notifications",
|
|
82
|
+
description="Configure startup warning preferences",
|
|
83
|
+
bypass_tier=BypassTier.IMMEDIATE_UI,
|
|
84
|
+
hidden_keywords="warnings alerts suppress",
|
|
85
|
+
),
|
|
80
86
|
SlashCommand(
|
|
81
87
|
name="/offload",
|
|
82
88
|
description="Free up context window space by offloading older messages",
|
|
@@ -32,8 +32,8 @@ _bootstrap_done = False
|
|
|
32
32
|
"""Whether `_ensure_bootstrap()` has executed."""
|
|
33
33
|
|
|
34
34
|
_bootstrap_lock = threading.Lock()
|
|
35
|
-
"""Guards `_ensure_bootstrap()` against concurrent access from the main
|
|
36
|
-
|
|
35
|
+
"""Guards `_ensure_bootstrap()` against concurrent access from the main thread
|
|
36
|
+
and the prewarm worker thread."""
|
|
37
37
|
|
|
38
38
|
_singleton_lock = threading.Lock()
|
|
39
39
|
"""Guards lazy singleton construction in `_get_console` / `_get_settings`."""
|
|
@@ -2195,7 +2195,14 @@ def create_model(
|
|
|
2195
2195
|
>>> model = create_model("gpt-4o") # Auto-detects openai
|
|
2196
2196
|
>>> model = create_model() # Uses environment defaults
|
|
2197
2197
|
"""
|
|
2198
|
-
from deepagents_cli.model_config import
|
|
2198
|
+
from deepagents_cli.model_config import (
|
|
2199
|
+
IMPLICIT_AUTH_PROVIDERS,
|
|
2200
|
+
ModelConfig,
|
|
2201
|
+
ModelConfigError,
|
|
2202
|
+
ModelSpec,
|
|
2203
|
+
get_credential_env_var,
|
|
2204
|
+
has_provider_credentials,
|
|
2205
|
+
)
|
|
2199
2206
|
|
|
2200
2207
|
if not model_spec:
|
|
2201
2208
|
model_spec = _get_default_model_spec()
|
|
@@ -2225,6 +2232,20 @@ def create_model(
|
|
|
2225
2232
|
model_name = model_spec
|
|
2226
2233
|
provider = detect_provider(model_spec) or ""
|
|
2227
2234
|
|
|
2235
|
+
# Early credential check — fail fast with an actionable message instead of
|
|
2236
|
+
# letting the provider SDK raise an opaque auth error on first invocation.
|
|
2237
|
+
# Providers that support implicit auth (e.g., Vertex AI ADC) are excluded
|
|
2238
|
+
# because their env-var mapping is not a reliable indicator.
|
|
2239
|
+
if provider and provider not in IMPLICIT_AUTH_PROVIDERS:
|
|
2240
|
+
cred_status = has_provider_credentials(provider)
|
|
2241
|
+
if cred_status is False:
|
|
2242
|
+
env_var = get_credential_env_var(provider) or f"<{provider} API key>"
|
|
2243
|
+
msg = (
|
|
2244
|
+
f"No credentials found for provider '{provider}'. "
|
|
2245
|
+
f"Please set the {env_var} environment variable."
|
|
2246
|
+
)
|
|
2247
|
+
raise ModelConfigError(msg)
|
|
2248
|
+
|
|
2228
2249
|
# Provider-specific kwargs (with per-model overrides)
|
|
2229
2250
|
kwargs = _get_provider_kwargs(provider, model_name=model_name)
|
|
2230
2251
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"""Deploy commands for bundling and shipping deep agents."""
|
|
2
|
+
|
|
3
|
+
from deepagents_cli.deploy.commands import (
|
|
4
|
+
execute_deploy_command,
|
|
5
|
+
execute_dev_command,
|
|
6
|
+
execute_init_command,
|
|
7
|
+
setup_deploy_parsers,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
__all__ = [
|
|
11
|
+
"execute_deploy_command",
|
|
12
|
+
"execute_dev_command",
|
|
13
|
+
"execute_init_command",
|
|
14
|
+
"setup_deploy_parsers",
|
|
15
|
+
]
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"""Bundle a deepagents project for deployment.
|
|
2
|
+
|
|
3
|
+
Reads the canonical project layout:
|
|
4
|
+
|
|
5
|
+
```txt
|
|
6
|
+
src/
|
|
7
|
+
AGENTS.md # required — system prompt + seeded memory
|
|
8
|
+
skills/ # optional — auto-seeded into skills namespace
|
|
9
|
+
mcp.json # optional — HTTP/SSE MCP servers
|
|
10
|
+
deepagents.toml
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
...and writes everything `langgraph deploy` needs to a build directory.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import json
|
|
19
|
+
import logging
|
|
20
|
+
import shutil
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
|
|
23
|
+
from deepagents_cli.deploy.config import (
|
|
24
|
+
AGENTS_MD_FILENAME,
|
|
25
|
+
MCP_FILENAME,
|
|
26
|
+
SKILLS_DIRNAME,
|
|
27
|
+
DeployConfig,
|
|
28
|
+
)
|
|
29
|
+
from deepagents_cli.deploy.templates import (
|
|
30
|
+
DEPLOY_GRAPH_TEMPLATE,
|
|
31
|
+
MCP_TOOLS_TEMPLATE,
|
|
32
|
+
PYPROJECT_TEMPLATE,
|
|
33
|
+
SANDBOX_BLOCKS,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
logger = logging.getLogger(__name__)
|
|
37
|
+
|
|
38
|
+
_MODEL_PROVIDER_DEPS = {
|
|
39
|
+
"anthropic": "langchain-anthropic",
|
|
40
|
+
"openai": "langchain-openai",
|
|
41
|
+
"google_genai": "langchain-google-genai",
|
|
42
|
+
"google_vertexai": "langchain-google-vertexai",
|
|
43
|
+
"groq": "langchain-groq",
|
|
44
|
+
"mistralai": "langchain-mistralai",
|
|
45
|
+
}
|
|
46
|
+
"""Dependencies inferred from a provider: prefix on the model string."""
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def bundle(
|
|
50
|
+
config: DeployConfig,
|
|
51
|
+
project_root: Path,
|
|
52
|
+
build_dir: Path,
|
|
53
|
+
) -> Path:
|
|
54
|
+
"""Create the full deployment bundle in *build_dir*."""
|
|
55
|
+
build_dir.mkdir(parents=True, exist_ok=True)
|
|
56
|
+
|
|
57
|
+
# 1. Read AGENTS.md — the system prompt AND (optionally) seeded memory.
|
|
58
|
+
agents_md_path = project_root / AGENTS_MD_FILENAME
|
|
59
|
+
system_prompt = agents_md_path.read_text(encoding="utf-8")
|
|
60
|
+
|
|
61
|
+
# 2. Build and write the seed payload: memory (AGENTS.md) + skills/.
|
|
62
|
+
seed = _build_seed(config, project_root, system_prompt)
|
|
63
|
+
(build_dir / "_seed.json").write_text(
|
|
64
|
+
json.dumps(seed, indent=2, ensure_ascii=False),
|
|
65
|
+
encoding="utf-8",
|
|
66
|
+
)
|
|
67
|
+
logger.info(
|
|
68
|
+
"Wrote _seed.json (memories: %d, skills: %d)",
|
|
69
|
+
len(seed["memories"]),
|
|
70
|
+
len(seed["skills"]),
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
# 3. Copy mcp.json if present.
|
|
74
|
+
mcp_present = (project_root / MCP_FILENAME).is_file()
|
|
75
|
+
if mcp_present:
|
|
76
|
+
shutil.copy2(project_root / MCP_FILENAME, build_dir / "_mcp.json")
|
|
77
|
+
logger.info("Copied %s → _mcp.json", MCP_FILENAME)
|
|
78
|
+
|
|
79
|
+
# 3b. Copy .env from the project root if present (i.e. alongside
|
|
80
|
+
# deepagents.toml inside ``src/``). The bundler skips .env when
|
|
81
|
+
# building the seed payload so secrets never land in _seed.json.
|
|
82
|
+
env_src = project_root / ".env"
|
|
83
|
+
env_present = env_src.is_file()
|
|
84
|
+
if env_present:
|
|
85
|
+
shutil.copy2(env_src, build_dir / ".env")
|
|
86
|
+
logger.info("Copied %s → .env", env_src)
|
|
87
|
+
|
|
88
|
+
# 4. Render deploy_graph.py.
|
|
89
|
+
(build_dir / "deploy_graph.py").write_text(
|
|
90
|
+
_render_deploy_graph(config, system_prompt, mcp_present=mcp_present),
|
|
91
|
+
encoding="utf-8",
|
|
92
|
+
)
|
|
93
|
+
logger.info("Generated deploy_graph.py")
|
|
94
|
+
|
|
95
|
+
# 5. Render langgraph.json.
|
|
96
|
+
(build_dir / "langgraph.json").write_text(
|
|
97
|
+
_render_langgraph_json(env_present=env_present),
|
|
98
|
+
encoding="utf-8",
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
# 6. Render pyproject.toml.
|
|
102
|
+
(build_dir / "pyproject.toml").write_text(
|
|
103
|
+
_render_pyproject(config, mcp_present=mcp_present),
|
|
104
|
+
encoding="utf-8",
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
return build_dir
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def _build_seed(
|
|
111
|
+
config: DeployConfig, # noqa: ARG001
|
|
112
|
+
project_root: Path,
|
|
113
|
+
system_prompt: str,
|
|
114
|
+
) -> dict[str, dict[str, str]]:
|
|
115
|
+
"""Build the `_seed.json` payload.
|
|
116
|
+
|
|
117
|
+
Layout:
|
|
118
|
+
|
|
119
|
+
```txt
|
|
120
|
+
{
|
|
121
|
+
"memories": { "AGENTS.md": "..." },
|
|
122
|
+
"skills": { "<skill>/SKILL.md": "...", ... }
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
`memories` always contains `AGENTS.md` — the agent reads it at runtime
|
|
127
|
+
via `/memories/AGENTS.md`. Writes and edits to that path are blocked
|
|
128
|
+
by `ReadOnlyStoreBackend` in the generated graph.
|
|
129
|
+
|
|
130
|
+
`skills` walks `src/skills/` if present. Keys are paths relative to the
|
|
131
|
+
skills dir; the runtime namespace handles the scoping.
|
|
132
|
+
"""
|
|
133
|
+
# Keys must match what CompositeBackend passes to the mounted
|
|
134
|
+
# StoreBackend after stripping the route prefix: for a read of
|
|
135
|
+
# /memories/AGENTS.md it calls store.read("/AGENTS.md").
|
|
136
|
+
# Seed with the same leading-slash convention.
|
|
137
|
+
memories: dict[str, str] = {f"/{AGENTS_MD_FILENAME}": system_prompt}
|
|
138
|
+
skills: dict[str, str] = {}
|
|
139
|
+
|
|
140
|
+
skills_dir = project_root / SKILLS_DIRNAME
|
|
141
|
+
if skills_dir.is_dir():
|
|
142
|
+
for f in sorted(skills_dir.rglob("*")):
|
|
143
|
+
if f.is_file() and not f.name.startswith("."):
|
|
144
|
+
rel = f.relative_to(skills_dir).as_posix()
|
|
145
|
+
skills[f"/{rel}"] = f.read_text(encoding="utf-8")
|
|
146
|
+
|
|
147
|
+
return {"memories": memories, "skills": skills}
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def _render_deploy_graph(
|
|
151
|
+
config: DeployConfig,
|
|
152
|
+
system_prompt: str,
|
|
153
|
+
*,
|
|
154
|
+
mcp_present: bool,
|
|
155
|
+
) -> str:
|
|
156
|
+
"""Render the generated `deploy_graph.py`."""
|
|
157
|
+
provider = config.sandbox.provider
|
|
158
|
+
if provider not in SANDBOX_BLOCKS:
|
|
159
|
+
msg = f"Unknown sandbox provider {provider!r}. Valid: {sorted(SANDBOX_BLOCKS)}"
|
|
160
|
+
raise ValueError(msg)
|
|
161
|
+
sandbox_block, _ = SANDBOX_BLOCKS[provider]
|
|
162
|
+
|
|
163
|
+
if mcp_present:
|
|
164
|
+
mcp_tools_block = MCP_TOOLS_TEMPLATE
|
|
165
|
+
mcp_tools_load_call = "tools.extend(await _load_mcp_tools())"
|
|
166
|
+
else:
|
|
167
|
+
mcp_tools_block = ""
|
|
168
|
+
mcp_tools_load_call = "pass # no MCP servers configured"
|
|
169
|
+
|
|
170
|
+
return DEPLOY_GRAPH_TEMPLATE.format(
|
|
171
|
+
model=config.agent.model,
|
|
172
|
+
system_prompt=system_prompt,
|
|
173
|
+
sandbox_template=config.sandbox.template,
|
|
174
|
+
sandbox_image=config.sandbox.image,
|
|
175
|
+
sandbox_scope=config.sandbox.scope,
|
|
176
|
+
sandbox_block=sandbox_block,
|
|
177
|
+
mcp_tools_block=mcp_tools_block,
|
|
178
|
+
mcp_tools_load_call=mcp_tools_load_call,
|
|
179
|
+
default_assistant_id=config.agent.name,
|
|
180
|
+
)
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
def _render_langgraph_json(*, env_present: bool) -> str:
|
|
184
|
+
"""Render `langgraph.json` — adds `"env": ".env"` when a `.env` was copied."""
|
|
185
|
+
data: dict = {
|
|
186
|
+
"dependencies": ["."],
|
|
187
|
+
"graphs": {"agent": "./deploy_graph.py:make_graph"},
|
|
188
|
+
"python_version": "3.12",
|
|
189
|
+
}
|
|
190
|
+
if env_present:
|
|
191
|
+
data["env"] = ".env"
|
|
192
|
+
return json.dumps(data, indent=2) + "\n"
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def _render_pyproject(config: DeployConfig, *, mcp_present: bool) -> str:
|
|
196
|
+
"""Render the deployment package's `pyproject.toml`.
|
|
197
|
+
|
|
198
|
+
Deps are inferred — the user never writes them. We add:
|
|
199
|
+
|
|
200
|
+
- the LangChain partner package matching the model provider prefix
|
|
201
|
+
- `langchain-mcp-adapters` if `mcp.json` is present
|
|
202
|
+
- the sandbox partner package (daytona/modal/runloop)
|
|
203
|
+
"""
|
|
204
|
+
deps: list[str] = []
|
|
205
|
+
|
|
206
|
+
provider_prefix = (
|
|
207
|
+
config.agent.model.split(":", 1)[0] if ":" in config.agent.model else ""
|
|
208
|
+
)
|
|
209
|
+
if provider_prefix and provider_prefix in _MODEL_PROVIDER_DEPS:
|
|
210
|
+
deps.append(_MODEL_PROVIDER_DEPS[provider_prefix])
|
|
211
|
+
|
|
212
|
+
if mcp_present:
|
|
213
|
+
deps.append("langchain-mcp-adapters")
|
|
214
|
+
|
|
215
|
+
_, partner_pkg = SANDBOX_BLOCKS.get(config.sandbox.provider, (None, None))
|
|
216
|
+
if partner_pkg:
|
|
217
|
+
deps.append(partner_pkg)
|
|
218
|
+
|
|
219
|
+
extra_deps_lines = "".join(f' "{dep}",\n' for dep in deps)
|
|
220
|
+
|
|
221
|
+
return PYPROJECT_TEMPLATE.format(
|
|
222
|
+
agent_name=config.agent.name,
|
|
223
|
+
extra_deps=extra_deps_lines,
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def print_bundle_summary(config: DeployConfig, build_dir: Path) -> None:
|
|
228
|
+
"""Print a human-readable summary of what was bundled."""
|
|
229
|
+
seed_path = build_dir / "_seed.json"
|
|
230
|
+
seed: dict[str, dict[str, str]] = {"memories": {}, "skills": {}}
|
|
231
|
+
if seed_path.exists():
|
|
232
|
+
try:
|
|
233
|
+
seed = json.loads(seed_path.read_text(encoding="utf-8"))
|
|
234
|
+
except Exception:
|
|
235
|
+
pass
|
|
236
|
+
|
|
237
|
+
print(f"\n Agent: {config.agent.name}")
|
|
238
|
+
print(f" Model: {config.agent.model}")
|
|
239
|
+
|
|
240
|
+
memory_files = sorted(seed.get("memories", {}).keys())
|
|
241
|
+
if memory_files:
|
|
242
|
+
print(f"\n Memory seed ({len(memory_files)} file(s)):")
|
|
243
|
+
for f in memory_files:
|
|
244
|
+
print(f" {f}")
|
|
245
|
+
|
|
246
|
+
skills_files = sorted(seed.get("skills", {}).keys())
|
|
247
|
+
if skills_files:
|
|
248
|
+
print(f"\n Skills seed ({len(skills_files)} file(s)):")
|
|
249
|
+
for f in skills_files:
|
|
250
|
+
print(f" {f}")
|
|
251
|
+
|
|
252
|
+
if (build_dir / "_mcp.json").exists():
|
|
253
|
+
print("\n MCP config: _mcp.json")
|
|
254
|
+
|
|
255
|
+
print(f"\n Sandbox: {config.sandbox.provider}")
|
|
256
|
+
print(f"\n Build directory: {build_dir}")
|
|
257
|
+
generated = sorted(f.name for f in build_dir.iterdir() if f.is_file())
|
|
258
|
+
print(f" Generated files: {', '.join(generated)}")
|
|
259
|
+
print()
|