deepagents-code 0.1.65__tar.gz → 0.1.67__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 (642) hide show
  1. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/.gitignore +1 -0
  2. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/CHANGELOG.md +38 -0
  3. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/DEVELOPMENT.md +2 -0
  4. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/Makefile +1 -0
  5. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/PKG-INFO +19 -19
  6. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_build_info.py +1 -1
  7. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_cli_context.py +6 -0
  8. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_constants.py +16 -1
  9. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_env_vars.py +23 -3
  10. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_server_config.py +228 -1
  11. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_version.py +1 -1
  12. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/agent.py +126 -60
  13. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/app.py +843 -274
  14. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/auto_mode.py +198 -32
  15. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/launch/server.py +38 -14
  16. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/launch/server_manager.py +19 -1
  17. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/non_interactive.py +1 -0
  18. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/remote_client.py +134 -3
  19. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/config.py +1211 -399
  20. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/config_manifest.py +133 -19
  21. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configurable_model.py +75 -47
  22. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/providers.py +56 -13
  23. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/service.py +4 -1
  24. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/cost_tracking.py +1 -1
  25. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/goal_rubric.py +38 -1
  26. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/integrations/sandbox_factory.py +251 -51
  27. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/main.py +19 -7
  28. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_config.py +4 -2
  29. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/model_config.py +108 -34
  30. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/model_retry.py +3 -1
  31. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/offload_api.py +186 -10
  32. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/offload_middleware.py +40 -13
  33. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/discovery.py +13 -10
  34. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/manifest.py +47 -22
  35. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/marketplace.py +69 -19
  36. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/reliable_rubric.py +11 -49
  37. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/server_graph.py +406 -57
  38. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/sessions.py +21 -0
  39. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tools.py +119 -10
  40. deepagents_code-0.1.67/deepagents_code/tui/modals/resume_blocked.py +184 -0
  41. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/approval.py +42 -5
  42. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/message_store.py +24 -0
  43. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/model_selector.py +1 -0
  44. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/welcome.py +1 -1
  45. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/update_check.py +8 -2
  46. deepagents_code-0.1.67/deepagents_code/workspace.py +497 -0
  47. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/pyproject.toml +14 -14
  48. deepagents_code-0.1.67/scripts/check_process_cwd.py +437 -0
  49. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/benchmarks/test_startup_benchmarks.py +0 -48
  50. deepagents_code-0.1.67/tests/unit_tests/client/commands/test_extras.py +58 -0
  51. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/client/commands/test_mcp.py +0 -120
  52. deepagents_code-0.1.67/tests/unit_tests/client/commands/test_tools.py +231 -0
  53. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/conftest.py +3 -0
  54. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/models/test_models.py +4 -191
  55. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_client_lifecycle.py +2 -56
  56. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_configuration.py +1 -159
  57. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_engine.py +1 -654
  58. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_execution.py +0 -170
  59. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_manager.py +1 -45
  60. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_presenter.py +0 -13
  61. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_server_lifecycle.py +1 -466
  62. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_transcript.py +126 -297
  63. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/plugins/test_marketplace.py +184 -161
  64. deepagents_code-0.1.67/tests/unit_tests/plugins/test_plugin_hooks.py +5 -0
  65. deepagents_code-0.1.67/tests/unit_tests/plugins/test_plugins_p0.py +595 -0
  66. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/skills/test_commands.py +1 -348
  67. deepagents_code-0.1.67/tests/unit_tests/skills/test_load.py +125 -0
  68. deepagents_code-0.1.67/tests/unit_tests/skills/test_merge.py +75 -0
  69. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/skills/test_thread_inspector.py +0 -180
  70. deepagents_code-0.1.67/tests/unit_tests/test__tool_stream.py +350 -0
  71. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_agent.py +429 -2031
  72. deepagents_code-0.1.67/tests/unit_tests/test_agent_friendly.py +262 -0
  73. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_app.py +1624 -16398
  74. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_approval_mode.py +0 -197
  75. deepagents_code-0.1.67/tests/unit_tests/test_args.py +347 -0
  76. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_ask_user_middleware.py +2 -400
  77. deepagents_code-0.1.67/tests/unit_tests/test_ask_user_types.py +163 -0
  78. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_auto_mode.py +627 -1708
  79. deepagents_code-0.1.67/tests/unit_tests/test_charset.py +175 -0
  80. deepagents_code-0.1.67/tests/unit_tests/test_cli_provider.py +85 -0
  81. deepagents_code-0.1.67/tests/unit_tests/test_clipboard.py +244 -0
  82. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_cold_cache.py +1 -603
  83. deepagents_code-0.1.67/tests/unit_tests/test_command_registry.py +128 -0
  84. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_compact_tool.py +51 -319
  85. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_config.py +1342 -3638
  86. deepagents_code-0.1.67/tests/unit_tests/test_config_manifest.py +2222 -0
  87. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_configurable_model.py +70 -1012
  88. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_configuration.py +164 -1364
  89. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_configuration_resolution.py +4 -0
  90. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_configuration_resolver.py +2 -654
  91. deepagents_code-0.1.67/tests/unit_tests/test_context_doctor.py +89 -0
  92. deepagents_code-0.1.67/tests/unit_tests/test_cost_tracking.py +1643 -0
  93. deepagents_code-0.1.67/tests/unit_tests/test_cursor_style.py +26 -0
  94. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_debug.py +98 -237
  95. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_debug_buffer.py +1 -173
  96. deepagents_code-0.1.67/tests/unit_tests/test_debug_console.py +504 -0
  97. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_dep_floor_check.py +0 -66
  98. deepagents_code-0.1.67/tests/unit_tests/test_diff_utils.py +42 -0
  99. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_doctor.py +0 -302
  100. deepagents_code-0.1.67/tests/unit_tests/test_editor.py +45 -0
  101. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_end_to_end.py +0 -67
  102. deepagents_code-0.1.67/tests/unit_tests/test_env_vars.py +30 -0
  103. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_event_bus.py +0 -141
  104. deepagents_code-0.1.67/tests/unit_tests/test_exception_handling.py +83 -0
  105. deepagents_code-0.1.67/tests/unit_tests/test_extension_api.py +24 -0
  106. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_extension_cli_trust.py +1 -43
  107. deepagents_code-0.1.67/tests/unit_tests/test_extension_discovery.py +74 -0
  108. deepagents_code-0.1.67/tests/unit_tests/test_extension_host_runtime.py +52 -0
  109. deepagents_code-0.1.67/tests/unit_tests/test_extension_hosting.py +73 -0
  110. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_extension_runtime.py +0 -135
  111. deepagents_code-0.1.67/tests/unit_tests/test_extra_skills_dirs.py +34 -0
  112. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_extras_info.py +82 -376
  113. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_file_ops.py +1 -460
  114. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_formatting.py +3 -109
  115. deepagents_code-0.1.67/tests/unit_tests/test_git.py +346 -0
  116. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_glm_5p2_profile.py +0 -77
  117. deepagents_code-0.1.67/tests/unit_tests/test_goal_criteria_client.py +246 -0
  118. deepagents_code-0.1.67/tests/unit_tests/test_goal_rubric.py +1198 -0
  119. deepagents_code-0.1.67/tests/unit_tests/test_goal_state_limits.py +116 -0
  120. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_goal_state_notice.py +0 -89
  121. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_goal_state_persistence.py +0 -108
  122. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_goal_tools.py +4 -375
  123. deepagents_code-0.1.67/tests/unit_tests/test_hooks.py +176 -0
  124. deepagents_code-0.1.67/tests/unit_tests/test_imports.py +1 -0
  125. deepagents_code-0.1.67/tests/unit_tests/test_input_parsing.py +282 -0
  126. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_install_command.py +30 -690
  127. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_install_script.py +344 -3006
  128. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_invocation.py +0 -18
  129. deepagents_code-0.1.67/tests/unit_tests/test_iterm_cursor_guide.py +95 -0
  130. deepagents_code-0.1.67/tests/unit_tests/test_json_types.py +1 -0
  131. deepagents_code-0.1.67/tests/unit_tests/test_local_context.py +859 -0
  132. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_main.py +117 -1653
  133. deepagents_code-0.1.67/tests/unit_tests/test_main_acp_mode.py +124 -0
  134. deepagents_code-0.1.67/tests/unit_tests/test_main_args.py +1976 -0
  135. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_managed_tools.py +1 -573
  136. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_mcp_auth.py +1 -89
  137. deepagents_code-0.1.67/tests/unit_tests/test_mcp_config.py +56 -0
  138. deepagents_code-0.1.67/tests/unit_tests/test_mcp_disabled.py +95 -0
  139. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_mcp_login_service.py +0 -107
  140. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_mcp_tools.py +125 -1191
  141. deepagents_code-0.1.67/tests/unit_tests/test_media_utils.py +492 -0
  142. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_memory_guard.py +0 -115
  143. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_model_config.py +564 -5243
  144. deepagents_code-0.1.67/tests/unit_tests/test_model_retry.py +837 -0
  145. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_model_switch.py +1 -738
  146. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_non_interactive.py +879 -1943
  147. deepagents_code-0.1.67/tests/unit_tests/test_notifications.py +11 -0
  148. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_offload.py +2 -508
  149. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_offload_api.py +503 -251
  150. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_onboarding.py +2 -176
  151. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_openai_codex_integration.py +0 -21
  152. deepagents_code-0.1.67/tests/unit_tests/test_output.py +7 -0
  153. deepagents_code-0.1.67/tests/unit_tests/test_paths.py +637 -0
  154. deepagents_code-0.1.67/tests/unit_tests/test_process_cwd_check.py +182 -0
  155. deepagents_code-0.1.67/tests/unit_tests/test_reasoning_effort.py +176 -0
  156. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_reliable_rubric.py +262 -470
  157. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_reload.py +39 -914
  158. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_remote_client.py +147 -551
  159. deepagents_code-0.1.67/tests/unit_tests/test_repository_bounds.py +104 -0
  160. deepagents_code-0.1.67/tests/unit_tests/test_resume_compaction_recovery.py +3 -0
  161. deepagents_code-0.1.67/tests/unit_tests/test_resume_state.py +293 -0
  162. deepagents_code-0.1.67/tests/unit_tests/test_rubric_cli.py +40 -0
  163. deepagents_code-0.1.67/tests/unit_tests/test_sandbox_factory.py +1039 -0
  164. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_sandbox_registry.py +0 -54
  165. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_server.py +0 -338
  166. deepagents_code-0.1.67/tests/unit_tests/test_server_config.py +301 -0
  167. deepagents_code-0.1.67/tests/unit_tests/test_server_graph.py +1162 -0
  168. deepagents_code-0.1.67/tests/unit_tests/test_server_helpers.py +279 -0
  169. deepagents_code-0.1.67/tests/unit_tests/test_server_manager.py +407 -0
  170. deepagents_code-0.1.67/tests/unit_tests/test_server_tracing.py +193 -0
  171. deepagents_code-0.1.67/tests/unit_tests/test_session_stats.py +573 -0
  172. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_sessions.py +23 -1205
  173. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_skill_invocation.py +0 -456
  174. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_startup_fast_paths.py +5 -106
  175. deepagents_code-0.1.67/tests/unit_tests/test_subagents.py +210 -0
  176. deepagents_code-0.1.67/tests/unit_tests/test_terminal_capabilities.py +43 -0
  177. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_terminal_escape.py +0 -40
  178. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_terminal_stderr.py +0 -24
  179. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_textual_patches.py +0 -171
  180. deepagents_code-0.1.67/tests/unit_tests/test_theme.py +1182 -0
  181. deepagents_code-0.1.67/tests/unit_tests/test_threads_resume.py +282 -0
  182. deepagents_code-0.1.67/tests/unit_tests/test_tool_catalog.py +340 -0
  183. deepagents_code-0.1.67/tests/unit_tests/test_tool_display.py +303 -0
  184. deepagents_code-0.1.67/tests/unit_tests/test_tracing_replicas.py +28 -0
  185. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_transcript_virtualization.py +0 -16
  186. deepagents_code-0.1.67/tests/unit_tests/test_ui.py +11 -0
  187. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_uninstall_command.py +1 -57
  188. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_update_check.py +726 -4095
  189. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_version.py +5 -886
  190. deepagents_code-0.1.67/tests/unit_tests/test_workspace.py +244 -0
  191. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tools/test_current_thread.py +0 -7
  192. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tools/test_fetch_url.py +0 -73
  193. deepagents_code-0.1.67/tests/unit_tests/tools/test_web_search.py +81 -0
  194. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/modals/plugin_manager/test_structure.py +0 -210
  195. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/modals/test_cold_cache.py +0 -95
  196. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/modals/test_model_switch.py +0 -14
  197. deepagents_code-0.1.67/tests/unit_tests/tui/modals/test_prompt_clipboard.py +60 -0
  198. deepagents_code-0.1.67/tests/unit_tests/tui/modals/test_resume_blocked.py +61 -0
  199. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/test_textual_adapter.py +5025 -9739
  200. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_agent_selector.py +230 -0
  201. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_approval.py +575 -0
  202. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_ask_user.py +621 -0
  203. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_auth_widgets.py +4 -3
  204. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +22 -0
  205. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_autocomplete.py +604 -0
  206. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_chat_input.py +1897 -0
  207. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_cwd_switch.py +0 -86
  208. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_diff.py +342 -0
  209. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_goal_review.py +270 -0
  210. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_history.py +192 -0
  211. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_inline_prompt.py +0 -87
  212. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_install_confirm.py +122 -0
  213. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_launch_init.py +262 -0
  214. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_links.py +27 -170
  215. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_loading.py +62 -0
  216. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_mcp_login_modal.py +0 -47
  217. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_mcp_reconnect.py +0 -77
  218. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_mcp_viewer.py +1146 -0
  219. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_message_store.py +438 -0
  220. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_messages.py +86 -3201
  221. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_model_selector.py +1726 -0
  222. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_notification_center.py +209 -0
  223. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_notification_detail.py +54 -0
  224. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_notification_settings.py +0 -143
  225. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_restart_prompt.py +62 -0
  226. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_startup_tip.py +59 -0
  227. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_status.py +545 -0
  228. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_subagent_panel.py +263 -0
  229. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_thread_agent_switch.py +0 -55
  230. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_thread_selector.py +2458 -0
  231. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_tool_renderers.py +223 -0
  232. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_update_available.py +50 -0
  233. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_update_confirm.py +0 -42
  234. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_update_progress.py +1 -139
  235. deepagents_code-0.1.67/tests/unit_tests/tui/widgets/test_welcome.py +423 -0
  236. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/uv.lock +125 -118
  237. deepagents_code-0.1.65/tests/integration_tests/test_goal_criteria_remote.py +0 -117
  238. deepagents_code-0.1.65/tests/unit_tests/client/commands/test_extras.py +0 -206
  239. deepagents_code-0.1.65/tests/unit_tests/client/commands/test_tools.py +0 -599
  240. deepagents_code-0.1.65/tests/unit_tests/plugins/test_plugin_hooks.py +0 -150
  241. deepagents_code-0.1.65/tests/unit_tests/plugins/test_plugins_p0.py +0 -1845
  242. deepagents_code-0.1.65/tests/unit_tests/plugins/test_store.py +0 -68
  243. deepagents_code-0.1.65/tests/unit_tests/skills/test_load.py +0 -934
  244. deepagents_code-0.1.65/tests/unit_tests/skills/test_merge.py +0 -420
  245. deepagents_code-0.1.65/tests/unit_tests/test__tool_stream.py +0 -737
  246. deepagents_code-0.1.65/tests/unit_tests/test_agent_friendly.py +0 -610
  247. deepagents_code-0.1.65/tests/unit_tests/test_args.py +0 -1044
  248. deepagents_code-0.1.65/tests/unit_tests/test_ask_user_types.py +0 -473
  249. deepagents_code-0.1.65/tests/unit_tests/test_charset.py +0 -371
  250. deepagents_code-0.1.65/tests/unit_tests/test_cli_provider.py +0 -351
  251. deepagents_code-0.1.65/tests/unit_tests/test_clipboard.py +0 -600
  252. deepagents_code-0.1.65/tests/unit_tests/test_command_registry.py +0 -392
  253. deepagents_code-0.1.65/tests/unit_tests/test_config_manifest.py +0 -4592
  254. deepagents_code-0.1.65/tests/unit_tests/test_context_doctor.py +0 -180
  255. deepagents_code-0.1.65/tests/unit_tests/test_cost_tracking.py +0 -4008
  256. deepagents_code-0.1.65/tests/unit_tests/test_cursor_blink.py +0 -95
  257. deepagents_code-0.1.65/tests/unit_tests/test_cursor_style.py +0 -56
  258. deepagents_code-0.1.65/tests/unit_tests/test_debug_console.py +0 -2170
  259. deepagents_code-0.1.65/tests/unit_tests/test_diff_utils.py +0 -242
  260. deepagents_code-0.1.65/tests/unit_tests/test_editor.py +0 -347
  261. deepagents_code-0.1.65/tests/unit_tests/test_env_vars.py +0 -135
  262. deepagents_code-0.1.65/tests/unit_tests/test_exception_handling.py +0 -241
  263. deepagents_code-0.1.65/tests/unit_tests/test_extension_api.py +0 -198
  264. deepagents_code-0.1.65/tests/unit_tests/test_extension_discovery.py +0 -206
  265. deepagents_code-0.1.65/tests/unit_tests/test_extension_host_runtime.py +0 -117
  266. deepagents_code-0.1.65/tests/unit_tests/test_extension_hosting.py +0 -184
  267. deepagents_code-0.1.65/tests/unit_tests/test_git.py +0 -879
  268. deepagents_code-0.1.65/tests/unit_tests/test_goal_criteria_client.py +0 -521
  269. deepagents_code-0.1.65/tests/unit_tests/test_goal_rubric.py +0 -2663
  270. deepagents_code-0.1.65/tests/unit_tests/test_goal_state_limits.py +0 -288
  271. deepagents_code-0.1.65/tests/unit_tests/test_hooks.py +0 -600
  272. deepagents_code-0.1.65/tests/unit_tests/test_imports.py +0 -8
  273. deepagents_code-0.1.65/tests/unit_tests/test_input_parsing.py +0 -655
  274. deepagents_code-0.1.65/tests/unit_tests/test_iterm_cursor_guide.py +0 -256
  275. deepagents_code-0.1.65/tests/unit_tests/test_json_types.py +0 -35
  276. deepagents_code-0.1.65/tests/unit_tests/test_local_context.py +0 -2134
  277. deepagents_code-0.1.65/tests/unit_tests/test_main_acp_mode.py +0 -670
  278. deepagents_code-0.1.65/tests/unit_tests/test_main_args.py +0 -4385
  279. deepagents_code-0.1.65/tests/unit_tests/test_mcp_config.py +0 -214
  280. deepagents_code-0.1.65/tests/unit_tests/test_mcp_disabled.py +0 -230
  281. deepagents_code-0.1.65/tests/unit_tests/test_media_utils.py +0 -1121
  282. deepagents_code-0.1.65/tests/unit_tests/test_middleware_trace_policy.py +0 -55
  283. deepagents_code-0.1.65/tests/unit_tests/test_model_retry.py +0 -1794
  284. deepagents_code-0.1.65/tests/unit_tests/test_notifications.py +0 -198
  285. deepagents_code-0.1.65/tests/unit_tests/test_output.py +0 -62
  286. deepagents_code-0.1.65/tests/unit_tests/test_paths.py +0 -1520
  287. deepagents_code-0.1.65/tests/unit_tests/test_reasoning_effort.py +0 -1340
  288. deepagents_code-0.1.65/tests/unit_tests/test_repository_bounds.py +0 -240
  289. deepagents_code-0.1.65/tests/unit_tests/test_resume_compaction_recovery.py +0 -75
  290. deepagents_code-0.1.65/tests/unit_tests/test_resume_state.py +0 -814
  291. deepagents_code-0.1.65/tests/unit_tests/test_rubric_cli.py +0 -363
  292. deepagents_code-0.1.65/tests/unit_tests/test_sandbox_factory.py +0 -1423
  293. deepagents_code-0.1.65/tests/unit_tests/test_server_config.py +0 -604
  294. deepagents_code-0.1.65/tests/unit_tests/test_server_graph.py +0 -718
  295. deepagents_code-0.1.65/tests/unit_tests/test_server_helpers.py +0 -205
  296. deepagents_code-0.1.65/tests/unit_tests/test_server_manager.py +0 -838
  297. deepagents_code-0.1.65/tests/unit_tests/test_session_stats.py +0 -1614
  298. deepagents_code-0.1.65/tests/unit_tests/test_startup_blocking.py +0 -72
  299. deepagents_code-0.1.65/tests/unit_tests/test_subagents.py +0 -731
  300. deepagents_code-0.1.65/tests/unit_tests/test_terminal_capabilities.py +0 -203
  301. deepagents_code-0.1.65/tests/unit_tests/test_theme.py +0 -3117
  302. deepagents_code-0.1.65/tests/unit_tests/test_threads_resume.py +0 -577
  303. deepagents_code-0.1.65/tests/unit_tests/test_tool_catalog.py +0 -755
  304. deepagents_code-0.1.65/tests/unit_tests/test_tool_display.py +0 -594
  305. deepagents_code-0.1.65/tests/unit_tests/test_tracing_replicas.py +0 -70
  306. deepagents_code-0.1.65/tests/unit_tests/test_ui.py +0 -72
  307. deepagents_code-0.1.65/tests/unit_tests/tui/modals/test_prompt_clipboard.py +0 -582
  308. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_agent_selector.py +0 -487
  309. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_approval.py +0 -1211
  310. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_ask_user.py +0 -2946
  311. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_auto_mode_notice.py +0 -91
  312. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_autocomplete.py +0 -1420
  313. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_chat_input.py +0 -8710
  314. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_diff.py +0 -1109
  315. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_goal_review.py +0 -605
  316. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_history.py +0 -546
  317. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_install_confirm.py +0 -395
  318. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_launch_init.py +0 -682
  319. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_loading.py +0 -161
  320. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_mcp_viewer.py +0 -2417
  321. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_message_store.py +0 -1662
  322. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_model_selector.py +0 -4597
  323. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_notification_center.py +0 -585
  324. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_notification_detail.py +0 -133
  325. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_restart_prompt.py +0 -127
  326. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_startup_tip.py +0 -159
  327. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_status.py +0 -1762
  328. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_subagent_panel.py +0 -590
  329. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_thread_selector.py +0 -5883
  330. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_tool_renderers.py +0 -642
  331. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_update_available.py +0 -185
  332. deepagents_code-0.1.65/tests/unit_tests/tui/widgets/test_welcome.py +0 -1113
  333. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/AGENTS.md +0 -0
  334. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/ARCHITECTURE.md +0 -0
  335. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/COMMANDS.md +0 -0
  336. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/EXTENSIONS.md +0 -0
  337. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/HOOKS.md +0 -0
  338. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/LICENSE +0 -0
  339. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/PRICING.md +0 -0
  340. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/README.md +0 -0
  341. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/THREAT_MODEL.md +0 -0
  342. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/__init__.py +0 -0
  343. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/__main__.py +0 -0
  344. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_ask_user_types.py +0 -0
  345. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_content_blocks.py +0 -0
  346. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_debug.py +0 -0
  347. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_debug_buffer.py +0 -0
  348. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_dep_floor_check.py +0 -0
  349. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_fake_models.py +0 -0
  350. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_git.py +0 -0
  351. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_glm_5p2_profile.py +0 -0
  352. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_home_error.py +0 -0
  353. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_invocation.py +0 -0
  354. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_markdown.py +0 -0
  355. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_paths.py +0 -0
  356. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_repository_bounds.py +0 -0
  357. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_reserved_names.py +0 -0
  358. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_session_stats.py +0 -0
  359. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_startup_error.py +0 -0
  360. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_terminal_stderr.py +0 -0
  361. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_testing_models.py +0 -0
  362. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_textual_patches.py +0 -0
  363. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_tool_stream.py +0 -0
  364. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/_tracing.py +0 -0
  365. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/acp.py +0 -0
  366. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/app.tcss +0 -0
  367. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/approval_mode.py +0 -0
  368. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/ask_user.py +0 -0
  369. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/auth_display.py +0 -0
  370. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/auth_store.py +0 -0
  371. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/__init__.py +0 -0
  372. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/deepagents-thread-inspector/SKILL.md +0 -0
  373. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/deepagents-thread-inspector/scripts/inspect_sessions.py +0 -0
  374. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/remember/SKILL.md +0 -0
  375. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/skill-creator/SKILL.md +0 -0
  376. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/skill-creator/scripts/init_skill.py +0 -0
  377. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/built_in_skills/skill-creator/scripts/quick_validate.py +0 -0
  378. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/bundled_prices.README.md +0 -0
  379. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/bundled_prices.json +0 -0
  380. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/__init__.py +0 -0
  381. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/commands/__init__.py +0 -0
  382. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/commands/auth.py +0 -0
  383. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/commands/config.py +0 -0
  384. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/commands/extras.py +0 -0
  385. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/commands/mcp.py +0 -0
  386. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/commands/tools.py +0 -0
  387. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/client/launch/__init__.py +0 -0
  388. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/clipboard.py +0 -0
  389. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/cold_cache.py +0 -0
  390. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/command_registry.py +0 -0
  391. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/__init__.py +0 -0
  392. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/interpreter.py +0 -0
  393. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/paths.py +0 -0
  394. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/provider.py +0 -0
  395. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/resolver.py +0 -0
  396. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/theme_resolution.py +0 -0
  397. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/types.py +0 -0
  398. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/configuration/writer.py +0 -0
  399. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/context_doctor.py +0 -0
  400. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/default_agent_prompt.md +0 -0
  401. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/diff_utils.py +0 -0
  402. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/doctor.py +0 -0
  403. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/editor.py +0 -0
  404. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/event_bus.py +0 -0
  405. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/__init__.py +0 -0
  406. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/api.py +0 -0
  407. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/discovery.py +0 -0
  408. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/hosting.py +0 -0
  409. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/loader.py +0 -0
  410. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/registry.py +0 -0
  411. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/runtime.py +0 -0
  412. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/settings.py +0 -0
  413. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extensions/trust.py +0 -0
  414. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/extras_info.py +0 -0
  415. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/file_ops.py +0 -0
  416. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/formatting.py +0 -0
  417. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/goal_state_limits.py +0 -0
  418. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/goal_state_notice.py +0 -0
  419. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/goal_tools.py +0 -0
  420. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/__init__.py +0 -0
  421. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/capabilities.py +0 -0
  422. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/client.py +0 -0
  423. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/client_lifecycle.py +0 -0
  424. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/context.py +0 -0
  425. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/engine.py +0 -0
  426. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/env.py +0 -0
  427. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/envelope.py +0 -0
  428. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/interrupt.py +0 -0
  429. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/legacy.py +0 -0
  430. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/loading.py +0 -0
  431. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/manager.py +0 -0
  432. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/migration.py +0 -0
  433. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/models/__init__.py +0 -0
  434. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/models/adapters.py +0 -0
  435. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/models/config.py +0 -0
  436. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/models/domain.py +0 -0
  437. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/models/transport.py +0 -0
  438. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/models/wire.py +0 -0
  439. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/permissions.py +0 -0
  440. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/presenter.py +0 -0
  441. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/projection.py +0 -0
  442. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/reducer.py +0 -0
  443. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/runner.py +0 -0
  444. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/runtime.py +0 -0
  445. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/server_middleware.py +0 -0
  446. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/snapshot.py +0 -0
  447. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/tools.py +0 -0
  448. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/transcript.py +0 -0
  449. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/trust.py +0 -0
  450. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/hooks/validate_terminal_sequence.py +0 -0
  451. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/input.py +0 -0
  452. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/integrations/__init__.py +0 -0
  453. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/integrations/openai_codex.py +0 -0
  454. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/integrations/sandbox_config.py +0 -0
  455. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/integrations/sandbox_provider.py +0 -0
  456. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/integrations/sandbox_registry.py +0 -0
  457. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/iterm_cursor_guide.py +0 -0
  458. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/json_types.py +0 -0
  459. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/local_context.py +0 -0
  460. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/managed_tools.py +0 -0
  461. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_auth.py +0 -0
  462. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_disabled.py +0 -0
  463. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_login_service.py +0 -0
  464. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_oauth_ui.py +0 -0
  465. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_providers/__init__.py +0 -0
  466. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_providers/_registry.py +0 -0
  467. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_providers/base.py +0 -0
  468. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_providers/github.py +0 -0
  469. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_providers/slack.py +0 -0
  470. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/mcp_tools.py +0 -0
  471. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/media_utils.py +0 -0
  472. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/memory_guard.py +0 -0
  473. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/notifications.py +0 -0
  474. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/offload.py +0 -0
  475. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/onboarding.py +0 -0
  476. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/output.py +0 -0
  477. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/paste_collapse.py +0 -0
  478. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/__init__.py +0 -0
  479. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/_json.py +0 -0
  480. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/adapters/__init__.py +0 -0
  481. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/adapters/hooks.py +0 -0
  482. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/adapters/mcp.py +0 -0
  483. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/adapters/skills.py +0 -0
  484. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/adapters/skills_middleware.py +0 -0
  485. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/commands_cli.py +0 -0
  486. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/models.py +0 -0
  487. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/store.py +0 -0
  488. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/plugins/substitution.py +0 -0
  489. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/project_utils.py +0 -0
  490. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/py.typed +0 -0
  491. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/reasoning_effort.py +0 -0
  492. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/resume_state.py +0 -0
  493. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/skills/__init__.py +0 -0
  494. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/skills/commands.py +0 -0
  495. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/skills/invocation.py +0 -0
  496. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/skills/load.py +0 -0
  497. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/skills/merge.py +0 -0
  498. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/skills/trust.py +0 -0
  499. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/state_migration.py +0 -0
  500. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/subagents.py +0 -0
  501. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/system_prompt.md +0 -0
  502. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/terminal_capabilities.py +0 -0
  503. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/terminal_escape.py +0 -0
  504. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/theme.py +0 -0
  505. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tool_catalog.py +0 -0
  506. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tool_display.py +0 -0
  507. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/__init__.py +0 -0
  508. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/key_hints.py +0 -0
  509. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/__init__.py +0 -0
  510. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/cold_cache.py +0 -0
  511. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/model_switch.py +0 -0
  512. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/plugin_manager/__init__.py +0 -0
  513. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/plugin_manager/content.py +0 -0
  514. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/plugin_manager/models.py +0 -0
  515. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/plugin_manager/plugin_manager.tcss +0 -0
  516. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/plugin_manager/state.py +0 -0
  517. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/plugin_manager/tabs.py +0 -0
  518. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/prompt_clipboard.py +0 -0
  519. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/prompt_clipboard.tcss +0 -0
  520. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/modals/resume_compact.py +0 -0
  521. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/screens/__init__.py +0 -0
  522. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/textual_adapter.py +0 -0
  523. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/__init__.py +0 -0
  524. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/_copy_spans.py +0 -0
  525. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/_inline_prompt.py +0 -0
  526. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/_js_eval_display.py +0 -0
  527. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/_links.py +0 -0
  528. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/_paste_textarea.py +0 -0
  529. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/agent_selector.py +0 -0
  530. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/ask_user.py +0 -0
  531. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/auth.py +0 -0
  532. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/auto_mode_notice.py +0 -0
  533. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/autocomplete.py +0 -0
  534. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/chat_input.py +0 -0
  535. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/codex_auth.py +0 -0
  536. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/context_usage.py +0 -0
  537. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/cwd_switch.py +0 -0
  538. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/debug_console.py +0 -0
  539. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/diff.py +0 -0
  540. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/effort_selector.py +0 -0
  541. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/goal_review.py +0 -0
  542. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/goal_status.py +0 -0
  543. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/history.py +0 -0
  544. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/install_confirm.py +0 -0
  545. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/launch_init.py +0 -0
  546. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/loading.py +0 -0
  547. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/mcp_login.py +0 -0
  548. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/mcp_reconnect.py +0 -0
  549. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/mcp_viewer.py +0 -0
  550. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/messages.py +0 -0
  551. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/notification_center.py +0 -0
  552. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/notification_detail.py +0 -0
  553. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/notification_settings.py +0 -0
  554. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/prompt_search.py +0 -0
  555. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/restart_prompt.py +0 -0
  556. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/skill_trust.py +0 -0
  557. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/startup_tip.py +0 -0
  558. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/status.py +0 -0
  559. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/subagent_panel.py +0 -0
  560. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/theme_selector.py +0 -0
  561. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/thread_agent_switch.py +0 -0
  562. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/thread_selector.py +0 -0
  563. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/tool_renderers.py +0 -0
  564. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/tool_widgets.py +0 -0
  565. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/update_available.py +0 -0
  566. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/update_confirm.py +0 -0
  567. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/update_progress.py +0 -0
  568. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/tui/widgets/yolo_mode_notice.py +0 -0
  569. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/ui.py +0 -0
  570. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/deepagents_code/unicode_security.py +0 -0
  571. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/extensions/memory_store.py +0 -0
  572. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/arxiv-search/SKILL.md +0 -0
  573. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/arxiv-search/arxiv_search.py +0 -0
  574. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/langgraph-docs/SKILL.md +0 -0
  575. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/skill-creator/SKILL.md +0 -0
  576. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/skill-creator/scripts/init_skill.py +0 -0
  577. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/skill-creator/scripts/quick_validate.py +0 -0
  578. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/examples/skills/web-research/SKILL.md +0 -0
  579. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/hatch_build.py +0 -0
  580. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/images/model-stream-retry.png +0 -0
  581. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/images/tui.png +0 -0
  582. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/scripts/check_imports.py +0 -0
  583. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/scripts/debug_server.sh +0 -0
  584. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/scripts/generate_commands_catalog.py +0 -0
  585. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/scripts/install.sh +0 -0
  586. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/README.md +0 -0
  587. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/__init__.py +0 -0
  588. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/benchmarks/__init__.py +0 -0
  589. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/benchmarks/test_codspeed_import_benchmarks.py +0 -0
  590. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/benchmarks/test_local_context_benchmarks.py +0 -0
  591. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/conftest.py +0 -0
  592. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_acp_mode.py +0 -0
  593. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_auto_approve_remote.py +0 -0
  594. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_compact_resume.py +0 -0
  595. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_offload_server_side.py +0 -0
  596. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_pending_work_recovery.py +0 -0
  597. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_sandbox_factory.py +0 -0
  598. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/integration_tests/test_sandbox_operations.py +0 -0
  599. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/__init__.py +0 -0
  600. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/client/__init__.py +0 -0
  601. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/client/commands/__init__.py +0 -0
  602. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/client/commands/test_auth.py +0 -0
  603. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/data/coding_agent_v1_validator.json +0 -0
  604. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/__init__.py +0 -0
  605. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/models/__init__.py +0 -0
  606. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/hooks/test_trust.py +0 -0
  607. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/plugins/__init__.py +0 -0
  608. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/skills/__init__.py +0 -0
  609. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/skills/test_skill_trust.py +0 -0
  610. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/skills/test_skills_json.py +0 -0
  611. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/smoke_tests/__init__.py +0 -0
  612. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/smoke_tests/conftest.py +0 -0
  613. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/smoke_tests/snapshots/system_prompt_interactive_local.md +0 -0
  614. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/smoke_tests/test_system_prompt.py +0 -0
  615. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_acp.py +0 -0
  616. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_auth_display.py +0 -0
  617. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_auth_store.py +0 -0
  618. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_auth_web_search_restart.py +0 -0
  619. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_coding_agent_metadata.py +0 -0
  620. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_extension_config_manifest.py +0 -0
  621. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_extension_display.py +0 -0
  622. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_hatch_build.py +0 -0
  623. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_mcp_oauth_ui.py +0 -0
  624. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_sandbox_config.py +0 -0
  625. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_sandbox_provider.py +0 -0
  626. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_shell_allow_list.py +0 -0
  627. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_state_migration.py +0 -0
  628. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_terminal_progress_preference.py +0 -0
  629. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_tracing.py +0 -0
  630. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/test_unicode_security.py +0 -0
  631. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tools/__init__.py +0 -0
  632. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tools/test_tool_arg_schemas.py +0 -0
  633. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/__init__.py +0 -0
  634. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/modals/__init__.py +0 -0
  635. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/modals/plugin_manager/__init__.py +0 -0
  636. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/test_key_hints.py +0 -0
  637. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/test_modal_footer_layout.py +0 -0
  638. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/test_subagent_stream.py +5 -5
  639. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/__init__.py +0 -0
  640. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_copy_spans.py +15 -15
  641. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_prompt_search.py +0 -0
  642. {deepagents_code-0.1.65 → deepagents_code-0.1.67}/tests/unit_tests/tui/widgets/test_skill_trust_screen.py +0 -0
@@ -158,6 +158,7 @@ venv.bak/
158
158
  *.jks
159
159
  credentials.json
160
160
  token.json
161
+ **/.deepagents/mcp-tokens/
161
162
  Cookies
162
163
  Cookies.db
163
164
  cookies.sqlite
@@ -2,6 +2,44 @@
2
2
 
3
3
  # Deep Agents Code Changelog
4
4
 
5
+ ## [0.1.67](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.66...deepagents-code==0.1.67) (2026-09-09)
6
+
7
+ ### Features
8
+
9
+ - Added `GPT-6 Astra` support ([#6141](https://github.com/langchain-ai/deepagents/issues/6141)).
10
+ - Reuses the server across workspace switches ([#6152](https://github.com/langchain-ai/deepagents/issues/6152)).
11
+ - Limits thread resume age ([#6068](https://github.com/langchain-ai/deepagents/issues/6068)).
12
+
13
+ ### Bug Fixes
14
+
15
+ - Improved workspace isolation by resolving project policy per workspace, scoping project dotenv to workspaces, and isolating LangSmith auth and workspace tracing ([#6064](https://github.com/langchain-ai/deepagents/issues/6064), [#5980](https://github.com/langchain-ai/deepagents/issues/5980), [#6061](https://github.com/langchain-ai/deepagents/issues/6061)).
16
+ - Improved transcript tail reconciliation by bounding and serializing reconciliation work ([#6057](https://github.com/langchain-ai/deepagents/issues/6057), [#6143](https://github.com/langchain-ai/deepagents/issues/6143)).
17
+ - Refuses a second sandbox workspace and moves sandbox creation and entry off the guarded event loop ([#5979](https://github.com/langchain-ai/deepagents/issues/5979), [#6017](https://github.com/langchain-ai/deepagents/issues/6017)).
18
+ - Surfaces stale updates in-session ([#6063](https://github.com/langchain-ai/deepagents/issues/6063)).
19
+ - Surfaces the LangSmith credential in `dcode config` ([#6083](https://github.com/langchain-ai/deepagents/issues/6083)).
20
+ - Offloads server config imports ([#6089](https://github.com/langchain-ai/deepagents/issues/6089)).
21
+ - Correctly parses extra skill directories with the platform separator ([#6151](https://github.com/langchain-ai/deepagents/issues/6151)).
22
+
23
+ ## [0.1.66](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.65...deepagents-code==0.1.66) (2026-09-03)
24
+
25
+ ### Features
26
+
27
+ - Defaulted general-purpose subagents to fork mode ([#6024](https://github.com/langchain-ai/deepagents/issues/6024)).
28
+ - Defaulted the Auto classifier by provider ([#6039](https://github.com/langchain-ai/deepagents/issues/6039)).
29
+ - Added support for binding conversations to a recorded workspace ([#5946](https://github.com/langchain-ai/deepagents/issues/5946)).
30
+ - Added tracing for the effective approval mode ([#5972](https://github.com/langchain-ai/deepagents/issues/5972)).
31
+
32
+ ### Bug Fixes
33
+
34
+ - Fixed request-time working directory binding and now show the bound workspace in shell approvals ([#5968](https://github.com/langchain-ai/deepagents/issues/5968), [#5966](https://github.com/langchain-ai/deepagents/issues/5966)).
35
+ - Fixed marketplace plugin installs to accept bare relative source paths and identify the rejected source path when validation fails ([#5959](https://github.com/langchain-ai/deepagents/issues/5959), [#5960](https://github.com/langchain-ai/deepagents/issues/5960)).
36
+ - Classifier errors now include model names ([#6038](https://github.com/langchain-ai/deepagents/issues/6038)).
37
+ - Updated the splash screen to use a sharp border ([#5970](https://github.com/langchain-ai/deepagents/issues/5970)).
38
+
39
+ ### Performance Improvements
40
+
41
+ - Reduced QuickJS middleware tracing overhead by omitting trace inputs ([#6015](https://github.com/langchain-ai/deepagents/issues/6015)).
42
+
5
43
  ## [0.1.65](https://github.com/langchain-ai/deepagents/compare/deepagents-code==0.1.64...deepagents-code==0.1.65) (2026-08-28)
6
44
 
7
45
  ### Features
@@ -89,6 +89,8 @@ Set the same override for [local dev installs](#local-dev-installs) (`dcode-dev`
89
89
 
90
90
  When onboarding a new tracing project to Engine, capture the nature of that project first: a production/GA app warrants high-priority alerts, while a staging or active-dev project should use looser thresholds (or stay off Engine) so it does not generate false positives.
91
91
 
92
+ A server keeps the first workspace's tracing configuration for its lifetime. Workspaces sharing that server must use matching tracing credentials, projects, endpoints, profile selectors, tracing flags, and redaction policy. A conflicting workspace is refused before its settings can affect cached or concurrent runs; start a separate server for that workspace. Restart the server to change its tracing configuration.
93
+
92
94
  ## Debugging
93
95
 
94
96
  Deep Agents Code runs as two processes: the **Textual TUI** you interact with, and a **`langgraph dev` subprocess** that hosts the agent graph. Each writes its own log, and a single switch turns both on:
@@ -73,6 +73,7 @@ lint lint_diff lint_package lint_tests:
73
73
  [ "$(PYTHON_FILES)" = "" ] || uv run --all-groups ruff format $(PYTHON_FILES) --diff
74
74
  $(MAKE) type PYTHON_FILES="$(PYTHON_FILES)"
75
75
  uv run --all-groups python scripts/generate_commands_catalog.py --check
76
+ uv run --all-groups python scripts/check_process_cwd.py deepagents_code
76
77
 
77
78
  type: ## Run type checker
78
79
  type typecheck:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: deepagents-code
3
- Version: 0.1.65
3
+ Version: 0.1.67
4
4
  Summary: Terminal coding agent built on the Deep Agents SDK - works with any model, with persistent memory, customizable skills, subagents, and approval controls.
5
5
  Project-URL: Homepage, https://www.langchain.com/dcode
6
6
  Project-URL: Documentation, https://docs.langchain.com/oss/deepagents/code/overview
@@ -30,21 +30,21 @@ Requires-Python: <4.0,>=3.12
30
30
  Requires-Dist: aiosqlite<1.0.0,>=0.22.1
31
31
  Requires-Dist: anyio<5.0.0,>=4.14.2
32
32
  Requires-Dist: deepagents-acp<1.0.0,>=0.0.10
33
- Requires-Dist: deepagents==0.7.10
33
+ Requires-Dist: deepagents==0.7.13
34
34
  Requires-Dist: filelock<3.30,>=3.29.7
35
- Requires-Dist: genai-prices<0.2.0,>=0.1.4
35
+ Requires-Dist: genai-prices<0.2.0,>=0.1.6
36
36
  Requires-Dist: httpx<1.0.0,>=0.28.1
37
- Requires-Dist: langchain-anthropic<2.0.0,>=1.7.0
38
- Requires-Dist: langchain-google-genai<5.0.0,>=4.3.7
37
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.7.1
38
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0
39
39
  Requires-Dist: langchain-mcp-adapters<1.0.0,>=0.3.2
40
- Requires-Dist: langchain-openai<2.0.0,>=1.6.0
40
+ Requires-Dist: langchain-openai<2.0.0,>=1.6.1
41
41
  Requires-Dist: langchain-quickjs<0.4.0,>=0.3.4
42
- Requires-Dist: langchain<2.0.0,>=1.3.18
42
+ Requires-Dist: langchain<2.0.0,>=1.4.0
43
43
  Requires-Dist: langgraph-checkpoint-sqlite<4.0.0,>=3.1.1
44
44
  Requires-Dist: langgraph-cli[inmem]<1.0.0,>=0.4.31
45
- Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.33.2
45
+ Requires-Dist: langgraph-runtime-inmem<1.0.0,>=0.34.0
46
46
  Requires-Dist: langgraph-sdk<1.0.0,>=0.4.4
47
- Requires-Dist: langsmith[sandbox]>=0.11.2
47
+ Requires-Dist: langsmith[sandbox]>=0.12.2
48
48
  Requires-Dist: markdownify<2.0.0,>=1.2.3
49
49
  Requires-Dist: mcp<2.0.0,>=1.28.1
50
50
  Requires-Dist: packaging>=26.2
@@ -66,23 +66,23 @@ Provides-Extra: agentcore
66
66
  Requires-Dist: langchain-agentcore-codeinterpreter<1.0.0,>=0.0.5; extra == 'agentcore'
67
67
  Provides-Extra: all-providers
68
68
  Requires-Dist: aiohttp<3.15.0,>=3.14.3; extra == 'all-providers'
69
- Requires-Dist: langchain-anthropic<2.0.0,>=1.7.0; extra == 'all-providers'
70
- Requires-Dist: langchain-aws<2.0.0,>=1.7.4; extra == 'all-providers'
69
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.7.1; extra == 'all-providers'
70
+ Requires-Dist: langchain-aws<2.0.0,>=1.7.5; extra == 'all-providers'
71
71
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.4; extra == 'all-providers'
72
72
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'all-providers'
73
73
  Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'all-providers'
74
74
  Requires-Dist: langchain-fireworks<2.0.0,>=1.6.1; extra == 'all-providers'
75
- Requires-Dist: langchain-google-genai<5.0.0,>=4.3.7; extra == 'all-providers'
75
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0; extra == 'all-providers'
76
76
  Requires-Dist: langchain-google-vertexai<4.0.0,>=3.2.4; extra == 'all-providers'
77
77
  Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'all-providers'
78
78
  Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'all-providers'
79
79
  Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'all-providers'
80
- Requires-Dist: langchain-litellm<2.0.0,>=0.7.0; extra == 'all-providers'
80
+ Requires-Dist: langchain-litellm<2.0.0,>=0.7.1; extra == 'all-providers'
81
81
  Requires-Dist: langchain-meta<2.0.0,>=0.5.0; extra == 'all-providers'
82
82
  Requires-Dist: langchain-mistralai<2.0.0,>=1.1.6; extra == 'all-providers'
83
83
  Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'all-providers'
84
84
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'all-providers'
85
- Requires-Dist: langchain-openai<2.0.0,>=1.6.0; extra == 'all-providers'
85
+ Requires-Dist: langchain-openai<2.0.0,>=1.6.1; extra == 'all-providers'
86
86
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.8; extra == 'all-providers'
87
87
  Requires-Dist: langchain-perplexity<2.0.0,>=1.4.1; extra == 'all-providers'
88
88
  Requires-Dist: langchain-together<2.0.0,>=0.4.0; extra == 'all-providers'
@@ -94,11 +94,11 @@ Requires-Dist: langchain-modal>=0.0.5; extra == 'all-sandboxes'
94
94
  Requires-Dist: langchain-runloop>=0.0.6; extra == 'all-sandboxes'
95
95
  Requires-Dist: langchain-vercel-sandbox>=0.0.1; extra == 'all-sandboxes'
96
96
  Provides-Extra: anthropic
97
- Requires-Dist: langchain-anthropic<2.0.0,>=1.7.0; extra == 'anthropic'
97
+ Requires-Dist: langchain-anthropic<2.0.0,>=1.7.1; extra == 'anthropic'
98
98
  Provides-Extra: baseten
99
99
  Requires-Dist: langchain-baseten<1.0.0,>=0.2.4; extra == 'baseten'
100
100
  Provides-Extra: bedrock
101
- Requires-Dist: langchain-aws<2.0.0,>=1.7.4; extra == 'bedrock'
101
+ Requires-Dist: langchain-aws<2.0.0,>=1.7.5; extra == 'bedrock'
102
102
  Provides-Extra: cohere
103
103
  Requires-Dist: langchain-cohere<1.0.0,>=0.6.0; extra == 'cohere'
104
104
  Provides-Extra: daytona
@@ -108,7 +108,7 @@ Requires-Dist: langchain-deepseek<2.0.0,>=1.1.0; extra == 'deepseek'
108
108
  Provides-Extra: fireworks
109
109
  Requires-Dist: langchain-fireworks<2.0.0,>=1.6.1; extra == 'fireworks'
110
110
  Provides-Extra: google-genai
111
- Requires-Dist: langchain-google-genai<5.0.0,>=4.3.7; extra == 'google-genai'
111
+ Requires-Dist: langchain-google-genai<5.0.0,>=4.4.0; extra == 'google-genai'
112
112
  Provides-Extra: groq
113
113
  Requires-Dist: langchain-groq<2.0.0,>=1.1.3; extra == 'groq'
114
114
  Provides-Extra: huggingface
@@ -116,7 +116,7 @@ Requires-Dist: langchain-huggingface<2.0.0,>=1.2.2; extra == 'huggingface'
116
116
  Provides-Extra: ibm
117
117
  Requires-Dist: langchain-ibm<2.0.0,>=1.1.0; extra == 'ibm'
118
118
  Provides-Extra: litellm
119
- Requires-Dist: langchain-litellm<2.0.0,>=0.7.0; extra == 'litellm'
119
+ Requires-Dist: langchain-litellm<2.0.0,>=0.7.1; extra == 'litellm'
120
120
  Provides-Extra: media
121
121
  Requires-Dist: av<19.0.0,>=18.0.0; extra == 'media'
122
122
  Requires-Dist: pillow<13.0.0,>=12.3.0; extra == 'media'
@@ -132,7 +132,7 @@ Requires-Dist: langchain-nvidia-ai-endpoints<2.0.0,>=1.4.3; extra == 'nvidia'
132
132
  Provides-Extra: ollama
133
133
  Requires-Dist: langchain-ollama<2.0.0,>=1.1.0; extra == 'ollama'
134
134
  Provides-Extra: openai
135
- Requires-Dist: langchain-openai<2.0.0,>=1.6.0; extra == 'openai'
135
+ Requires-Dist: langchain-openai<2.0.0,>=1.6.1; extra == 'openai'
136
136
  Provides-Extra: openrouter
137
137
  Requires-Dist: langchain-openrouter<2.0.0,>=0.2.8; extra == 'openrouter'
138
138
  Provides-Extra: perplexity
@@ -1,3 +1,3 @@
1
1
  """Generated at build time. Do not edit or commit."""
2
2
 
3
- BUILD_COMMIT = "a233ded"
3
+ BUILD_COMMIT = "d0fbc7c"
@@ -87,6 +87,8 @@ class CLIContextSchema:
87
87
 
88
88
  prompt_id: str | None = None
89
89
 
90
+ workspace: dict[str, Any] = field(default_factory=dict)
91
+
90
92
  @classmethod
91
93
  def from_payload(cls, payload: object) -> CLIContextSchema | None:
92
94
  """Coerce a run's `context=` payload into this schema.
@@ -159,6 +161,7 @@ class CLIContextSchema:
159
161
  hooks_snapshot_id=_str("hooks_snapshot_id"),
160
162
  hooks_server_events=events,
161
163
  prompt_id=_str("prompt_id"),
164
+ workspace=_mapping("workspace"),
162
165
  )
163
166
 
164
167
 
@@ -249,3 +252,6 @@ class CLIContext(TypedDict, total=False):
249
252
 
250
253
  prompt_id: str | None
251
254
  """Optional per-turn prompt id projected into hook context."""
255
+
256
+ workspace: dict[str, Any]
257
+ """Server-validated workspace binding for the active thread."""
@@ -37,13 +37,28 @@ Hardcoded rather than read from `deepagents.middleware.rubric.RubricMiddleware`
37
37
  because this module is dependency-free and importing the SDK for a display
38
38
  string would violate the startup-performance rule (see AGENTS.md). This is a
39
39
  hand-maintained duplicate that can rot if the SDK bumps its default, so
40
- `test_reliable_rubric.py::TestReliableRubricMiddleware::test_displayed_max_iterations_default_matches_sdk`
40
+ `test_reliable_rubric.py::TestRubricMiddlewareIntegration::test_displayed_max_iterations_default_matches_sdk`
41
41
  is the drift guard that fails when the two diverge.
42
42
  """
43
43
 
44
44
  FIREWORKS_PROVIDER_ID_PREFIX: Final[str] = "accounts/fireworks/"
45
45
  """Prefix used to infer Fireworks from fully-qualified IDs."""
46
46
 
47
+ LANGSMITH_API_KEY_ENV: Final[str] = "LANGSMITH_API_KEY"
48
+ """Primary env var the LangSmith SDK reads for its API key."""
49
+
50
+ LANGSMITH_API_KEY_FALLBACK_ENV_VARS: Final[tuple[str, ...]] = ("LANGCHAIN_API_KEY",)
51
+ """Legacy env vars the LangSmith SDK accepts after `LANGSMITH_API_KEY_ENV`."""
52
+
53
+ LANGSMITH_API_KEY_ENV_VARS: Final[tuple[str, ...]] = (
54
+ LANGSMITH_API_KEY_ENV,
55
+ *LANGSMITH_API_KEY_FALLBACK_ENV_VARS,
56
+ )
57
+ """Env vars LangSmith reads for its API key, in precedence order.
58
+
59
+ Mirrors the SDK's own `LANGSMITH_`-then-`LANGCHAIN_` lookup.
60
+ """
61
+
47
62
  FIREWORKS_MODEL_ID_PREFIXES: Final[tuple[str, ...]] = (
48
63
  "accounts/fireworks/models/",
49
64
  "accounts/fireworks/routers/",
@@ -24,6 +24,10 @@ ever renamed, only the value here changes.
24
24
  from __future__ import annotations
25
25
 
26
26
  import os
27
+ from typing import TYPE_CHECKING
28
+
29
+ if TYPE_CHECKING:
30
+ from collections.abc import Mapping
27
31
 
28
32
  # ---------------------------------------------------------------------------
29
33
  # Constants — import these instead of bare string literals.
@@ -251,6 +255,15 @@ setting it (see `config._PROJECT_DOTENV_DENIED_ENV_KEYS`); only the user's
251
255
  shell, launch env, or global `~/.deepagents/.env` can.
252
256
  """
253
257
 
258
+ FORKED_SUBAGENTS = "DEEPAGENTS_CODE_FORKED_SUBAGENTS"
259
+ """Whether dcode's built-in `general-purpose` subagent runs in fork mode.
260
+
261
+ On by default. Set to a falsy value to make the subagent receive only the delegated
262
+ task instead of inheriting the parent agent's conversation and state. Parsed by
263
+ `is_env_truthy`; set this only through the launching shell or global
264
+ `~/.deepagents/.env`, never a project `.env`.
265
+ """
266
+
254
267
  EXPERIMENTAL = "DEEPAGENTS_CODE_EXPERIMENTAL"
255
268
  """Opt into experimental, unstable dcode behavior.
256
269
 
@@ -276,7 +289,7 @@ EXTERNAL_EVENT_SOCKET_PATH = "DEEPAGENTS_CODE_EXTERNAL_EVENT_SOCKET_PATH"
276
289
  """Override the default Unix-socket path for the external event listener."""
277
290
 
278
291
  EXTRA_SKILLS_DIRS = "DEEPAGENTS_CODE_EXTRA_SKILLS_DIRS"
279
- """Colon-separated paths added to the skill containment allowlist."""
292
+ """Paths added to the skill containment allowlist, split with `os.pathsep`."""
280
293
 
281
294
  GOAL_AUTO_ACCEPT_CRITERIA = "DEEPAGENTS_CODE_GOAL_AUTO_ACCEPT_CRITERIA"
282
295
  """Apply generated goal criteria automatically in Auto mode.
@@ -685,7 +698,12 @@ def classify_env_bool(raw: str) -> bool | None:
685
698
  return None
686
699
 
687
700
 
688
- def is_env_truthy(name: str, *, default: bool = False) -> bool:
701
+ def is_env_truthy(
702
+ name: str,
703
+ *,
704
+ default: bool = False,
705
+ environ: Mapping[str, str] | None = None,
706
+ ) -> bool:
689
707
  """Return whether env var *name* is set to a recognizably truthy value.
690
708
 
691
709
  Unlike `bool(os.environ.get(name))`, this does not treat `"0"` or
@@ -697,12 +715,14 @@ def is_env_truthy(name: str, *, default: bool = False) -> bool:
697
715
  constant from this module).
698
716
  default: Value returned when the variable is unset OR set to a
699
717
  value that is neither recognizably truthy nor falsy.
718
+ environ: Environment to read, defaulting to the process environment.
719
+ Pass a workspace snapshot to keep the read scoped.
700
720
 
701
721
  Returns:
702
722
  `True` for `1`/`true`/`yes`/`on` (case-insensitive), `False` for
703
723
  `0`/`false`/`no`/`off`/empty string, or `default` otherwise.
704
724
  """
705
- raw = os.environ.get(name)
725
+ raw = (os.environ if environ is None else environ).get(name)
706
726
  if raw is None:
707
727
  return default
708
728
  classified = classify_env_bool(raw)
@@ -12,8 +12,9 @@ with `from_env()`.
12
12
  from __future__ import annotations
13
13
 
14
14
  import json
15
+ import logging
15
16
  import os
16
- from dataclasses import dataclass
17
+ from dataclasses import dataclass, replace
17
18
  from pathlib import Path
18
19
  from typing import TYPE_CHECKING, Any, cast
19
20
 
@@ -21,10 +22,92 @@ from deepagents_code._constants import DEFAULT_AGENT_NAME as DEFAULT_ASSISTANT_I
21
22
  from deepagents_code._env_vars import SERVER_ENV_PREFIX
22
23
 
23
24
  if TYPE_CHECKING:
25
+ from collections.abc import Mapping
26
+
24
27
  from deepagents import FsToolName
25
28
 
26
29
  from deepagents_code.project_utils import ProjectContext
27
30
 
31
+ logger = logging.getLogger(__name__)
32
+
33
+
34
+ SESSION_WORKSPACE_FIELDS = frozenset(
35
+ {
36
+ "allow_fs_tools",
37
+ "assistant_id",
38
+ "auto_approve",
39
+ "enable_ask_user",
40
+ "enable_interpreter",
41
+ "enable_memory",
42
+ "enable_shell",
43
+ "enable_skills",
44
+ "interactive",
45
+ "interpreter_ptc",
46
+ "interpreter_ptc_acknowledge_unsafe",
47
+ "interrupt_shell_only",
48
+ "no_mcp",
49
+ "recursion_limit",
50
+ "sandbox_id",
51
+ "sandbox_snapshot_name",
52
+ "sandbox_type",
53
+ "shell_allow_list",
54
+ }
55
+ )
56
+ """Policy a managed client may claim for its own command invocation.
57
+
58
+ These come from the client's own CLI flags, so the client already knows them
59
+ and claiming them proves only that both sides agree. Together with
60
+ `PROJECT_WORKSPACE_FIELDS` this must partition `to_workspace_payload()`
61
+ exactly: a payload field in neither set is never verified against a client
62
+ claim and never checked for project drift.
63
+ `test_workspace_claim_partitions_every_policy_field` pins that.
64
+ """
65
+ PROJECT_WORKSPACE_FIELDS = frozenset(
66
+ {
67
+ "extension_paths",
68
+ "mcp_config_path",
69
+ "sandbox_setup",
70
+ "trust_project_extensions",
71
+ "trust_project_mcp",
72
+ }
73
+ )
74
+ """Policy the server must resolve per project directory, never accept.
75
+
76
+ Each of these grants code execution scoped to a checkout -- MCP servers,
77
+ sandbox setup commands, Python extensions. A client that could claim them could
78
+ execute one directory's configuration against another directory's trust
79
+ decision.
80
+ """
81
+
82
+
83
+ def _same_workspace_project(first: str | None, second: str) -> bool:
84
+ """Whether two paths name the same project directory.
85
+
86
+ Fails closed: an unset launch root, a missing path, or an undecidable
87
+ comparison counts as *different*, so the caller drops project policy rather
88
+ than carrying it across an unverified boundary. `_same_directory` compares
89
+ by device and inode, so a symlinked or differently cased spelling of one
90
+ directory still compares equal.
91
+
92
+ Returns:
93
+ `True` only when both paths name the same directory.
94
+ """
95
+ if first is None:
96
+ return False
97
+ from deepagents_code._paths import DeepAgentsHomeError, _same_directory
98
+
99
+ try:
100
+ return _same_directory(Path(first), Path(second))
101
+ except DeepAgentsHomeError:
102
+ logger.warning(
103
+ "Could not compare project directories %s and %s; treating as "
104
+ "separate projects, so project-scoped policy will not apply",
105
+ first,
106
+ second,
107
+ exc_info=True,
108
+ )
109
+ return False
110
+
28
111
 
29
112
  def _read_env_bool(suffix: str, *, default: bool = False) -> bool:
30
113
  """Read a `DEEPAGENTS_CODE_SERVER_*` boolean from the environment.
@@ -422,6 +505,150 @@ class ServerConfig:
422
505
  extension_paths: tuple[str, ...] = ()
423
506
  """Absolute one-run extension files or directories from repeatable CLI flags."""
424
507
 
508
+ def to_workspace_payload(self) -> dict[str, Any]:
509
+ """Return non-secret resource policy for a durable workspace binding."""
510
+ return {
511
+ "assistant_id": self.assistant_id,
512
+ "auto_approve": self.auto_approve,
513
+ "interrupt_shell_only": self.interrupt_shell_only,
514
+ "shell_allow_list": self.shell_allow_list,
515
+ "interactive": self.interactive,
516
+ "enable_shell": self.enable_shell,
517
+ "enable_ask_user": self.enable_ask_user,
518
+ "enable_memory": self.enable_memory,
519
+ "enable_skills": self.enable_skills,
520
+ "enable_interpreter": self.enable_interpreter,
521
+ "interpreter_ptc": self.interpreter_ptc,
522
+ "interpreter_ptc_acknowledge_unsafe": (
523
+ self.interpreter_ptc_acknowledge_unsafe
524
+ ),
525
+ "allow_fs_tools": self.allow_fs_tools,
526
+ "recursion_limit": self.recursion_limit,
527
+ "sandbox_type": self.sandbox_type,
528
+ "sandbox_id": self.sandbox_id,
529
+ "sandbox_snapshot_name": self.sandbox_snapshot_name,
530
+ "sandbox_setup": self.sandbox_setup,
531
+ "mcp_config_path": self.mcp_config_path,
532
+ "no_mcp": self.no_mcp,
533
+ "trust_project_mcp": self.trust_project_mcp,
534
+ "trust_project_extensions": self.trust_project_extensions,
535
+ "extension_paths": list(self.extension_paths),
536
+ }
537
+
538
+ def to_session_workspace_claim(self) -> dict[str, Any]:
539
+ """Return the command-scoped policy a managed client may claim.
540
+
541
+ Returns:
542
+ The session-scoped subset of the workspace policy.
543
+ """
544
+ return {
545
+ key: value
546
+ for key, value in self.to_workspace_payload().items()
547
+ if key in SESSION_WORKSPACE_FIELDS
548
+ }
549
+
550
+ def to_project_workspace_policy(self) -> dict[str, Any]:
551
+ """Return policy that must be resolved for each project directory.
552
+
553
+ Returns:
554
+ The project-scoped subset of the workspace policy.
555
+ """
556
+ return {
557
+ key: value
558
+ for key, value in self.to_workspace_payload().items()
559
+ if key in PROJECT_WORKSPACE_FIELDS
560
+ }
561
+
562
+ def session_workspace_fingerprint(self) -> str:
563
+ """Fingerprint the exact client-claimable session policy.
564
+
565
+ Returns:
566
+ The canonical SHA-256 fingerprint.
567
+ """
568
+ from deepagents_code.workspace import canonical_fingerprint
569
+
570
+ return canonical_fingerprint(self.to_session_workspace_claim())
571
+
572
+ def resolve_workspace(
573
+ self,
574
+ cwd: str,
575
+ project_root: str | None,
576
+ ) -> ServerConfig:
577
+ """Resolve directory-bound policy for one server workspace.
578
+
579
+ Project-scoped policy (`PROJECT_WORKSPACE_FIELDS`) is valid only for
580
+ the directory it was resolved against: it came from the launch-time CLI
581
+ and that project's trust decisions. Reusing it for another directory
582
+ would apply one project's MCP servers, sandbox setup, and extensions to
583
+ a different, possibly untrusted, checkout.
584
+
585
+ So the launch project keeps its policy verbatim, and any other project
586
+ starts from nothing: MCP and sandbox setup are *dropped* rather than
587
+ rediscovered, and extension trust is re-read from the trust store for
588
+ that project. `_same_workspace_project` fails closed, so an
589
+ unresolvable path also takes the drop branch.
590
+
591
+ Args:
592
+ cwd: Absolute, canonical working directory for the workspace.
593
+ project_root: Canonical project root, or `None` when the workspace
594
+ has none. The launch cwd uses the server's explicit root when
595
+ configured. Otherwise, extension trust is keyed on `cwd` when
596
+ no root exists.
597
+
598
+ Returns:
599
+ A config whose session policy is unchanged and whose project policy
600
+ is either the launch project's or empty.
601
+ """
602
+ if self.project_root is not None and _same_workspace_project(self.cwd, cwd):
603
+ project_root = str(Path(self.project_root).expanduser().resolve())
604
+ launch_root = self.project_root or self.cwd
605
+ target_root = project_root or cwd
606
+ if _same_workspace_project(launch_root, target_root):
607
+ return replace(self, cwd=cwd, project_root=project_root)
608
+ from deepagents_code.extensions.trust import is_project_extensions_trusted
609
+
610
+ return replace(
611
+ self,
612
+ cwd=cwd,
613
+ project_root=project_root,
614
+ sandbox_setup=None,
615
+ mcp_config_path=None,
616
+ trust_project_mcp=None,
617
+ trust_project_extensions=is_project_extensions_trusted(target_root),
618
+ extension_paths=(),
619
+ )
620
+
621
+ def preserve_bound_extension_trust(
622
+ self, bound_policy: Mapping[str, object]
623
+ ) -> ServerConfig:
624
+ """Keep an existing thread's extension trust when a new grant appears.
625
+
626
+ Args:
627
+ bound_policy: Server policy persisted when the thread was bound.
628
+
629
+ Returns:
630
+ A config that defers new grants to new threads. Revocations remain
631
+ visible so binding and runtime validation can reject them.
632
+ """
633
+ if bound_policy.get("trust_project_extensions") is False and (
634
+ self.trust_project_extensions is True
635
+ ):
636
+ return replace(self, trust_project_extensions=False)
637
+ return self
638
+
639
+ def workspace_fingerprint(self) -> str:
640
+ """Fingerprint the resolved runtime config except workspace identity.
641
+
642
+ Returns:
643
+ The canonical SHA-256 fingerprint.
644
+ """
645
+ values = self.to_env()
646
+ values.pop("CWD")
647
+ values.pop("PROJECT_ROOT")
648
+ from deepagents_code.workspace import canonical_fingerprint
649
+
650
+ return canonical_fingerprint(values)
651
+
425
652
  def __post_init__(self) -> None:
426
653
  """Normalize fields and validate invariants.
427
654
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Keep the `x-release-please-version` annotation — release-please uses it to
4
4
  # bump `__version__` in sync with `pyproject.toml` on every release PR.
5
- __version__ = "0.1.65" # x-release-please-version
5
+ __version__ = "0.1.67" # x-release-please-version
6
6
 
7
7
  DOCS_URL = "https://docs.langchain.com/oss/python/deepagents/code"
8
8
  """URL for `deepagents-code` documentation."""