deepcode-hku 2.3.0__tar.gz → 2.3.1__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. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/PKG-INFO +51 -5
  2. deepcode_hku-2.3.0/deepcode_hku.egg-info/PKG-INFO → deepcode_hku-2.3.1/README.md +48 -65
  3. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/README_ZH.md +36 -3
  4. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/blocking_client.py +14 -4
  5. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/dispatcher.py +1 -4
  6. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/native_client.py +46 -12
  7. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/service.py +7 -2
  8. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/service_state.py +11 -0
  9. deepcode_hku-2.3.0/app_server/web_assets/assets/Inspector-DJBT5qR-.js → deepcode_hku-2.3.1/app_server/web_assets/assets/Inspector-8Es-_51F.js +3 -3
  10. deepcode_hku-2.3.0/app_server/web_assets/assets/LocalMonacoEditor-DCwkx7R9.js → deepcode_hku-2.3.1/app_server/web_assets/assets/LocalMonacoEditor-DCuhGEPh.js +1 -1
  11. deepcode_hku-2.3.0/app_server/web_assets/assets/index-5xSnu27j.js → deepcode_hku-2.3.1/app_server/web_assets/assets/index-B4STS7MU.js +2 -2
  12. deepcode_hku-2.3.0/app_server/web_assets/assets/webMain-BbLSr8jA.js → deepcode_hku-2.3.1/app_server/web_assets/assets/webMain-DHoYpK8Q.js +3 -3
  13. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/index.html +1 -1
  14. deepcode_hku-2.3.1/app_server/web_assets/web-build.json +1 -0
  15. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/websocket.py +3 -0
  16. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/service_cli.py +5 -1
  17. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/service_events.py +40 -5
  18. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/service_thread_client.py +86 -35
  19. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/app.py +278 -54
  20. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/commands.py +54 -5
  21. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/goal_controller.py +33 -29
  22. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/input.py +49 -4
  23. deepcode_hku-2.3.1/cli/tui/markdown_stream.py +184 -0
  24. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/renderer.py +171 -30
  25. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/theme.py +4 -0
  26. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/compaction.py +9 -4
  27. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/runner.py +8 -2
  28. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/runtime.py +20 -0
  29. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/execution_registry.py +24 -1
  30. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/git_service.py +7 -2
  31. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/session_runtime.py +50 -10
  32. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/turn_projection.py +75 -1
  33. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/turn_service.py +20 -1
  34. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/events/protocol.py +12 -1
  35. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/events/session.py +3 -2
  36. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/command_guard.py +1 -1
  37. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/tools/search.py +5 -1
  38. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/network/safe_http.py +18 -2
  39. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/version.py +1 -1
  40. deepcode_hku-2.3.0/README.md → deepcode_hku-2.3.1/deepcode_hku.egg-info/PKG-INFO +111 -3
  41. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/deepcode_hku.egg-info/SOURCES.txt +12 -4
  42. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/deepcode_hku.egg-info/requires.txt +2 -1
  43. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/requirements.txt +1 -1
  44. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/setup.py +3 -0
  45. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_command_guard.py +47 -0
  46. deepcode_hku-2.3.1/tests/test_compaction_tool_call_budget.py +55 -0
  47. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_manual_compact.py +50 -0
  48. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_safe_http.py +32 -0
  49. deepcode_hku-2.3.1/tests/test_service_events.py +191 -0
  50. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_session_runtime.py +112 -0
  51. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_shell_search_tools.py +26 -0
  52. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_tui.py +5 -0
  53. deepcode_hku-2.3.1/tests/test_tui_input_safety.py +261 -0
  54. deepcode_hku-2.3.1/tests/test_tui_markdown_stream.py +243 -0
  55. deepcode_hku-2.3.1/tests/test_tui_resilience.py +366 -0
  56. deepcode_hku-2.3.1/tests/test_tui_responsiveness.py +146 -0
  57. deepcode_hku-2.3.1/tests/test_tui_transcript_order.py +189 -0
  58. deepcode_hku-2.3.0/app_server/web_assets/web-build.json +0 -1
  59. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/LICENSE +0 -0
  60. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/MANIFEST.in +0 -0
  61. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/THIRD_PARTY_NOTICES.md +0 -0
  62. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/__init__.py +0 -0
  63. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/__main__.py +0 -0
  64. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/browser_auth.py +0 -0
  65. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/config_watch.py +0 -0
  66. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/connection.py +0 -0
  67. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/errors.py +0 -0
  68. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/host.py +0 -0
  69. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/launchd.py +0 -0
  70. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/managed_entry.py +0 -0
  71. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/peer.py +0 -0
  72. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/protocol/__init__.py +0 -0
  73. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/protocol/codec.py +0 -0
  74. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/protocol/methods.py +0 -0
  75. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/protocol/models.py +0 -0
  76. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/protocol/notifications.py +0 -0
  77. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/protocol/retry.py +0 -0
  78. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/runtime_install.py +0 -0
  79. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/runtime_probe.py +0 -0
  80. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/server.py +0 -0
  81. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/service_client.py +0 -0
  82. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/state_backup.py +0 -0
  83. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/stdio_relay.py +0 -0
  84. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/systemd_user.py +0 -0
  85. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/Inspector-DypK0oEq.css +0 -0
  86. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/ManagementWorkspace-BJC9sMuB.js +0 -0
  87. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/MarkdownContent-BIoldQGd.css +0 -0
  88. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/MarkdownContent-khfmKOQ0.js +0 -0
  89. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/PluginsPage-CMshr5Pz.css +0 -0
  90. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/PluginsPage-DUG3WIqn.js +0 -0
  91. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/SettingsDialog-DCn47fGr.css +0 -0
  92. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/SettingsDialog-vGNFlrd5.js +0 -0
  93. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/ThreadConversation-DMQrKlux.js +0 -0
  94. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/ThreadConversation-DqZ9_3Ex.css +0 -0
  95. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/WorkflowComposer-6EHQGool.js +0 -0
  96. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/WorkflowComposer-DkLp3G33.css +0 -0
  97. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/addon-fit-DIOBYJe3.js +0 -0
  98. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/confirmAction-CndHH5nL.js +0 -0
  99. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/createLucideIcon-BQ7pep_N.js +0 -0
  100. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/css-DIMkf-bt.js +0 -0
  101. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/editor-CJEeZjoM.css +0 -0
  102. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/editor.api-DfsewISI.js +0 -0
  103. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/editor.worker-DSGwkeXF.js +0 -0
  104. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/flask-conical-B5W0AT8b.js +0 -0
  105. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/html-DmJuEt5_.js +0 -0
  106. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/ini-sBoK_t0W.js +0 -0
  107. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/itemPresentation-CpLiCTmA.js +0 -0
  108. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/javascript-MLwwUW_7.js +0 -0
  109. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/jsx-runtime-CIxEorsV.js +0 -0
  110. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/markdown-Cimd5fb3.js +0 -0
  111. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/python-DJ9JSdOX.js +0 -0
  112. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/reasoningPayload-C9Yeq9Ar.js +0 -0
  113. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/robot-aTY9e0LG.png +0 -0
  114. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/rolldown-runtime-QTnfLwEv.js +0 -0
  115. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/rust-DdL9SqIa.js +0 -0
  116. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/sparkles-DGUrvUnr.js +0 -0
  117. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/trash-2-DgbNN8mD.js +0 -0
  118. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/typescript-CGPudguY.js +0 -0
  119. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/useConnectionCatalog-CMQD5GS5.js +0 -0
  120. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/useSkillCatalog-CFGIrhRX.js +0 -0
  121. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/useSystemDarkMode-COxZJwQa.js +0 -0
  122. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/useTranslation-CYApFZ2x.js +0 -0
  123. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/webMain-u_hskv3e.css +0 -0
  124. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/x-CrqHGWEM.js +0 -0
  125. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/xterm-BrP-ENHg.css +0 -0
  126. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/xterm-U4TA8lIC.js +0 -0
  127. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_assets/assets/yaml-CZqRoqwh.js +0 -0
  128. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/web_surface.py +0 -0
  129. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/app_server/windows_task.py +0 -0
  130. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/__init__.py +0 -0
  131. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/automation_cli.py +0 -0
  132. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/automation_foreground.py +0 -0
  133. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/config_errors.py +0 -0
  134. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/desktop_cli.py +0 -0
  135. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/exec_cli.py +0 -0
  136. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/execution_options.py +0 -0
  137. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/goal_runner.py +0 -0
  138. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/headless_turn.py +0 -0
  139. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/init_config.py +0 -0
  140. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/loop_cli.py +0 -0
  141. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/mcp_cli.py +0 -0
  142. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/mcp_server.py +0 -0
  143. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/plugin_cli.py +0 -0
  144. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/project_trust.py +0 -0
  145. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/provider_cli.py +0 -0
  146. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/rpc_models.py +0 -0
  147. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/schedule_cli.py +0 -0
  148. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/service_automation.py +0 -0
  149. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/service_catalogs.py +0 -0
  150. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/service_turn.py +0 -0
  151. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/service_turns.py +0 -0
  152. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/session_cli.py +0 -0
  153. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/skill_cli.py +0 -0
  154. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/thread_client.py +0 -0
  155. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/transcript.py +0 -0
  156. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/__init__.py +0 -0
  157. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/__main__.py +0 -0
  158. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/animation.py +0 -0
  159. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/domain_events.py +0 -0
  160. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/picker.py +0 -0
  161. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/session_bridge.py +0 -0
  162. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/text.py +0 -0
  163. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/tui/thread_client.py +0 -0
  164. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/cli/web_cli.py +0 -0
  165. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/__init__.py +0 -0
  166. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_presets/__init__.py +0 -0
  167. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_presets/builtin/code-reader.md +0 -0
  168. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_presets/builtin/minimal.md +0 -0
  169. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/__init__.py +0 -0
  170. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/context.py +0 -0
  171. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/evidence_ledger.py +0 -0
  172. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/goal_runtime.py +0 -0
  173. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/helpers.py +0 -0
  174. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/hook.py +0 -0
  175. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/injections.py +0 -0
  176. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/processes.py +0 -0
  177. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/pruner.py +0 -0
  178. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/repeat_guard.py +0 -0
  179. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/token_meter.py +0 -0
  180. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/tools/__init__.py +0 -0
  181. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/tools/alias.py +0 -0
  182. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/tools/base.py +0 -0
  183. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/tools/mcp.py +0 -0
  184. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/tools/registry.py +0 -0
  185. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_runtime/tools/semantic_hint.py +0 -0
  186. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/agent_setup.py +0 -0
  187. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/__init__.py +0 -0
  188. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/agent_adapter.py +0 -0
  189. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/application.py +0 -0
  190. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/application_lease.py +0 -0
  191. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/approval_service.py +0 -0
  192. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/automation_permission_policy.py +0 -0
  193. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/automation_schedule_policy.py +0 -0
  194. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/automation_scheduler.py +0 -0
  195. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/automation_service.py +0 -0
  196. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/config_store.py +0 -0
  197. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/diagnostics_service.py +0 -0
  198. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/dictation_service.py +0 -0
  199. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/errors.py +0 -0
  200. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/event_service.py +0 -0
  201. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/execution_admission.py +0 -0
  202. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/execution_coordinator.py +0 -0
  203. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/execution_handler_registry.py +0 -0
  204. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/execution_security_policy.py +0 -0
  205. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/extension_service.py +0 -0
  206. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/file_service.py +0 -0
  207. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/goal_extension.py +0 -0
  208. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/goal_prompts/__init__.py +0 -0
  209. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/goal_prompts/continuation.md +0 -0
  210. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/goal_turn_port.py +0 -0
  211. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/input_identity.py +0 -0
  212. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/interactive_turn_router.py +0 -0
  213. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/legacy_session_importer.py +0 -0
  214. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/llm_configuration_service.py +0 -0
  215. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/mcp_service.py +0 -0
  216. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/plugin_service.py +0 -0
  217. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/project_service.py +0 -0
  218. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/provider_verification.py +0 -0
  219. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/service_lifecycle.py +0 -0
  220. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/session_deletion_service.py +0 -0
  221. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/settings_service.py +0 -0
  222. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/skill_service.py +0 -0
  223. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/terminal_service.py +0 -0
  224. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/test_service.py +0 -0
  225. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/thread_service.py +0 -0
  226. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/turn_input_service.py +0 -0
  227. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/turn_usage.py +0 -0
  228. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/views.py +0 -0
  229. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/workflow_adapter.py +0 -0
  230. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/workflow_service.py +0 -0
  231. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/workspace_service.py +0 -0
  232. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/application/worktree_service.py +0 -0
  233. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/compat/__init__.py +0 -0
  234. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/compat/agent.py +0 -0
  235. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/compat/mcp_app.py +0 -0
  236. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/compat/parallel.py +0 -0
  237. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/compat/request_params.py +0 -0
  238. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/compat/runtime.py +0 -0
  239. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/config.py +0 -0
  240. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/dictation/__init__.py +0 -0
  241. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/dictation/audio.py +0 -0
  242. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/dictation/client.py +0 -0
  243. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/dictation/local_runner.py +0 -0
  244. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/__init__.py +0 -0
  245. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/approval.py +0 -0
  246. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/artifact.py +0 -0
  247. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/automation.py +0 -0
  248. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/common.py +0 -0
  249. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/event.py +0 -0
  250. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/execution_permission.py +0 -0
  251. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/execution_profile.py +0 -0
  252. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/execution_security.py +0 -0
  253. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/item.py +0 -0
  254. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/message_provenance.py +0 -0
  255. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/project.py +0 -0
  256. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/runtime_coordination.py +0 -0
  257. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/thread.py +0 -0
  258. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/thread_goal.py +0 -0
  259. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/turn.py +0 -0
  260. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/domain/workflow.py +0 -0
  261. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/events/__init__.py +0 -0
  262. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/events/llm_events.py +0 -0
  263. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/events/parts.py +0 -0
  264. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/file_lock.py +0 -0
  265. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/__init__.py +0 -0
  266. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/agents/__init__.py +0 -0
  267. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/agents/control.py +0 -0
  268. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/agents/external_backend.py +0 -0
  269. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/agents/structured_result.py +0 -0
  270. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/approval.py +0 -0
  271. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/code_mode/__init__.py +0 -0
  272. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/code_mode/_runner.py +0 -0
  273. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/code_mode/tool.py +0 -0
  274. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/collaboration.py +0 -0
  275. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/env_sanitize.py +0 -0
  276. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/hooks/__init__.py +0 -0
  277. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/hooks/discovery.py +0 -0
  278. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/hooks/engine.py +0 -0
  279. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/hooks/events.py +0 -0
  280. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/hooks/execution.py +0 -0
  281. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/memory.py +0 -0
  282. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/permissions.py +0 -0
  283. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/policy.py +0 -0
  284. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/sandbox.py +0 -0
  285. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/skills.py +0 -0
  286. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/snapshot.py +0 -0
  287. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/tools/__init__.py +0 -0
  288. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/tools/diagnostics.py +0 -0
  289. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/tools/files.py +0 -0
  290. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/tools/goal.py +0 -0
  291. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/tools/patch.py +0 -0
  292. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/tools/plan.py +0 -0
  293. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/tools/replace.py +0 -0
  294. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/tools/shell.py +0 -0
  295. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/tools/spawn_agent.py +0 -0
  296. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/tools/user_input.py +0 -0
  297. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/tools/web.py +0 -0
  298. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/harness/windows_sandbox.py +0 -0
  299. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/llm_runtime.py +0 -0
  300. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/loop/__init__.py +0 -0
  301. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/loop/autodream.py +0 -0
  302. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/mcp/__init__.py +0 -0
  303. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/mcp/connection.py +0 -0
  304. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/mcp/models.py +0 -0
  305. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/mcp/naming.py +0 -0
  306. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/mcp/oauth.py +0 -0
  307. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/mcp/presets.json +0 -0
  308. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/mcp/presets.py +0 -0
  309. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/mcp/probe.py +0 -0
  310. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/mcp/resolver.py +0 -0
  311. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/mcp/runtime.py +0 -0
  312. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/mcp/schema.py +0 -0
  313. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/mcp/tools.py +0 -0
  314. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/network/__init__.py +0 -0
  315. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/network/hostnames.py +0 -0
  316. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/observability/__init__.py +0 -0
  317. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/observability/bus.py +0 -0
  318. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/observability/context.py +0 -0
  319. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/observability/llmops.py +0 -0
  320. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/observability/records.py +0 -0
  321. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/__init__.py +0 -0
  322. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/automation_repository.py +0 -0
  323. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/coordination_repository.py +0 -0
  324. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/database.py +0 -0
  325. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/errors.py +0 -0
  326. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/event_repository.py +0 -0
  327. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/execution_repository.py +0 -0
  328. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/legacy_import_repository.py +0 -0
  329. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/migrations.py +0 -0
  330. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/project_repository.py +0 -0
  331. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/serde.py +0 -0
  332. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/thread_repository.py +0 -0
  333. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/persistence/workflow_repository.py +0 -0
  334. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/platform_compat.py +0 -0
  335. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/platform_file_lock.py +0 -0
  336. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/plugins/__init__.py +0 -0
  337. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/plugins/domain.py +0 -0
  338. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/plugins/formats/__init__.py +0 -0
  339. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/plugins/formats/agent_plugins_v1.py +0 -0
  340. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/plugins/host.py +0 -0
  341. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/plugins/mcp.py +0 -0
  342. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/plugins/registry.py +0 -0
  343. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/plugins/resolver.py +0 -0
  344. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/plugins/skill_provider.py +0 -0
  345. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/private_storage.py +0 -0
  346. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/__init__.py +0 -0
  347. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/anthropic.py +0 -0
  348. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/base.py +0 -0
  349. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/catalog.py +0 -0
  350. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/catalog_service.py +0 -0
  351. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/credentials.py +0 -0
  352. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/egress.py +0 -0
  353. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/model_compat.py +0 -0
  354. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/oauth.py +0 -0
  355. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/openai_compat.py +0 -0
  356. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/openai_responses/__init__.py +0 -0
  357. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/openai_responses/converters.py +0 -0
  358. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/openai_responses/parsing.py +0 -0
  359. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/profiles.py +0 -0
  360. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/protocol_config.py +0 -0
  361. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/reasoning.py +0 -0
  362. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/registry.py +0 -0
  363. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/revisions.py +0 -0
  364. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/providers/timeouts.py +0 -0
  365. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/reasoning.py +0 -0
  366. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/schedule/__init__.py +0 -0
  367. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/schedule/keepalive.py +0 -0
  368. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/schedule/monitor.py +0 -0
  369. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/schedule/scheduler.py +0 -0
  370. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/sessions/__init__.py +0 -0
  371. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/sessions/continuation.py +0 -0
  372. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/sessions/deletion.py +0 -0
  373. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/sessions/index.py +0 -0
  374. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/sessions/legacy_goal_decoder.py +0 -0
  375. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/sessions/models.py +0 -0
  376. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/sessions/store.py +0 -0
  377. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/sessions/thread_goal_store.py +0 -0
  378. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/sessions/transcript.py +0 -0
  379. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/__init__.py +0 -0
  380. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/aggregation.py +0 -0
  381. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/UPSTREAM_SOURCES.json +0 -0
  382. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/frontend-design/LICENSE.txt +0 -0
  383. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/frontend-design/SKILL.md +0 -0
  384. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/mcp-builder/LICENSE.txt +0 -0
  385. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/mcp-builder/SKILL.md +0 -0
  386. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/mcp-builder/reference/evaluation.md +0 -0
  387. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/mcp-builder/reference/mcp_best_practices.md +0 -0
  388. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/mcp-builder/reference/node_mcp_server.md +0 -0
  389. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/mcp-builder/reference/python_mcp_server.md +0 -0
  390. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/mcp-builder/scripts/connections.py +0 -0
  391. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/mcp-builder/scripts/evaluation.py +0 -0
  392. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/mcp-builder/scripts/example_evaluation.xml +0 -0
  393. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/mcp-builder/scripts/requirements.txt +0 -0
  394. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/review-agent/LICENSE.txt +0 -0
  395. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/review-agent/SKILL.md +0 -0
  396. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/review-agent/agents/openai.yaml +0 -0
  397. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/LICENSE.txt +0 -0
  398. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/SKILL.md +0 -0
  399. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/agents/openai.yaml +0 -0
  400. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/references/golang-general-backend-security.md +0 -0
  401. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/references/javascript-express-web-server-security.md +0 -0
  402. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/references/javascript-general-web-frontend-security.md +0 -0
  403. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/references/javascript-jquery-web-frontend-security.md +0 -0
  404. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/references/javascript-typescript-nextjs-web-server-security.md +0 -0
  405. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/references/javascript-typescript-react-web-frontend-security.md +0 -0
  406. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/references/javascript-typescript-vue-web-frontend-security.md +0 -0
  407. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/references/python-django-web-server-security.md +0 -0
  408. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/references/python-fastapi-web-server-security.md +0 -0
  409. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-best-practices/references/python-flask-web-server-security.md +0 -0
  410. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-ownership-map/LICENSE.txt +0 -0
  411. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-ownership-map/SKILL.md +0 -0
  412. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-ownership-map/agents/openai.yaml +0 -0
  413. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-ownership-map/references/neo4j-import.md +0 -0
  414. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-ownership-map/scripts/build_ownership_map.py +0 -0
  415. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-ownership-map/scripts/community_maintainers.py +0 -0
  416. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-ownership-map/scripts/query_ownership.py +0 -0
  417. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-ownership-map/scripts/run_ownership_map.py +0 -0
  418. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-threat-model/LICENSE.txt +0 -0
  419. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-threat-model/SKILL.md +0 -0
  420. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-threat-model/agents/openai.yaml +0 -0
  421. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-threat-model/references/prompt-template.md +0 -0
  422. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/security-threat-model/references/security-controls-and-assets.md +0 -0
  423. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/skill-creator/LICENSE.txt +0 -0
  424. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/skill-creator/SKILL.md +0 -0
  425. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/skill-creator/agents/openai.yaml +0 -0
  426. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/skill-creator/references/openai_yaml.md +0 -0
  427. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/skill-creator/scripts/generate_openai_yaml.py +0 -0
  428. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/skill-creator/scripts/init_skill.py +0 -0
  429. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/skill-creator/scripts/quick_validate.py +0 -0
  430. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/webapp-testing/LICENSE.txt +0 -0
  431. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/webapp-testing/SKILL.md +0 -0
  432. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/webapp-testing/examples/console_logging.py +0 -0
  433. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/webapp-testing/examples/element_discovery.py +0 -0
  434. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/webapp-testing/examples/static_html_automation.py +0 -0
  435. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin/webapp-testing/scripts/with_server.py +0 -0
  436. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/builtin_registry.py +0 -0
  437. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/capabilities.py +0 -0
  438. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/catalog.py +0 -0
  439. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/config.py +0 -0
  440. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/host.py +0 -0
  441. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/management.py +0 -0
  442. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/metadata.py +0 -0
  443. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/models.py +0 -0
  444. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/monitor.py +0 -0
  445. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/prompting.py +0 -0
  446. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/provider.py +0 -0
  447. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/resources.py +0 -0
  448. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/roots.py +0 -0
  449. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/skills/runtime.py +0 -0
  450. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/team/__init__.py +0 -0
  451. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/team/worktree.py +0 -0
  452. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/core/verification.py +0 -0
  453. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/deepcode.py +0 -0
  454. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/deepcode_hku.egg-info/dependency_links.txt +0 -0
  455. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/deepcode_hku.egg-info/entry_points.txt +0 -0
  456. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/deepcode_hku.egg-info/top_level.txt +0 -0
  457. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/eval/__init__.py +0 -0
  458. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/eval/swebench/README.md +0 -0
  459. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/eval/swebench/__init__.py +0 -0
  460. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/eval/swebench/dataset.py +0 -0
  461. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/eval/swebench/evaluate.py +0 -0
  462. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/eval/swebench/instance.py +0 -0
  463. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/eval/swebench/predict.py +0 -0
  464. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/eval/swebench/report.py +0 -0
  465. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/eval/swebench/run.py +0 -0
  466. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/prompts/__init__.py +0 -0
  467. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/prompts/code_prompts.py +0 -0
  468. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/protocol/app-server.schema.json +0 -0
  469. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/pyproject.toml +0 -0
  470. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/schema/mcp-agent.config.schema.json +0 -0
  471. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/setup.cfg +0 -0
  472. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_agent_presets.py +0 -0
  473. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_agent_runner_kernel.py +0 -0
  474. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_agent_session.py +0 -0
  475. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_apply_patch.py +0 -0
  476. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_autodream.py +0 -0
  477. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_automation_cli.py +0 -0
  478. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_automation_foreground.py +0 -0
  479. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_bedrock_provider.py +0 -0
  480. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_catalog.py +0 -0
  481. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_ci_installation.py +0 -0
  482. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_ci_scope.py +0 -0
  483. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_cli_logging_bootstrap.py +0 -0
  484. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_code_implementation_workspace.py +0 -0
  485. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_code_indexer_concurrent.py +0 -0
  486. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_code_indexer_output.py +0 -0
  487. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_code_mode.py +0 -0
  488. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_collaboration.py +0 -0
  489. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_command_executor_native_fence.py +0 -0
  490. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_command_guard_egress.py +0 -0
  491. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_compaction_memory.py +0 -0
  492. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_compaction_retry_memo.py +0 -0
  493. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_config_errors.py +0 -0
  494. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_config_layering.py +0 -0
  495. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_config_layers.py +0 -0
  496. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_context_note_sink.py +0 -0
  497. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_context_window_overflow.py +0 -0
  498. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_cross_process_run_lease.py +0 -0
  499. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_desktop_cli.py +0 -0
  500. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_desktop_release_scripts.py +0 -0
  501. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_diagnostics.py +0 -0
  502. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_dictation.py +0 -0
  503. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_dictation_local_runner.py +0 -0
  504. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_dictation_service.py +0 -0
  505. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_document_conversion.py +0 -0
  506. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_env_sanitize.py +0 -0
  507. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_evidence_ledger.py +0 -0
  508. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_exec_cli.py +0 -0
  509. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_exec_sandbox_wiring.py +0 -0
  510. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_external_subagent_backend.py +0 -0
  511. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_forge_provider.py +0 -0
  512. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_fuzzy_replace.py +0 -0
  513. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_git_command_url.py +0 -0
  514. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_goal_runtime.py +0 -0
  515. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_harness_approval.py +0 -0
  516. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_harness_permissions.py +0 -0
  517. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_harness_policy.py +0 -0
  518. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_harness_sandbox.py +0 -0
  519. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_hooks.py +0 -0
  520. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_init_config.py +0 -0
  521. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_llm_events.py +0 -0
  522. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_llm_runtime_connections.py +0 -0
  523. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_llmops.py +0 -0
  524. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_loop_cli.py +0 -0
  525. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_loop_detector.py +0 -0
  526. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_mcp_cli.py +0 -0
  527. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_mcp_oauth.py +0 -0
  528. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_mcp_runtime.py +0 -0
  529. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_mcp_runtime_lazy.py +0 -0
  530. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_mcp_server.py +0 -0
  531. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_memory.py +0 -0
  532. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_memory_layers.py +0 -0
  533. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_model_catalog_service.py +0 -0
  534. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_model_compat.py +0 -0
  535. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_model_visible_is_logged.py +0 -0
  536. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_native_file_tools.py +0 -0
  537. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_openspace_recipe.py +0 -0
  538. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_opper_provider.py +0 -0
  539. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_parts.py +0 -0
  540. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_pdf_downloader_security.py +0 -0
  541. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_plan_tool.py +0 -0
  542. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_platform_compat.py +0 -0
  543. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_plugin_cli.py +0 -0
  544. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_plugins.py +0 -0
  545. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_private_storage.py +0 -0
  546. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_private_storage_acl_once.py +0 -0
  547. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_private_storage_windows.py +0 -0
  548. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_provider_cli.py +0 -0
  549. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_provider_credentials.py +0 -0
  550. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_provider_egress.py +0 -0
  551. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_provider_lifetime.py +0 -0
  552. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_provider_oauth.py +0 -0
  553. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_provider_protocols.py +0 -0
  554. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_provider_timeouts.py +0 -0
  555. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_python_distribution_release.py +0 -0
  556. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_reasoning.py +0 -0
  557. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_reasoning_capabilities.py +0 -0
  558. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_reasoning_catalog_alignment.py +0 -0
  559. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_reasoning_providers.py +0 -0
  560. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_repeat_call_reminder.py +0 -0
  561. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_requesty_provider.py +0 -0
  562. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_schedule.py +0 -0
  563. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_schedule_monitor.py +0 -0
  564. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_semantic_hint.py +0 -0
  565. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_session_cli.py +0 -0
  566. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_session_compaction.py +0 -0
  567. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_session_end_lifecycle.py +0 -0
  568. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_session_index.py +0 -0
  569. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_session_run_lease.py +0 -0
  570. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_session_transcript.py +0 -0
  571. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_skill_capabilities.py +0 -0
  572. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_skill_cli.py +0 -0
  573. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_skill_host.py +0 -0
  574. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_skill_provider.py +0 -0
  575. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_skills.py +0 -0
  576. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_skills_product.py +0 -0
  577. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_snapshot.py +0 -0
  578. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_spawn_agent.py +0 -0
  579. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_stdlib_logging_bridge.py +0 -0
  580. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_subagent_composition.py +0 -0
  581. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_subagent_conversation.py +0 -0
  582. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_subagent_late_result.py +0 -0
  583. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_swebench_harness.py +0 -0
  584. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_team_worktree.py +0 -0
  585. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_thinking_requires_capable_model.py +0 -0
  586. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_token_meter.py +0 -0
  587. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_token_meter_wiring.py +0 -0
  588. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_tool_call_timeout.py +0 -0
  589. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_tool_description_quality.py +0 -0
  590. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_tool_result_pruner.py +0 -0
  591. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_transparency_log.py +0 -0
  592. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_tui_domain_events.py +0 -0
  593. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_tui_thread_client.py +0 -0
  594. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_turn_input_mailbox.py +0 -0
  595. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_turn_projection.py +0 -0
  596. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_turn_queue.py +0 -0
  597. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_turn_steering.py +0 -0
  598. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_unified_impl_workflow.py +0 -0
  599. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_user_input_tool.py +0 -0
  600. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_verification.py +0 -0
  601. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_version_metadata.py +0 -0
  602. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_web_tools.py +0 -0
  603. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_workflow_compatibility.py +0 -0
  604. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_workflow_interactions.py +0 -0
  605. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tests/test_zhipu_thinking_wire.py +0 -0
  606. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/__init__.py +0 -0
  607. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/code_implementation_server.py +0 -0
  608. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/code_indexer.py +0 -0
  609. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/code_reference_indexer.py +0 -0
  610. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/command_executor.py +0 -0
  611. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/document_conversion.py +0 -0
  612. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/document_segmentation_server.py +0 -0
  613. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/git_command.py +0 -0
  614. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/indexer_config.yaml +0 -0
  615. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/pdf_converter.py +0 -0
  616. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/pdf_downloader.py +0 -0
  617. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/pdf_downloader_server.py +0 -0
  618. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/tools/pdf_utils.py +0 -0
  619. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/utils/__init__.py +0 -0
  620. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/utils/file_processor.py +0 -0
  621. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/utils/llm_utils.py +0 -0
  622. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/utils/loop_detector.py +0 -0
  623. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/uv.lock +0 -0
  624. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/__init__.py +0 -0
  625. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/agent_orchestration_engine.py +0 -0
  626. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/agents/__init__.py +0 -0
  627. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/agents/code_implementation_agent.py +0 -0
  628. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/agents/document_segmentation_agent.py +0 -0
  629. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/agents/memory_agent_concise.py +0 -0
  630. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/agents/requirement_analysis_agent.py +0 -0
  631. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/code_implementation_workflow.py +0 -0
  632. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/codebase_index_workflow.py +0 -0
  633. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/environment.py +0 -0
  634. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/interactions/USAGE.md +0 -0
  635. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/interactions/__init__.py +0 -0
  636. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/interactions/base.py +0 -0
  637. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/interactions/integration.py +0 -0
  638. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/interactions/plan_review.py +0 -0
  639. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/interactions/requirement_analysis.py +0 -0
  640. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/plan_review_runtime.py +0 -0
  641. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/planning_runtime.py +0 -0
  642. {deepcode_hku-2.3.0 → deepcode_hku-2.3.1}/workflows/workflow_context.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: deepcode-hku
3
- Version: 2.3.0
3
+ Version: 2.3.1
4
4
  Summary: Open agentic coding with durable sessions, goals, and verification
5
5
  Home-page: https://github.com/HKUDS/DeepCode
6
6
  Author: DeepCode Team
@@ -37,7 +37,7 @@ Requires-Dist: openapi
37
37
  Requires-Dist: pathlib2
38
38
  Requires-Dist: prompt_toolkit>=3.0.0
39
39
  Requires-Dist: pydantic-settings>=2.14.2
40
- Requires-Dist: pypdf>=6.16.1
40
+ Requires-Dist: pypdf>=6.19.0
41
41
  Requires-Dist: PyYAML>=6.0
42
42
  Requires-Dist: reportlab>=3.5.0
43
43
  Requires-Dist: rich>=13.0.0
@@ -47,6 +47,7 @@ Requires-Dist: docling>=2.113.0; extra == "advanced-documents"
47
47
  Provides-Extra: test
48
48
  Requires-Dist: pytest<10,>=8; extra == "test"
49
49
  Requires-Dist: pytest-asyncio<2,>=1; extra == "test"
50
+ Requires-Dist: pyte<0.9,>=0.8.2; extra == "test"
50
51
  Dynamic: author
51
52
  Dynamic: classifier
52
53
  Dynamic: description
@@ -220,6 +221,51 @@ Automations. Use `deepcode`, `deepcode desktop`, or `deepcode web`; see
220
221
 
221
222
  ## News
222
223
 
224
+ **2026-10-12 · DeepCode v2.3.1: Markdown answers in the TUI, a Windows service that stays up, `/compact` for coding sessions, and community fixes**
225
+
226
+ - **Answers render as Markdown while they stream.** Headings, lists, bold
227
+ text and tables are formatted as each line completes; code blocks are not
228
+ indented or wrapped by DeepCode, links show their address, and the line
229
+ still being written is previewed above the status line. `/raw` prints
230
+ answers exactly as written, for copying. The reasoning card now comes
231
+ before the answer, and `Ctrl+O` mid-answer no longer repeats or drops
232
+ lines. See [The terminal UI](docs/guide/the-tui.md).
233
+ - **The Windows service stays up.** On a Windows install in a virtual
234
+ environment, the background service no longer stops right after it starts,
235
+ whether the TUI, `deepcode service start`, or `deepcode web` launched it.
236
+ - **`/compact` handles coding sessions.** Tool-call arguments, such as the file
237
+ a `write_file` call carries, now count when compaction picks what to keep and
238
+ checks that the summary is smaller. Sessions that wrote large files compact
239
+ instead of being refused, and the report shows the characters actually
240
+ replaced. (#258)
241
+ - **Community fixes.** Diff lines that contain a Unicode line separator or a
242
+ form feed stay whole (#253); web fetch refuses private addresses tunnelled
243
+ through NAT64 or IPv4-compatible IPv6 (#254); the destructive-command screen
244
+ also catches absolute paths such as `/bin/rm -rf /` (#255); and `glob` finds
245
+ files when the project sits under a directory named `build` or `venv` (#256).
246
+ - **Security updates.** pypdf, PyJWT, urllib3, and multidict move to patched
247
+ releases.
248
+
249
+ **2026-10-10 · A steadier terminal UI: answers shown once, keys that keep your draft, and an orderly `/compact`**
250
+
251
+ - **Answers appear once.** The TUI no longer prints an answer a second time
252
+ when it finishes, and a stopped answer keeps the text already shown, in every
253
+ client.
254
+ - **Keys that keep your draft.** `Esc` interrupts only from an empty prompt and
255
+ otherwise closes a completion menu; `Ctrl+C` first clears what you are
256
+ typing. Stopping a command no longer closes the TUI. See
257
+ [The terminal UI](docs/guide/the-tui.md).
258
+ - **Calm when the service is slow.** Typing, completion, and `Ctrl+C` stay
259
+ responsive while the background service is busy; a slow answer is reported
260
+ instead of retried three times, and `/reconnect` brings your conversation
261
+ back after a restart.
262
+ - **`/compact` waits its turn.** A message sent during compaction waits for the
263
+ summary, the next reply no longer starts with a failed request, and a refusal
264
+ says why instead of "internal error". See [Sessions](docs/guide/sessions.md).
265
+ - **Current settings, safer Goals.** Default model and access changes show up
266
+ in the TUI, `/new` follows your defaults, and `/goal clear out …` sets a new
267
+ objective instead of clearing the Goal.
268
+
223
269
  **2026-09-28 · DeepCode v2.3.0: voice dictation, Opper and Bedrock, Desktop polish, and opt-in hardening**
224
270
 
225
271
  - **Dictate your prompt.** Add a `dictation` block to your config and the
@@ -243,6 +289,9 @@ Automations. Use `deepcode`, `deepcode desktop`, or `deepcode web`; see
243
289
  DeepCode processes share it, and a round of Windows fixes landed. (#210,
244
290
  #235, #236, #237)
245
291
 
292
+ <details>
293
+ <summary><strong>Earlier updates, August to early September 2026</strong></summary>
294
+
246
295
  **2026-09-09 · TUI, Desktop, and Web share one local background service**
247
296
 
248
297
  - **Choose your interface.** Run `deepcode` for the TUI, `deepcode desktop`
@@ -281,9 +330,6 @@ Start with the updated [Quick start](#quick-start) and
281
330
  - **Appearance settings speak Simplified Chinese too**, completing the
282
331
  Desktop shell's zh-CN coverage. (#202)
283
332
 
284
- <details>
285
- <summary><strong>Earlier updates, August to early September 2026</strong></summary>
286
-
287
333
  **2026-09-03 · Desktop catalog race, an honest command screen, GLM-5.2, and two dependency bumps**
288
334
 
289
335
  - **Switching projects no longer strands the MCP catalog.** A probe or
@@ -1,65 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: deepcode-hku
3
- Version: 2.3.0
4
- Summary: Open agentic coding with durable sessions, goals, and verification
5
- Home-page: https://github.com/HKUDS/DeepCode
6
- Author: DeepCode Team
7
- License: MIT
8
- Project-URL: Documentation, https://github.com/HKUDS/DeepCode#readme
9
- Project-URL: Source, https://github.com/HKUDS/DeepCode
10
- Project-URL: Tracker, https://github.com/HKUDS/DeepCode/issues
11
- Classifier: Development Status :: 4 - Beta
12
- Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.12
14
- Classifier: Programming Language :: Python :: 3.13
15
- Classifier: Operating System :: OS Independent
16
- Classifier: Intended Audience :: Developers
17
- Classifier: Intended Audience :: Science/Research
18
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
- Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
20
- Classifier: Topic :: Text Processing :: Linguistic
21
- Requires-Python: >=3.12
22
- Description-Content-Type: text/markdown
23
- License-File: LICENSE
24
- Requires-Dist: aiofiles>=0.8.0
25
- Requires-Dist: aiohttp>=3.14.3
26
- Requires-Dist: anthropic>=0.40.0
27
- Requires-Dist: asyncio-mqtt
28
- Requires-Dist: google-genai
29
- Requires-Dist: httpx>=0.27.0
30
- Requires-Dist: json-repair>=0.30.0
31
- Requires-Dist: loguru>=0.7.0
32
- Requires-Dist: mcp<2,>=1.29
33
- Requires-Dist: mcp-server-git
34
- Requires-Dist: nest_asyncio
35
- Requires-Dist: openai>=1.55.0
36
- Requires-Dist: openapi
37
- Requires-Dist: pathlib2
38
- Requires-Dist: prompt_toolkit>=3.0.0
39
- Requires-Dist: pydantic-settings>=2.14.2
40
- Requires-Dist: pypdf>=6.16.1
41
- Requires-Dist: PyYAML>=6.0
42
- Requires-Dist: reportlab>=3.5.0
43
- Requires-Dist: rich>=13.0.0
44
- Provides-Extra: server
45
- Provides-Extra: advanced-documents
46
- Requires-Dist: docling>=2.113.0; extra == "advanced-documents"
47
- Provides-Extra: test
48
- Requires-Dist: pytest<10,>=8; extra == "test"
49
- Requires-Dist: pytest-asyncio<2,>=1; extra == "test"
50
- Dynamic: author
51
- Dynamic: classifier
52
- Dynamic: description
53
- Dynamic: description-content-type
54
- Dynamic: home-page
55
- Dynamic: license
56
- Dynamic: license-file
57
- Dynamic: project-url
58
- Dynamic: provides-extra
59
- Dynamic: requires-dist
60
- Dynamic: requires-python
61
- Dynamic: summary
62
-
63
1
  <div align="center">
64
2
 
65
3
  <table style="border: none; margin: 0 auto; padding: 0; border-collapse: collapse;">
@@ -220,6 +158,51 @@ Automations. Use `deepcode`, `deepcode desktop`, or `deepcode web`; see
220
158
 
221
159
  ## News
222
160
 
161
+ **2026-10-12 · DeepCode v2.3.1: Markdown answers in the TUI, a Windows service that stays up, `/compact` for coding sessions, and community fixes**
162
+
163
+ - **Answers render as Markdown while they stream.** Headings, lists, bold
164
+ text and tables are formatted as each line completes; code blocks are not
165
+ indented or wrapped by DeepCode, links show their address, and the line
166
+ still being written is previewed above the status line. `/raw` prints
167
+ answers exactly as written, for copying. The reasoning card now comes
168
+ before the answer, and `Ctrl+O` mid-answer no longer repeats or drops
169
+ lines. See [The terminal UI](docs/guide/the-tui.md).
170
+ - **The Windows service stays up.** On a Windows install in a virtual
171
+ environment, the background service no longer stops right after it starts,
172
+ whether the TUI, `deepcode service start`, or `deepcode web` launched it.
173
+ - **`/compact` handles coding sessions.** Tool-call arguments, such as the file
174
+ a `write_file` call carries, now count when compaction picks what to keep and
175
+ checks that the summary is smaller. Sessions that wrote large files compact
176
+ instead of being refused, and the report shows the characters actually
177
+ replaced. (#258)
178
+ - **Community fixes.** Diff lines that contain a Unicode line separator or a
179
+ form feed stay whole (#253); web fetch refuses private addresses tunnelled
180
+ through NAT64 or IPv4-compatible IPv6 (#254); the destructive-command screen
181
+ also catches absolute paths such as `/bin/rm -rf /` (#255); and `glob` finds
182
+ files when the project sits under a directory named `build` or `venv` (#256).
183
+ - **Security updates.** pypdf, PyJWT, urllib3, and multidict move to patched
184
+ releases.
185
+
186
+ **2026-10-10 · A steadier terminal UI: answers shown once, keys that keep your draft, and an orderly `/compact`**
187
+
188
+ - **Answers appear once.** The TUI no longer prints an answer a second time
189
+ when it finishes, and a stopped answer keeps the text already shown, in every
190
+ client.
191
+ - **Keys that keep your draft.** `Esc` interrupts only from an empty prompt and
192
+ otherwise closes a completion menu; `Ctrl+C` first clears what you are
193
+ typing. Stopping a command no longer closes the TUI. See
194
+ [The terminal UI](docs/guide/the-tui.md).
195
+ - **Calm when the service is slow.** Typing, completion, and `Ctrl+C` stay
196
+ responsive while the background service is busy; a slow answer is reported
197
+ instead of retried three times, and `/reconnect` brings your conversation
198
+ back after a restart.
199
+ - **`/compact` waits its turn.** A message sent during compaction waits for the
200
+ summary, the next reply no longer starts with a failed request, and a refusal
201
+ says why instead of "internal error". See [Sessions](docs/guide/sessions.md).
202
+ - **Current settings, safer Goals.** Default model and access changes show up
203
+ in the TUI, `/new` follows your defaults, and `/goal clear out …` sets a new
204
+ objective instead of clearing the Goal.
205
+
223
206
  **2026-09-28 · DeepCode v2.3.0: voice dictation, Opper and Bedrock, Desktop polish, and opt-in hardening**
224
207
 
225
208
  - **Dictate your prompt.** Add a `dictation` block to your config and the
@@ -243,6 +226,9 @@ Automations. Use `deepcode`, `deepcode desktop`, or `deepcode web`; see
243
226
  DeepCode processes share it, and a round of Windows fixes landed. (#210,
244
227
  #235, #236, #237)
245
228
 
229
+ <details>
230
+ <summary><strong>Earlier updates, August to early September 2026</strong></summary>
231
+
246
232
  **2026-09-09 · TUI, Desktop, and Web share one local background service**
247
233
 
248
234
  - **Choose your interface.** Run `deepcode` for the TUI, `deepcode desktop`
@@ -281,9 +267,6 @@ Start with the updated [Quick start](#quick-start) and
281
267
  - **Appearance settings speak Simplified Chinese too**, completing the
282
268
  Desktop shell's zh-CN coverage. (#202)
283
269
 
284
- <details>
285
- <summary><strong>Earlier updates, August to early September 2026</strong></summary>
286
-
287
270
  **2026-09-03 · Desktop catalog race, an honest command screen, GLM-5.2, and two dependency bumps**
288
271
 
289
272
  - **Switching projects no longer strands the MCP catalog.** A probe or
@@ -157,6 +157,39 @@ DeepCode 提供 TUI、Desktop 和 Web 三种客户端,连接同一个本地共
157
157
 
158
158
  ## 新闻
159
159
 
160
+ **2026-10-12 · DeepCode v2.3.1:TUI 边输出边渲染 Markdown、Windows 后台服务不再自行退出、`/compact` 能压缩写代码的会话,以及社区修复**
161
+
162
+ - **回答边输出边渲染成 Markdown。** 标题、列表、粗体和表格在每行写完时排好;
163
+ 代码块不缩进,DeepCode 也不会给它折行;链接显示完整地址;还没写完的那一行
164
+ 先在状态行上方预览。`/raw` 按原文输出,方便复制。推理卡片现在显示在回答之前,
165
+ 回答途中按 `Ctrl+O` 也不会再重复或丢行。参见[终端界面指南](docs/guide/the-tui.md)。
166
+ - **Windows 后台服务不再自行退出。** 在 Windows 上把 DeepCode 装在虚拟环境里时,
167
+ 后台服务刚启动就会退出。现在无论由 TUI、`deepcode service start` 还是
168
+ `deepcode web` 启动,都能正常运行。
169
+ - **`/compact` 能压缩写代码的会话。** 压缩时,工具调用的参数(比如 `write_file`
170
+ 写入的整个文件)也会计入:既用于决定保留哪些消息,也用于判断摘要是否更短。
171
+ 写过大文件的会话不再被拒绝压缩,提示里的替换字数也准确了。(#258)
172
+ - **社区修复。** 含 Unicode 行分隔符或换页符的行在 diff 里不再被拆开(#253);
173
+ 网页抓取会拒绝经 NAT64 或 IPv4 兼容 IPv6 地址访问内网(#254);危险命令筛查
174
+ 也能识别 `/bin/rm -rf /` 这类绝对路径写法(#255);项目放在名为 `build` 或
175
+ `venv` 的目录下时,`glob` 也能找到文件(#256)。
176
+ - **安全更新。** pypdf、PyJWT、urllib3、multidict 升级到修补版本。
177
+
178
+ **2026-10-10 · 更稳的终端界面:回答只显示一次、按键不丢草稿、`/compact` 不再抢跑**
179
+
180
+ - **回答只显示一次。** 回答结束时,TUI 不再把整段重新打印一遍;被中断的回答
181
+ 会保留已经输出的文字,各个客户端都一样。
182
+ - **按键不丢草稿。** 只有输入框为空时 `Esc` 才中断回合,补全菜单打开时只关闭
183
+ 菜单;`Ctrl+C` 先清空正在输入的内容。用 `Ctrl+C` 停止命令不会再让 TUI 退出。
184
+ 参见[终端界面指南](docs/guide/the-tui.md)。
185
+ - **后台服务变慢时依然顺畅。** 服务忙时,打字、补全和 `Ctrl+C` 照常响应;请求
186
+ 超时会直接说明,不再连续重试三次;服务重启后,`/reconnect` 能接回原来的会话。
187
+ - **`/compact` 不再抢跑。** 压缩期间发来的消息会等摘要完成;压缩后的第一次回答
188
+ 不再先失败一次;被拒绝时会说明原因,而不是 "internal error"。参见
189
+ [会话指南](docs/guide/sessions.md)。
190
+ - **设置及时生效,Goal 更安全。** 修改默认模型或权限后,TUI 会显示最新值;
191
+ `/new` 跟随默认设置;`/goal clear out …` 会设为新目标,而不是清掉当前 Goal。
192
+
160
193
  **2026-09-28 · DeepCode v2.3.0:语音输入、Opper 与 Bedrock、Desktop 细节打磨,以及可选的安全加固**
161
194
 
162
195
  - **用语音输入提示词。** 在配置中加入 `dictation` 后,Desktop 与 Web 的输入框
@@ -175,6 +208,9 @@ DeepCode 提供 TUI、Desktop 和 Web 三种客户端,连接同一个本地共
175
208
  - **各平台更稳定。** 多个 DeepCode 进程共用状态数据库时不再丢失锁,另有一批
176
209
  Windows 修复。(#210、#235、#236、#237)
177
210
 
211
+ <details>
212
+ <summary><strong>2026 年 8 月至 9 月初的更早更新</strong></summary>
213
+
178
214
  **2026-09-09 · TUI、Desktop 与 Web 共用一个本地后台**
179
215
 
180
216
  - **选择你习惯的界面。** 运行 `deepcode` 启动 TUI,`deepcode desktop`
@@ -204,9 +240,6 @@ DeepCode 提供 TUI、Desktop 和 Web 三种客户端,连接同一个本地共
204
240
  闭合标签会被转义,被投毒的笔记无法伪造指令。(#204)
205
241
  - **外观设置也说简体中文了**,Desktop 外壳的 zh-CN 覆盖至此完整。(#202)
206
242
 
207
- <details>
208
- <summary><strong>2026 年 8 月至 9 月初的更早更新</strong></summary>
209
-
210
243
  **2026-09-03 · Desktop 目录竞态、更诚实的命令筛查、GLM-5.2 与两项依赖升级**
211
244
 
212
245
  - **切换项目不再让 MCP 目录卡住。** 在一个项目里发起的探测或变更,不会再
@@ -9,7 +9,7 @@ import threading
9
9
  import time
10
10
 
11
11
  from app_server.errors import RpcError
12
- from app_server.native_client import NativeRpcClient
12
+ from app_server.native_client import NativeRpcClient, request_timeout
13
13
  from app_server.service_client import ServiceOperationError, ServiceUnavailable
14
14
  from app_server.service_state import ServiceFiles
15
15
  from core.application.errors import (
@@ -26,6 +26,7 @@ class RemoteApplicationError(ApplicationError):
26
26
  super().__init__(str(error), details=error.data.get("details"))
27
27
  self.code = error.stable_code
28
28
  self.retryable = error.data.get("retryable", False)
29
+ self.timed_out = bool(error.data.get("timedOut", False))
29
30
 
30
31
 
31
32
  class BlockingServiceClient:
@@ -95,7 +96,9 @@ class BlockingServiceClient:
95
96
  raise error_type(str(exc), details=details) from exc
96
97
  raise RemoteApplicationError(exc) from exc
97
98
 
98
- def reconnect(self, previous=None):
99
+ def reconnect(self, previous=None, *, start: bool = False):
100
+ """Replace the transport; ``start`` also launches a stopped service."""
101
+
99
102
  with self._connection_lock:
100
103
  if self._closed:
101
104
  raise RuntimeError("Service client is closed")
@@ -113,7 +116,8 @@ class BlockingServiceClient:
113
116
  "version": "1",
114
117
  "surface": self.surface,
115
118
  },
116
- }
119
+ },
120
+ start=start,
117
121
  )
118
122
  )
119
123
  self.client = candidate
@@ -142,11 +146,17 @@ class BlockingServiceClient:
142
146
  )
143
147
  return self.run(
144
148
  self.client.request(method, original),
145
- timeout=125 if method == "provider/test" else 40,
149
+ # Outlive the request's own budget so its error, not
150
+ # this wrapper's, reaches the caller.
151
+ timeout=request_timeout(method) + 15,
146
152
  )
147
153
  except RemoteApplicationError as exc:
154
+ # A timeout is not retried: the connection is fine and the
155
+ # service is slow, so reconnecting and asking again only
156
+ # tripled the wait (and dropped the event stream twice).
148
157
  if (
149
158
  not safe
159
+ or exc.timed_out
150
160
  or exc.code
151
161
  not in {
152
162
  "CONNECTION_LOST",
@@ -2,7 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import asyncio
6
5
  from collections.abc import Callable
7
6
  from typing import Any
8
7
 
@@ -1039,9 +1038,7 @@ class Dispatcher:
1039
1038
 
1040
1039
  def _thread_context_compact(self, params: Params) -> dict[str, Any]:
1041
1040
  params.only("threadId")
1042
- return asyncio.run(
1043
- self.application.turns.compact_live_context(str(params.string("threadId")))
1044
- )
1041
+ return self.application.turns.run_compaction(str(params.string("threadId")))
1045
1042
 
1046
1043
  def _turn_list(self, params: Params) -> dict[str, Any]:
1047
1044
  params.only("threadId", "limit", "offset", "state")
@@ -16,6 +16,22 @@ from app_server.service_state import ServiceFiles
16
16
  from core.version import __version__
17
17
 
18
18
 
19
+ # Requests that wait on a model or an external process (a provider probe, a
20
+ # /compact summary, an MCP server start that may take up to its configured
21
+ # 300s) legitimately outlast the default budget; the server keeps working on
22
+ # them either way, so timing out early only hides a result that is coming.
23
+ _SLOW_METHOD_TIMEOUTS = {
24
+ "provider/test": 120.0,
25
+ "thread/context/compact": 600.0,
26
+ "mcp/probe": 330.0,
27
+ }
28
+ _DEFAULT_TIMEOUT = 25.0
29
+
30
+
31
+ def request_timeout(method: str) -> float:
32
+ return _SLOW_METHOD_TIMEOUTS.get(method, _DEFAULT_TIMEOUT)
33
+
34
+
19
35
  class NativeRpcClient:
20
36
  """One connection on one event loop; no implicit mutation replay or fallback."""
21
37
 
@@ -50,8 +66,10 @@ class NativeRpcClient:
50
66
  if record.version != __version__:
51
67
  raise RpcError(
52
68
  -32003,
53
- "The running service and this client have different versions. "
54
- "Finish active work and upgrade/restart the service explicitly.",
69
+ "The running service and this client have different versions "
70
+ f"(service {record.version}, client {__version__}). Finish active "
71
+ "work, then run `deepcode service restart` to start the service "
72
+ "from this installation.",
55
73
  stable_code="SERVICE_VERSION_MISMATCH",
56
74
  )
57
75
  self._session = aiohttp.ClientSession(
@@ -111,12 +129,9 @@ class NativeRpcClient:
111
129
  future = asyncio.get_running_loop().create_future()
112
130
  self._pending[request_id] = future
113
131
  sent = False
132
+ budget = timeout if timeout is not None else request_timeout(method)
114
133
  try:
115
- async with asyncio.timeout(
116
- timeout
117
- if timeout is not None
118
- else (120 if method == "provider/test" else 25)
119
- ):
134
+ async with asyncio.timeout(budget):
120
135
  # Once writing starts, failure cannot prove non-admission.
121
136
  sent = True
122
137
  await socket.send_str(encoded.decode())
@@ -126,13 +141,32 @@ class NativeRpcClient:
126
141
  read_only = (
127
142
  method in policy.get("readMethods", []) or method == "initialize"
128
143
  )
144
+ known = read_only or not sent
145
+ # A timeout is a slow service, not a lost connection: the socket
146
+ # is still good and the answer may still come. Say so, and mark
147
+ # it so callers neither reconnect nor send it again.
148
+ timed_out = isinstance(exc, TimeoutError)
149
+ if not timed_out:
150
+ message = (
151
+ "Service response was lost. Reconnect and inspect the "
152
+ "current state before retrying."
153
+ )
154
+ elif known:
155
+ message = (
156
+ f"The DeepCode service did not answer within {budget:g}s; "
157
+ "it may be busy. Try again in a moment."
158
+ )
159
+ else:
160
+ message = (
161
+ f"The DeepCode service did not confirm this request within "
162
+ f"{budget:g}s; it may still complete. Check the current "
163
+ "state before retrying."
164
+ )
129
165
  raise RpcError(
130
166
  -32000,
131
- "Service response was lost. Reconnect and inspect the current state before retrying.",
132
- stable_code="CONNECTION_LOST"
133
- if read_only or not sent
134
- else "RESULT_UNKNOWN",
135
- data={"retryable": read_only},
167
+ message,
168
+ stable_code="CONNECTION_LOST" if known else "RESULT_UNKNOWN",
169
+ data={"retryable": read_only, "timedOut": timed_out},
136
170
  ) from exc
137
171
  finally:
138
172
  self._pending.pop(request_id, None)
@@ -23,7 +23,12 @@ from app_server.host import ServiceHost
23
23
  from app_server.errors import RpcError
24
24
  from app_server.protocol.codec import decode_request
25
25
  from app_server.service_client import ServiceClient, ServiceUnavailable
26
- from app_server.service_state import ServiceFiles, ServiceRecord, identity_proof
26
+ from app_server.service_state import (
27
+ ServiceFiles,
28
+ ServiceRecord,
29
+ identity_proof,
30
+ launched_instance_id,
31
+ )
27
32
  from app_server.websocket import WebSocketTransport
28
33
  from app_server.web_surface import WebSurface
29
34
  from core.application.application import DeepCodeApplication
@@ -346,7 +351,7 @@ async def serve(files: ServiceFiles, port: int) -> None:
346
351
  listener.listen(socket.SOMAXCONN)
347
352
  listener.setblocking(False)
348
353
  record = ServiceRecord(
349
- secrets.token_hex(16),
354
+ launched_instance_id(),
350
355
  str(files.database),
351
356
  os.getpid(),
352
357
  listener.getsockname()[1],
@@ -17,6 +17,17 @@ from core.version import __version__
17
17
 
18
18
  SERVICE_PROTOCOL_VERSION = 1
19
19
  SERVICE_WORKING_DIRECTORY = Path(__file__).resolve().parents[1]
20
+ # A detached start names the instance it launches, so it can tell its own
21
+ # service from a concurrent winner. PIDs cannot: on Windows a venv's python.exe
22
+ # runs the interpreter as a child, so the service's PID is not the launched one.
23
+ LAUNCH_INSTANCE_ENV = "DEEPCODE_SERVICE_INSTANCE"
24
+
25
+
26
+ def launched_instance_id() -> str:
27
+ value = os.environ.pop(LAUNCH_INSTANCE_ENV, "")
28
+ if len(value) == 32 and all(char in "0123456789abcdef" for char in value):
29
+ return value
30
+ return secrets.token_hex(16)
20
31
 
21
32
 
22
33
  def service_command(files: ServiceFiles, port: int) -> list[str]:
@@ -1,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/xterm-BrP-ENHg.css","assets/LocalMonacoEditor-DCwkx7R9.js","assets/rolldown-runtime-QTnfLwEv.js","assets/index-5xSnu27j.js","assets/editor.api-DfsewISI.js","assets/editor-CJEeZjoM.css","assets/jsx-runtime-CIxEorsV.js"])))=>i.map(i=>d[i]);
2
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{t}from"./index-5xSnu27j.js";import{n,t as r}from"./jsx-runtime-CIxEorsV.js";import{t as i}from"./x-CrqHGWEM.js";import{t as a}from"./useTranslation-CYApFZ2x.js";import{t as o}from"./confirmAction-CndHH5nL.js";import{t as s}from"./itemPresentation-CpLiCTmA.js";import{t as c}from"./useSystemDarkMode-COxZJwQa.js";var l=e(n(),1),u={panel:`_panel_iy7b9_1`,toolbar:`_toolbar_iy7b9_13`,error:`_error_iy7b9_39`,host:`_host_iy7b9_50`},d=class{runtime;terminal;write;truncate;exit;onError;offset=0;observedHead=0;revision=0;active=!0;ended=!1;pending=null;cancelWrite=null;constructor(e,t,n,r,i,a){this.runtime=e,this.terminal=t,this.write=n,this.truncate=r,this.exit=i,this.onError=a}stop(){this.active=!1,this.cancelWrite?.()}receive(e){!this.active||e<=this.offset||(this.observedHead=Math.max(this.observedHead,e),this.pending||this.recover().catch(this.onError))}recover(){return this.active?(this.revision++,this.pending||=this.read(),this.pending):Promise.resolve()}async read(){let e=16*1024;try{for(;this.active;){let t=this.revision,n=this.offset,r,i;for(;;){try{i=await this.runtime.request(`terminal/read`,{threadId:this.terminal.threadId,terminalId:this.terminal.terminalId,offset:this.offset,limit:e,...r===void 0?{}:{through:r}})}catch(t){if(!this.active)return;if(t?.code===`RESPONSE_TOO_LARGE`&&e>4){e=Math.max(4,Math.floor(e/2));continue}throw t}if(!this.active)return;let t=new TextEncoder().encode(i.data).length;if(i.terminalId!==this.terminal.terminalId||i.threadId!==this.terminal.threadId||i.offset<this.offset||!i.truncated&&i.offset!==this.offset||i.nextOffset!==i.offset+t||i.headOffset<i.nextOffset||i.hasMore&&t===0)throw Error(`Terminal output cursor is inconsistent; reopen the terminal view`);if(i.truncated&&this.truncate(),i.data&&await this.render(i.data),!this.active)return;if(this.offset=i.nextOffset,this.observedHead=Math.max(this.observedHead,i.headOffset),r??=i.headOffset,i.truncated&&(r=void 0),i.truncated&&!i.hasMore){this.revision++;break}if(!i.hasMore)break}if(this.observedHead>this.offset&&this.offset===n)throw Error(`Terminal output recovery made no progress`);if(i.exited&&this.offset===i.headOffset&&!i.truncated&&!this.ended&&(this.ended=!0,this.exit(i.exitCode)),t===this.revision&&this.observedHead<=this.offset)return}}finally{this.pending=null}}render(e){return new Promise((t,n)=>{let r=!1,i=e=>{r||(r=!0,this.cancelWrite=null,e===void 0?t():n(e))};this.cancelWrite=()=>i(),Promise.resolve().then(()=>this.active?this.write(e):void 0).then(()=>i(),i)})}},f=r();function p({runtime:e,threadId:n,enabled:r,active:i}){let a=(0,l.useRef)(null),o=(0,l.useRef)(null),s=(0,l.useRef)(null),c=(0,l.useRef)(null),p=(0,l.useRef)(i),m=(0,l.useRef)(null),h=(0,l.useRef)(null),g=(0,l.useRef)(!1),_=(0,l.useRef)(!1),v=(0,l.useRef)(null),y=(0,l.useRef)(!1),b=(0,l.useRef)(0),[x,S]=(0,l.useState)(null),[C,w]=(0,l.useState)(!1),[T,E]=(0,l.useState)(null),[D,O]=(0,l.useState)(!1),[k,A]=(0,l.useState)(!1),j=(0,l.useRef)(!1),M=(0,l.useCallback)(e=>{j.current=e,A(e)},[]),[N,P]=(0,l.useState)(!1),F=(0,l.useCallback)(e=>{E(e instanceof Error?e.message:String(e))},[]),I=(0,l.useCallback)(e=>{o.current?.write(`\r\n[process exited ${e??`unknown`}]\r\n`),w(!0),c.current=null,S(null)},[]),L=(0,l.useCallback)(async t=>{if(v.current?.stop(),v.current=null,o.current?.reset(),c.current=t,S(t),w(!1),!y.current)return;let n=new d(e,t,e=>new Promise(t=>{o.current?o.current.write(e,t):t()}),()=>{o.current?.reset(),o.current?.write(`[Earlier terminal output is no longer available]\r
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/xterm-BrP-ENHg.css","assets/LocalMonacoEditor-DCuhGEPh.js","assets/rolldown-runtime-QTnfLwEv.js","assets/index-B4STS7MU.js","assets/editor.api-DfsewISI.js","assets/editor-CJEeZjoM.css","assets/jsx-runtime-CIxEorsV.js"])))=>i.map(i=>d[i]);
2
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{t}from"./index-B4STS7MU.js";import{n,t as r}from"./jsx-runtime-CIxEorsV.js";import{t as i}from"./x-CrqHGWEM.js";import{t as a}from"./useTranslation-CYApFZ2x.js";import{t as o}from"./confirmAction-CndHH5nL.js";import{t as s}from"./itemPresentation-CpLiCTmA.js";import{t as c}from"./useSystemDarkMode-COxZJwQa.js";var l=e(n(),1),u={panel:`_panel_iy7b9_1`,toolbar:`_toolbar_iy7b9_13`,error:`_error_iy7b9_39`,host:`_host_iy7b9_50`},d=class{runtime;terminal;write;truncate;exit;onError;offset=0;observedHead=0;revision=0;active=!0;ended=!1;pending=null;cancelWrite=null;constructor(e,t,n,r,i,a){this.runtime=e,this.terminal=t,this.write=n,this.truncate=r,this.exit=i,this.onError=a}stop(){this.active=!1,this.cancelWrite?.()}receive(e){!this.active||e<=this.offset||(this.observedHead=Math.max(this.observedHead,e),this.pending||this.recover().catch(this.onError))}recover(){return this.active?(this.revision++,this.pending||=this.read(),this.pending):Promise.resolve()}async read(){let e=16*1024;try{for(;this.active;){let t=this.revision,n=this.offset,r,i;for(;;){try{i=await this.runtime.request(`terminal/read`,{threadId:this.terminal.threadId,terminalId:this.terminal.terminalId,offset:this.offset,limit:e,...r===void 0?{}:{through:r}})}catch(t){if(!this.active)return;if(t?.code===`RESPONSE_TOO_LARGE`&&e>4){e=Math.max(4,Math.floor(e/2));continue}throw t}if(!this.active)return;let t=new TextEncoder().encode(i.data).length;if(i.terminalId!==this.terminal.terminalId||i.threadId!==this.terminal.threadId||i.offset<this.offset||!i.truncated&&i.offset!==this.offset||i.nextOffset!==i.offset+t||i.headOffset<i.nextOffset||i.hasMore&&t===0)throw Error(`Terminal output cursor is inconsistent; reopen the terminal view`);if(i.truncated&&this.truncate(),i.data&&await this.render(i.data),!this.active)return;if(this.offset=i.nextOffset,this.observedHead=Math.max(this.observedHead,i.headOffset),r??=i.headOffset,i.truncated&&(r=void 0),i.truncated&&!i.hasMore){this.revision++;break}if(!i.hasMore)break}if(this.observedHead>this.offset&&this.offset===n)throw Error(`Terminal output recovery made no progress`);if(i.exited&&this.offset===i.headOffset&&!i.truncated&&!this.ended&&(this.ended=!0,this.exit(i.exitCode)),t===this.revision&&this.observedHead<=this.offset)return}}finally{this.pending=null}}render(e){return new Promise((t,n)=>{let r=!1,i=e=>{r||(r=!0,this.cancelWrite=null,e===void 0?t():n(e))};this.cancelWrite=()=>i(),Promise.resolve().then(()=>this.active?this.write(e):void 0).then(()=>i(),i)})}},f=r();function p({runtime:e,threadId:n,enabled:r,active:i}){let a=(0,l.useRef)(null),o=(0,l.useRef)(null),s=(0,l.useRef)(null),c=(0,l.useRef)(null),p=(0,l.useRef)(i),m=(0,l.useRef)(null),h=(0,l.useRef)(null),g=(0,l.useRef)(!1),_=(0,l.useRef)(!1),v=(0,l.useRef)(null),y=(0,l.useRef)(!1),b=(0,l.useRef)(0),[x,S]=(0,l.useState)(null),[C,w]=(0,l.useState)(!1),[T,E]=(0,l.useState)(null),[D,O]=(0,l.useState)(!1),[k,A]=(0,l.useState)(!1),j=(0,l.useRef)(!1),M=(0,l.useCallback)(e=>{j.current=e,A(e)},[]),[N,P]=(0,l.useState)(!1),F=(0,l.useCallback)(e=>{E(e instanceof Error?e.message:String(e))},[]),I=(0,l.useCallback)(e=>{o.current?.write(`\r\n[process exited ${e??`unknown`}]\r\n`),w(!0),c.current=null,S(null)},[]),L=(0,l.useCallback)(async t=>{if(v.current?.stop(),v.current=null,o.current?.reset(),c.current=t,S(t),w(!1),!y.current)return;let n=new d(e,t,e=>new Promise(t=>{o.current?o.current.write(e,t):t()}),()=>{o.current?.reset(),o.current?.write(`[Earlier terminal output is no longer available]\r
3
3
  `)},I,F);v.current=n,await n.recover()},[I,F,e]);(0,l.useEffect)(()=>{if(!i||!a.current||o.current||g.current)return;g.current=!0;let n=a.current;(async()=>{let[{Terminal:r},{FitAddon:i}]=await Promise.all([t(()=>import(`./xterm-U4TA8lIC.js`),[]),t(()=>import(`./addon-fit-DIOBYJe3.js`),[]),t(()=>Promise.resolve({}),__vite__mapDeps([0]))]);if(_.current)return;let a=new r({cursorBlink:!0,convertEol:!0,fontFamily:`"SFMono-Regular", Consolas, monospace`,fontSize:11,lineHeight:1.25,scrollback:4e3,theme:{background:`#151816`,foreground:`#e6eae7`,cursor:`#929cff`,selectionBackground:`#4d5bd555`}}),l=new i;a.loadAddon(l),a.open(n),o.current=a,s.current=l,h.current=a.onData(t=>{let n=c.current;n&&j.current&&e.request(`terminal/write`,{threadId:n.threadId,terminalId:n.terminalId,data:t}).catch(F)}),m.current=new ResizeObserver(()=>{!p.current||!c.current||!j.current||(l.fit(),e.request(`terminal/resize`,{threadId:c.current.threadId,terminalId:c.current.terminalId,columns:Math.max(20,a.cols),rows:Math.max(5,a.rows)}).catch(F))}),m.current.observe(n),O(!0)})().catch(e=>{g.current=!1,E(e instanceof Error?e.message:String(e))})},[i,F,e]),(0,l.useEffect)(()=>(_.current=!1,()=>{_.current=!0,m.current?.disconnect(),h.current?.dispose(),o.current?.dispose(),m.current=null,h.current=null,o.current=null,s.current=null}),[]),(0,l.useEffect)(()=>{p.current=i,i&&s.current?.fit()},[i]),(0,l.useEffect)(()=>{if(!D||!n)return;o.current?.reset();let t=!1,r=0,i=[],a=++b.current,s=async()=>{let i=++r,a=await e.status();if(t||i!==r)return;if(a.phase!==`ready`){M(!1);return}let s=a.serverInfo?.capabilities.methods??[];if(y.current=s.includes(`terminal/read`)&&s.includes(`terminal/list`),y.current){let{terminals:a}=await e.request(`terminal/list`,{threadId:n});if(t||i!==r)return;let s=v.current?.terminal.terminalId??c.current?.terminalId,l=a.find(e=>e.terminal.terminalId===s)??a.filter(e=>!e.exited).at(-1)??a.at(-1);l?v.current?.terminal.terminalId===l.terminal.terminalId?await v.current.recover():await L(l.terminal):s&&(v.current?.stop(),v.current=null,c.current=null,S(null),w(!0),o.current?.write(`\r
4
4
  [Terminal session is no longer available]\r
5
- `))}!t&&i===r&&M(!0)},l=async e=>{let n=await e;t?n():i.push(n)};return(async()=>{await l(e.onNotification(e=>{if(t)return;let r=v.current?.terminal??c.current;if(e.method===`server.warning`){e.params.replayRequired&&v.current?.recover().catch(F);return}!r||e.method!==`terminal.output`&&e.method!==`terminal.exit`||e.params.threadId!==n||e.params.terminalId!==r.terminalId||(e.method===`terminal.output`?v.current?v.current.receive(e.params.nextOffset??0):o.current?.write(e.params.data):v.current?v.current.recover().catch(F):I(e.params.exitCode))})),!t&&(w(!1),E(null),await l(e.onStatus(e=>{t||(e.phase===`ready`?s().catch(F):(r++,M(!1)))})),t||await s())})().catch(e=>{t||F(e)}),()=>{t=!0,b.current=a+1;for(let e of i)e();v.current?.stop(),v.current=null,c.current=null,S(null),M(!1),P(!1)}},[L,I,D,F,e,M,n]);let R=async()=>{if(!n||!r||N||!k)return;let t=b.current;P(!0),E(null),w(!1),o.current?.clear();try{s.current?.fit();let r=await e.request(`terminal/create`,{threadId:n,columns:Math.max(20,o.current?.cols??80),rows:Math.max(5,o.current?.rows??24)});if(t!==b.current)return;await L(r.terminal),o.current?.focus()}catch(e){t===b.current&&F(e)}finally{t===b.current&&P(!1)}},z=async()=>{let t=c.current;if(!t||N||!k)return;let n=b.current;P(!0);try{if(await e.request(`terminal/close`,{threadId:t.threadId,terminalId:t.terminalId}),n!==b.current)return;v.current?await v.current.recover():I(null)}catch(e){n===b.current&&F(e)}finally{n===b.current&&P(!1)}};return(0,f.jsxs)(`div`,{className:u.panel,"data-active":i,children:[(0,f.jsxs)(`div`,{className:u.toolbar,children:[(0,f.jsx)(`span`,{children:x?`PID ${x.pid}`:C?`Exited`:`No session`}),x?(0,f.jsx)(`button`,{type:`button`,disabled:N||!k,onClick:()=>void z(),children:`Close`}):(0,f.jsx)(`button`,{type:`button`,onClick:()=>void R(),disabled:!r||!D||!k||N,children:`Start terminal`})]}),T?(0,f.jsx)(`p`,{className:u.error,children:T}):null,(0,f.jsx)(`div`,{className:u.host,ref:a})]})}function m(e){return typeof e==`object`&&e&&`message`in e?String(e.message):e instanceof Error?e.message:String(e)}var h={entries:[],entriesTruncated:!1,git:null,diffs:[],tests:[],lastTestRun:null,file:null,draft:``,loading:!1,error:null,gitError:null,testError:null};function g(e,t){let[n,r]=(0,l.useState)(h),i=t?.id??null,a=t?.workspacePath??null,o=(0,l.useRef)(i),s=(0,l.useRef)(0),c=(0,l.useRef)(0);o.current=i;let u=(0,l.useCallback)(async()=>{let t=++s.current;if(!i){r(h);return}r(e=>({...e,loading:!0,error:null,gitError:null,testError:null}));let[n,a,c,l]=await Promise.allSettled([e.request(`file/list`,{threadId:i,depth:4,limit:750}),e.request(`git/status`,{threadId:i}),e.request(`git/diff`,{threadId:i,scope:`all`}),e.request(`test/discover`,{threadId:i})]);t!==s.current||o.current!==i||r(e=>({...e,entries:n.status===`fulfilled`?n.value.entries:[],entriesTruncated:n.status===`fulfilled`&&n.value.truncated,git:a.status===`fulfilled`?a.value.status:null,diffs:c.status===`fulfilled`?c.value.files:[],tests:l.status===`fulfilled`?l.value.commands:[],loading:!1,error:n.status===`rejected`?m(n.reason):null,gitError:a.status===`rejected`?m(a.reason):c.status===`rejected`?m(c.reason):null,testError:l.status===`rejected`?m(l.reason):null}))},[e,i]);(0,l.useEffect)(()=>{r(h),c.current+=1,u()},[u,a]);let d=(0,l.useCallback)(async t=>{if(!i)return;let n=++c.current;r(e=>({...e,loading:!0,error:null}));try{let a=await e.request(`file/read`,{threadId:i,path:t,maxBytes:128*1024});if(n!==c.current||o.current!==i)return;r(e=>({...e,file:a.file,draft:a.file.content,loading:!1}))}catch(e){if(n!==c.current||o.current!==i)return;r(t=>({...t,loading:!1,error:m(e)}))}},[e,i]),f=(0,l.useCallback)(async()=>{if(!i||!n.file||n.file.truncated)return;let t=++c.current,a=n.file.path,s=n.draft;r(e=>({...e,loading:!0,error:null}));try{let l=await e.request(`file/write`,{threadId:i,path:a,content:s,expectedSha256:n.file.sha256});if(t!==c.current||o.current!==i)return;r(e=>({...e,file:l.file,draft:e.draft===s?l.file.content:e.draft,loading:!1})),await u()}catch(e){if(t!==c.current||o.current!==i)return;r(t=>({...t,loading:!1,error:m(e)}))}},[u,e,n.draft,n.file,i]),p=(0,l.useCallback)(async(t,n)=>{if(i){r(e=>({...e,loading:!0,error:null}));try{let a=await e.request(`test/run`,{threadId:i,turnId:t,commandId:n,timeoutSeconds:600});if(o.current!==i)return;r(e=>({...e,lastTestRun:a,loading:!1,testError:null})),await u()}catch(e){if(o.current!==i)return;r(t=>({...t,loading:!1,testError:m(e)}))}}},[u,e,i]),g=(0,l.useCallback)(async t=>{if(i){r(e=>({...e,loading:!0,error:null}));try{if(await e.request(`git/discard`,{threadId:i,path:t.path,expectedRevision:t.revision}),o.current!==i)return;r(e=>({...e,loading:!1})),await u()}catch(e){if(o.current!==i)return;r(t=>({...t,loading:!1,error:m(e)}))}}},[u,e,i]),_=(0,l.useCallback)(async()=>{if(i){r(e=>({...e,loading:!0,error:null}));try{if(await e.request(`git/worktree/create`,{threadId:i}),o.current!==i)return;r(e=>({...e,loading:!1})),await u()}catch(e){if(o.current!==i)return;r(t=>({...t,loading:!1,error:m(e)}))}}},[u,e,i]),v=(0,l.useCallback)(async(t,n=!1)=>{if(i){r(e=>({...e,loading:!0,error:null}));try{if(await e.request(`git/worktree/remove`,{threadId:i,disposition:t,force:n,deleteBranch:!1}),o.current!==i)return;r(e=>({...e,loading:!1})),await u()}catch(e){if(o.current!==i)return;r(t=>({...t,loading:!1,error:m(e)}))}}},[u,e,i]);return(0,l.useMemo)(()=>({...n,refresh:u,openFile:d,setDraft:e=>r(t=>({...t,draft:e})),saveFile:f,runTest:p,discardChange:g,createWorktree:_,resolveWorktree:v}),[_,g,d,u,v,p,f,n])}var _={inspector:`_inspector_1lwv1_1`,tabs:`_tabs_1lwv1_12`,close:`_close_1lwv1_46`,panel:`_panel_1lwv1_64`,content:`_content_1lwv1_70`,artifactPreview:`_artifactPreview_1lwv1_96`,error:`_error_1lwv1_109`,heading:`_heading_1lwv1_125`,outlinedAction:`_outlinedAction_1lwv1_138`,worktreeControl:`_worktreeControl_1lwv1_139`,fileEditor:`_fileEditor_1lwv1_140`,eyebrow:`_eyebrow_1lwv1_158`,diffList:`_diffList_1lwv1_200`,fileDiff:`_fileDiff_1lwv1_205`,diffActions:`_diffActions_1lwv1_238`,binaryNotice:`_binaryNotice_1lwv1_259`,diffHunk:`_diffHunk_1lwv1_266`,hunkHeader:`_hunkHeader_1lwv1_270`,diffLine:`_diffLine_1lwv1_278`,filesView:`_filesView_1lwv1_308`,fileTree:`_fileTree_1lwv1_315`,treeNotice:`_treeNotice_1lwv1_347`,editorLoading:`_editorLoading_1lwv1_389`,editorNotice:`_editorNotice_1lwv1_396`,runStatus:`_runStatus_1lwv1_410`,panelError:`_panelError_1lwv1_429`,artifactList:`_artifactList_1lwv1_438`,testList:`_testList_1lwv1_487`,note:`_note_1lwv1_511`,testResult:`_testResult_1lwv1_521`,detailShortcut:`_detailShortcut_1lwv1_565`,metadata:`_metadata_1lwv1_582`,empty:`_empty_1lwv1_605`,emptyRule:`_emptyRule_1lwv1_625`};function v({label:e,compact:t=!1}){return(0,f.jsxs)(`div`,{className:_.empty,"data-compact":t,children:[(0,f.jsx)(`span`,{className:_.emptyRule,"aria-hidden":`true`}),(0,f.jsx)(`p`,{children:e})]})}function y(e){return{py:`python`,ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,rs:`rust`,json:`json`,md:`markdown`,css:`css`,html:`html`,yaml:`yaml`,yml:`yaml`,toml:`ini`}[e.split(`.`).pop()?.toLowerCase()??``]??`plaintext`}function b(e){return e===null?`directory`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/(1024*1024)).toFixed(1)} MiB`}function x({runtime:e,workflow:t,artifacts:n}){let[r,i]=(0,l.useState)(null),[a,o]=(0,l.useState)(null),s=async t=>{o(null);try{let n=await e.request(`artifact/read`,{artifactId:t.id});i({id:t.id,content:n.content,directory:n.directory,truncated:n.truncated})}catch(e){o(e instanceof Error?e.message:String(e))}};return(0,f.jsxs)(`div`,{className:_.content,children:[(0,f.jsxs)(`div`,{className:_.heading,children:[(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`p`,{className:_.eyebrow,children:`Workflow outputs`}),(0,f.jsx)(`h2`,{children:t?`Attempt ${t.attempt}`:`Artifacts`})]}),t?(0,f.jsx)(`span`,{className:_.runStatus,"data-status":t.status,children:t.status}):null]}),t?.errorMessage?(0,f.jsx)(`p`,{className:_.panelError,children:t.errorMessage}):null,a?(0,f.jsx)(`p`,{className:_.panelError,children:a}):null,n.length?(0,f.jsx)(`div`,{className:_.artifactList,children:n.map(e=>(0,f.jsxs)(`button`,{type:`button`,"data-active":r?.id===e.id,onClick:()=>void s(e),children:[(0,f.jsx)(`span`,{children:e.kind}),(0,f.jsx)(`strong`,{children:e.name}),(0,f.jsx)(`small`,{children:b(e.byteSize)})]},e.id))}):(0,f.jsx)(v,{label:`Verified workflow outputs will appear here.`,compact:!0}),r?(0,f.jsxs)(`div`,{className:_.artifactPreview,children:[r.directory?(0,f.jsx)(`p`,{children:`This artifact is a generated code directory. Browse it from Files.`}):r.content===null?(0,f.jsx)(`p`,{children:`Binary artifacts are recorded but not rendered as text.`}):(0,f.jsx)(`pre`,{children:r.content}),r.truncated?(0,f.jsx)(`small`,{children:`Preview truncated at 128 KiB.`}):null]}):null]})}function S({thread:e,trusted:t,hasActiveTurn:n,workbench:r,onOpenFile:i}){let a=async()=>{let e=!!r.git?.entries.length;e&&!await o(`This worktree has uncommitted changes. Permanently remove it and discard them?`,{confirmLabel:`Remove worktree`})||await r.resolveWorktree(`clean`,e)},s=async(e,t)=>{let n=r.diffs.find(n=>n.path===e&&n.revision===t);!n||!await o(`Discard every staged and unstaged change to ${e}? This cannot be undone.`,{confirmLabel:`Discard changes`})||await r.discardChange(n)};return(0,f.jsxs)(`div`,{className:_.content,children:[(0,f.jsxs)(`div`,{className:_.heading,children:[(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`p`,{className:_.eyebrow,children:`Git workspace`}),(0,f.jsx)(`h2`,{children:r.git?.branch??`No Git branch`})]}),(0,f.jsx)(`button`,{type:`button`,onClick:()=>void r.refresh(),children:`Refresh`})]}),e?.worktreePath?(0,f.jsxs)(`div`,{className:_.worktreeControl,children:[(0,f.jsx)(`strong`,{children:`Isolated worktree`}),(0,f.jsx)(`span`,{children:e.worktreePath}),(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`button`,{type:`button`,disabled:!t||n||r.loading,onClick:()=>void r.resolveWorktree(`keep`),children:`Keep worktree`}),(0,f.jsx)(`button`,{type:`button`,disabled:!t||n||r.loading,onClick:()=>void a(),children:`Clean worktree`})]})]}):(0,f.jsx)(`button`,{className:_.outlinedAction,type:`button`,onClick:()=>void r.createWorktree(),disabled:!t||n||!r.git||r.loading,children:`Isolate this Session in a worktree`}),r.gitError?(0,f.jsx)(v,{label:r.gitError,compact:!0}):r.diffs.length?(0,f.jsx)(`div`,{className:_.diffList,children:r.diffs.map(e=>(0,f.jsxs)(`section`,{className:_.fileDiff,children:[(0,f.jsxs)(`header`,{children:[(0,f.jsx)(`strong`,{children:e.path}),(0,f.jsxs)(`span`,{children:[(0,f.jsxs)(`b`,{children:[`+`,e.additions]}),` `,(0,f.jsxs)(`i`,{children:[`−`,e.deletions]})]})]}),(0,f.jsxs)(`div`,{className:_.diffActions,children:[(0,f.jsx)(`button`,{type:`button`,disabled:e.binary||e.status===`deleted`,onClick:()=>i(e.path),children:`Open in editor`}),(0,f.jsx)(`button`,{type:`button`,disabled:!t||n||r.loading,onClick:()=>void s(e.path,e.revision),children:`Discard file`})]}),e.binary?(0,f.jsx)(`p`,{className:_.binaryNotice,children:`Binary file changed`}):e.hunks.map((t,n)=>(0,f.jsxs)(`div`,{className:_.diffHunk,children:[(0,f.jsxs)(`div`,{className:_.hunkHeader,children:[`−`,t.oldStart,`,`,t.oldLines,` +`,t.newStart,`,`,t.newLines]}),t.lines.map((e,t)=>(0,f.jsxs)(`div`,{className:_.diffLine,"data-kind":e.kind,children:[(0,f.jsx)(`span`,{children:e.oldLine??``}),(0,f.jsx)(`span`,{children:e.newLine??``}),(0,f.jsxs)(`code`,{children:[e.kind===`addition`?`+`:e.kind===`deletion`?`−`:` `,e.text]})]},`${e.kind}-${t}`))]},`${e.path}-${n}`))]},e.path))}):(0,f.jsx)(v,{label:`Working tree is clean.`,compact:!0}),n?(0,f.jsx)(`p`,{className:_.note,children:`File changes and worktree operations are locked while a Turn is active.`}):null]})}function C({selected:e,items:t,onSelectItem:n}){return e?(0,f.jsxs)(`div`,{className:_.content,children:[(0,f.jsx)(`p`,{className:_.eyebrow,children:s(e).stage}),(0,f.jsx)(`h2`,{children:e.summary}),(0,f.jsxs)(`dl`,{className:_.metadata,children:[(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`dt`,{children:`Kind`}),(0,f.jsx)(`dd`,{children:e.kind.replaceAll(`_`,` `)})]}),(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`dt`,{children:`Status`}),(0,f.jsx)(`dd`,{children:e.status.replaceAll(`_`,` `)})]}),(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`dt`,{children:`Item`}),(0,f.jsx)(`dd`,{children:e.id})]}),(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`dt`,{children:`Turn`}),(0,f.jsx)(`dd`,{children:e.turnId})]})]}),(0,f.jsx)(`h3`,{children:`Structured payload`}),(0,f.jsx)(`pre`,{children:JSON.stringify(e.payload,null,2)})]}):(0,f.jsxs)(`div`,{className:_.content,children:[(0,f.jsx)(v,{label:`Select an activity to inspect it.`,compact:!0}),t.slice(-5).map(e=>(0,f.jsx)(`button`,{className:_.detailShortcut,type:`button`,onClick:()=>n(e.id),children:e.summary},e.id))]})}var w=(0,l.lazy)(()=>t(()=>import(`./LocalMonacoEditor-DCwkx7R9.js`),__vite__mapDeps([1,2,3,4,5,6])));function T({trusted:e,hasActiveTurn:t,workbench:n,onDownload:r}){let[i,a]=(0,l.useState)(null),s=c(),u=!!(n.file&&n.draft!==n.file.content),d=async e=>{u&&!await o(`Discard the unsaved editor draft and open another file? Your edits cannot be recovered.`,{confirmLabel:`Discard draft`})||await n.openFile(e)};return(0,f.jsxs)(`div`,{className:_.filesView,children:[(0,f.jsxs)(`div`,{className:_.fileTree,"aria-label":`Workspace files`,children:[n.entries.map(e=>(0,f.jsxs)(`button`,{type:`button`,disabled:e.kind!==`file`,onClick:()=>void d(e.path),style:{paddingLeft:`${10+(e.path.split(`/`).length-1)*10}px`},children:[(0,f.jsx)(`span`,{"aria-hidden":`true`,children:e.kind===`directory`?`▾`:`·`}),e.name]},e.path)),n.entriesTruncated?(0,f.jsx)(`p`,{className:_.treeNotice,children:`File list limited to the first 750 entries.`}):null]}),n.file?(0,f.jsxs)(`div`,{className:_.fileEditor,children:[(0,f.jsxs)(`header`,{children:[(0,f.jsx)(`span`,{title:n.file.path,children:n.file.path}),(0,f.jsxs)(`div`,{children:[r&&(0,f.jsx)(`button`,{type:`button`,onClick:()=>{a(null),r(n.file.path).catch(e=>a(String(e)))},children:`Download`}),n.file.truncated?(0,f.jsx)(`small`,{children:`Truncated · read-only`}):u?(0,f.jsx)(`small`,{children:`Unsaved`}):null,(0,f.jsx)(`button`,{type:`button`,onClick:()=>void n.saveFile(),disabled:!e||t||n.file.truncated||!u||n.loading,children:`Save`})]})]}),i&&(0,f.jsx)(`p`,{role:`alert`,children:i}),(0,f.jsx)(l.Suspense,{fallback:(0,f.jsx)(`div`,{className:_.editorLoading,children:`Loading editor…`}),children:(0,f.jsx)(w,{height:`100%`,language:y(n.file.path),value:n.draft,onChange:e=>n.setDraft(e??``),theme:s?`vs-dark`:`vs-light`,options:{minimap:{enabled:!1},readOnly:!e||t||n.file.truncated,fontSize:12,lineHeight:20,renderLineHighlight:`line`,scrollBeyondLastLine:!1,wordWrap:`on`,automaticLayout:!0}})}),t?(0,f.jsx)(`p`,{className:_.editorNotice,children:`Editing is locked until the active Turn finishes.`}):null]}):(0,f.jsx)(v,{label:`Select a text file to inspect it.`})]})}function E({trusted:e,hasActiveTurn:t,latestTurn:n,workbench:r}){return(0,f.jsxs)(`div`,{className:_.content,children:[(0,f.jsx)(`p`,{className:_.eyebrow,children:`Verification`}),(0,f.jsx)(`h2`,{children:`Project test commands`}),r.tests.length?(0,f.jsx)(`div`,{className:_.testList,children:r.tests.map(i=>(0,f.jsxs)(`button`,{type:`button`,disabled:!e||t||!n||r.loading,onClick:()=>n&&void r.runTest(n.id,i.id),children:[(0,f.jsx)(`strong`,{children:i.label}),(0,f.jsx)(`code`,{children:i.argv.join(` `)})]},i.id))}):(0,f.jsx)(v,{label:`No supported test command was detected.`,compact:!0}),r.testError?(0,f.jsx)(`p`,{className:_.panelError,children:r.testError}):null,n?t?(0,f.jsx)(`p`,{className:_.note,children:`Verification is locked while a Turn is active.`}):null:(0,f.jsx)(`p`,{className:_.note,children:`Complete a Turn before attaching a durable TestResult.`}),r.lastTestRun?(0,f.jsxs)(`section`,{className:_.testResult,"data-passed":r.lastTestRun.exitCode===0&&!r.lastTestRun.timedOut,"aria-live":`polite`,children:[(0,f.jsxs)(`header`,{children:[(0,f.jsx)(`strong`,{children:r.lastTestRun.command.label}),(0,f.jsxs)(`span`,{children:[r.lastTestRun.timedOut?`Timed out`:`Exit ${r.lastTestRun.exitCode??`unknown`}`,` · `,r.lastTestRun.durationMs,` ms`]})]}),r.lastTestRun.stdout?(0,f.jsx)(`pre`,{children:r.lastTestRun.stdout}):null,r.lastTestRun.stderr?(0,f.jsx)(`pre`,{children:r.lastTestRun.stderr}):null,r.lastTestRun.outputTruncated?(0,f.jsx)(`small`,{children:`Output was truncated to the bounded tail.`}):null]}):null]})}var D=[`changes`,`files`,`artifacts`,`tests`,`terminal`,`details`];function O({runtime:e,thread:t,trusted:n,turns:r,items:o,workflows:s,artifacts:c,selectedItemId:u,tab:d,onSelectItem:m,onTabChange:h,onDirtyChange:v,onClose:y}){let{t:b}=a(),w=g(e,t),O=o.find(e=>e.id===u)??null,k=!!(w.file&&w.draft!==w.file.content),A=(0,l.useMemo)(()=>[...r].sort((e,t)=>t.ordinal-e.ordinal).find(e=>[`completed`,`failed`,`interrupted`].includes(e.status))??null,[r]),j=(0,l.useMemo)(()=>[...s].sort((e,t)=>t.updatedAt.localeCompare(e.updatedAt))[0]??null,[s]),M=r.some(e=>[`queued`,`running`,`waiting_approval`].includes(e.status));(0,l.useEffect)(()=>{if(!k)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[k]),(0,l.useEffect)(()=>(v(k),()=>v(!1)),[k,v]);let N=e=>{h(`files`),w.openFile(e)},P=e=>e===`changes`?w.diffs.length||null:e===`artifacts`&&c.length||null,F={changes:b(`inspector.tab.changes`,`changes`),files:b(`inspector.tab.files`,`files`),artifacts:b(`inspector.tab.artifacts`,`artifacts`),tests:b(`inspector.tab.tests`,`tests`),terminal:b(`inspector.tab.terminal`,`terminal`),details:b(`inspector.tab.details`,`details`)};return(0,f.jsxs)(`aside`,{className:_.inspector,"aria-label":b(`inspector.label`,`Inspector`),children:[(0,f.jsx)(`div`,{className:_.tabs,role:`tablist`,"aria-label":b(`inspector.views`,`Inspector views`),children:D.map(e=>(0,f.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":d===e,onClick:()=>h(e),children:[F[e]??e,P(e)?` ${P(e)}`:``]},e))}),(0,f.jsx)(`button`,{className:_.close,type:`button`,onClick:y,"aria-label":b(`inspector.closeReview`,`Close review panel`),children:(0,f.jsx)(i,{size:16})}),(0,f.jsxs)(`div`,{className:_.panel,children:[w.error?(0,f.jsx)(`p`,{className:_.error,children:w.error}):null,d===`changes`?(0,f.jsx)(S,{thread:t,trusted:n,hasActiveTurn:M,workbench:w,onOpenFile:N}):null,d===`files`?(0,f.jsx)(T,{onDownload:e.downloadFile&&t?n=>e.downloadFile(t.id,n):void 0,trusted:n,hasActiveTurn:M,workbench:w}):null,d===`artifacts`?(0,f.jsx)(x,{runtime:e,workflow:j,artifacts:c},t?.id??`no-thread`):null,d===`tests`?(0,f.jsx)(E,{trusted:n,hasActiveTurn:M,latestTurn:A,workbench:w}):null,(0,f.jsx)(p,{runtime:e,threadId:t?.id??null,enabled:n,active:d===`terminal`},t?.id??`no-thread`),d===`details`?(0,f.jsx)(C,{selected:O,items:o,onSelectItem:m}):null]})]})}export{O as Inspector};
5
+ `))}!t&&i===r&&M(!0)},l=async e=>{let n=await e;t?n():i.push(n)};return(async()=>{await l(e.onNotification(e=>{if(t)return;let r=v.current?.terminal??c.current;if(e.method===`server.warning`){e.params.replayRequired&&v.current?.recover().catch(F);return}!r||e.method!==`terminal.output`&&e.method!==`terminal.exit`||e.params.threadId!==n||e.params.terminalId!==r.terminalId||(e.method===`terminal.output`?v.current?v.current.receive(e.params.nextOffset??0):o.current?.write(e.params.data):v.current?v.current.recover().catch(F):I(e.params.exitCode))})),!t&&(w(!1),E(null),await l(e.onStatus(e=>{t||(e.phase===`ready`?s().catch(F):(r++,M(!1)))})),t||await s())})().catch(e=>{t||F(e)}),()=>{t=!0,b.current=a+1;for(let e of i)e();v.current?.stop(),v.current=null,c.current=null,S(null),M(!1),P(!1)}},[L,I,D,F,e,M,n]);let R=async()=>{if(!n||!r||N||!k)return;let t=b.current;P(!0),E(null),w(!1),o.current?.clear();try{s.current?.fit();let r=await e.request(`terminal/create`,{threadId:n,columns:Math.max(20,o.current?.cols??80),rows:Math.max(5,o.current?.rows??24)});if(t!==b.current)return;await L(r.terminal),o.current?.focus()}catch(e){t===b.current&&F(e)}finally{t===b.current&&P(!1)}},z=async()=>{let t=c.current;if(!t||N||!k)return;let n=b.current;P(!0);try{if(await e.request(`terminal/close`,{threadId:t.threadId,terminalId:t.terminalId}),n!==b.current)return;v.current?await v.current.recover():I(null)}catch(e){n===b.current&&F(e)}finally{n===b.current&&P(!1)}};return(0,f.jsxs)(`div`,{className:u.panel,"data-active":i,children:[(0,f.jsxs)(`div`,{className:u.toolbar,children:[(0,f.jsx)(`span`,{children:x?`PID ${x.pid}`:C?`Exited`:`No session`}),x?(0,f.jsx)(`button`,{type:`button`,disabled:N||!k,onClick:()=>void z(),children:`Close`}):(0,f.jsx)(`button`,{type:`button`,onClick:()=>void R(),disabled:!r||!D||!k||N,children:`Start terminal`})]}),T?(0,f.jsx)(`p`,{className:u.error,children:T}):null,(0,f.jsx)(`div`,{className:u.host,ref:a})]})}function m(e){return typeof e==`object`&&e&&`message`in e?String(e.message):e instanceof Error?e.message:String(e)}var h={entries:[],entriesTruncated:!1,git:null,diffs:[],tests:[],lastTestRun:null,file:null,draft:``,loading:!1,error:null,gitError:null,testError:null};function g(e,t){let[n,r]=(0,l.useState)(h),i=t?.id??null,a=t?.workspacePath??null,o=(0,l.useRef)(i),s=(0,l.useRef)(0),c=(0,l.useRef)(0);o.current=i;let u=(0,l.useCallback)(async()=>{let t=++s.current;if(!i){r(h);return}r(e=>({...e,loading:!0,error:null,gitError:null,testError:null}));let[n,a,c,l]=await Promise.allSettled([e.request(`file/list`,{threadId:i,depth:4,limit:750}),e.request(`git/status`,{threadId:i}),e.request(`git/diff`,{threadId:i,scope:`all`}),e.request(`test/discover`,{threadId:i})]);t!==s.current||o.current!==i||r(e=>({...e,entries:n.status===`fulfilled`?n.value.entries:[],entriesTruncated:n.status===`fulfilled`&&n.value.truncated,git:a.status===`fulfilled`?a.value.status:null,diffs:c.status===`fulfilled`?c.value.files:[],tests:l.status===`fulfilled`?l.value.commands:[],loading:!1,error:n.status===`rejected`?m(n.reason):null,gitError:a.status===`rejected`?m(a.reason):c.status===`rejected`?m(c.reason):null,testError:l.status===`rejected`?m(l.reason):null}))},[e,i]);(0,l.useEffect)(()=>{r(h),c.current+=1,u()},[u,a]);let d=(0,l.useCallback)(async t=>{if(!i)return;let n=++c.current;r(e=>({...e,loading:!0,error:null}));try{let a=await e.request(`file/read`,{threadId:i,path:t,maxBytes:128*1024});if(n!==c.current||o.current!==i)return;r(e=>({...e,file:a.file,draft:a.file.content,loading:!1}))}catch(e){if(n!==c.current||o.current!==i)return;r(t=>({...t,loading:!1,error:m(e)}))}},[e,i]),f=(0,l.useCallback)(async()=>{if(!i||!n.file||n.file.truncated)return;let t=++c.current,a=n.file.path,s=n.draft;r(e=>({...e,loading:!0,error:null}));try{let l=await e.request(`file/write`,{threadId:i,path:a,content:s,expectedSha256:n.file.sha256});if(t!==c.current||o.current!==i)return;r(e=>({...e,file:l.file,draft:e.draft===s?l.file.content:e.draft,loading:!1})),await u()}catch(e){if(t!==c.current||o.current!==i)return;r(t=>({...t,loading:!1,error:m(e)}))}},[u,e,n.draft,n.file,i]),p=(0,l.useCallback)(async(t,n)=>{if(i){r(e=>({...e,loading:!0,error:null}));try{let a=await e.request(`test/run`,{threadId:i,turnId:t,commandId:n,timeoutSeconds:600});if(o.current!==i)return;r(e=>({...e,lastTestRun:a,loading:!1,testError:null})),await u()}catch(e){if(o.current!==i)return;r(t=>({...t,loading:!1,testError:m(e)}))}}},[u,e,i]),g=(0,l.useCallback)(async t=>{if(i){r(e=>({...e,loading:!0,error:null}));try{if(await e.request(`git/discard`,{threadId:i,path:t.path,expectedRevision:t.revision}),o.current!==i)return;r(e=>({...e,loading:!1})),await u()}catch(e){if(o.current!==i)return;r(t=>({...t,loading:!1,error:m(e)}))}}},[u,e,i]),_=(0,l.useCallback)(async()=>{if(i){r(e=>({...e,loading:!0,error:null}));try{if(await e.request(`git/worktree/create`,{threadId:i}),o.current!==i)return;r(e=>({...e,loading:!1})),await u()}catch(e){if(o.current!==i)return;r(t=>({...t,loading:!1,error:m(e)}))}}},[u,e,i]),v=(0,l.useCallback)(async(t,n=!1)=>{if(i){r(e=>({...e,loading:!0,error:null}));try{if(await e.request(`git/worktree/remove`,{threadId:i,disposition:t,force:n,deleteBranch:!1}),o.current!==i)return;r(e=>({...e,loading:!1})),await u()}catch(e){if(o.current!==i)return;r(t=>({...t,loading:!1,error:m(e)}))}}},[u,e,i]);return(0,l.useMemo)(()=>({...n,refresh:u,openFile:d,setDraft:e=>r(t=>({...t,draft:e})),saveFile:f,runTest:p,discardChange:g,createWorktree:_,resolveWorktree:v}),[_,g,d,u,v,p,f,n])}var _={inspector:`_inspector_1lwv1_1`,tabs:`_tabs_1lwv1_12`,close:`_close_1lwv1_46`,panel:`_panel_1lwv1_64`,content:`_content_1lwv1_70`,artifactPreview:`_artifactPreview_1lwv1_96`,error:`_error_1lwv1_109`,heading:`_heading_1lwv1_125`,outlinedAction:`_outlinedAction_1lwv1_138`,worktreeControl:`_worktreeControl_1lwv1_139`,fileEditor:`_fileEditor_1lwv1_140`,eyebrow:`_eyebrow_1lwv1_158`,diffList:`_diffList_1lwv1_200`,fileDiff:`_fileDiff_1lwv1_205`,diffActions:`_diffActions_1lwv1_238`,binaryNotice:`_binaryNotice_1lwv1_259`,diffHunk:`_diffHunk_1lwv1_266`,hunkHeader:`_hunkHeader_1lwv1_270`,diffLine:`_diffLine_1lwv1_278`,filesView:`_filesView_1lwv1_308`,fileTree:`_fileTree_1lwv1_315`,treeNotice:`_treeNotice_1lwv1_347`,editorLoading:`_editorLoading_1lwv1_389`,editorNotice:`_editorNotice_1lwv1_396`,runStatus:`_runStatus_1lwv1_410`,panelError:`_panelError_1lwv1_429`,artifactList:`_artifactList_1lwv1_438`,testList:`_testList_1lwv1_487`,note:`_note_1lwv1_511`,testResult:`_testResult_1lwv1_521`,detailShortcut:`_detailShortcut_1lwv1_565`,metadata:`_metadata_1lwv1_582`,empty:`_empty_1lwv1_605`,emptyRule:`_emptyRule_1lwv1_625`};function v({label:e,compact:t=!1}){return(0,f.jsxs)(`div`,{className:_.empty,"data-compact":t,children:[(0,f.jsx)(`span`,{className:_.emptyRule,"aria-hidden":`true`}),(0,f.jsx)(`p`,{children:e})]})}function y(e){return{py:`python`,ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,rs:`rust`,json:`json`,md:`markdown`,css:`css`,html:`html`,yaml:`yaml`,yml:`yaml`,toml:`ini`}[e.split(`.`).pop()?.toLowerCase()??``]??`plaintext`}function b(e){return e===null?`directory`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KiB`:`${(e/(1024*1024)).toFixed(1)} MiB`}function x({runtime:e,workflow:t,artifacts:n}){let[r,i]=(0,l.useState)(null),[a,o]=(0,l.useState)(null),s=async t=>{o(null);try{let n=await e.request(`artifact/read`,{artifactId:t.id});i({id:t.id,content:n.content,directory:n.directory,truncated:n.truncated})}catch(e){o(e instanceof Error?e.message:String(e))}};return(0,f.jsxs)(`div`,{className:_.content,children:[(0,f.jsxs)(`div`,{className:_.heading,children:[(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`p`,{className:_.eyebrow,children:`Workflow outputs`}),(0,f.jsx)(`h2`,{children:t?`Attempt ${t.attempt}`:`Artifacts`})]}),t?(0,f.jsx)(`span`,{className:_.runStatus,"data-status":t.status,children:t.status}):null]}),t?.errorMessage?(0,f.jsx)(`p`,{className:_.panelError,children:t.errorMessage}):null,a?(0,f.jsx)(`p`,{className:_.panelError,children:a}):null,n.length?(0,f.jsx)(`div`,{className:_.artifactList,children:n.map(e=>(0,f.jsxs)(`button`,{type:`button`,"data-active":r?.id===e.id,onClick:()=>void s(e),children:[(0,f.jsx)(`span`,{children:e.kind}),(0,f.jsx)(`strong`,{children:e.name}),(0,f.jsx)(`small`,{children:b(e.byteSize)})]},e.id))}):(0,f.jsx)(v,{label:`Verified workflow outputs will appear here.`,compact:!0}),r?(0,f.jsxs)(`div`,{className:_.artifactPreview,children:[r.directory?(0,f.jsx)(`p`,{children:`This artifact is a generated code directory. Browse it from Files.`}):r.content===null?(0,f.jsx)(`p`,{children:`Binary artifacts are recorded but not rendered as text.`}):(0,f.jsx)(`pre`,{children:r.content}),r.truncated?(0,f.jsx)(`small`,{children:`Preview truncated at 128 KiB.`}):null]}):null]})}function S({thread:e,trusted:t,hasActiveTurn:n,workbench:r,onOpenFile:i}){let a=async()=>{let e=!!r.git?.entries.length;e&&!await o(`This worktree has uncommitted changes. Permanently remove it and discard them?`,{confirmLabel:`Remove worktree`})||await r.resolveWorktree(`clean`,e)},s=async(e,t)=>{let n=r.diffs.find(n=>n.path===e&&n.revision===t);!n||!await o(`Discard every staged and unstaged change to ${e}? This cannot be undone.`,{confirmLabel:`Discard changes`})||await r.discardChange(n)};return(0,f.jsxs)(`div`,{className:_.content,children:[(0,f.jsxs)(`div`,{className:_.heading,children:[(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`p`,{className:_.eyebrow,children:`Git workspace`}),(0,f.jsx)(`h2`,{children:r.git?.branch??`No Git branch`})]}),(0,f.jsx)(`button`,{type:`button`,onClick:()=>void r.refresh(),children:`Refresh`})]}),e?.worktreePath?(0,f.jsxs)(`div`,{className:_.worktreeControl,children:[(0,f.jsx)(`strong`,{children:`Isolated worktree`}),(0,f.jsx)(`span`,{children:e.worktreePath}),(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`button`,{type:`button`,disabled:!t||n||r.loading,onClick:()=>void r.resolveWorktree(`keep`),children:`Keep worktree`}),(0,f.jsx)(`button`,{type:`button`,disabled:!t||n||r.loading,onClick:()=>void a(),children:`Clean worktree`})]})]}):(0,f.jsx)(`button`,{className:_.outlinedAction,type:`button`,onClick:()=>void r.createWorktree(),disabled:!t||n||!r.git||r.loading,children:`Isolate this Session in a worktree`}),r.gitError?(0,f.jsx)(v,{label:r.gitError,compact:!0}):r.diffs.length?(0,f.jsx)(`div`,{className:_.diffList,children:r.diffs.map(e=>(0,f.jsxs)(`section`,{className:_.fileDiff,children:[(0,f.jsxs)(`header`,{children:[(0,f.jsx)(`strong`,{children:e.path}),(0,f.jsxs)(`span`,{children:[(0,f.jsxs)(`b`,{children:[`+`,e.additions]}),` `,(0,f.jsxs)(`i`,{children:[`−`,e.deletions]})]})]}),(0,f.jsxs)(`div`,{className:_.diffActions,children:[(0,f.jsx)(`button`,{type:`button`,disabled:e.binary||e.status===`deleted`,onClick:()=>i(e.path),children:`Open in editor`}),(0,f.jsx)(`button`,{type:`button`,disabled:!t||n||r.loading,onClick:()=>void s(e.path,e.revision),children:`Discard file`})]}),e.binary?(0,f.jsx)(`p`,{className:_.binaryNotice,children:`Binary file changed`}):e.hunks.map((t,n)=>(0,f.jsxs)(`div`,{className:_.diffHunk,children:[(0,f.jsxs)(`div`,{className:_.hunkHeader,children:[`−`,t.oldStart,`,`,t.oldLines,` +`,t.newStart,`,`,t.newLines]}),t.lines.map((e,t)=>(0,f.jsxs)(`div`,{className:_.diffLine,"data-kind":e.kind,children:[(0,f.jsx)(`span`,{children:e.oldLine??``}),(0,f.jsx)(`span`,{children:e.newLine??``}),(0,f.jsxs)(`code`,{children:[e.kind===`addition`?`+`:e.kind===`deletion`?`−`:` `,e.text]})]},`${e.kind}-${t}`))]},`${e.path}-${n}`))]},e.path))}):(0,f.jsx)(v,{label:`Working tree is clean.`,compact:!0}),n?(0,f.jsx)(`p`,{className:_.note,children:`File changes and worktree operations are locked while a Turn is active.`}):null]})}function C({selected:e,items:t,onSelectItem:n}){return e?(0,f.jsxs)(`div`,{className:_.content,children:[(0,f.jsx)(`p`,{className:_.eyebrow,children:s(e).stage}),(0,f.jsx)(`h2`,{children:e.summary}),(0,f.jsxs)(`dl`,{className:_.metadata,children:[(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`dt`,{children:`Kind`}),(0,f.jsx)(`dd`,{children:e.kind.replaceAll(`_`,` `)})]}),(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`dt`,{children:`Status`}),(0,f.jsx)(`dd`,{children:e.status.replaceAll(`_`,` `)})]}),(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`dt`,{children:`Item`}),(0,f.jsx)(`dd`,{children:e.id})]}),(0,f.jsxs)(`div`,{children:[(0,f.jsx)(`dt`,{children:`Turn`}),(0,f.jsx)(`dd`,{children:e.turnId})]})]}),(0,f.jsx)(`h3`,{children:`Structured payload`}),(0,f.jsx)(`pre`,{children:JSON.stringify(e.payload,null,2)})]}):(0,f.jsxs)(`div`,{className:_.content,children:[(0,f.jsx)(v,{label:`Select an activity to inspect it.`,compact:!0}),t.slice(-5).map(e=>(0,f.jsx)(`button`,{className:_.detailShortcut,type:`button`,onClick:()=>n(e.id),children:e.summary},e.id))]})}var w=(0,l.lazy)(()=>t(()=>import(`./LocalMonacoEditor-DCuhGEPh.js`),__vite__mapDeps([1,2,3,4,5,6])));function T({trusted:e,hasActiveTurn:t,workbench:n,onDownload:r}){let[i,a]=(0,l.useState)(null),s=c(),u=!!(n.file&&n.draft!==n.file.content),d=async e=>{u&&!await o(`Discard the unsaved editor draft and open another file? Your edits cannot be recovered.`,{confirmLabel:`Discard draft`})||await n.openFile(e)};return(0,f.jsxs)(`div`,{className:_.filesView,children:[(0,f.jsxs)(`div`,{className:_.fileTree,"aria-label":`Workspace files`,children:[n.entries.map(e=>(0,f.jsxs)(`button`,{type:`button`,disabled:e.kind!==`file`,onClick:()=>void d(e.path),style:{paddingLeft:`${10+(e.path.split(`/`).length-1)*10}px`},children:[(0,f.jsx)(`span`,{"aria-hidden":`true`,children:e.kind===`directory`?`▾`:`·`}),e.name]},e.path)),n.entriesTruncated?(0,f.jsx)(`p`,{className:_.treeNotice,children:`File list limited to the first 750 entries.`}):null]}),n.file?(0,f.jsxs)(`div`,{className:_.fileEditor,children:[(0,f.jsxs)(`header`,{children:[(0,f.jsx)(`span`,{title:n.file.path,children:n.file.path}),(0,f.jsxs)(`div`,{children:[r&&(0,f.jsx)(`button`,{type:`button`,onClick:()=>{a(null),r(n.file.path).catch(e=>a(String(e)))},children:`Download`}),n.file.truncated?(0,f.jsx)(`small`,{children:`Truncated · read-only`}):u?(0,f.jsx)(`small`,{children:`Unsaved`}):null,(0,f.jsx)(`button`,{type:`button`,onClick:()=>void n.saveFile(),disabled:!e||t||n.file.truncated||!u||n.loading,children:`Save`})]})]}),i&&(0,f.jsx)(`p`,{role:`alert`,children:i}),(0,f.jsx)(l.Suspense,{fallback:(0,f.jsx)(`div`,{className:_.editorLoading,children:`Loading editor…`}),children:(0,f.jsx)(w,{height:`100%`,language:y(n.file.path),value:n.draft,onChange:e=>n.setDraft(e??``),theme:s?`vs-dark`:`vs-light`,options:{minimap:{enabled:!1},readOnly:!e||t||n.file.truncated,fontSize:12,lineHeight:20,renderLineHighlight:`line`,scrollBeyondLastLine:!1,wordWrap:`on`,automaticLayout:!0}})}),t?(0,f.jsx)(`p`,{className:_.editorNotice,children:`Editing is locked until the active Turn finishes.`}):null]}):(0,f.jsx)(v,{label:`Select a text file to inspect it.`})]})}function E({trusted:e,hasActiveTurn:t,latestTurn:n,workbench:r}){return(0,f.jsxs)(`div`,{className:_.content,children:[(0,f.jsx)(`p`,{className:_.eyebrow,children:`Verification`}),(0,f.jsx)(`h2`,{children:`Project test commands`}),r.tests.length?(0,f.jsx)(`div`,{className:_.testList,children:r.tests.map(i=>(0,f.jsxs)(`button`,{type:`button`,disabled:!e||t||!n||r.loading,onClick:()=>n&&void r.runTest(n.id,i.id),children:[(0,f.jsx)(`strong`,{children:i.label}),(0,f.jsx)(`code`,{children:i.argv.join(` `)})]},i.id))}):(0,f.jsx)(v,{label:`No supported test command was detected.`,compact:!0}),r.testError?(0,f.jsx)(`p`,{className:_.panelError,children:r.testError}):null,n?t?(0,f.jsx)(`p`,{className:_.note,children:`Verification is locked while a Turn is active.`}):null:(0,f.jsx)(`p`,{className:_.note,children:`Complete a Turn before attaching a durable TestResult.`}),r.lastTestRun?(0,f.jsxs)(`section`,{className:_.testResult,"data-passed":r.lastTestRun.exitCode===0&&!r.lastTestRun.timedOut,"aria-live":`polite`,children:[(0,f.jsxs)(`header`,{children:[(0,f.jsx)(`strong`,{children:r.lastTestRun.command.label}),(0,f.jsxs)(`span`,{children:[r.lastTestRun.timedOut?`Timed out`:`Exit ${r.lastTestRun.exitCode??`unknown`}`,` · `,r.lastTestRun.durationMs,` ms`]})]}),r.lastTestRun.stdout?(0,f.jsx)(`pre`,{children:r.lastTestRun.stdout}):null,r.lastTestRun.stderr?(0,f.jsx)(`pre`,{children:r.lastTestRun.stderr}):null,r.lastTestRun.outputTruncated?(0,f.jsx)(`small`,{children:`Output was truncated to the bounded tail.`}):null]}):null]})}var D=[`changes`,`files`,`artifacts`,`tests`,`terminal`,`details`];function O({runtime:e,thread:t,trusted:n,turns:r,items:o,workflows:s,artifacts:c,selectedItemId:u,tab:d,onSelectItem:m,onTabChange:h,onDirtyChange:v,onClose:y}){let{t:b}=a(),w=g(e,t),O=o.find(e=>e.id===u)??null,k=!!(w.file&&w.draft!==w.file.content),A=(0,l.useMemo)(()=>[...r].sort((e,t)=>t.ordinal-e.ordinal).find(e=>[`completed`,`failed`,`interrupted`].includes(e.status))??null,[r]),j=(0,l.useMemo)(()=>[...s].sort((e,t)=>t.updatedAt.localeCompare(e.updatedAt))[0]??null,[s]),M=r.some(e=>[`queued`,`running`,`waiting_approval`].includes(e.status));(0,l.useEffect)(()=>{if(!k)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[k]),(0,l.useEffect)(()=>(v(k),()=>v(!1)),[k,v]);let N=e=>{h(`files`),w.openFile(e)},P=e=>e===`changes`?w.diffs.length||null:e===`artifacts`&&c.length||null,F={changes:b(`inspector.tab.changes`,`changes`),files:b(`inspector.tab.files`,`files`),artifacts:b(`inspector.tab.artifacts`,`artifacts`),tests:b(`inspector.tab.tests`,`tests`),terminal:b(`inspector.tab.terminal`,`terminal`),details:b(`inspector.tab.details`,`details`)};return(0,f.jsxs)(`aside`,{className:_.inspector,"aria-label":b(`inspector.label`,`Inspector`),children:[(0,f.jsx)(`div`,{className:_.tabs,role:`tablist`,"aria-label":b(`inspector.views`,`Inspector views`),children:D.map(e=>(0,f.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":d===e,onClick:()=>h(e),children:[F[e]??e,P(e)?` ${P(e)}`:``]},e))}),(0,f.jsx)(`button`,{className:_.close,type:`button`,onClick:y,"aria-label":b(`inspector.closeReview`,`Close review panel`),children:(0,f.jsx)(i,{size:16})}),(0,f.jsxs)(`div`,{className:_.panel,children:[w.error?(0,f.jsx)(`p`,{className:_.error,children:w.error}):null,d===`changes`?(0,f.jsx)(S,{thread:t,trusted:n,hasActiveTurn:M,workbench:w,onOpenFile:N}):null,d===`files`?(0,f.jsx)(T,{onDownload:e.downloadFile&&t?n=>e.downloadFile(t.id,n):void 0,trusted:n,hasActiveTurn:M,workbench:w}):null,d===`artifacts`?(0,f.jsx)(x,{runtime:e,workflow:j,artifacts:c},t?.id??`no-thread`):null,d===`tests`?(0,f.jsx)(E,{trusted:n,hasActiveTurn:M,latestTurn:A,workbench:w}):null,(0,f.jsx)(p,{runtime:e,threadId:t?.id??null,enabled:n,active:d===`terminal`},t?.id??`no-thread`),d===`details`?(0,f.jsx)(C,{selected:O,items:o,onSelectItem:m}):null]})]})}export{O as Inspector};
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/html-DmJuEt5_.js","assets/editor.api-DfsewISI.js","assets/rolldown-runtime-QTnfLwEv.js","assets/editor-CJEeZjoM.css","assets/javascript-MLwwUW_7.js","assets/typescript-CGPudguY.js","assets/python-DJ9JSdOX.js","assets/yaml-CZqRoqwh.js"])))=>i.map(i=>d[i]);
2
- import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{t}from"./index-5xSnu27j.js";import{t as n}from"./editor.api-DfsewISI.js";import{n as r,t as i}from"./jsx-runtime-CIxEorsV.js";function a(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function o(e){if(Array.isArray(e))return e}function s(e,t,n){return(t=g(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function l(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
2
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{t}from"./index-B4STS7MU.js";import{t as n}from"./editor.api-DfsewISI.js";import{n as r,t as i}from"./jsx-runtime-CIxEorsV.js";function a(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function o(e){if(Array.isArray(e))return e}function s(e,t,n){return(t=g(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t!==0)for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function l(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
3
3
  In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function d(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?u(Object(n),!0).forEach(function(t){s(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):u(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function f(e,t){if(e==null)return{};var n,r,i=p(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function p(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function m(e,t){return o(e)||c(e,t)||_(e,t)||l()}function h(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function g(e){var t=h(e,`string`);return typeof t==`symbol`?t:t+``}function _(e,t){if(e){if(typeof e==`string`)return a(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}function v(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function b(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?y(Object(n),!0).forEach(function(t){v(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):y(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function x(){var e=[...arguments];return function(t){return e.reduceRight(function(e,t){return t(e)},t)}}function S(e){return function t(){var n=this,r=[...arguments];return r.length>=e.length?e.apply(this,r):function(){var e=[...arguments];return t.apply(n,[].concat(r,e))}}}function C(e){return{}.toString.call(e).includes(`Object`)}function w(e){return!Object.keys(e).length}function T(e){return typeof e==`function`}function E(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function D(e,t){return C(t)||j(`changeType`),Object.keys(t).some(function(t){return!E(e,t)})&&j(`changeField`),t}function O(e){T(e)||j(`selectorType`)}function k(e){T(e)||C(e)||j(`handlerType`),C(e)&&Object.values(e).some(function(e){return!T(e)})&&j(`handlersType`)}function A(e){e||j(`initialIsRequired`),C(e)||j(`initialType`),w(e)&&j(`initialContent`)}function ee(e,t){throw Error(e[t]||e.default)}var j=S(ee)({initialIsRequired:`initial state is required`,initialType:`initial state should be an object`,initialContent:`initial state shouldn't be an empty object`,handlerType:`handler should be an object or a function`,handlersType:`all handlers should be a functions`,selectorType:`selector should be a function`,changeType:`provided value of changes should be an object`,changeField:`it seams you want to change a field in the state which is not specified in the "initial" state`,default:"an unknown error accured in `state-local` package"}),M={changes:D,selector:O,handler:k,initial:A};function N(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};M.initial(e),M.handler(t);var n={current:e},r=S(te)(n,t),i=S(F)(n),a=S(M.changes)(e),o=S(P)(n);function s(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:function(e){return e};return M.selector(e),e(n.current)}function c(e){x(r,i,a,o)(e)}return[s,c]}function P(e,t){return T(t)?t(e.current):t}function F(e,t){return e.current=b(b({},e.current),t),t}function te(e,t,n){return T(t)?t(e.current):Object.keys(n).forEach(function(n){return t[n]?.call(t,e.current[n])}),n}var ne={create:N},re={paths:{vs:`https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs`}};function ie(e){return function t(){var n=this,r=[...arguments];return r.length>=e.length?e.apply(this,r):function(){var e=[...arguments];return t.apply(n,[].concat(r,e))}}}function ae(e){return{}.toString.call(e).includes(`Object`)}function oe(e){return e||L(`configIsRequired`),ae(e)||L(`configType`),e.urls?(se(),{paths:{vs:e.urls.monacoBase}}):e}function se(){console.warn(I.deprecation)}function ce(e,t){throw Error(e[t]||e.default)}var I={configIsRequired:`the configuration object is required`,configType:`the configuration object should be an object`,default:"an unknown error accured in `@monaco-editor/loader` package",deprecation:`Deprecation warning!
4
4
  You are using deprecated way of configuration.
5
5