deepagents-cli 0.0.58__tar.gz → 0.1.0__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.58 → deepagents_cli-0.1.0}/CHANGELOG.md +15 -0
- deepagents_cli-0.1.0/DEV.md +44 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/Makefile +3 -12
- deepagents_cli-0.1.0/PKG-INFO +99 -0
- deepagents_cli-0.1.0/README.md +49 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/THREAT_MODEL.md +9 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/__init__.py +9 -7
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/__main__.py +1 -1
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/_version.py +3 -1
- deepagents_cli-0.1.0/deepagents_cli/config.py +128 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/commands.py +3 -0
- deepagents_cli-0.1.0/deepagents_cli/main.py +167 -0
- deepagents_cli-0.1.0/deepagents_cli/model_config.py +55 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/package-lock.json +3 -3
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/pyproject.toml +7 -96
- deepagents_cli-0.1.0/tests/unit_tests/conftest.py +32 -0
- deepagents_cli-0.1.0/tests/unit_tests/test_version.py +49 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/uv.lock +9 -2749
- deepagents_cli-0.0.58/DEV.md +0 -92
- deepagents_cli-0.0.58/PKG-INFO +0 -204
- deepagents_cli-0.0.58/README.md +0 -71
- deepagents_cli-0.0.58/deepagents_cli/_ask_user_types.py +0 -90
- deepagents_cli-0.0.58/deepagents_cli/_cli_context.py +0 -27
- deepagents_cli-0.0.58/deepagents_cli/_constants.py +0 -14
- deepagents_cli-0.0.58/deepagents_cli/_debug.py +0 -52
- deepagents_cli-0.0.58/deepagents_cli/_env_vars.py +0 -173
- deepagents_cli-0.0.58/deepagents_cli/_git.py +0 -236
- deepagents_cli-0.0.58/deepagents_cli/_server_config.py +0 -351
- deepagents_cli-0.0.58/deepagents_cli/_session_stats.py +0 -114
- deepagents_cli-0.0.58/deepagents_cli/_testing_models.py +0 -144
- deepagents_cli-0.0.58/deepagents_cli/_textual_patches.py +0 -66
- deepagents_cli-0.0.58/deepagents_cli/agent.py +0 -1286
- deepagents_cli-0.0.58/deepagents_cli/app.py +0 -8687
- deepagents_cli-0.0.58/deepagents_cli/app.tcss +0 -334
- deepagents_cli-0.0.58/deepagents_cli/ask_user.py +0 -301
- deepagents_cli-0.0.58/deepagents_cli/auth_store.py +0 -363
- deepagents_cli-0.0.58/deepagents_cli/built_in_skills/__init__.py +0 -5
- deepagents_cli-0.0.58/deepagents_cli/built_in_skills/remember/SKILL.md +0 -118
- deepagents_cli-0.0.58/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -383
- deepagents_cli-0.0.58/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -366
- deepagents_cli-0.0.58/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -158
- deepagents_cli-0.0.58/deepagents_cli/clipboard.py +0 -155
- deepagents_cli-0.0.58/deepagents_cli/command_registry.py +0 -358
- deepagents_cli-0.0.58/deepagents_cli/config.py +0 -2567
- deepagents_cli-0.0.58/deepagents_cli/configurable_model.py +0 -201
- deepagents_cli-0.0.58/deepagents_cli/default_agent_prompt.md +0 -12
- deepagents_cli-0.0.58/deepagents_cli/editor.py +0 -142
- deepagents_cli-0.0.58/deepagents_cli/event_bus.py +0 -411
- deepagents_cli-0.0.58/deepagents_cli/extras_info.py +0 -260
- deepagents_cli-0.0.58/deepagents_cli/file_ops.py +0 -473
- deepagents_cli-0.0.58/deepagents_cli/formatting.py +0 -28
- deepagents_cli-0.0.58/deepagents_cli/hooks.py +0 -209
- deepagents_cli-0.0.58/deepagents_cli/input.py +0 -787
- deepagents_cli-0.0.58/deepagents_cli/integrations/__init__.py +0 -1
- deepagents_cli-0.0.58/deepagents_cli/integrations/sandbox_factory.py +0 -899
- deepagents_cli-0.0.58/deepagents_cli/integrations/sandbox_provider.py +0 -71
- deepagents_cli-0.0.58/deepagents_cli/iterm_cursor_guide.py +0 -176
- deepagents_cli-0.0.58/deepagents_cli/local_context.py +0 -738
- deepagents_cli-0.0.58/deepagents_cli/main.py +0 -2258
- deepagents_cli-0.0.58/deepagents_cli/mcp_auth.py +0 -712
- deepagents_cli-0.0.58/deepagents_cli/mcp_commands.py +0 -204
- deepagents_cli-0.0.58/deepagents_cli/mcp_providers/__init__.py +0 -23
- deepagents_cli-0.0.58/deepagents_cli/mcp_providers/_registry.py +0 -39
- deepagents_cli-0.0.58/deepagents_cli/mcp_providers/base.py +0 -99
- deepagents_cli-0.0.58/deepagents_cli/mcp_providers/github.py +0 -91
- deepagents_cli-0.0.58/deepagents_cli/mcp_providers/slack.py +0 -130
- deepagents_cli-0.0.58/deepagents_cli/mcp_tools.py +0 -1532
- deepagents_cli-0.0.58/deepagents_cli/mcp_trust.py +0 -167
- deepagents_cli-0.0.58/deepagents_cli/media_utils.py +0 -478
- deepagents_cli-0.0.58/deepagents_cli/model_config.py +0 -2749
- deepagents_cli-0.0.58/deepagents_cli/non_interactive.py +0 -1197
- deepagents_cli-0.0.58/deepagents_cli/notifications.py +0 -244
- deepagents_cli-0.0.58/deepagents_cli/offload.py +0 -402
- deepagents_cli-0.0.58/deepagents_cli/onboarding.py +0 -188
- deepagents_cli-0.0.58/deepagents_cli/output.py +0 -69
- deepagents_cli-0.0.58/deepagents_cli/project_utils.py +0 -231
- deepagents_cli-0.0.58/deepagents_cli/remote_client.py +0 -537
- deepagents_cli-0.0.58/deepagents_cli/server.py +0 -558
- deepagents_cli-0.0.58/deepagents_cli/server_graph.py +0 -230
- deepagents_cli-0.0.58/deepagents_cli/server_manager.py +0 -428
- deepagents_cli-0.0.58/deepagents_cli/sessions.py +0 -1302
- deepagents_cli-0.0.58/deepagents_cli/skills/__init__.py +0 -18
- deepagents_cli-0.0.58/deepagents_cli/skills/commands.py +0 -1090
- deepagents_cli-0.0.58/deepagents_cli/skills/invocation.py +0 -103
- deepagents_cli-0.0.58/deepagents_cli/skills/load.py +0 -192
- deepagents_cli-0.0.58/deepagents_cli/state_migration.py +0 -136
- deepagents_cli-0.0.58/deepagents_cli/subagents.py +0 -173
- deepagents_cli-0.0.58/deepagents_cli/system_prompt.md +0 -243
- deepagents_cli-0.0.58/deepagents_cli/terminal_capabilities.py +0 -115
- deepagents_cli-0.0.58/deepagents_cli/terminal_escape.py +0 -287
- deepagents_cli-0.0.58/deepagents_cli/textual_adapter.py +0 -1544
- deepagents_cli-0.0.58/deepagents_cli/theme.py +0 -867
- deepagents_cli-0.0.58/deepagents_cli/token_state.py +0 -31
- deepagents_cli-0.0.58/deepagents_cli/tool_display.py +0 -298
- deepagents_cli-0.0.58/deepagents_cli/tools.py +0 -167
- deepagents_cli-0.0.58/deepagents_cli/ui.py +0 -546
- deepagents_cli-0.0.58/deepagents_cli/unicode_security.py +0 -516
- deepagents_cli-0.0.58/deepagents_cli/update_check.py +0 -977
- deepagents_cli-0.0.58/deepagents_cli/widgets/__init__.py +0 -9
- deepagents_cli-0.0.58/deepagents_cli/widgets/_links.py +0 -96
- deepagents_cli-0.0.58/deepagents_cli/widgets/agent_selector.py +0 -420
- deepagents_cli-0.0.58/deepagents_cli/widgets/approval.py +0 -599
- deepagents_cli-0.0.58/deepagents_cli/widgets/ask_user.py +0 -485
- deepagents_cli-0.0.58/deepagents_cli/widgets/auth.py +0 -633
- deepagents_cli-0.0.58/deepagents_cli/widgets/autocomplete.py +0 -703
- deepagents_cli-0.0.58/deepagents_cli/widgets/chat_input.py +0 -2181
- deepagents_cli-0.0.58/deepagents_cli/widgets/diff.py +0 -248
- deepagents_cli-0.0.58/deepagents_cli/widgets/history.py +0 -188
- deepagents_cli-0.0.58/deepagents_cli/widgets/launch_init.py +0 -363
- deepagents_cli-0.0.58/deepagents_cli/widgets/loading.py +0 -208
- deepagents_cli-0.0.58/deepagents_cli/widgets/mcp_viewer.py +0 -432
- deepagents_cli-0.0.58/deepagents_cli/widgets/message_store.py +0 -742
- deepagents_cli-0.0.58/deepagents_cli/widgets/messages.py +0 -2142
- deepagents_cli-0.0.58/deepagents_cli/widgets/model_selector.py +0 -1177
- deepagents_cli-0.0.58/deepagents_cli/widgets/notification_center.py +0 -399
- deepagents_cli-0.0.58/deepagents_cli/widgets/notification_detail.py +0 -257
- deepagents_cli-0.0.58/deepagents_cli/widgets/notification_settings.py +0 -170
- deepagents_cli-0.0.58/deepagents_cli/widgets/status.py +0 -457
- deepagents_cli-0.0.58/deepagents_cli/widgets/theme_selector.py +0 -347
- deepagents_cli-0.0.58/deepagents_cli/widgets/thread_selector.py +0 -2228
- deepagents_cli-0.0.58/deepagents_cli/widgets/tool_renderers.py +0 -148
- deepagents_cli-0.0.58/deepagents_cli/widgets/tool_widgets.py +0 -274
- deepagents_cli-0.0.58/deepagents_cli/widgets/update_available.py +0 -311
- deepagents_cli-0.0.58/deepagents_cli/widgets/update_progress.py +0 -279
- deepagents_cli-0.0.58/deepagents_cli/widgets/welcome.py +0 -490
- deepagents_cli-0.0.58/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -185
- deepagents_cli-0.0.58/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -339
- deepagents_cli-0.0.58/tests/integration_tests/test_acp_mode.py +0 -117
- deepagents_cli-0.0.58/tests/integration_tests/test_compact_resume.py +0 -204
- deepagents_cli-0.0.58/tests/integration_tests/test_sandbox_factory.py +0 -349
- deepagents_cli-0.0.58/tests/integration_tests/test_sandbox_operations.py +0 -1179
- deepagents_cli-0.0.58/tests/unit_tests/conftest.py +0 -168
- deepagents_cli-0.0.58/tests/unit_tests/deploy/__init__.py +0 -0
- deepagents_cli-0.0.58/tests/unit_tests/skills/__init__.py +0 -1
- deepagents_cli-0.0.58/tests/unit_tests/skills/test_commands.py +0 -1338
- deepagents_cli-0.0.58/tests/unit_tests/skills/test_load.py +0 -818
- deepagents_cli-0.0.58/tests/unit_tests/skills/test_skills_json.py +0 -154
- deepagents_cli-0.0.58/tests/unit_tests/test_agent.py +0 -2406
- deepagents_cli-0.0.58/tests/unit_tests/test_agent_friendly.py +0 -605
- deepagents_cli-0.0.58/tests/unit_tests/test_agent_selector.py +0 -466
- deepagents_cli-0.0.58/tests/unit_tests/test_app.py +0 -8193
- deepagents_cli-0.0.58/tests/unit_tests/test_approval.py +0 -641
- deepagents_cli-0.0.58/tests/unit_tests/test_args.py +0 -581
- deepagents_cli-0.0.58/tests/unit_tests/test_ask_user.py +0 -779
- deepagents_cli-0.0.58/tests/unit_tests/test_ask_user_middleware.py +0 -221
- deepagents_cli-0.0.58/tests/unit_tests/test_auth_store.py +0 -266
- deepagents_cli-0.0.58/tests/unit_tests/test_auth_widgets.py +0 -390
- deepagents_cli-0.0.58/tests/unit_tests/test_autocomplete.py +0 -592
- deepagents_cli-0.0.58/tests/unit_tests/test_charset.py +0 -360
- deepagents_cli-0.0.58/tests/unit_tests/test_chat_input.py +0 -2869
- deepagents_cli-0.0.58/tests/unit_tests/test_clipboard.py +0 -274
- deepagents_cli-0.0.58/tests/unit_tests/test_command_registry.py +0 -221
- deepagents_cli-0.0.58/tests/unit_tests/test_compact_tool.py +0 -40
- deepagents_cli-0.0.58/tests/unit_tests/test_config.py +0 -3004
- deepagents_cli-0.0.58/tests/unit_tests/test_configurable_model.py +0 -609
- deepagents_cli-0.0.58/tests/unit_tests/test_debug.py +0 -69
- deepagents_cli-0.0.58/tests/unit_tests/test_editor.py +0 -274
- deepagents_cli-0.0.58/tests/unit_tests/test_end_to_end.py +0 -435
- deepagents_cli-0.0.58/tests/unit_tests/test_env_vars.py +0 -135
- deepagents_cli-0.0.58/tests/unit_tests/test_event_bus.py +0 -445
- deepagents_cli-0.0.58/tests/unit_tests/test_exception_handling.py +0 -244
- deepagents_cli-0.0.58/tests/unit_tests/test_extras_info.py +0 -240
- deepagents_cli-0.0.58/tests/unit_tests/test_file_ops.py +0 -120
- deepagents_cli-0.0.58/tests/unit_tests/test_formatting.py +0 -66
- deepagents_cli-0.0.58/tests/unit_tests/test_git.py +0 -264
- deepagents_cli-0.0.58/tests/unit_tests/test_history.py +0 -233
- deepagents_cli-0.0.58/tests/unit_tests/test_hooks.py +0 -357
- deepagents_cli-0.0.58/tests/unit_tests/test_imports.py +0 -29
- deepagents_cli-0.0.58/tests/unit_tests/test_input_parsing.py +0 -414
- deepagents_cli-0.0.58/tests/unit_tests/test_iterm_cursor_guide.py +0 -256
- deepagents_cli-0.0.58/tests/unit_tests/test_launch_init.py +0 -336
- deepagents_cli-0.0.58/tests/unit_tests/test_links.py +0 -42
- deepagents_cli-0.0.58/tests/unit_tests/test_loading.py +0 -86
- deepagents_cli-0.0.58/tests/unit_tests/test_local_context.py +0 -1541
- deepagents_cli-0.0.58/tests/unit_tests/test_main.py +0 -1212
- deepagents_cli-0.0.58/tests/unit_tests/test_main_acp_mode.py +0 -186
- deepagents_cli-0.0.58/tests/unit_tests/test_main_args.py +0 -1032
- deepagents_cli-0.0.58/tests/unit_tests/test_mcp_auth.py +0 -967
- deepagents_cli-0.0.58/tests/unit_tests/test_mcp_commands.py +0 -332
- deepagents_cli-0.0.58/tests/unit_tests/test_mcp_tools.py +0 -2277
- deepagents_cli-0.0.58/tests/unit_tests/test_mcp_trust.py +0 -112
- deepagents_cli-0.0.58/tests/unit_tests/test_mcp_viewer.py +0 -197
- deepagents_cli-0.0.58/tests/unit_tests/test_media_utils.py +0 -733
- deepagents_cli-0.0.58/tests/unit_tests/test_message_store.py +0 -867
- deepagents_cli-0.0.58/tests/unit_tests/test_messages.py +0 -1342
- deepagents_cli-0.0.58/tests/unit_tests/test_model_config.py +0 -4341
- deepagents_cli-0.0.58/tests/unit_tests/test_model_selector.py +0 -1314
- deepagents_cli-0.0.58/tests/unit_tests/test_model_switch.py +0 -1122
- deepagents_cli-0.0.58/tests/unit_tests/test_non_interactive.py +0 -1562
- deepagents_cli-0.0.58/tests/unit_tests/test_notification_center.py +0 -312
- deepagents_cli-0.0.58/tests/unit_tests/test_notification_detail.py +0 -133
- deepagents_cli-0.0.58/tests/unit_tests/test_notifications.py +0 -204
- deepagents_cli-0.0.58/tests/unit_tests/test_offload.py +0 -1510
- deepagents_cli-0.0.58/tests/unit_tests/test_offload_dict_messages.py +0 -335
- deepagents_cli-0.0.58/tests/unit_tests/test_onboarding.py +0 -241
- deepagents_cli-0.0.58/tests/unit_tests/test_output.py +0 -62
- deepagents_cli-0.0.58/tests/unit_tests/test_reload.py +0 -632
- deepagents_cli-0.0.58/tests/unit_tests/test_remote_client.py +0 -615
- deepagents_cli-0.0.58/tests/unit_tests/test_sandbox_factory.py +0 -505
- deepagents_cli-0.0.58/tests/unit_tests/test_server.py +0 -321
- deepagents_cli-0.0.58/tests/unit_tests/test_server_config.py +0 -217
- deepagents_cli-0.0.58/tests/unit_tests/test_server_graph.py +0 -139
- deepagents_cli-0.0.58/tests/unit_tests/test_server_helpers.py +0 -95
- deepagents_cli-0.0.58/tests/unit_tests/test_server_manager.py +0 -340
- deepagents_cli-0.0.58/tests/unit_tests/test_session_stats.py +0 -151
- deepagents_cli-0.0.58/tests/unit_tests/test_sessions.py +0 -1860
- deepagents_cli-0.0.58/tests/unit_tests/test_shell_allow_list.py +0 -719
- deepagents_cli-0.0.58/tests/unit_tests/test_skill_invocation.py +0 -596
- deepagents_cli-0.0.58/tests/unit_tests/test_startup_fast_paths.py +0 -213
- deepagents_cli-0.0.58/tests/unit_tests/test_state_migration.py +0 -204
- deepagents_cli-0.0.58/tests/unit_tests/test_status.py +0 -430
- deepagents_cli-0.0.58/tests/unit_tests/test_subagents.py +0 -431
- deepagents_cli-0.0.58/tests/unit_tests/test_terminal_capabilities.py +0 -203
- deepagents_cli-0.0.58/tests/unit_tests/test_terminal_escape.py +0 -377
- deepagents_cli-0.0.58/tests/unit_tests/test_textual_adapter.py +0 -2334
- deepagents_cli-0.0.58/tests/unit_tests/test_textual_patches.py +0 -92
- deepagents_cli-0.0.58/tests/unit_tests/test_theme.py +0 -2543
- deepagents_cli-0.0.58/tests/unit_tests/test_thread_selector.py +0 -3374
- deepagents_cli-0.0.58/tests/unit_tests/test_token_tracker.py +0 -150
- deepagents_cli-0.0.58/tests/unit_tests/test_tool_display.py +0 -470
- deepagents_cli-0.0.58/tests/unit_tests/test_ui.py +0 -388
- deepagents_cli-0.0.58/tests/unit_tests/test_unicode_security.py +0 -246
- deepagents_cli-0.0.58/tests/unit_tests/test_update_available.py +0 -183
- deepagents_cli-0.0.58/tests/unit_tests/test_update_check.py +0 -1424
- deepagents_cli-0.0.58/tests/unit_tests/test_update_progress.py +0 -116
- deepagents_cli-0.0.58/tests/unit_tests/test_version.py +0 -396
- deepagents_cli-0.0.58/tests/unit_tests/test_welcome.py +0 -665
- deepagents_cli-0.0.58/tests/unit_tests/tools/__init__.py +0 -0
- deepagents_cli-0.0.58/tests/unit_tests/tools/test_fetch_url.py +0 -72
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/.gitignore +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/__init__.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/bundler.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/config.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/context_hub.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/frontend_dist/assets/anonymous-B9UzAXQd.js +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/frontend_dist/assets/clerk-5xHgyQyG.js +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/frontend_dist/assets/highlighted-body-OFNGDK62-rX-7qT8o.js +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/frontend_dist/assets/index-DM3gptpu.js +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/frontend_dist/assets/index-Ddy7F6KI.css +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/frontend_dist/assets/supabase-S6NACDgm.js +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/frontend_dist/index.html +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/frontend_dist/logo-dark.svg +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/frontend_dist/logo-light.svg +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/deploy/templates.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/deepagents_cli/py.typed +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/examples/deploy-content-writer/.env.example +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/examples/deploy-content-writer/skills/blog-post/SKILL.md +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/examples/deploy-content-writer/skills/social-media/SKILL.md +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/examples/deploy-content-writer/user/context.md +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/examples/deploy-content-writer/user/preferences.md +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/examples/skills/arxiv-search/SKILL.md +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/examples/skills/arxiv-search/arxiv_search.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/examples/skills/langgraph-docs/SKILL.md +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/examples/skills/skill-creator/SKILL.md +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/examples/skills/web-research/SKILL.md +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/.nvmrc +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/index.html +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/package.json +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/postcss.config.js +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/public/logo-dark.svg +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/public/logo-light.svg +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/App.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/ThemeProvider.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/auth/anonymous.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/auth/clerk.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/auth/loader.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/auth/supabase.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/auth/types.ts +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/components/AppHeader.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/components/FilePanels.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/components/MessageList.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/components/SubagentActivity.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/components/ThreadPicker.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/components/TodosPanel.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/components/ToolCallCard.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/components/toolcalls/FileToolCard.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/components/toolcalls/SearchCard.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/components/toolcalls/ThinkCard.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/components/toolcalls/TodosCard.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/components/toolcalls/index.ts +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/constants.ts +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/index.css +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/main.tsx +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/runtimeConfig.ts +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/types.ts +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/src/vite-env.d.ts +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/tsconfig.json +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/frontend/vite.config.ts +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/images/cli.png +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/scripts/check_imports.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/scripts/debug_server.sh +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/scripts/install.sh +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/tests/README.md +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/tests/integration_tests/__init__.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/tests/integration_tests/conftest.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/tests/integration_tests/test_context_hub.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/tests/integration_tests/test_deploy_hub.py +0 -0
- {deepagents_cli-0.0.58/tests/integration_tests/benchmarks → deepagents_cli-0.1.0/tests/unit_tests}/__init__.py +0 -0
- {deepagents_cli-0.0.58/tests/unit_tests → deepagents_cli-0.1.0/tests/unit_tests/deploy}/__init__.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/tests/unit_tests/deploy/test_bundler.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/tests/unit_tests/deploy/test_commands.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/tests/unit_tests/deploy/test_config.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/tests/unit_tests/deploy/test_context_hub.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/tests/unit_tests/deploy/test_frontend_bundle.py +0 -0
- {deepagents_cli-0.0.58 → deepagents_cli-0.1.0}/tests/unit_tests/deploy/test_frontend_config.py +0 -0
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Deep Agents CLI Changelog
|
|
2
2
|
|
|
3
|
+
From 0.1.0 onward, `deepagents-cli` only contains `deploy`, `dev`, and `init`.
|
|
4
|
+
The coding agent (interactive TUI & headless CLI) moved to [`deepagents-code`](https://github.com/langchain-ai/deepagents/blob/main/libs/code/CHANGELOG.md).
|
|
5
|
+
|
|
6
|
+
## [0.1.0](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.59...deepagents-cli==0.1.0) (2026-05-16)
|
|
7
|
+
|
|
8
|
+
### ⚠ BREAKING CHANGES
|
|
9
|
+
|
|
10
|
+
* Removes the interactive TUI / coding-agent surface from `deepagents-cli`. The package now only ships the `deploy` command and supporting config. Users relying on the chat REPL, sessions, MCP tooling, skills, and related widgets should migrate to `deepagents-code`.
|
|
11
|
+
|
|
12
|
+
## [0.0.59](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.58...deepagents-cli==0.0.59) (2026-05-12)
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
* Prevent import deadlock during skill discovery and prewarm ([#3385](https://github.com/langchain-ai/deepagents/issues/3385)) ([0bf8dd1](https://github.com/langchain-ai/deepagents/commit/0bf8dd1cfd680bd4d27ce19295f96c720f525787))
|
|
17
|
+
|
|
3
18
|
## [0.0.58](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.57...deepagents-cli==0.0.58) (2026-05-12)
|
|
4
19
|
|
|
5
20
|
### Features
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# CLI Development Guide
|
|
2
|
+
|
|
3
|
+
`deepagents-cli` now contains only the deployment subcommands (`init`, `dev`,
|
|
4
|
+
`deploy`). For interactive-REPL development guidance, see
|
|
5
|
+
[`libs/code/DEV.md`](../code/DEV.md).
|
|
6
|
+
|
|
7
|
+
## Local setup
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
cd libs/cli && uv sync --group test
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Run the CLI from a checkout:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
uv run python -m deepagents_cli init my-agent
|
|
17
|
+
uv run python -m deepagents_cli dev --config my-agent/deepagents.toml
|
|
18
|
+
uv run python -m deepagents_cli deploy --config my-agent/deepagents.toml --dry-run
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Tests
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
make test # unit tests (no network)
|
|
25
|
+
make lint # ruff + ty
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Integration tests in `tests/integration_tests/` exercise the LangSmith Hub
|
|
29
|
+
seeding path and require `LANGSMITH_API_KEY` to be set.
|
|
30
|
+
|
|
31
|
+
## `langgraph` subcommand interop
|
|
32
|
+
|
|
33
|
+
`dev` and `deploy` shell out to the `langgraph` CLI (`langgraph-cli[inmem]`
|
|
34
|
+
runtime dependency). When debugging dev-server startup failures, run the
|
|
35
|
+
generated command manually from the build directory printed by
|
|
36
|
+
`print_bundle_summary`:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
cd /tmp/deepagents-dev-XXXX
|
|
40
|
+
langgraph dev --port 2024 --allow-blocking
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The bundle is self-contained — re-running `langgraph dev` from the build
|
|
44
|
+
directory reproduces the failure without re-bundling.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
.PHONY: format lint type typecheck test tests integration_test integration_tests test_watch
|
|
1
|
+
.PHONY: format lint type typecheck test tests integration_test integration_tests test_watch help run lint_package lint_tests check_imports coverage
|
|
2
2
|
|
|
3
3
|
.DEFAULT_GOAL := help
|
|
4
4
|
|
|
@@ -18,7 +18,7 @@ PYTEST_EXTRA ?=
|
|
|
18
18
|
|
|
19
19
|
test: ## Run unit tests
|
|
20
20
|
test tests:
|
|
21
|
-
uv run --group test pytest -n auto --
|
|
21
|
+
uv run --group test pytest -n auto --disable-socket --allow-unix-socket $(PYTEST_EXTRA) $(TEST_FILE) \
|
|
22
22
|
$(COV_ARGS)
|
|
23
23
|
|
|
24
24
|
coverage: ## Run unit tests with coverage
|
|
@@ -30,20 +30,11 @@ coverage: ## Run unit tests with coverage
|
|
|
30
30
|
|
|
31
31
|
integration_test: ## Run integration tests
|
|
32
32
|
integration_test integration_tests:
|
|
33
|
-
uv run --group test pytest -n auto
|
|
33
|
+
uv run --group test pytest -n auto -vvv --timeout 30 $(TEST_FILE)
|
|
34
34
|
|
|
35
35
|
test_watch: ## Run tests in watch mode
|
|
36
36
|
uv run --group test ptw --now . -- -vv $(TEST_FILE)
|
|
37
37
|
|
|
38
|
-
benchmark: ## Run benchmark tests
|
|
39
|
-
uv run --group test pytest ./tests -m benchmark
|
|
40
|
-
|
|
41
|
-
bench: ## Run benchmarks under CodSpeed instrumentation
|
|
42
|
-
uv run --group test pytest ./tests -m benchmark --codspeed
|
|
43
|
-
|
|
44
|
-
bench-memory: ## Run memory benchmarks under CodSpeed instrumentation
|
|
45
|
-
uv run --group test pytest ./tests -m memory_benchmark --codspeed
|
|
46
|
-
|
|
47
38
|
run: ## Reinstall and run package
|
|
48
39
|
uvx --no-cache --reinstall .
|
|
49
40
|
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: deepagents-cli
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Deployment tooling for Deep Agents - bundle, run, and ship agents to LangGraph Platform.
|
|
5
|
+
Project-URL: Homepage, https://docs.langchain.com/oss/python/deepagents/overview
|
|
6
|
+
Project-URL: Documentation, https://reference.langchain.com/python/deepagents/
|
|
7
|
+
Project-URL: Repository, https://github.com/langchain-ai/deepagents
|
|
8
|
+
Project-URL: Issues, https://github.com/langchain-ai/deepagents/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/langchain-ai/deepagents/blob/main/libs/cli/CHANGELOG.md
|
|
10
|
+
Project-URL: Twitter, https://x.com/langchain_oss
|
|
11
|
+
Project-URL: Slack, https://www.langchain.com/join-community
|
|
12
|
+
Project-URL: Reddit, https://www.reddit.com/r/LangChain/
|
|
13
|
+
License: MIT
|
|
14
|
+
Keywords: agents,ai,cli,deep-agent,deploy,langchain,langgraph,llm
|
|
15
|
+
Classifier: Development Status :: 4 - Beta
|
|
16
|
+
Classifier: Environment :: Console
|
|
17
|
+
Classifier: Intended Audience :: Developers
|
|
18
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
24
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
26
|
+
Requires-Python: <4.0,>=3.11
|
|
27
|
+
Requires-Dist: deepagents>=0.6.1
|
|
28
|
+
Requires-Dist: httpx<1.0.0,>=0.28.1
|
|
29
|
+
Requires-Dist: langchain<2.0.0,>=1.3.0
|
|
30
|
+
Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.24
|
|
31
|
+
Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.28.1
|
|
32
|
+
Requires-Dist: langgraph-sdk<1.0.0,>=0.3.13
|
|
33
|
+
Requires-Dist: langgraph<2.0.0,>=1.2.0
|
|
34
|
+
Requires-Dist: langsmith>=0.8.0
|
|
35
|
+
Requires-Dist: python-dotenv<2.0.0,>=1.2.2
|
|
36
|
+
Provides-Extra: agentcore
|
|
37
|
+
Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.2; extra == 'agentcore'
|
|
38
|
+
Provides-Extra: all-sandboxes
|
|
39
|
+
Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.2; extra == 'all-sandboxes'
|
|
40
|
+
Requires-Dist: langchain-daytona>=0.0.5; extra == 'all-sandboxes'
|
|
41
|
+
Requires-Dist: langchain-modal>=0.0.3; extra == 'all-sandboxes'
|
|
42
|
+
Requires-Dist: langchain-runloop>=0.0.4; extra == 'all-sandboxes'
|
|
43
|
+
Provides-Extra: daytona
|
|
44
|
+
Requires-Dist: langchain-daytona>=0.0.5; extra == 'daytona'
|
|
45
|
+
Provides-Extra: modal
|
|
46
|
+
Requires-Dist: langchain-modal>=0.0.3; extra == 'modal'
|
|
47
|
+
Provides-Extra: runloop
|
|
48
|
+
Requires-Dist: langchain-runloop>=0.0.4; extra == 'runloop'
|
|
49
|
+
Description-Content-Type: text/markdown
|
|
50
|
+
|
|
51
|
+
# Deep Agents CLI — Deployment Tooling
|
|
52
|
+
|
|
53
|
+
[](https://pypi.org/project/deepagents-cli/#history)
|
|
54
|
+
[](https://opensource.org/licenses/MIT)
|
|
55
|
+
[](https://pypistats.org/packages/deepagents-cli)
|
|
56
|
+
[](https://x.com/langchain_oss)
|
|
57
|
+
|
|
58
|
+
## Install
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
uv tool install deepagents-cli
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Or with optional sandbox providers:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
uv tool install 'deepagents-cli[all-sandboxes]'
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Usage
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Scaffold a new project folder
|
|
74
|
+
deepagents init my-agent
|
|
75
|
+
|
|
76
|
+
# Run a local langgraph dev server against the project
|
|
77
|
+
cd my-agent && deepagents dev
|
|
78
|
+
|
|
79
|
+
# Bundle and ship to LangSmith Deployment
|
|
80
|
+
deepagents deploy
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 📖 Resources
|
|
84
|
+
|
|
85
|
+
- **[CLI Documentation](https://docs.langchain.com/oss/python/deepagents/cli/overview)**
|
|
86
|
+
- **[Changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/cli/CHANGELOG.md)**
|
|
87
|
+
- **[Source code](https://github.com/langchain-ai/deepagents/tree/main/libs/cli)**
|
|
88
|
+
- **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** — underlying agent harness
|
|
89
|
+
- **[Deep Agents Code](https://pypi.org/project/deepagents-code/)** — coding agent
|
|
90
|
+
|
|
91
|
+
## 📕 Releases & Versioning
|
|
92
|
+
|
|
93
|
+
See our [Releases](https://docs.langchain.com/oss/python/release-policy) and [Versioning](https://docs.langchain.com/oss/python/versioning) policies.
|
|
94
|
+
|
|
95
|
+
## 💁 Contributing
|
|
96
|
+
|
|
97
|
+
As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.
|
|
98
|
+
|
|
99
|
+
For detailed information on how to contribute, see the [Contributing Guide](https://docs.langchain.com/oss/python/contributing/overview).
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Deep Agents CLI — Deployment Tooling
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/deepagents-cli/#history)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://pypistats.org/packages/deepagents-cli)
|
|
6
|
+
[](https://x.com/langchain_oss)
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
uv tool install deepagents-cli
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Or with optional sandbox providers:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
uv tool install 'deepagents-cli[all-sandboxes]'
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Scaffold a new project folder
|
|
24
|
+
deepagents init my-agent
|
|
25
|
+
|
|
26
|
+
# Run a local langgraph dev server against the project
|
|
27
|
+
cd my-agent && deepagents dev
|
|
28
|
+
|
|
29
|
+
# Bundle and ship to LangSmith Deployment
|
|
30
|
+
deepagents deploy
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## 📖 Resources
|
|
34
|
+
|
|
35
|
+
- **[CLI Documentation](https://docs.langchain.com/oss/python/deepagents/cli/overview)**
|
|
36
|
+
- **[Changelog](https://github.com/langchain-ai/deepagents/blob/main/libs/cli/CHANGELOG.md)**
|
|
37
|
+
- **[Source code](https://github.com/langchain-ai/deepagents/tree/main/libs/cli)**
|
|
38
|
+
- **[Deep Agents SDK](https://github.com/langchain-ai/deepagents)** — underlying agent harness
|
|
39
|
+
- **[Deep Agents Code](https://pypi.org/project/deepagents-code/)** — coding agent
|
|
40
|
+
|
|
41
|
+
## 📕 Releases & Versioning
|
|
42
|
+
|
|
43
|
+
See our [Releases](https://docs.langchain.com/oss/python/release-policy) and [Versioning](https://docs.langchain.com/oss/python/versioning) policies.
|
|
44
|
+
|
|
45
|
+
## 💁 Contributing
|
|
46
|
+
|
|
47
|
+
As an open-source project in a rapidly developing field, we are extremely open to contributions, whether it be in the form of a new feature, improved infrastructure, or better documentation.
|
|
48
|
+
|
|
49
|
+
For detailed information on how to contribute, see the [Contributing Guide](https://docs.langchain.com/oss/python/contributing/overview).
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
> Generated: 2026-03-28 | Commit: e859077f | Scope: libs/cli only
|
|
4
4
|
|
|
5
|
+
> ⚠️ **(2026-05-15):** This document was generated before the
|
|
6
|
+
> 0.1.0 split that moved the interactive REPL out of `deepagents-cli`. The
|
|
7
|
+
> sections covering the Textual app, `non_interactive.py`, MCP, sandbox
|
|
8
|
+
> bootstrap, sessions, server subprocess management, hooks, and skills no
|
|
9
|
+
> longer apply to this package — those surfaces now live under
|
|
10
|
+
> [`libs/code/`](../code/THREAT_MODEL.md). The remaining in-scope surface is
|
|
11
|
+
> `deepagents_cli.deploy` (bundler, templates, hub seeding) and the slim
|
|
12
|
+
> `_load_dotenv`/`resolve_env_var` helpers in `config.py`/`model_config.py`.
|
|
13
|
+
|
|
5
14
|
> **Disclaimer:** This threat model is automatically generated to help developers and security researchers understand where trust is placed in this system and where boundaries exist. It is experimental, subject to change, and not an authoritative security reference — findings should be validated before acting on them. The analysis may be incomplete or contain inaccuracies. We welcome suggestions and corrections to improve this document.
|
|
6
15
|
|
|
7
16
|
## Scope
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
"""Deep Agents CLI -
|
|
1
|
+
"""Deep Agents CLI - deployment tooling (`init`, `dev`, `deploy`).
|
|
2
|
+
|
|
3
|
+
For the interactive coding agent, install the `deepagents-code` package.
|
|
4
|
+
"""
|
|
2
5
|
|
|
3
6
|
from __future__ import annotations
|
|
4
7
|
|
|
@@ -16,17 +19,16 @@ __all__ = [
|
|
|
16
19
|
|
|
17
20
|
|
|
18
21
|
def __getattr__(name: str) -> Callable[[], None]:
|
|
19
|
-
"""Lazy import for `cli_main` to
|
|
22
|
+
"""Lazy import for `cli_main` to keep `import deepagents_cli` cheap.
|
|
20
23
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
imported directly.
|
|
24
|
+
Args:
|
|
25
|
+
name: Attribute being looked up on the package.
|
|
24
26
|
|
|
25
27
|
Returns:
|
|
26
|
-
The requested
|
|
28
|
+
The requested attribute (only `cli_main` is provided lazily).
|
|
27
29
|
|
|
28
30
|
Raises:
|
|
29
|
-
AttributeError: If
|
|
31
|
+
AttributeError: If `name` is not a lazily-provided attribute.
|
|
30
32
|
"""
|
|
31
33
|
if name == "cli_main":
|
|
32
34
|
from deepagents_cli.main import cli_main
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"""Version information and lightweight constants for `deepagents-cli`."""
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
# Keep the `x-release-please-version` annotation — release-please uses it to
|
|
4
|
+
# bump `__version__` in sync with `pyproject.toml` on every release PR.
|
|
5
|
+
__version__ = "0.1.0" # x-release-please-version
|
|
4
6
|
|
|
5
7
|
DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/cli"
|
|
6
8
|
"""URL for `deepagents-cli` documentation."""
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"""Project and global `.env` loading for the deploy CLI."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import logging
|
|
6
|
+
import sys
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
logger = logging.getLogger(__name__)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _stderr(msg: str) -> None:
|
|
13
|
+
"""Print a diagnostic to stderr without a trailing newline corruption.
|
|
14
|
+
|
|
15
|
+
The CLI does not configure logging handlers by default, so `logger.warning`
|
|
16
|
+
output is invisible to end users. Diagnostics that the user authored — like
|
|
17
|
+
a malformed `.env` they meant to load — should also surface on stderr.
|
|
18
|
+
"""
|
|
19
|
+
sys.stderr.write(f"warning: {msg}\n")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _find_dotenv_from_start_path(start_path: Path) -> Path | None:
|
|
23
|
+
"""Find the nearest `.env` file from an explicit start path upward.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
start_path: Directory to start searching from.
|
|
27
|
+
|
|
28
|
+
Returns:
|
|
29
|
+
Path to the nearest `.env` file, or `None` if not found.
|
|
30
|
+
"""
|
|
31
|
+
current = start_path.expanduser().resolve()
|
|
32
|
+
for parent in [current, *list(current.parents)]:
|
|
33
|
+
candidate = parent / ".env"
|
|
34
|
+
try:
|
|
35
|
+
if candidate.is_file():
|
|
36
|
+
return candidate
|
|
37
|
+
except OSError:
|
|
38
|
+
logger.warning("Could not inspect .env candidate %s", candidate)
|
|
39
|
+
continue
|
|
40
|
+
return None
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
try:
|
|
44
|
+
_GLOBAL_DOTENV_PATH = Path.home() / ".deepagents" / ".env"
|
|
45
|
+
except RuntimeError:
|
|
46
|
+
# `Path.home()` raises when `HOME` is unset/misconfigured (e.g. on some
|
|
47
|
+
# CI runners). Fall back to a path that won't exist so `is_file()`
|
|
48
|
+
# short-circuits cleanly, and surface the suppression on stderr so the
|
|
49
|
+
# user knows global defaults will not apply.
|
|
50
|
+
_GLOBAL_DOTENV_PATH = Path("/nonexistent/.deepagents/.env")
|
|
51
|
+
_stderr(
|
|
52
|
+
"could not resolve home directory; "
|
|
53
|
+
"global `~/.deepagents/.env` will not be loaded",
|
|
54
|
+
)
|
|
55
|
+
logger.warning(
|
|
56
|
+
"Could not resolve home directory; global .env will not be loaded",
|
|
57
|
+
exc_info=True,
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _load_dotenv(*, start_path: Path) -> bool:
|
|
62
|
+
"""Load environment variables from project and global `.env` files.
|
|
63
|
+
|
|
64
|
+
Loads in order (first write wins, `override=False`):
|
|
65
|
+
|
|
66
|
+
1. Project `.env` — discovered upward from `start_path`.
|
|
67
|
+
2. `~/.deepagents/.env` — global user defaults.
|
|
68
|
+
|
|
69
|
+
Both layers use `override=False` so that shell-exported variables always
|
|
70
|
+
take precedence over dotenv files. Because the project file loads first,
|
|
71
|
+
the effective precedence is:
|
|
72
|
+
|
|
73
|
+
```text
|
|
74
|
+
shell env > project `.env` > global `.env`
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
When a *resolved* dotenv path fails to parse the user is notified on
|
|
78
|
+
stderr in addition to the structured `logger.warning` (the CLI does not
|
|
79
|
+
install logging handlers by default).
|
|
80
|
+
|
|
81
|
+
Args:
|
|
82
|
+
start_path: Directory to use for project `.env` discovery. Searched
|
|
83
|
+
upward until either a `.env` is found or the filesystem root is
|
|
84
|
+
reached.
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
`True` when at least one dotenv file was loaded, `False` otherwise.
|
|
88
|
+
"""
|
|
89
|
+
import dotenv
|
|
90
|
+
|
|
91
|
+
loaded = False
|
|
92
|
+
|
|
93
|
+
dotenv_path = _find_dotenv_from_start_path(start_path)
|
|
94
|
+
if dotenv_path is not None:
|
|
95
|
+
try:
|
|
96
|
+
loaded = (
|
|
97
|
+
dotenv.load_dotenv(dotenv_path=dotenv_path, override=False) or loaded
|
|
98
|
+
)
|
|
99
|
+
except (OSError, ValueError) as exc:
|
|
100
|
+
_stderr(
|
|
101
|
+
f"could not read project .env at {dotenv_path}: {exc}. "
|
|
102
|
+
"Project env vars will not be loaded.",
|
|
103
|
+
)
|
|
104
|
+
logger.warning(
|
|
105
|
+
"Could not read project dotenv at %s; "
|
|
106
|
+
"project env vars will not be loaded",
|
|
107
|
+
dotenv_path,
|
|
108
|
+
exc_info=True,
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
try:
|
|
112
|
+
if _GLOBAL_DOTENV_PATH.is_file() and dotenv.load_dotenv(
|
|
113
|
+
dotenv_path=_GLOBAL_DOTENV_PATH, override=False
|
|
114
|
+
):
|
|
115
|
+
loaded = True
|
|
116
|
+
logger.debug("Loaded global dotenv: %s", _GLOBAL_DOTENV_PATH)
|
|
117
|
+
except (OSError, ValueError) as exc:
|
|
118
|
+
_stderr(
|
|
119
|
+
f"could not read global .env at {_GLOBAL_DOTENV_PATH}: {exc}. "
|
|
120
|
+
"Global defaults will not be applied.",
|
|
121
|
+
)
|
|
122
|
+
logger.warning(
|
|
123
|
+
"Could not read global dotenv at %s; global defaults will not be applied",
|
|
124
|
+
_GLOBAL_DOTENV_PATH,
|
|
125
|
+
exc_info=True,
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
return loaded
|
|
@@ -46,6 +46,7 @@ def setup_deploy_parsers(
|
|
|
46
46
|
"-h",
|
|
47
47
|
"--help",
|
|
48
48
|
action=make_help_action(lambda: init_parser.print_help()),
|
|
49
|
+
help="show this help message and exit",
|
|
49
50
|
)
|
|
50
51
|
init_parser.add_argument(
|
|
51
52
|
"--force",
|
|
@@ -63,6 +64,7 @@ def setup_deploy_parsers(
|
|
|
63
64
|
"-h",
|
|
64
65
|
"--help",
|
|
65
66
|
action=make_help_action(lambda: dev_parser.print_help()),
|
|
67
|
+
help="show this help message and exit",
|
|
66
68
|
)
|
|
67
69
|
dev_parser.add_argument(
|
|
68
70
|
"--config",
|
|
@@ -93,6 +95,7 @@ def setup_deploy_parsers(
|
|
|
93
95
|
"-h",
|
|
94
96
|
"--help",
|
|
95
97
|
action=make_help_action(lambda: deploy_parser.print_help()),
|
|
98
|
+
help="show this help message and exit",
|
|
96
99
|
)
|
|
97
100
|
deploy_parser.add_argument(
|
|
98
101
|
"--config",
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"""Entry point for the `deepagents` CLI.
|
|
2
|
+
|
|
3
|
+
As of `deepagents-cli==0.1.0` the interactive Textual REPL has moved to the
|
|
4
|
+
[`deepagents-code`](https://pypi.org/project/deepagents-code/) package. This
|
|
5
|
+
CLI now exposes only the deployment-oriented commands: `init`, `dev`, and
|
|
6
|
+
`deploy`. Bare invocations print a deprecation notice and exit non-zero.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import argparse
|
|
12
|
+
import contextlib
|
|
13
|
+
import os
|
|
14
|
+
import sys
|
|
15
|
+
from typing import TYPE_CHECKING, Any
|
|
16
|
+
|
|
17
|
+
from deepagents_cli._version import __version__
|
|
18
|
+
|
|
19
|
+
if TYPE_CHECKING:
|
|
20
|
+
from collections.abc import Callable, Sequence
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
_REPL_REDIRECT_MESSAGE = (
|
|
24
|
+
"The interactive `deepagents` REPL has moved to the `deepagents-code` "
|
|
25
|
+
"package.\n"
|
|
26
|
+
"Install it with:\n\n"
|
|
27
|
+
" pip install deepagents-code\n\n"
|
|
28
|
+
"Then run `deepagents-code` to start an interactive session.\n\n"
|
|
29
|
+
"The `deepagents` CLI now only provides the `init`, `dev`, and `deploy` "
|
|
30
|
+
"subcommands."
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _make_help_action(
|
|
35
|
+
help_fn: Callable[[], None],
|
|
36
|
+
) -> type[argparse.Action]:
|
|
37
|
+
"""Create an argparse Action that calls `help_fn` and exits.
|
|
38
|
+
|
|
39
|
+
argparse requires a *class* (not a callable) for custom actions; this
|
|
40
|
+
factory uses a closure so each subcommand can wire `-h` to its own
|
|
41
|
+
`print_help()`.
|
|
42
|
+
|
|
43
|
+
Args:
|
|
44
|
+
help_fn: Callable that prints help text to stdout.
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
An argparse Action class wired to the given help function.
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
class _ShowHelp(argparse.Action):
|
|
51
|
+
def __init__(
|
|
52
|
+
self,
|
|
53
|
+
option_strings: list[str],
|
|
54
|
+
dest: str = argparse.SUPPRESS,
|
|
55
|
+
default: str = argparse.SUPPRESS,
|
|
56
|
+
**kwargs: Any,
|
|
57
|
+
) -> None:
|
|
58
|
+
super().__init__(
|
|
59
|
+
option_strings=option_strings,
|
|
60
|
+
dest=dest,
|
|
61
|
+
default=default,
|
|
62
|
+
nargs=0,
|
|
63
|
+
**kwargs,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
def __call__(
|
|
67
|
+
self,
|
|
68
|
+
parser: argparse.ArgumentParser,
|
|
69
|
+
namespace: argparse.Namespace, # noqa: ARG002
|
|
70
|
+
values: str | Sequence[Any] | None, # noqa: ARG002
|
|
71
|
+
option_string: str | None = None, # noqa: ARG002
|
|
72
|
+
) -> None:
|
|
73
|
+
with contextlib.suppress(BrokenPipeError):
|
|
74
|
+
help_fn()
|
|
75
|
+
parser.exit()
|
|
76
|
+
|
|
77
|
+
return _ShowHelp
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _build_parser() -> argparse.ArgumentParser:
|
|
81
|
+
"""Build the top-level argparse parser for the deploy/dev/init CLI.
|
|
82
|
+
|
|
83
|
+
Returns:
|
|
84
|
+
Configured `ArgumentParser` with `init`, `dev`, and `deploy`
|
|
85
|
+
subparsers registered.
|
|
86
|
+
"""
|
|
87
|
+
from deepagents_cli.deploy import setup_deploy_parsers
|
|
88
|
+
|
|
89
|
+
parser = argparse.ArgumentParser(
|
|
90
|
+
prog="deepagents",
|
|
91
|
+
description=(
|
|
92
|
+
"Deep Agents - deployment tooling.\n\n"
|
|
93
|
+
"For interactive chat, install `deepagents-code` instead."
|
|
94
|
+
),
|
|
95
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
96
|
+
add_help=False,
|
|
97
|
+
)
|
|
98
|
+
parser.add_argument(
|
|
99
|
+
"-h",
|
|
100
|
+
"--help",
|
|
101
|
+
action=_make_help_action(parser.print_help),
|
|
102
|
+
help="show this help message and exit",
|
|
103
|
+
)
|
|
104
|
+
parser.add_argument(
|
|
105
|
+
"-v",
|
|
106
|
+
"--version",
|
|
107
|
+
action="version",
|
|
108
|
+
version=f"deepagents-cli {__version__}",
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
subparsers = parser.add_subparsers(dest="command", help="Command to run")
|
|
112
|
+
setup_deploy_parsers(subparsers, make_help_action=_make_help_action)
|
|
113
|
+
return parser
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def parse_args(argv: Sequence[str] | None = None) -> argparse.Namespace:
|
|
117
|
+
"""Parse CLI arguments and return the resulting namespace.
|
|
118
|
+
|
|
119
|
+
Args:
|
|
120
|
+
argv: Optional argument list (defaults to `sys.argv[1:]`).
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
Parsed argparse `Namespace`.
|
|
124
|
+
"""
|
|
125
|
+
parser = _build_parser()
|
|
126
|
+
return parser.parse_args(argv)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def cli_main() -> None:
|
|
130
|
+
"""Entry point for the `deepagents` and `deepagents-cli` console scripts.
|
|
131
|
+
|
|
132
|
+
Raises:
|
|
133
|
+
SystemExit: On `--help`/`--version`, after a subcommand finishes,
|
|
134
|
+
on `KeyboardInterrupt`, when invoked without a subcommand (the
|
|
135
|
+
user is redirected to `deepagents-code`), or when a subcommand
|
|
136
|
+
handler raises `SystemExit` directly (e.g. config validation
|
|
137
|
+
failures in `execute_deploy_command`).
|
|
138
|
+
"""
|
|
139
|
+
if sys.platform == "darwin":
|
|
140
|
+
# gRPC (pulled in transitively by LangSmith deps) crashes on macOS
|
|
141
|
+
# when the process forks after gRPC has been initialized. Disable
|
|
142
|
+
# fork support to avoid the abort; the current deploy/dev paths
|
|
143
|
+
# don't fork, so disabling fork support is a safe default —
|
|
144
|
+
# reconsider this env var if a future subcommand spawns workers.
|
|
145
|
+
os.environ.setdefault("GRPC_ENABLE_FORK_SUPPORT", "0")
|
|
146
|
+
|
|
147
|
+
args = parse_args()
|
|
148
|
+
|
|
149
|
+
try:
|
|
150
|
+
if args.command == "init":
|
|
151
|
+
from deepagents_cli.deploy import execute_init_command
|
|
152
|
+
|
|
153
|
+
execute_init_command(args)
|
|
154
|
+
elif args.command == "dev":
|
|
155
|
+
from deepagents_cli.deploy import execute_dev_command
|
|
156
|
+
|
|
157
|
+
execute_dev_command(args)
|
|
158
|
+
elif args.command == "deploy":
|
|
159
|
+
from deepagents_cli.deploy import execute_deploy_command
|
|
160
|
+
|
|
161
|
+
execute_deploy_command(args)
|
|
162
|
+
else:
|
|
163
|
+
sys.stderr.write(_REPL_REDIRECT_MESSAGE + "\n")
|
|
164
|
+
raise SystemExit(1)
|
|
165
|
+
except KeyboardInterrupt:
|
|
166
|
+
sys.stderr.write("\nInterrupted.\n")
|
|
167
|
+
raise SystemExit(130) from None
|