janito 1.12.1__tar.gz → 1.12.2__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 (192) hide show
  1. {janito-1.12.1/janito.egg-info → janito-1.12.2}/PKG-INFO +1 -1
  2. janito-1.12.2/janito/__init__.py +1 -0
  3. {janito-1.12.1 → janito-1.12.2}/janito/agent/conversation.py +1 -1
  4. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/find_files.py +13 -3
  5. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/get_lines.py +7 -7
  6. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/python_command_runner.py +4 -4
  7. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/python_file_runner.py +3 -3
  8. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/replace_text_in_file.py +8 -1
  9. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/search_text/core.py +6 -1
  10. {janito-1.12.1 → janito-1.12.2/janito.egg-info}/PKG-INFO +1 -1
  11. {janito-1.12.1 → janito-1.12.2}/pyproject.toml +1 -1
  12. janito-1.12.1/janito/__init__.py +0 -1
  13. {janito-1.12.1 → janito-1.12.2}/LICENSE +0 -0
  14. {janito-1.12.1 → janito-1.12.2}/MANIFEST.in +0 -0
  15. {janito-1.12.1 → janito-1.12.2}/README.md +0 -0
  16. {janito-1.12.1 → janito-1.12.2}/janito/__main__.py +0 -0
  17. {janito-1.12.1 → janito-1.12.2}/janito/agent/__init__.py +0 -0
  18. {janito-1.12.1 → janito-1.12.2}/janito/agent/api_exceptions.py +0 -0
  19. {janito-1.12.1 → janito-1.12.2}/janito/agent/config.py +0 -0
  20. {janito-1.12.1 → janito-1.12.2}/janito/agent/config_defaults.py +0 -0
  21. {janito-1.12.1 → janito-1.12.2}/janito/agent/config_utils.py +0 -0
  22. {janito-1.12.1 → janito-1.12.2}/janito/agent/content_handler.py +0 -0
  23. {janito-1.12.1 → janito-1.12.2}/janito/agent/conversation_api.py +0 -0
  24. {janito-1.12.1 → janito-1.12.2}/janito/agent/conversation_exceptions.py +0 -0
  25. {janito-1.12.1 → janito-1.12.2}/janito/agent/conversation_tool_calls.py +0 -0
  26. {janito-1.12.1 → janito-1.12.2}/janito/agent/conversation_ui.py +0 -0
  27. {janito-1.12.1 → janito-1.12.2}/janito/agent/event.py +0 -0
  28. {janito-1.12.1 → janito-1.12.2}/janito/agent/event_dispatcher.py +0 -0
  29. {janito-1.12.1 → janito-1.12.2}/janito/agent/event_handler_protocol.py +0 -0
  30. {janito-1.12.1 → janito-1.12.2}/janito/agent/event_system.py +0 -0
  31. {janito-1.12.1 → janito-1.12.2}/janito/agent/llm_conversation_history.py +0 -0
  32. {janito-1.12.1 → janito-1.12.2}/janito/agent/message_handler.py +0 -0
  33. {janito-1.12.1 → janito-1.12.2}/janito/agent/message_handler_protocol.py +0 -0
  34. {janito-1.12.1 → janito-1.12.2}/janito/agent/openai_client.py +0 -0
  35. {janito-1.12.1 → janito-1.12.2}/janito/agent/openai_schema_generator.py +0 -0
  36. {janito-1.12.1 → janito-1.12.2}/janito/agent/platform_discovery.py +0 -0
  37. {janito-1.12.1 → janito-1.12.2}/janito/agent/profile_manager.py +0 -0
  38. {janito-1.12.1 → janito-1.12.2}/janito/agent/queued_message_handler.py +0 -0
  39. {janito-1.12.1 → janito-1.12.2}/janito/agent/rich_live.py +0 -0
  40. {janito-1.12.1 → janito-1.12.2}/janito/agent/rich_message_handler.py +0 -0
  41. {janito-1.12.1 → janito-1.12.2}/janito/agent/runtime_config.py +0 -0
  42. {janito-1.12.1 → janito-1.12.2}/janito/agent/templates/profiles/system_prompt_template_base.txt.j2 +0 -0
  43. {janito-1.12.1 → janito-1.12.2}/janito/agent/templates/profiles/system_prompt_template_base_pt.txt.j2 +0 -0
  44. {janito-1.12.1 → janito-1.12.2}/janito/agent/test_handler_protocols.py +0 -0
  45. {janito-1.12.1 → janito-1.12.2}/janito/agent/test_openai_schema_generator.py +0 -0
  46. {janito-1.12.1 → janito-1.12.2}/janito/agent/tests/__init__.py +0 -0
  47. {janito-1.12.1 → janito-1.12.2}/janito/agent/tool_base.py +0 -0
  48. {janito-1.12.1 → janito-1.12.2}/janito/agent/tool_executor.py +0 -0
  49. {janito-1.12.1 → janito-1.12.2}/janito/agent/tool_registry.py +0 -0
  50. {janito-1.12.1 → janito-1.12.2}/janito/agent/tool_use_tracker.py +0 -0
  51. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/__init__.py +0 -0
  52. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/ask_user.py +0 -0
  53. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/create_directory.py +0 -0
  54. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/create_file.py +0 -0
  55. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/delete_text_in_file.py +0 -0
  56. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/fetch_url.py +0 -0
  57. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/get_file_outline/__init__.py +0 -0
  58. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/get_file_outline/core.py +0 -0
  59. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/get_file_outline/markdown_outline.py +0 -0
  60. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/get_file_outline/python_outline.py +0 -0
  61. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/get_file_outline/search_outline.py +0 -0
  62. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/move_file.py +0 -0
  63. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/open_url.py +0 -0
  64. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/present_choices.py +0 -0
  65. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/python_stdin_runner.py +0 -0
  66. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/remove_directory.py +0 -0
  67. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/remove_file.py +0 -0
  68. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/replace_file.py +0 -0
  69. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/run_bash_command.py +0 -0
  70. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/run_powershell_command.py +0 -0
  71. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/search_text/__init__.py +0 -0
  72. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/search_text/match_lines.py +0 -0
  73. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/search_text/pattern_utils.py +0 -0
  74. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/search_text/traverse_directory.py +0 -0
  75. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/validate_file_syntax/__init__.py +0 -0
  76. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/validate_file_syntax/core.py +0 -0
  77. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/validate_file_syntax/css_validator.py +0 -0
  78. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/validate_file_syntax/html_validator.py +0 -0
  79. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/validate_file_syntax/js_validator.py +0 -0
  80. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/validate_file_syntax/json_validator.py +0 -0
  81. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/validate_file_syntax/markdown_validator.py +0 -0
  82. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/validate_file_syntax/ps1_validator.py +0 -0
  83. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/validate_file_syntax/python_validator.py +0 -0
  84. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/validate_file_syntax/xml_validator.py +0 -0
  85. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools/validate_file_syntax/yaml_validator.py +0 -0
  86. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools_utils/__init__.py +0 -0
  87. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools_utils/action_type.py +0 -0
  88. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools_utils/dir_walk_utils.py +0 -0
  89. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools_utils/formatting.py +0 -0
  90. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools_utils/gitignore_utils.py +0 -0
  91. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools_utils/test_gitignore_utils.py +0 -0
  92. {janito-1.12.1 → janito-1.12.2}/janito/agent/tools_utils/utils.py +0 -0
  93. {janito-1.12.1 → janito-1.12.2}/janito/cli/__init__.py +0 -0
  94. {janito-1.12.1 → janito-1.12.2}/janito/cli/_livereload_log_utils.py +0 -0
  95. {janito-1.12.1 → janito-1.12.2}/janito/cli/_print_config.py +0 -0
  96. {janito-1.12.1 → janito-1.12.2}/janito/cli/_termweb_log_utils.py +0 -0
  97. {janito-1.12.1 → janito-1.12.2}/janito/cli/_utils.py +0 -0
  98. {janito-1.12.1 → janito-1.12.2}/janito/cli/arg_parser.py +0 -0
  99. {janito-1.12.1 → janito-1.12.2}/janito/cli/cli_main.py +0 -0
  100. {janito-1.12.1 → janito-1.12.2}/janito/cli/config_commands.py +0 -0
  101. {janito-1.12.1 → janito-1.12.2}/janito/cli/config_runner.py +0 -0
  102. {janito-1.12.1 → janito-1.12.2}/janito/cli/formatting_runner.py +0 -0
  103. {janito-1.12.1 → janito-1.12.2}/janito/cli/livereload_starter.py +0 -0
  104. {janito-1.12.1 → janito-1.12.2}/janito/cli/logging_setup.py +0 -0
  105. {janito-1.12.1 → janito-1.12.2}/janito/cli/main.py +0 -0
  106. {janito-1.12.1 → janito-1.12.2}/janito/cli/one_shot.py +0 -0
  107. {janito-1.12.1 → janito-1.12.2}/janito/cli/termweb_starter.py +0 -0
  108. {janito-1.12.1 → janito-1.12.2}/janito/i18n/__init__.py +0 -0
  109. {janito-1.12.1 → janito-1.12.2}/janito/i18n/messages.py +0 -0
  110. {janito-1.12.1 → janito-1.12.2}/janito/i18n/pt.py +0 -0
  111. {janito-1.12.1 → janito-1.12.2}/janito/livereload/app.py +0 -0
  112. {janito-1.12.1 → janito-1.12.2}/janito/rich_utils.py +0 -0
  113. {janito-1.12.1 → janito-1.12.2}/janito/shell/__init__.py +0 -0
  114. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/__init__.py +0 -0
  115. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/config.py +0 -0
  116. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/conversation_restart.py +0 -0
  117. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/edit.py +0 -0
  118. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/history_view.py +0 -0
  119. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/lang.py +0 -0
  120. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/livelogs.py +0 -0
  121. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/prompt.py +0 -0
  122. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/session.py +0 -0
  123. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/session_control.py +0 -0
  124. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/termweb_log.py +0 -0
  125. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/tools.py +0 -0
  126. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/track.py +0 -0
  127. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/utility.py +0 -0
  128. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands/verbose.py +0 -0
  129. {janito-1.12.1 → janito-1.12.2}/janito/shell/commands.py +0 -0
  130. {janito-1.12.1 → janito-1.12.2}/janito/shell/input_history.py +0 -0
  131. {janito-1.12.1 → janito-1.12.2}/janito/shell/main.py +0 -0
  132. {janito-1.12.1 → janito-1.12.2}/janito/shell/prompt/completer.py +0 -0
  133. {janito-1.12.1 → janito-1.12.2}/janito/shell/prompt/load_prompt.py +0 -0
  134. {janito-1.12.1 → janito-1.12.2}/janito/shell/prompt/session_setup.py +0 -0
  135. {janito-1.12.1 → janito-1.12.2}/janito/shell/session/config.py +0 -0
  136. {janito-1.12.1 → janito-1.12.2}/janito/shell/session/history.py +0 -0
  137. {janito-1.12.1 → janito-1.12.2}/janito/shell/session/manager.py +0 -0
  138. {janito-1.12.1 → janito-1.12.2}/janito/shell/ui/interactive.py +0 -0
  139. {janito-1.12.1 → janito-1.12.2}/janito/termweb/app.py +0 -0
  140. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/editor.css +0 -0
  141. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/editor.css.bak +0 -0
  142. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/editor.html +0 -0
  143. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/editor.html.bak +0 -0
  144. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/editor.js +0 -0
  145. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/editor.js.bak +0 -0
  146. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/explorer.html.bak +0 -0
  147. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/favicon.ico +0 -0
  148. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/favicon.ico.bak +0 -0
  149. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/index.html +0 -0
  150. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/index.html.bak +0 -0
  151. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/index.html.bak.bak +0 -0
  152. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/landing.html.bak +0 -0
  153. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/termicon.svg +0 -0
  154. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/termweb.css +0 -0
  155. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/termweb.css.bak +0 -0
  156. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/termweb.js +0 -0
  157. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/termweb.js.bak +0 -0
  158. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/termweb.js.bak.bak +0 -0
  159. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/termweb_quickopen.js +0 -0
  160. {janito-1.12.1 → janito-1.12.2}/janito/termweb/static/termweb_quickopen.js.bak +0 -0
  161. {janito-1.12.1 → janito-1.12.2}/janito/tests/test_rich_utils.py +0 -0
  162. {janito-1.12.1 → janito-1.12.2}/janito/web/__init__.py +0 -0
  163. {janito-1.12.1 → janito-1.12.2}/janito/web/__main__.py +0 -0
  164. {janito-1.12.1 → janito-1.12.2}/janito/web/app.py +0 -0
  165. {janito-1.12.1 → janito-1.12.2}/janito.egg-info/SOURCES.txt +0 -0
  166. {janito-1.12.1 → janito-1.12.2}/janito.egg-info/dependency_links.txt +0 -0
  167. {janito-1.12.1 → janito-1.12.2}/janito.egg-info/entry_points.txt +0 -0
  168. {janito-1.12.1 → janito-1.12.2}/janito.egg-info/requires.txt +0 -0
  169. {janito-1.12.1 → janito-1.12.2}/janito.egg-info/top_level.txt +0 -0
  170. {janito-1.12.1 → janito-1.12.2}/setup.cfg +0 -0
  171. {janito-1.12.1 → janito-1.12.2}/tests/test_basic.py +0 -0
  172. {janito-1.12.1 → janito-1.12.2}/tests/test_find_files.py +0 -0
  173. {janito-1.12.1 → janito-1.12.2}/tests/test_outline_formatter.py +0 -0
  174. {janito-1.12.1 → janito-1.12.2}/tests/test_outline_no_overlap.py +0 -0
  175. {janito-1.12.1 → janito-1.12.2}/tests/test_outline_python_file.py +0 -0
  176. {janito-1.12.1 → janito-1.12.2}/tests/test_outline_python_file_complex.py +0 -0
  177. {janito-1.12.1 → janito-1.12.2}/tests/test_outline_tool_run.py +0 -0
  178. {janito-1.12.1 → janito-1.12.2}/tests/test_platform_discovery.py +0 -0
  179. {janito-1.12.1 → janito-1.12.2}/tests/test_python_command_runner.py +0 -0
  180. {janito-1.12.1 → janito-1.12.2}/tests/test_python_file_runner.py +0 -0
  181. {janito-1.12.1 → janito-1.12.2}/tests/test_python_stdin_runner.py +0 -0
  182. {janito-1.12.1 → janito-1.12.2}/tests/test_rich_message_handler_action_type.py +0 -0
  183. {janito-1.12.1 → janito-1.12.2}/tests/test_run_powershell_command.py +0 -0
  184. {janito-1.12.1 → janito-1.12.2}/tests/test_search_text.py +0 -0
  185. {janito-1.12.1 → janito-1.12.2}/tests/test_set_role.py +0 -0
  186. {janito-1.12.1 → janito-1.12.2}/tests/test_tool_registry_docstring_formats.py +0 -0
  187. {janito-1.12.1 → janito-1.12.2}/tests/test_tool_registry_manual_sim.py +0 -0
  188. {janito-1.12.1 → janito-1.12.2}/tests/test_tool_registry_validation.py +0 -0
  189. {janito-1.12.1 → janito-1.12.2}/tests/test_tool_use_tracker.py +0 -0
  190. {janito-1.12.1 → janito-1.12.2}/tests/test_validate_file_syntax.py +0 -0
  191. {janito-1.12.1 → janito-1.12.2}/tests/test_validate_file_syntax_xml_html.py +0 -0
  192. {janito-1.12.1 → janito-1.12.2}/tests/test_validate_markdown_syntax.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 1.12.1
3
+ Version: 1.12.2
4
4
  Summary: Natural Language Coding Agent,
5
5
  Author-email: João Pinto <joao.pinto@gmail.com>
6
6
  License-Expression: MIT
@@ -0,0 +1 @@
1
+ __version__ = "1.12.2"
@@ -93,7 +93,7 @@ class ConversationHandler:
93
93
 
94
94
  def _handle_no_tool_support(self, messages, max_tokens, spinner):
95
95
  print(
96
- "\u26a0\ufe0f Endpoint does not support tool use. Proceeding in vanilla mode (tools disabled)."
96
+ "⚠️ Endpoint does not support tool use. Proceeding in vanilla mode (tools disabled)."
97
97
  )
98
98
  runtime_config.set("vanilla_mode", True)
99
99
  resolved_max_tokens = 8000
@@ -45,7 +45,9 @@ class FindFilesTool(ToolBase):
45
45
  dir_output.add(os.path.join(root, d))
46
46
  return dir_output
47
47
 
48
- def run(self, paths: str, pattern: str, max_depth: int = None) -> str:
48
+ def run(
49
+ self, paths: str, pattern: str, max_depth: int = None, max_results: int = 0
50
+ ) -> str:
49
51
  if not pattern:
50
52
  self.report_warning(tr("ℹ️ Empty file pattern provided."))
51
53
  return tr("Warning: Empty file pattern provided. Operation skipped.")
@@ -61,13 +63,15 @@ class FindFilesTool(ToolBase):
61
63
  self.report_info(
62
64
  ActionType.READ,
63
65
  tr(
64
- "🔍 Search for files '{pattern}' in '{disp_path}'{depth_msg} ...",
66
+ "🔍 Search files '{pattern}' in '{disp_path}'{depth_msg} ...",
65
67
  pattern=pattern,
66
68
  disp_path=disp_path,
67
69
  depth_msg=depth_msg,
68
70
  ),
69
71
  )
70
72
  dir_output = set()
73
+ count_scanned = 0
74
+ limit_reached = False
71
75
  for root, dirs, files in walk_dir_with_gitignore(
72
76
  directory, max_depth=max_depth
73
77
  ):
@@ -79,11 +83,17 @@ class FindFilesTool(ToolBase):
79
83
  dir_output.update(
80
84
  self._match_dirs_without_slash(root, dirs, pat)
81
85
  )
86
+ if max_results > 0 and len(dir_output) >= max_results:
87
+ limit_reached = True
88
+ # Truncate to max_results
89
+ dir_output = set(list(dir_output)[:max_results])
90
+ break
82
91
  self.report_success(
83
92
  tr(
84
- " ✅ {count} {file_word}",
93
+ " ✅ {count} {file_word}{max_flag}",
85
94
  count=len(dir_output),
86
95
  file_word=pluralize("file", len(dir_output)),
96
+ max_flag=" (max)" if limit_reached else "",
87
97
  )
88
98
  )
89
99
  if directory.strip() == ".":
@@ -22,7 +22,7 @@ class GetLinesTool(ToolBase):
22
22
  - "---\nFile: /path/to/file.py | Lines: 1-10 (of 100)\n---\n<lines...>"
23
23
  - "---\nFile: /path/to/file.py | All lines (total: 100 (all))\n---\n<all lines...>"
24
24
  - "Error reading file: <error message>"
25
- - "\u2757 not found"
25
+ - " not found"
26
26
  """
27
27
 
28
28
  def run(self, file_path: str, from_line: int = None, to_line: int = None) -> str:
@@ -83,7 +83,7 @@ class GetLinesTool(ToolBase):
83
83
  if at_end:
84
84
  self.report_success(
85
85
  tr(
86
- " \u2705 {selected_len} {line_word} (end)",
86
+ " {selected_len} {line_word} (end)",
87
87
  selected_len=selected_len,
88
88
  line_word=pluralize("line", selected_len),
89
89
  )
@@ -91,7 +91,7 @@ class GetLinesTool(ToolBase):
91
91
  elif to_line < total_lines:
92
92
  self.report_success(
93
93
  tr(
94
- " \u2705 {selected_len} {line_word} ({remaining} to end)",
94
+ " {selected_len} {line_word} ({remaining} to end)",
95
95
  selected_len=selected_len,
96
96
  line_word=pluralize("line", selected_len),
97
97
  remaining=total_lines - to_line,
@@ -100,7 +100,7 @@ class GetLinesTool(ToolBase):
100
100
  else:
101
101
  self.report_success(
102
102
  tr(
103
- " \u2705 {selected_len} {line_word} (all)",
103
+ " {selected_len} {line_word} (all)",
104
104
  selected_len=selected_len,
105
105
  line_word=pluralize("line", selected_len),
106
106
  )
@@ -143,7 +143,7 @@ class GetLinesTool(ToolBase):
143
143
  def _handle_read_error(self, e):
144
144
  """Handle file read errors and report appropriately."""
145
145
  if isinstance(e, FileNotFoundError):
146
- self.report_error(tr("\u2757 not found"))
147
- return tr("\u2757 not found")
148
- self.report_error(tr(" \u274c Error: {error}", error=e))
146
+ self.report_error(tr(" not found"))
147
+ return tr(" not found")
148
+ self.report_error(tr(" Error: {error}", error=e))
149
149
  return tr("Error reading file: {error}", error=e)
@@ -22,7 +22,7 @@ class PythonCommandRunnerTool(ToolBase):
22
22
 
23
23
  def run(self, code: str, timeout: int = 60) -> str:
24
24
  if not code.strip():
25
- self.report_warning(tr("\u2139\ufe0f Empty code provided."))
25
+ self.report_warning(tr("ℹ️ Empty code provided."))
26
26
  return tr("Warning: Empty code provided. Operation skipped.")
27
27
  self.report_info(
28
28
  ActionType.EXECUTE, tr("🐍 Running: python -c ...\n{code}\n", code=code)
@@ -63,13 +63,13 @@ class PythonCommandRunnerTool(ToolBase):
63
63
  stdout_file.flush()
64
64
  stderr_file.flush()
65
65
  self.report_success(
66
- tr("\u2705 Return code {return_code}", return_code=return_code)
66
+ tr(" Return code {return_code}", return_code=return_code)
67
67
  )
68
68
  return self._format_result(
69
69
  stdout_file.name, stderr_file.name, return_code
70
70
  )
71
71
  except Exception as e:
72
- self.report_error(tr("\u274c Error: {error}", error=e))
72
+ self.report_error(tr(" Error: {error}", error=e))
73
73
  return tr("Error running code: {error}", error=e)
74
74
 
75
75
  def _stream_process_output(self, process, stdout_file, stderr_file):
@@ -107,7 +107,7 @@ class PythonCommandRunnerTool(ToolBase):
107
107
  except subprocess.TimeoutExpired:
108
108
  process.kill()
109
109
  self.report_error(
110
- tr("\u274c Timed out after {timeout} seconds.", timeout=timeout)
110
+ tr(" Timed out after {timeout} seconds.", timeout=timeout)
111
111
  )
112
112
  return None
113
113
 
@@ -61,13 +61,13 @@ class PythonFileRunnerTool(ToolBase):
61
61
  stdout_file.flush()
62
62
  stderr_file.flush()
63
63
  self.report_success(
64
- tr("\u2705 Return code {return_code}", return_code=return_code)
64
+ tr(" Return code {return_code}", return_code=return_code)
65
65
  )
66
66
  return self._format_result(
67
67
  stdout_file.name, stderr_file.name, return_code
68
68
  )
69
69
  except Exception as e:
70
- self.report_error(tr("\u274c Error: {error}", error=e))
70
+ self.report_error(tr(" Error: {error}", error=e))
71
71
  return tr("Error running file: {error}", error=e)
72
72
 
73
73
  def _stream_process_output(self, process, stdout_file, stderr_file):
@@ -105,7 +105,7 @@ class PythonFileRunnerTool(ToolBase):
105
105
  except subprocess.TimeoutExpired:
106
106
  process.kill()
107
107
  self.report_error(
108
- tr("\u274c Timed out after {timeout} seconds.", timeout=timeout)
108
+ tr(" Timed out after {timeout} seconds.", timeout=timeout)
109
109
  )
110
110
  return None
111
111
 
@@ -5,6 +5,8 @@ from janito.i18n import tr
5
5
  import shutil
6
6
  import re
7
7
 
8
+ from janito.agent.tools.validate_file_syntax.core import validate_file_syntax
9
+
8
10
 
9
11
  @register_tool(name="replace_text_in_file")
10
12
  class ReplaceTextInFileTool(ToolBase):
@@ -82,9 +84,14 @@ class ReplaceTextInFileTool(ToolBase):
82
84
  line_delta_str,
83
85
  replace_all,
84
86
  )
85
- return self._format_final_msg(
87
+ final_msg = self._format_final_msg(
86
88
  file_path, warning, backup_path, match_info, details
87
89
  )
90
+ # Perform syntax validation and append result if file was changed
91
+ if file_changed:
92
+ validation_result = validate_file_syntax(file_path)
93
+ final_msg += f"\n{validation_result}"
94
+ return final_msg
88
95
  except Exception as e:
89
96
  self.report_error(tr(" \u274c Error"))
90
97
  return tr("Error replacing text: {error}", error=e)
@@ -124,7 +124,12 @@ class SearchTextTool(ToolBase):
124
124
  count = sum(count for _, count in per_file_counts)
125
125
  file_word = pluralize("match", count)
126
126
  self.report_success(
127
- tr(" \u2705 {count} {file_word}", count=count, file_word=file_word)
127
+ tr(
128
+ " \u2705 {count} {file_word}{max_flag}",
129
+ count=count,
130
+ file_word=file_word,
131
+ max_flag=" (max)" if dir_limit_reached else "",
132
+ )
128
133
  )
129
134
  return info_str, dir_output, dir_limit_reached, per_file_counts
130
135
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: janito
3
- Version: 1.12.1
3
+ Version: 1.12.2
4
4
  Summary: Natural Language Coding Agent,
5
5
  Author-email: João Pinto <joao.pinto@gmail.com>
6
6
  License-Expression: MIT
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "janito"
3
3
 
4
- version = "1.12.1"
4
+ version = "1.12.2"
5
5
  description = "Natural Language Coding Agent,"
6
6
  authors = [
7
7
  { name = "João Pinto", email = "joao.pinto@gmail.com" }
@@ -1 +0,0 @@
1
- __version__ = "1.11.0"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes