deepagents-cli 0.0.42__tar.gz → 0.0.44__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.
Files changed (265) hide show
  1. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/.gitignore +6 -0
  2. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/CHANGELOG.md +12 -0
  3. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/PKG-INFO +50 -50
  4. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/README.md +1 -1
  5. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/_version.py +1 -1
  6. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/app.py +70 -1
  7. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/deploy/bundler.py +135 -9
  8. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/deploy/commands.py +45 -0
  9. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/deploy/config.py +116 -7
  10. deepagents_cli-0.0.44/deepagents_cli/deploy/frontend_dist/assets/anonymous-B9UzAXQd.js +1 -0
  11. deepagents_cli-0.0.44/deepagents_cli/deploy/frontend_dist/assets/clerk-5xHgyQyG.js +23 -0
  12. deepagents_cli-0.0.44/deepagents_cli/deploy/frontend_dist/assets/highlighted-body-OFNGDK62-rX-7qT8o.js +1 -0
  13. deepagents_cli-0.0.44/deepagents_cli/deploy/frontend_dist/assets/index-DM3gptpu.js +205 -0
  14. deepagents_cli-0.0.44/deepagents_cli/deploy/frontend_dist/assets/index-Ddy7F6KI.css +1 -0
  15. deepagents_cli-0.0.44/deepagents_cli/deploy/frontend_dist/assets/supabase-S6NACDgm.js +44 -0
  16. deepagents_cli-0.0.44/deepagents_cli/deploy/frontend_dist/index.html +16 -0
  17. deepagents_cli-0.0.44/deepagents_cli/deploy/frontend_dist/logo-dark.svg +12 -0
  18. deepagents_cli-0.0.44/deepagents_cli/deploy/frontend_dist/logo-light.svg +12 -0
  19. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/deploy/templates.py +112 -0
  20. deepagents_cli-0.0.44/frontend/.nvmrc +1 -0
  21. deepagents_cli-0.0.44/frontend/index.html +15 -0
  22. deepagents_cli-0.0.44/frontend/package-lock.json +6207 -0
  23. deepagents_cli-0.0.44/frontend/package.json +34 -0
  24. deepagents_cli-0.0.44/frontend/postcss.config.js +5 -0
  25. deepagents_cli-0.0.44/frontend/public/logo-dark.svg +12 -0
  26. deepagents_cli-0.0.44/frontend/public/logo-light.svg +12 -0
  27. deepagents_cli-0.0.44/frontend/src/App.tsx +342 -0
  28. deepagents_cli-0.0.44/frontend/src/ThemeProvider.tsx +66 -0
  29. deepagents_cli-0.0.44/frontend/src/auth/anonymous.tsx +45 -0
  30. deepagents_cli-0.0.44/frontend/src/auth/clerk.tsx +138 -0
  31. deepagents_cli-0.0.44/frontend/src/auth/loader.tsx +26 -0
  32. deepagents_cli-0.0.44/frontend/src/auth/supabase.tsx +236 -0
  33. deepagents_cli-0.0.44/frontend/src/auth/types.ts +22 -0
  34. deepagents_cli-0.0.44/frontend/src/components/AppHeader.tsx +70 -0
  35. deepagents_cli-0.0.44/frontend/src/components/FilePanels.tsx +148 -0
  36. deepagents_cli-0.0.44/frontend/src/components/MessageList.tsx +177 -0
  37. deepagents_cli-0.0.44/frontend/src/components/SubagentActivity.tsx +262 -0
  38. deepagents_cli-0.0.44/frontend/src/components/ThreadPicker.tsx +162 -0
  39. deepagents_cli-0.0.44/frontend/src/components/TodosPanel.tsx +54 -0
  40. deepagents_cli-0.0.44/frontend/src/components/ToolCallCard.tsx +136 -0
  41. deepagents_cli-0.0.44/frontend/src/components/toolcalls/FileToolCard.tsx +126 -0
  42. deepagents_cli-0.0.44/frontend/src/components/toolcalls/SearchCard.tsx +107 -0
  43. deepagents_cli-0.0.44/frontend/src/components/toolcalls/ThinkCard.tsx +60 -0
  44. deepagents_cli-0.0.44/frontend/src/components/toolcalls/TodosCard.tsx +63 -0
  45. deepagents_cli-0.0.44/frontend/src/components/toolcalls/index.ts +51 -0
  46. deepagents_cli-0.0.44/frontend/src/constants.ts +15 -0
  47. deepagents_cli-0.0.44/frontend/src/index.css +220 -0
  48. deepagents_cli-0.0.44/frontend/src/main.tsx +20 -0
  49. deepagents_cli-0.0.44/frontend/src/runtimeConfig.ts +75 -0
  50. deepagents_cli-0.0.44/frontend/src/types.ts +22 -0
  51. deepagents_cli-0.0.44/frontend/src/vite-env.d.ts +1 -0
  52. deepagents_cli-0.0.44/frontend/tsconfig.json +19 -0
  53. deepagents_cli-0.0.44/frontend/vite.config.ts +25 -0
  54. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/pyproject.toml +33 -27
  55. deepagents_cli-0.0.44/tests/unit_tests/deploy/test_frontend_bundle.py +427 -0
  56. deepagents_cli-0.0.44/tests/unit_tests/deploy/test_frontend_config.py +181 -0
  57. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_app.py +185 -0
  58. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/uv.lock +169 -93
  59. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/DEV.md +0 -0
  60. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/Makefile +0 -0
  61. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/THREAT_MODEL.md +0 -0
  62. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/__init__.py +0 -0
  63. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/__main__.py +0 -0
  64. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/_ask_user_types.py +0 -0
  65. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/_cli_context.py +0 -0
  66. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/_debug.py +0 -0
  67. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/_env_vars.py +0 -0
  68. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/_git.py +0 -0
  69. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/_server_config.py +0 -0
  70. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/_session_stats.py +0 -0
  71. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/_testing_models.py +0 -0
  72. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/_textual_patches.py +0 -0
  73. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/agent.py +0 -0
  74. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/app.tcss +0 -0
  75. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/ask_user.py +0 -0
  76. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/built_in_skills/__init__.py +0 -0
  77. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/built_in_skills/remember/SKILL.md +0 -0
  78. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/built_in_skills/skill-creator/SKILL.md +0 -0
  79. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  80. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  81. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/clipboard.py +0 -0
  82. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/command_registry.py +0 -0
  83. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/config.py +0 -0
  84. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/configurable_model.py +0 -0
  85. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/default_agent_prompt.md +0 -0
  86. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/deploy/__init__.py +0 -0
  87. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/editor.py +0 -0
  88. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/extras_info.py +0 -0
  89. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/file_ops.py +0 -0
  90. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/formatting.py +0 -0
  91. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/hooks.py +0 -0
  92. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/input.py +0 -0
  93. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/integrations/__init__.py +0 -0
  94. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/integrations/sandbox_factory.py +0 -0
  95. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/integrations/sandbox_provider.py +0 -0
  96. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/local_context.py +0 -0
  97. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/main.py +0 -0
  98. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/mcp_tools.py +0 -0
  99. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/mcp_trust.py +0 -0
  100. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/media_utils.py +0 -0
  101. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/model_config.py +0 -0
  102. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/non_interactive.py +0 -0
  103. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/notifications.py +0 -0
  104. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/offload.py +0 -0
  105. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/output.py +0 -0
  106. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/project_utils.py +0 -0
  107. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/py.typed +0 -0
  108. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/remote_client.py +0 -0
  109. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/server.py +0 -0
  110. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/server_graph.py +0 -0
  111. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/server_manager.py +0 -0
  112. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/sessions.py +0 -0
  113. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/skills/__init__.py +0 -0
  114. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/skills/commands.py +0 -0
  115. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/skills/invocation.py +0 -0
  116. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/skills/load.py +0 -0
  117. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/subagents.py +0 -0
  118. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/system_prompt.md +0 -0
  119. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/terminal_capabilities.py +0 -0
  120. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/textual_adapter.py +0 -0
  121. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/theme.py +0 -0
  122. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/token_state.py +0 -0
  123. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/tool_display.py +0 -0
  124. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/tools.py +0 -0
  125. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/ui.py +0 -0
  126. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/unicode_security.py +0 -0
  127. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/update_check.py +0 -0
  128. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/__init__.py +0 -0
  129. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/_links.py +0 -0
  130. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/agent_selector.py +0 -0
  131. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/approval.py +0 -0
  132. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/ask_user.py +0 -0
  133. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/autocomplete.py +0 -0
  134. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/chat_input.py +0 -0
  135. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/diff.py +0 -0
  136. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/history.py +0 -0
  137. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/loading.py +0 -0
  138. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/mcp_viewer.py +0 -0
  139. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/message_store.py +0 -0
  140. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/messages.py +0 -0
  141. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/model_selector.py +0 -0
  142. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/notification_center.py +0 -0
  143. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/notification_detail.py +0 -0
  144. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/notification_settings.py +0 -0
  145. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/status.py +0 -0
  146. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/theme_selector.py +0 -0
  147. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/thread_selector.py +0 -0
  148. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/tool_renderers.py +0 -0
  149. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/tool_widgets.py +0 -0
  150. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/update_available.py +0 -0
  151. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/deepagents_cli/widgets/welcome.py +0 -0
  152. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/examples/deploy-content-writer/.env.example +0 -0
  153. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/examples/deploy-content-writer/skills/blog-post/SKILL.md +0 -0
  154. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/examples/deploy-content-writer/skills/social-media/SKILL.md +0 -0
  155. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/examples/deploy-content-writer/user/context.md +0 -0
  156. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/examples/deploy-content-writer/user/preferences.md +0 -0
  157. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/examples/skills/arxiv-search/SKILL.md +0 -0
  158. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  159. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/examples/skills/langgraph-docs/SKILL.md +0 -0
  160. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/examples/skills/skill-creator/SKILL.md +0 -0
  161. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  162. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  163. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/examples/skills/web-research/SKILL.md +0 -0
  164. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/images/cli.png +0 -0
  165. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/scripts/check_imports.py +0 -0
  166. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/scripts/debug_server.sh +0 -0
  167. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/scripts/install.sh +0 -0
  168. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/README.md +0 -0
  169. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/integration_tests/__init__.py +0 -0
  170. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/integration_tests/benchmarks/__init__.py +0 -0
  171. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  172. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -0
  173. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/integration_tests/conftest.py +0 -0
  174. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/integration_tests/test_acp_mode.py +0 -0
  175. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/integration_tests/test_compact_resume.py +0 -0
  176. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/integration_tests/test_sandbox_factory.py +0 -0
  177. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/integration_tests/test_sandbox_operations.py +0 -0
  178. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/__init__.py +0 -0
  179. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/conftest.py +0 -0
  180. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/deploy/__init__.py +0 -0
  181. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/deploy/test_bundler.py +0 -0
  182. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/deploy/test_commands.py +0 -0
  183. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/deploy/test_config.py +0 -0
  184. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/skills/__init__.py +0 -0
  185. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/skills/test_commands.py +0 -0
  186. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/skills/test_load.py +0 -0
  187. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/skills/test_skills_json.py +0 -0
  188. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_agent.py +0 -0
  189. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_agent_friendly.py +0 -0
  190. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_agent_selector.py +0 -0
  191. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_approval.py +0 -0
  192. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_args.py +0 -0
  193. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_ask_user.py +0 -0
  194. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_ask_user_middleware.py +0 -0
  195. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_autocomplete.py +0 -0
  196. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_charset.py +0 -0
  197. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_chat_input.py +0 -0
  198. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_command_registry.py +0 -0
  199. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_compact_tool.py +0 -0
  200. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_config.py +0 -0
  201. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_configurable_model.py +0 -0
  202. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_debug.py +0 -0
  203. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_editor.py +0 -0
  204. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_end_to_end.py +0 -0
  205. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_env_vars.py +0 -0
  206. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_exception_handling.py +0 -0
  207. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_extras_info.py +0 -0
  208. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_file_ops.py +0 -0
  209. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_formatting.py +0 -0
  210. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_git.py +0 -0
  211. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_history.py +0 -0
  212. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_hooks.py +0 -0
  213. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_imports.py +0 -0
  214. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_input_parsing.py +0 -0
  215. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_links.py +0 -0
  216. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_loading.py +0 -0
  217. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_local_context.py +0 -0
  218. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_main.py +0 -0
  219. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_main_acp_mode.py +0 -0
  220. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_main_args.py +0 -0
  221. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_mcp_tools.py +0 -0
  222. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_mcp_trust.py +0 -0
  223. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_mcp_viewer.py +0 -0
  224. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_media_utils.py +0 -0
  225. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_message_store.py +0 -0
  226. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_messages.py +0 -0
  227. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_model_config.py +0 -0
  228. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_model_selector.py +0 -0
  229. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_model_switch.py +0 -0
  230. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_non_interactive.py +0 -0
  231. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_notification_center.py +0 -0
  232. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_notification_detail.py +0 -0
  233. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_notifications.py +0 -0
  234. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_offload.py +0 -0
  235. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_offload_dict_messages.py +0 -0
  236. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_output.py +0 -0
  237. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_reload.py +0 -0
  238. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_remote_client.py +0 -0
  239. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_sandbox_factory.py +0 -0
  240. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_server.py +0 -0
  241. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_server_config.py +0 -0
  242. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_server_graph.py +0 -0
  243. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_server_helpers.py +0 -0
  244. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_server_manager.py +0 -0
  245. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_session_stats.py +0 -0
  246. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_sessions.py +0 -0
  247. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_shell_allow_list.py +0 -0
  248. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_skill_invocation.py +0 -0
  249. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_status.py +0 -0
  250. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_subagents.py +0 -0
  251. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_terminal_capabilities.py +0 -0
  252. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_textual_adapter.py +0 -0
  253. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_textual_patches.py +0 -0
  254. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_theme.py +0 -0
  255. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_thread_selector.py +0 -0
  256. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_token_tracker.py +0 -0
  257. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_tool_display.py +0 -0
  258. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_ui.py +0 -0
  259. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_unicode_security.py +0 -0
  260. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_update_available.py +0 -0
  261. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_update_check.py +0 -0
  262. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_version.py +0 -0
  263. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/test_welcome.py +0 -0
  264. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/tools/__init__.py +0 -0
  265. {deepagents_cli-0.0.42 → deepagents_cli-0.0.44}/tests/unit_tests/tools/test_fetch_url.py +0 -0
@@ -15,6 +15,7 @@ downloads/
15
15
  eggs/
16
16
  .eggs/
17
17
  lib/
18
+ !libs/cli/frontend/src/lib/
18
19
  lib64/
19
20
  parts/
20
21
  sdist/
@@ -227,3 +228,8 @@ libs/cli/TEXTUAL_PROGRESS.md
227
228
 
228
229
  CLAUDE.md
229
230
  .worktrees/
231
+
232
+ # Frontend build artifacts (source tree; package data under libs/cli/deepagents_cli/deploy/frontend_dist/ is tracked)
233
+ libs/cli/frontend/node_modules/
234
+ libs/cli/frontend/dist/
235
+ node_modules/
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.0.44](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.43...deepagents-cli==0.0.44) (2026-04-29)
4
+
5
+ ### Bug Fixes
6
+
7
+ * Startup import deadlock ([#3017](https://github.com/langchain-ai/deepagents/issues/3017)) ([d40ab57](https://github.com/langchain-ai/deepagents/commit/d40ab57800a6ad12b0c9a5e249753702ec0832c8))
8
+
9
+ ## [0.0.43](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.42...deepagents-cli==0.0.43) (2026-04-29)
10
+
11
+ ### Features
12
+
13
+ * Bundled chat frontend for deepagent deploy ([#2940](https://github.com/langchain-ai/deepagents/issues/2940)) ([9bde0c7](https://github.com/langchain-ai/deepagents/commit/9bde0c7835ded20e80466d8361f40784141d68d8))
14
+
3
15
  ## [0.0.42](https://github.com/langchain-ai/deepagents/compare/deepagents-cli==0.0.41...deepagents-cli==0.0.42) (2026-04-29)
4
16
 
5
17
  ### Features
@@ -1,13 +1,13 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepagents-cli
3
- Version: 0.0.42
3
+ Version: 0.0.44
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/
7
7
  Project-URL: Repository, https://github.com/langchain-ai/deepagents
8
8
  Project-URL: Issues, https://github.com/langchain-ai/deepagents/issues
9
9
  Project-URL: Changelog, https://github.com/langchain-ai/deepagents/blob/main/libs/cli/CHANGELOG.md
10
- Project-URL: Twitter, https://x.com/LangChain
10
+ Project-URL: Twitter, https://x.com/langchain_oss
11
11
  Project-URL: Slack, https://www.langchain.com/join-community
12
12
  Project-URL: Reddit, https://www.reddit.com/r/LangChain/
13
13
  License: MIT
@@ -30,9 +30,9 @@ Requires-Dist: deepagents-acp>=0.0.4
30
30
  Requires-Dist: deepagents==0.5.4
31
31
  Requires-Dist: httpx<1.0.0,>=0.28.1
32
32
  Requires-Dist: langchain-anthropic<2.0.0,>=1.4.2
33
- Requires-Dist: langchain-google-genai<5.0.0,>=4.2.1
34
- Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.2.0
35
- Requires-Dist: langchain-openai<2.0.0,>=1.1.12
33
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2
34
+ Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.2.2
35
+ Requires-Dist: langchain-openai<2.0.0,>=1.2.1
36
36
  Requires-Dist: langchain<2.0.0,>=1.2.15
37
37
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.0.0
38
38
  Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.15
@@ -55,76 +55,76 @@ Requires-Dist: textual<9.0.0,>=8.0.0
55
55
  Requires-Dist: tomli-w<2.0.0,>=1.0.0
56
56
  Requires-Dist: uuid-utils<1.0.0,>=0.10.0
57
57
  Provides-Extra: agentcore
58
- Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.1; extra == 'agentcore'
58
+ Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.2; extra == 'agentcore'
59
59
  Provides-Extra: all-providers
60
60
  Requires-Dist: langchain-anthropic<2.0.0,>=1.4.2; extra == 'all-providers'
61
- Requires-Dist: langchain-aws<2.0.0,>=1.0.0; extra == 'all-providers'
62
- Requires-Dist: langchain-baseten<1.0.0,>=0.1.9; extra == 'all-providers'
63
- Requires-Dist: langchain-cohere<1.0.0,>=0.5.0; extra == 'all-providers'
64
- Requires-Dist: langchain-deepseek<2.0.0,>=1.0.0; extra == 'all-providers'
65
- Requires-Dist: langchain-fireworks<2.0.0,>=1.0.0; extra == 'all-providers'
66
- Requires-Dist: langchain-google-genai<5.0.0,>=4.2.1; extra == 'all-providers'
67
- Requires-Dist: langchain-google-vertexai<4.0.0,>=3.0.0; extra == 'all-providers'
68
- Requires-Dist: langchain-groq<2.0.0,>=1.0.0; extra == 'all-providers'
69
- Requires-Dist: langchain-huggingface<2.0.0,>=1.0.0; extra == 'all-providers'
70
- Requires-Dist: langchain-ibm<2.0.0,>=1.0.0; extra == 'all-providers'
71
- Requires-Dist: langchain-litellm<2.0.0,>=0.6.1; extra == 'all-providers'
72
- Requires-Dist: langchain-mistralai<2.0.0,>=1.0.0; extra == 'all-providers'
73
- Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.0.0; extra == 'all-providers'
74
- Requires-Dist: langchain-ollama<2.0.0,>=1.0.0; extra == 'all-providers'
75
- Requires-Dist: langchain-openai<2.0.0,>=1.1.12; extra == 'all-providers'
76
- Requires-Dist: langchain-openrouter<2.0.0,>=0.2.0; extra == 'all-providers'
77
- Requires-Dist: langchain-perplexity<2.0.0,>=1.0.0; extra == 'all-providers'
78
- Requires-Dist: langchain-xai<2.0.0,>=1.0.0; extra == 'all-providers'
61
+ Requires-Dist: langchain-aws<2.0.0,>=1.4.5; extra == 'all-providers'
62
+ Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'all-providers'
63
+ Requires-Dist: langchain-cohere<1.0.0,>=0.5.1; extra == 'all-providers'
64
+ Requires-Dist: langchain-deepseek<2.0.0,>=1.0.1; extra == 'all-providers'
65
+ Requires-Dist: langchain-fireworks<2.0.0,>=1.2.0; extra == 'all-providers'
66
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2; extra == 'all-providers'
67
+ Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.2; extra == 'all-providers'
68
+ Requires-Dist: langchain-groq<2.0.0,>=1.1.2; extra == 'all-providers'
69
+ Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
70
+ Requires-Dist: langchain-ibm<2.0.0,>=1.0.7; extra == 'all-providers'
71
+ Requires-Dist: langchain-litellm<2.0.0,>=0.6.4; extra == 'all-providers'
72
+ Requires-Dist: langchain-mistralai<2.0.0,>=1.1.2; extra == 'all-providers'
73
+ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.2.1; extra == 'all-providers'
74
+ Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
75
+ Requires-Dist: langchain-openai<2.0.0,>=1.2.1; extra == 'all-providers'
76
+ Requires-Dist: langchain-openrouter<2.0.0,>=0.2.1; extra == 'all-providers'
77
+ Requires-Dist: langchain-perplexity<2.0.0,>=1.1.0; extra == 'all-providers'
78
+ Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'all-providers'
79
79
  Provides-Extra: all-sandboxes
80
- Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.1; extra == 'all-sandboxes'
81
- Requires-Dist: langchain-daytona>=0.0.4; extra == 'all-sandboxes'
82
- Requires-Dist: langchain-modal>=0.0.2; extra == 'all-sandboxes'
83
- Requires-Dist: langchain-runloop>=0.0.3; extra == 'all-sandboxes'
80
+ Requires-Dist: langchain-agentcore-codeinterpreter>=0.0.2; extra == 'all-sandboxes'
81
+ Requires-Dist: langchain-daytona>=0.0.5; extra == 'all-sandboxes'
82
+ Requires-Dist: langchain-modal>=0.0.3; extra == 'all-sandboxes'
83
+ Requires-Dist: langchain-runloop>=0.0.4; extra == 'all-sandboxes'
84
84
  Provides-Extra: anthropic
85
85
  Requires-Dist: langchain-anthropic<2.0.0,>=1.4.2; extra == 'anthropic'
86
86
  Provides-Extra: baseten
87
- Requires-Dist: langchain-baseten<1.0.0,>=0.1.9; extra == 'baseten'
87
+ Requires-Dist: langchain-baseten<1.0.0,>=0.2.0; extra == 'baseten'
88
88
  Provides-Extra: bedrock
89
- Requires-Dist: langchain-aws<2.0.0,>=1.0.0; extra == 'bedrock'
89
+ Requires-Dist: langchain-aws<2.0.0,>=1.4.5; extra == 'bedrock'
90
90
  Provides-Extra: cohere
91
- Requires-Dist: langchain-cohere<1.0.0,>=0.5.0; extra == 'cohere'
91
+ Requires-Dist: langchain-cohere<1.0.0,>=0.5.1; extra == 'cohere'
92
92
  Provides-Extra: daytona
93
- Requires-Dist: langchain-daytona>=0.0.4; extra == 'daytona'
93
+ Requires-Dist: langchain-daytona>=0.0.5; extra == 'daytona'
94
94
  Provides-Extra: deepseek
95
- Requires-Dist: langchain-deepseek<2.0.0,>=1.0.0; extra == 'deepseek'
95
+ Requires-Dist: langchain-deepseek<2.0.0,>=1.0.1; extra == 'deepseek'
96
96
  Provides-Extra: fireworks
97
- Requires-Dist: langchain-fireworks<2.0.0,>=1.0.0; extra == 'fireworks'
97
+ Requires-Dist: langchain-fireworks<2.0.0,>=1.2.0; extra == 'fireworks'
98
98
  Provides-Extra: google-genai
99
- Requires-Dist: langchain-google-genai<5.0.0,>=4.2.1; extra == 'google-genai'
99
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.2.2; extra == 'google-genai'
100
100
  Provides-Extra: groq
101
- Requires-Dist: langchain-groq<2.0.0,>=1.0.0; extra == 'groq'
101
+ Requires-Dist: langchain-groq<2.0.0,>=1.1.2; extra == 'groq'
102
102
  Provides-Extra: huggingface
103
- Requires-Dist: langchain-huggingface<2.0.0,>=1.0.0; extra == 'huggingface'
103
+ Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'huggingface'
104
104
  Provides-Extra: ibm
105
- Requires-Dist: langchain-ibm<2.0.0,>=1.0.0; extra == 'ibm'
105
+ Requires-Dist: langchain-ibm<2.0.0,>=1.0.7; extra == 'ibm'
106
106
  Provides-Extra: litellm
107
- Requires-Dist: langchain-litellm<2.0.0,>=0.6.1; extra == 'litellm'
107
+ Requires-Dist: langchain-litellm<2.0.0,>=0.6.4; extra == 'litellm'
108
108
  Provides-Extra: mistralai
109
- Requires-Dist: langchain-mistralai<2.0.0,>=1.0.0; extra == 'mistralai'
109
+ Requires-Dist: langchain-mistralai<2.0.0,>=1.1.2; extra == 'mistralai'
110
110
  Provides-Extra: modal
111
- Requires-Dist: langchain-modal>=0.0.2; extra == 'modal'
111
+ Requires-Dist: langchain-modal>=0.0.3; extra == 'modal'
112
112
  Provides-Extra: nvidia
113
- Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.0.0; extra == 'nvidia'
113
+ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.2.1; extra == 'nvidia'
114
114
  Provides-Extra: ollama
115
- Requires-Dist: langchain-ollama<2.0.0,>=1.0.0; extra == 'ollama'
115
+ Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
116
116
  Provides-Extra: openai
117
- Requires-Dist: langchain-openai<2.0.0,>=1.1.12; extra == 'openai'
117
+ Requires-Dist: langchain-openai<2.0.0,>=1.2.1; extra == 'openai'
118
118
  Provides-Extra: openrouter
119
- Requires-Dist: langchain-openrouter<2.0.0,>=0.2.0; extra == 'openrouter'
119
+ Requires-Dist: langchain-openrouter<2.0.0,>=0.2.1; extra == 'openrouter'
120
120
  Provides-Extra: perplexity
121
- Requires-Dist: langchain-perplexity<2.0.0,>=1.0.0; extra == 'perplexity'
121
+ Requires-Dist: langchain-perplexity<2.0.0,>=1.1.0; extra == 'perplexity'
122
122
  Provides-Extra: runloop
123
- Requires-Dist: langchain-runloop>=0.0.3; extra == 'runloop'
123
+ Requires-Dist: langchain-runloop>=0.0.4; extra == 'runloop'
124
124
  Provides-Extra: vertexai
125
- Requires-Dist: langchain-google-vertexai<4.0.0,>=3.0.0; extra == 'vertexai'
125
+ Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.2; extra == 'vertexai'
126
126
  Provides-Extra: xai
127
- Requires-Dist: langchain-xai<2.0.0,>=1.0.0; extra == 'xai'
127
+ Requires-Dist: langchain-xai<2.0.0,>=1.2.2; extra == 'xai'
128
128
  Description-Content-Type: text/markdown
129
129
 
130
130
  # 🧠🤖 Deep Agents CLI
@@ -132,7 +132,7 @@ Description-Content-Type: text/markdown
132
132
  [![PyPI - Version](https://img.shields.io/pypi/v/deepagents-cli?label=%20)](https://pypi.org/project/deepagents-cli/#history)
133
133
  [![PyPI - License](https://img.shields.io/pypi/l/deepagents-cli)](https://opensource.org/licenses/MIT)
134
134
  [![PyPI - Downloads](https://img.shields.io/pepy/dt/deepagents-cli)](https://pypistats.org/packages/deepagents-cli)
135
- [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langchain.svg?style=social&label=Follow%20%40LangChain)](https://x.com/langchain)
135
+ [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langchain_oss.svg?style=social&label=Follow%20%40LangChain)](https://x.com/langchain_oss)
136
136
 
137
137
  <p align="center">
138
138
  <img src="https://raw.githubusercontent.com/langchain-ai/deepagents/main/libs/cli/images/cli.png" alt="Deep Agents CLI" width="600"/>
@@ -3,7 +3,7 @@
3
3
  [![PyPI - Version](https://img.shields.io/pypi/v/deepagents-cli?label=%20)](https://pypi.org/project/deepagents-cli/#history)
4
4
  [![PyPI - License](https://img.shields.io/pypi/l/deepagents-cli)](https://opensource.org/licenses/MIT)
5
5
  [![PyPI - Downloads](https://img.shields.io/pepy/dt/deepagents-cli)](https://pypistats.org/packages/deepagents-cli)
6
- [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langchain.svg?style=social&label=Follow%20%40LangChain)](https://x.com/langchain)
6
+ [![Twitter](https://img.shields.io/twitter/url/https/twitter.com/langchain_oss.svg?style=social&label=Follow%20%40LangChain)](https://x.com/langchain_oss)
7
7
 
8
8
  <p align="center">
9
9
  <img src="https://raw.githubusercontent.com/langchain-ai/deepagents/main/libs/cli/images/cli.png" alt="Deep Agents CLI" width="600"/>
@@ -1,6 +1,6 @@
1
1
  """Version information and lightweight constants for `deepagents-cli`."""
2
2
 
3
- __version__ = "0.0.42" # x-release-please-version
3
+ __version__ = "0.0.44" # 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."""
@@ -849,6 +849,13 @@ class DeepAgentsApp(App):
849
849
  self._shell_running = False
850
850
  """True while a `!` shell command is executing."""
851
851
 
852
+ self._prewarm_worker: Worker[None] | None = None
853
+ """Background worker that prewarms `deepagents`/LangChain imports.
854
+
855
+ Awaited via `_await_prewarm_imports` before any caller on the event
856
+ loop re-enters the same module graph (see that method for why).
857
+ """
858
+
852
859
  # Lifecycle flags & re-entry guards
853
860
  self._connecting = server_kwargs is not None
854
861
  """True while the backing server is being started or restarted.
@@ -1038,6 +1045,39 @@ class DeepAgentsApp(App):
1038
1045
  colors = theme.get_theme_colors(self)
1039
1046
  return theme.get_css_variable_defaults(colors=colors)
1040
1047
 
1048
+ def _fatal_error(self) -> None:
1049
+ """Render an unhandled-exception traceback without leaking secrets.
1050
+
1051
+ Textual's default `_fatal_error` renders with `show_locals=True`,
1052
+ which prints local variables — including resolved API keys carried
1053
+ in `kwargs` dicts on the call path through `create_model`. Locals
1054
+ are only re-enabled when `DEEPAGENTS_CLI_DEBUG` matches a truthy
1055
+ token (`"1"`, `"true"`, `"yes"`); any other value, including `"0"`
1056
+ and `"false"`, leaves them disabled.
1057
+ """
1058
+ try:
1059
+ import rich
1060
+ from rich.segment import Segments
1061
+ from rich.traceback import Traceback
1062
+
1063
+ from deepagents_cli._env_vars import DEBUG
1064
+ except Exception: # noqa: BLE001 # mid-teardown import errors fall through to Textual's default rather than double-fault and swallow the original crash
1065
+ super()._fatal_error()
1066
+ return
1067
+
1068
+ self.bell()
1069
+ show_locals = os.environ.get(DEBUG, "").lower() in {"1", "true", "yes"}
1070
+ traceback = Traceback(
1071
+ show_locals=show_locals,
1072
+ width=None,
1073
+ locals_max_length=5,
1074
+ suppress=[rich],
1075
+ )
1076
+ self._exit_renderables.append(
1077
+ Segments(self.console.render(traceback, self.console.options))
1078
+ )
1079
+ self._close_messages_no_wait()
1080
+
1041
1081
  def compose(self) -> ComposeResult:
1042
1082
  """Compose the application layout.
1043
1083
 
@@ -1108,7 +1148,8 @@ class DeepAgentsApp(App):
1108
1148
  # Prewarm heavy imports in a thread while the first frame renders.
1109
1149
  # The user can't type yet, so GIL contention is harmless. By the
1110
1150
  # time _post_paint_init fires its inline imports are dict lookups.
1111
- self.run_worker(
1151
+ # Handle is captured so `_await_prewarm_imports` can block on it.
1152
+ self._prewarm_worker = self.run_worker(
1112
1153
  asyncio.to_thread(self._prewarm_deferred_imports),
1113
1154
  exclusive=True,
1114
1155
  group="startup-import-prewarm",
@@ -1580,6 +1621,10 @@ class DeepAgentsApp(App):
1580
1621
  # does the heavy langchain import + SDK init and may refine them
1581
1622
  # (e.g., context_limit from the model profile).
1582
1623
  if self._model_kwargs is not None:
1624
+ # Block on prewarm before re-entering the import graph; see
1625
+ # `_await_prewarm_imports` for the deadlock rationale.
1626
+ await self._await_prewarm_imports()
1627
+
1583
1628
  from deepagents_cli.config import create_model
1584
1629
  from deepagents_cli.model_config import ModelConfigError, save_recent_model
1585
1630
 
@@ -1719,6 +1764,30 @@ class DeepAgentsApp(App):
1719
1764
  self._queued_widgets.clear()
1720
1765
  self._deferred_actions.clear()
1721
1766
 
1767
+ async def _await_prewarm_imports(self) -> None:
1768
+ """Wait for prewarm imports before re-entering their module graph.
1769
+
1770
+ Prevents a multi-threaded import deadlock: the prewarm worker runs in
1771
+ `asyncio.to_thread`, and any caller that imports `deepagents` or
1772
+ LangChain from the event-loop thread while it's still running can
1773
+ race on partially-initialized module locks.
1774
+
1775
+ `CancelledError` propagates so app shutdown isn't silently absorbed.
1776
+ """
1777
+ from textual.worker import WorkerFailed
1778
+
1779
+ worker = self._prewarm_worker
1780
+ if worker is None:
1781
+ return
1782
+ try:
1783
+ await worker.wait()
1784
+ except WorkerFailed:
1785
+ # Prewarm body best-efforts third-party imports and already
1786
+ # warns; logging at WARNING here surfaces unexpected failures
1787
+ # (e.g. a regression that breaks a non-optional import) that
1788
+ # the body itself didn't catch.
1789
+ logger.warning("Import prewarm worker failed", exc_info=True)
1790
+
1722
1791
  @staticmethod
1723
1792
  def _prewarm_deferred_imports() -> None:
1724
1793
  """Background-load modules deferred from the startup path.
@@ -25,6 +25,8 @@ from __future__ import annotations
25
25
 
26
26
  import json
27
27
  import logging
28
+ import os
29
+ import re
28
30
  import shutil
29
31
  from pathlib import Path
30
32
  from typing import Any
@@ -39,6 +41,7 @@ from deepagents_cli.deploy.config import (
39
41
  load_subagents,
40
42
  )
41
43
  from deepagents_cli.deploy.templates import (
44
+ APP_PY_TEMPLATE,
42
45
  AUTH_BLOCKS,
43
46
  AUTH_ON_HANDLER,
44
47
  DEPLOY_GRAPH_TEMPLATE,
@@ -69,6 +72,97 @@ _MODEL_PROVIDER_DEPS: dict[str, str] = {
69
72
  }
70
73
  """Dependencies inferred from a provider: prefix on the model string."""
71
74
 
75
+ _FRONTEND_DIST_SRC = Path(__file__).parent / "frontend_dist"
76
+ """Location of the shipped pre-built frontend, inside this Python package."""
77
+
78
+ _FRONTEND_PLACEHOLDER_RE = re.compile(
79
+ r"window\.__DEEPAGENTS_CONFIG__\s*=\s*\{[^<]*?\};",
80
+ re.DOTALL,
81
+ )
82
+ """Matches the placeholder script we injected into index.html at build time."""
83
+
84
+
85
+ def _build_runtime_config_json(config: DeployConfig) -> str:
86
+ """Build the JSON value injected into `window.__DEEPAGENTS_CONFIG__`.
87
+
88
+ Only reached when `[frontend].enabled` and `[auth]` is set —
89
+ validation guarantees both. The `is None` guards below exist so
90
+ the optional fields narrow for type-checkers.
91
+ """
92
+ if config.frontend is None:
93
+ msg = "runtime config requires [frontend] to be configured"
94
+ raise ValueError(msg)
95
+ if config.auth is None:
96
+ msg = "runtime config requires [auth] to be configured"
97
+ raise ValueError(msg)
98
+
99
+ app_name = config.frontend.app_name or config.agent.name
100
+ payload: dict[str, Any] = {
101
+ "appName": app_name,
102
+ "assistantId": "agent",
103
+ }
104
+ # Optional UI-customization fields — only injected when the user
105
+ # set them, so the default-bundle case stays small.
106
+ if config.frontend.subtitle is not None:
107
+ payload["subtitle"] = config.frontend.subtitle
108
+ if config.frontend.prompts is not None:
109
+ payload["prompts"] = list(config.frontend.prompts)
110
+
111
+ provider = config.auth.provider
112
+ payload["auth"] = provider
113
+ if provider == "supabase":
114
+ payload["supabaseUrl"] = os.environ["SUPABASE_URL"]
115
+ payload["supabaseAnonKey"] = os.environ["SUPABASE_PUBLISHABLE_DEFAULT_KEY"]
116
+ elif provider == "clerk":
117
+ payload["clerkPublishableKey"] = os.environ["CLERK_PUBLISHABLE_KEY"]
118
+ elif provider == "anonymous":
119
+ # No env vars; payload["auth"] = "anonymous" is enough.
120
+ pass
121
+ else:
122
+ msg = f"Unknown auth provider for frontend: {provider}"
123
+ raise ValueError(msg)
124
+
125
+ # Escape `<` so a hostile or accidental `</script>` inside a string value
126
+ # can't break out of the inline <script> tag.
127
+ return json.dumps(payload, separators=(",", ":")).replace("<", "\\u003c")
128
+
129
+
130
+ def _copy_frontend_dist(config: DeployConfig, build_dir: Path) -> None:
131
+ """Copy the pre-built bundle into build_dir and rewrite the config placeholder."""
132
+ if not _FRONTEND_DIST_SRC.is_dir():
133
+ msg = (
134
+ f"Shipped frontend bundle not found at {_FRONTEND_DIST_SRC}. "
135
+ "Did you run `make build-frontends`?"
136
+ )
137
+ raise RuntimeError(msg)
138
+
139
+ dest = build_dir / "frontend_dist"
140
+ if dest.exists():
141
+ shutil.rmtree(dest)
142
+ shutil.copytree(_FRONTEND_DIST_SRC, dest)
143
+
144
+ index_html = dest / "index.html"
145
+ if not index_html.is_file():
146
+ msg = f"expected index.html inside {_FRONTEND_DIST_SRC}"
147
+ raise RuntimeError(msg)
148
+
149
+ html = index_html.read_text(encoding="utf-8")
150
+ payload = _build_runtime_config_json(config)
151
+ replacement = f"window.__DEEPAGENTS_CONFIG__ = {payload};"
152
+ new_html, count = _FRONTEND_PLACEHOLDER_RE.subn(
153
+ lambda _m: replacement,
154
+ html,
155
+ count=1,
156
+ )
157
+ if count == 0:
158
+ msg = (
159
+ "Could not find window.__DEEPAGENTS_CONFIG__ placeholder in the "
160
+ "shipped index.html. The frontend bundle is out of sync with the "
161
+ "bundler — rebuild with `make build-frontends`."
162
+ )
163
+ raise RuntimeError(msg)
164
+ index_html.write_text(new_html, encoding="utf-8")
165
+
72
166
 
73
167
  def bundle(
74
168
  config: DeployConfig,
@@ -127,18 +221,38 @@ def bundle(
127
221
  )
128
222
  logger.info("Generated deploy_graph.py")
129
223
 
130
- # 6. Generate auth.py if [auth] is configured.
131
- auth_present = config.auth is not None
132
- if config.auth is not None:
224
+ # 6. Generate auth.py from the [auth] provider, if any. Skipped
225
+ # entirely when [auth] is omitted — in that case LangSmith Cloud's
226
+ # default x-api-key auth applies. Validation guarantees [auth] is
227
+ # set whenever [frontend].enabled, so auth.py is always present
228
+ # for frontend deploys (including the "anonymous" provider, whose
229
+ # permissive handler lets the bundled UI reach /threads).
230
+ frontend_enabled = config.frontend is not None and config.frontend.enabled
231
+ auth_provider: str | None = (
232
+ config.auth.provider if config.auth is not None else None
233
+ )
234
+
235
+ auth_present = auth_provider is not None
236
+ if auth_provider is not None:
133
237
  (build_dir / "auth.py").write_text(
134
- _render_auth_py(config.auth.provider),
238
+ _render_auth_py(auth_provider),
135
239
  encoding="utf-8",
136
240
  )
137
- logger.info("Generated auth.py (%s)", config.auth.provider)
241
+ logger.info("Generated auth.py (%s)", auth_provider)
242
+
243
+ # 6b. Copy frontend bundle when enabled.
244
+ if frontend_enabled:
245
+ _copy_frontend_dist(config, build_dir)
246
+ (build_dir / "app.py").write_text(APP_PY_TEMPLATE, encoding="utf-8")
247
+ logger.info("Copied frontend bundle and wrote app.py (%s)", auth_provider)
138
248
 
139
249
  # 7. Render langgraph.json.
140
250
  (build_dir / "langgraph.json").write_text(
141
- _render_langgraph_json(env_present=env_present, auth_present=auth_present),
251
+ _render_langgraph_json(
252
+ env_present=env_present,
253
+ auth_present=auth_present,
254
+ frontend_present=frontend_enabled,
255
+ ),
142
256
  encoding="utf-8",
143
257
  )
144
258
 
@@ -312,8 +426,13 @@ def _render_auth_py(provider: str) -> str:
312
426
  return auth_block + AUTH_ON_HANDLER
313
427
 
314
428
 
315
- def _render_langgraph_json(*, env_present: bool, auth_present: bool = False) -> str:
316
- """Render `langgraph.json` — adds `"env"` and `"auth"` when applicable."""
429
+ def _render_langgraph_json(
430
+ *,
431
+ env_present: bool,
432
+ auth_present: bool = False,
433
+ frontend_present: bool = False,
434
+ ) -> str:
435
+ """Render `langgraph.json` — adds `"env"`, `"auth"`, `"http"` when applicable."""
317
436
  data: dict = {
318
437
  "dependencies": ["."],
319
438
  "graphs": {"agent": "./deploy_graph.py:make_graph"},
@@ -323,6 +442,8 @@ def _render_langgraph_json(*, env_present: bool, auth_present: bool = False) ->
323
442
  data["env"] = ".env"
324
443
  if auth_present:
325
444
  data["auth"] = {"path": "./auth.py:auth"}
445
+ if frontend_present:
446
+ data["http"] = {"app": "./app.py:app"}
326
447
  return json.dumps(data, indent=2) + "\n"
327
448
 
328
449
 
@@ -392,7 +513,12 @@ def print_bundle_summary(config: DeployConfig, build_dir: Path) -> None:
392
513
  print(f"\n Agent: {config.agent.name}")
393
514
  print(f" Model: {config.agent.model}")
394
515
  if config.auth is not None:
395
- print(f" Auth: {config.auth.provider}")
516
+ if config.auth.provider == "anonymous":
517
+ print(" Auth: anonymous (API open to anyone)")
518
+ else:
519
+ print(f" Auth: {config.auth.provider}")
520
+ else:
521
+ print(" Auth: none (LangSmith API key required to call the API)")
396
522
 
397
523
  memory_files = sorted(seed.get("memories", {}).keys())
398
524
  if memory_files:
@@ -265,6 +265,51 @@ def _deploy(
265
265
  print(f" - {err}")
266
266
  raise SystemExit(1)
267
267
 
268
+ # Warn + confirm if the frontend was set to anonymous mode. The
269
+ # generated auth.py for this case is permissive (overrides the
270
+ # LangSmith default x-api-key requirement) so the API is reachable
271
+ # by anyone with the deploy URL.
272
+ is_anonymous = (
273
+ config.frontend is not None
274
+ and config.frontend.enabled
275
+ and config.auth is not None
276
+ and config.auth.provider == "anonymous"
277
+ )
278
+ if is_anonymous:
279
+ # ANSI bold-red header + red bullets so this warning is visually
280
+ # distinct from the yellow beta-warning that prints above it
281
+ # (otherwise the "Continue? [y/N]" prompt looks like it's
282
+ # confirming the beta line rather than the anonymous-auth line).
283
+ print(
284
+ "\033[1;31m⚠ This deploy will use ANONYMOUS auth. "
285
+ "The API is open to anyone with the deploy URL.\033[0m"
286
+ )
287
+ print(
288
+ "\033[31m • Browser UI shows per-browser threads "
289
+ "(cookie-scoped UX, not security).\033[0m"
290
+ )
291
+ print(
292
+ "\033[31m • Anyone with the URL can call the API directly "
293
+ "(curl /threads, /runs, etc.) — no auth.\033[0m"
294
+ )
295
+ print(
296
+ "\033[31m • For real per-user auth, add an [auth] section "
297
+ '(provider = "supabase" or "clerk").\033[0m'
298
+ )
299
+ # Skip the interactive confirm on dry-run (no real push happens).
300
+ if not dry_run:
301
+ try:
302
+ answer = (
303
+ input("Continue with anonymous deploy? [y/N]: ").strip().lower()
304
+ )
305
+ except (EOFError, KeyboardInterrupt):
306
+ print()
307
+ print("Aborted.")
308
+ raise SystemExit(1) from None
309
+ if answer not in {"y", "yes"}:
310
+ print("Aborted.")
311
+ raise SystemExit(1)
312
+
268
313
  # Bundle
269
314
  build_dir = Path(tempfile.mkdtemp(prefix="deepagents-deploy-"))
270
315