zrb 1.16.5__tar.gz → 1.17.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 (420) hide show
  1. {zrb-1.16.5 → zrb-1.17.1}/PKG-INFO +1 -2
  2. {zrb-1.16.5 → zrb-1.17.1}/pyproject.toml +1 -2
  3. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/__init__.py +1 -0
  4. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/group.py +5 -1
  5. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/llm_ask.py +7 -10
  6. zrb-1.17.1/src/zrb/builtin/llm/tool/api.py +85 -0
  7. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/tool/file.py +35 -100
  8. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/tool/note.py +9 -12
  9. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/tool/web.py +31 -87
  10. zrb-1.17.1/src/zrb/builtin/searxng/config/settings.yml +5671 -0
  11. zrb-1.17.1/src/zrb/builtin/searxng/start.py +21 -0
  12. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/config.py +28 -8
  13. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/llm_config.py +100 -4
  14. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/group/any_group.py +1 -1
  15. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/agent.py +0 -15
  16. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/config.py +12 -3
  17. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/prompt.py +49 -1
  18. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/tool_wrapper.py +6 -5
  19. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm_task.py +30 -10
  20. zrb-1.16.5/src/zrb/builtin/llm/tool/api.py +0 -71
  21. {zrb-1.16.5 → zrb-1.17.1}/README.md +0 -0
  22. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/__init__.py +0 -0
  23. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/__main__.py +0 -0
  24. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/attr/__init__.py +0 -0
  25. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/attr/type.py +0 -0
  26. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/base64.py +0 -0
  27. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/git.py +0 -0
  28. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/git_subtree.py +0 -0
  29. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/http.py +0 -0
  30. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/jwt.py +0 -0
  31. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/chat_session.py +0 -0
  32. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/chat_trigger.py +0 -0
  33. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/history.py +0 -0
  34. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/input.py +0 -0
  35. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/previous-session.js +0 -0
  36. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/tool/__init__.py +0 -0
  37. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/tool/cli.py +0 -0
  38. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/tool/code.py +0 -0
  39. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/tool/rag.py +0 -0
  40. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/llm/tool/sub_agent.py +0 -0
  41. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/md5.py +0 -0
  42. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/__init__.py +0 -0
  43. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  44. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
  45. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
  46. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  47. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  48. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  49. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  50. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  51. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
  52. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
  53. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
  54. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
  55. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/gateway/view/content/my-module/my-entity.html +0 -0
  56. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/my_entity_service.py +0 -0
  57. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/my_entity_service_factory.py +0 -0
  58. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_db_repository.py +0 -0
  59. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_repository.py +0 -0
  60. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_repository_factory.py +0 -0
  61. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
  62. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/test/my_module/my_entity/test_create_my_entity.py +0 -0
  63. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/test/my_module/my_entity/test_delete_my_entity.py +0 -0
  64. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/test/my_module/my_entity/test_read_my_entity.py +0 -0
  65. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/test/my_module/my_entity/test_update_my_entity.py +0 -0
  66. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
  67. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
  68. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
  69. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
  70. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  71. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
  72. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
  73. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
  74. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  75. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  76. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_api_client.py +0 -0
  77. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_client.py +0 -0
  78. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_client_factory.py +0 -0
  79. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_direct_client.py +0 -0
  80. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  81. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  82. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/script.py.mako +0 -0
  83. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  84. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  85. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
  86. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  87. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
  88. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
  89. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
  90. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
  91. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  92. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  93. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  94. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
  95. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
  96. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
  97. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
  98. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  99. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
  100. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
  101. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  102. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
  103. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
  104. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
  105. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
  106. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
  107. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  108. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  109. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  110. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
  111. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
  112. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
  113. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
  114. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  115. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  116. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  117. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
  118. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
  119. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
  120. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
  121. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  122. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
  123. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
  124. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
  125. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
  126. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
  127. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
  128. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
  129. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
  130. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
  131. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
  132. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
  133. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
  134. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
  135. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
  136. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
  137. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
  138. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
  139. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
  140. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  141. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
  142. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  143. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  144. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  145. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  146. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  147. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
  148. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
  149. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
  150. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
  151. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
  152. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
  153. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
  154. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
  155. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
  156. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
  157. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
  158. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
  159. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
  160. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
  161. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
  162. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
  163. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
  164. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
  165. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  166. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  167. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  168. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
  169. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
  170. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
  171. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
  172. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
  173. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
  174. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
  175. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
  176. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
  177. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
  178. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
  179. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
  180. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
  181. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
  182. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
  183. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
  184. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
  185. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
  186. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
  187. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
  188. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
  189. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
  190. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  191. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
  192. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
  193. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
  194. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  195. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
  196. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
  197. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
  198. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
  199. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
  200. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
  201. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
  202. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
  203. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
  204. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
  205. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  206. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/create/__init__.py +0 -0
  207. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  208. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  209. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/project/create/project_task.py +0 -0
  210. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/python.py +0 -0
  211. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/random.py +0 -0
  212. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  213. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  214. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/setup/common_input.py +0 -0
  215. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  216. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  217. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  218. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  219. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/setup/ubuntu.py +0 -0
  220. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
  221. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
  222. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
  223. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/shell/__init__.py +0 -0
  224. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  225. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  226. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  227. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  228. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/todo.py +0 -0
  229. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/builtin/uuid.py +0 -0
  230. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/callback/__init__.py +0 -0
  231. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/callback/any_callback.py +0 -0
  232. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/callback/callback.py +0 -0
  233. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/cmd/__init__.py +0 -0
  234. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/cmd/cmd_result.py +0 -0
  235. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/cmd/cmd_val.py +0 -0
  236. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/default_prompt/file_extractor_system_prompt.md +0 -0
  237. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/default_prompt/interactive_system_prompt.md +0 -0
  238. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/default_prompt/persona.md +0 -0
  239. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/default_prompt/repo_extractor_system_prompt.md +0 -0
  240. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/default_prompt/repo_summarizer_system_prompt.md +0 -0
  241. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/default_prompt/summarization_prompt.md +0 -0
  242. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/default_prompt/system_prompt.md +0 -0
  243. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/llm_context/config.py +0 -0
  244. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/llm_context/config_parser.py +0 -0
  245. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/llm_rate_limitter.py +0 -0
  246. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/config/web_auth_config.py +0 -0
  247. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/content_transformer/__init__.py +0 -0
  248. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  249. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/content_transformer/content_transformer.py +0 -0
  250. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/context/__init__.py +0 -0
  251. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/context/any_context.py +0 -0
  252. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/context/any_shared_context.py +0 -0
  253. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/context/context.py +0 -0
  254. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/context/shared_context.py +0 -0
  255. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/dot_dict/__init__.py +0 -0
  256. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/dot_dict/dot_dict.py +0 -0
  257. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/env/__init__.py +0 -0
  258. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/env/any_env.py +0 -0
  259. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/env/env.py +0 -0
  260. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/env/env_file.py +0 -0
  261. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/env/env_map.py +0 -0
  262. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/group/__init__.py +0 -0
  263. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/group/group.py +0 -0
  264. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/input/__init__.py +0 -0
  265. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/input/any_input.py +0 -0
  266. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/input/base_input.py +0 -0
  267. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/input/bool_input.py +0 -0
  268. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/input/float_input.py +0 -0
  269. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/input/int_input.py +0 -0
  270. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/input/option_input.py +0 -0
  271. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/input/password_input.py +0 -0
  272. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/input/str_input.py +0 -0
  273. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/input/text_input.py +0 -0
  274. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/__init__.py +0 -0
  275. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/cli.py +0 -0
  276. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/common_util.py +0 -0
  277. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_app.py +0 -0
  278. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/__init__.py +0 -0
  279. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/docs_route.py +0 -0
  280. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
  281. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
  282. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/error_page/view.html +0 -0
  283. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
  284. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
  285. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/home_page/view.html +0 -0
  286. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/login_api_route.py +0 -0
  287. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
  288. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/login_page/view.html +0 -0
  289. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/logout_api_route.py +0 -0
  290. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
  291. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/logout_page/view.html +0 -0
  292. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
  293. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
  294. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
  295. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
  296. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
  297. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
  298. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
  299. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/global_template.html +0 -0
  300. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
  301. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/common.css +0 -0
  302. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/common.js +0 -0
  303. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
  304. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
  305. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
  306. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.amber.min.css +0 -0
  307. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.blue.min.css +0 -0
  308. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.cyan.min.css +0 -0
  309. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.fuchsia.min.css +0 -0
  310. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.green.min.css +0 -0
  311. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.grey.min.css +0 -0
  312. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.indigo.min.css +0 -0
  313. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.jade.min.css +0 -0
  314. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.lime.min.css +0 -0
  315. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.min.css +0 -0
  316. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.orange.min.css +0 -0
  317. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.pink.min.css +0 -0
  318. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.pumpkin.min.css +0 -0
  319. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.purple.min.css +0 -0
  320. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.red.min.css +0 -0
  321. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.sand.min.css +0 -0
  322. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.slate.min.css +0 -0
  323. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.violet.min.css +0 -0
  324. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.yellow.min.css +0 -0
  325. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.zinc.min.css +0 -0
  326. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
  327. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
  328. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
  329. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
  330. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/static/static_route.py +0 -0
  331. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
  332. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
  333. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_schema/session.py +0 -0
  334. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_schema/token.py +0 -0
  335. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_schema/user.py +0 -0
  336. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_util/cookie.py +0 -0
  337. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_util/html.py +0 -0
  338. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_util/token.py +0 -0
  339. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/runner/web_util/user.py +0 -0
  340. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/session/__init__.py +0 -0
  341. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/session/any_session.py +0 -0
  342. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/session/session.py +0 -0
  343. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/session_state_log/__init__.py +0 -0
  344. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/session_state_log/session_state_log.py +0 -0
  345. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/session_state_logger/__init__.py +0 -0
  346. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  347. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  348. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
  349. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/__init__.py +0 -0
  350. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/any_task.py +0 -0
  351. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/base/__init__.py +0 -0
  352. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/base/context.py +0 -0
  353. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/base/execution.py +0 -0
  354. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/base/lifecycle.py +0 -0
  355. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/base/monitoring.py +0 -0
  356. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/base/operators.py +0 -0
  357. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/base_task.py +0 -0
  358. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/base_trigger.py +0 -0
  359. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/cmd_task.py +0 -0
  360. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/http_check.py +0 -0
  361. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/__init__.py +0 -0
  362. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/conversation_history.py +0 -0
  363. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/conversation_history_model.py +0 -0
  364. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/default_workflow/coding.md +0 -0
  365. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/default_workflow/copywriting.md +0 -0
  366. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/default_workflow/researching.md +0 -0
  367. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/error.py +0 -0
  368. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/history_summarization.py +0 -0
  369. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/history_summarization_tool.py +0 -0
  370. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/print_node.py +0 -0
  371. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/llm/typing.py +0 -0
  372. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/make_task.py +0 -0
  373. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/rsync_task.py +0 -0
  374. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/scaffolder.py +0 -0
  375. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/scheduler.py +0 -0
  376. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/task.py +0 -0
  377. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task/tcp_check.py +0 -0
  378. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task_status/__init__.py +0 -0
  379. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/task_status/task_status.py +0 -0
  380. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/__init__.py +0 -0
  381. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/attr.py +0 -0
  382. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/callable.py +0 -0
  383. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/cli/__init__.py +0 -0
  384. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/cli/markdown.py +0 -0
  385. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/cli/style.py +0 -0
  386. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/cli/subcommand.py +0 -0
  387. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/cli/text.py +0 -0
  388. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/cmd/__init__.py +0 -0
  389. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/cmd/command.py +0 -0
  390. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/cmd/remote.py +0 -0
  391. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/codemod/__init__.py +0 -0
  392. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/codemod/modification_mode.py +0 -0
  393. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/codemod/modify_class.py +0 -0
  394. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/codemod/modify_class_parent.py +0 -0
  395. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/codemod/modify_class_property.py +0 -0
  396. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/codemod/modify_dict.py +0 -0
  397. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/codemod/modify_function.py +0 -0
  398. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/codemod/modify_function_call.py +0 -0
  399. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/codemod/modify_method.py +0 -0
  400. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/codemod/modify_module.py +0 -0
  401. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/cron.py +0 -0
  402. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/file.py +0 -0
  403. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/git.py +0 -0
  404. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/git_diff_model.py +0 -0
  405. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/git_subtree.py +0 -0
  406. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/git_subtree_model.py +0 -0
  407. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/group.py +0 -0
  408. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/init_path.py +0 -0
  409. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/llm/prompt.py +0 -0
  410. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/load.py +0 -0
  411. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/run.py +0 -0
  412. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/string/__init__.py +0 -0
  413. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/string/conversion.py +0 -0
  414. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/string/format.py +0 -0
  415. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/string/name.py +0 -0
  416. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/todo.py +0 -0
  417. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/todo_model.py +0 -0
  418. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/util/truncate.py +0 -0
  419. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/xcom/__init__.py +0 -0
  420. {zrb-1.16.5 → zrb-1.17.1}/src/zrb/xcom/xcom.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: zrb
3
- Version: 1.16.5
3
+ Version: 1.17.1
4
4
  Summary: Your Automation Powerhouse
5
5
  License: AGPL-3.0-or-later
6
6
  Keywords: Automation,Task Runner,Code Generator,Monorepo,Low Code
@@ -37,7 +37,6 @@ Requires-Dist: requests (>=2.32.2,<3.0.0)
37
37
  Requires-Dist: rich (>=13)
38
38
  Requires-Dist: tiktoken (>=0.8.0,<0.9.0)
39
39
  Requires-Dist: ulid-py (>=1.1.0,<2.0.0)
40
- Requires-Dist: xmltodict (>=1.0.2,<2.0.0)
41
40
  Project-URL: Documentation, https://github.com/state-alchemists/zrb
42
41
  Project-URL: Homepage, https://github.com/state-alchemists/zrb
43
42
  Project-URL: Repository, https://github.com/state-alchemists/zrb
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.16.5"
3
+ version = "1.17.1"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -64,7 +64,6 @@ playwright = {version = "^1.54.0", optional = true}
64
64
  chromadb = {version = "^0.6.3", optional = true}
65
65
  markdownify = "^1.2.0"
66
66
  pyjwt = "^2.10.1"
67
- xmltodict = "^1.0.2"
68
67
 
69
68
  [tool.poetry.extras]
70
69
  # poetry install -E rag
@@ -16,6 +16,7 @@ from zrb.builtin.project.add.fastapp.fastapp_task import add_fastapp_to_project
16
16
  from zrb.builtin.project.create.project_task import create_project
17
17
  from zrb.builtin.python import format_python_code
18
18
  from zrb.builtin.random import shuffle_values, throw_dice
19
+ from zrb.builtin.searxng.start import start_searxng
19
20
  from zrb.builtin.setup.asdf.asdf import setup_asdf
20
21
  from zrb.builtin.setup.latex.ubuntu import setup_latex_on_ubuntu
21
22
  from zrb.builtin.setup.tmux.tmux import setup_tmux
@@ -41,7 +41,7 @@ todo_group = _maybe_add_group(Group(name="todo", description="✅ Todo managemen
41
41
  shell_group = _maybe_add_group(
42
42
  Group(name="shell", description="💬 Shell related commands")
43
43
  )
44
- shell_autocomplete_group: Group = shell_group.add_group(
44
+ shell_autocomplete_group = shell_group.add_group(
45
45
  Group(name="autocomplete", description="⌨️ Shell autocomplete related commands")
46
46
  )
47
47
 
@@ -59,3 +59,7 @@ setup_group = _maybe_add_group(Group(name="setup", description="🔧 Setup"))
59
59
  setup_latex_group = setup_group.add_group(
60
60
  Group(name="latex", description="✍️ Setup LaTeX")
61
61
  )
62
+
63
+ searxng_group = _maybe_add_group(
64
+ Group(name="searxng", description="🔎 Searxng related command")
65
+ )
@@ -6,7 +6,10 @@ from zrb.builtin.group import llm_group
6
6
  from zrb.builtin.llm.chat_session import get_llm_ask_input_mapping, read_user_prompt
7
7
  from zrb.builtin.llm.history import read_chat_conversation, write_chat_conversation
8
8
  from zrb.builtin.llm.input import PreviousSessionInput
9
- from zrb.builtin.llm.tool.api import get_current_location, get_current_weather
9
+ from zrb.builtin.llm.tool.api import (
10
+ create_get_current_location,
11
+ create_get_current_weather,
12
+ )
10
13
  from zrb.builtin.llm.tool.cli import run_shell_command
11
14
  from zrb.builtin.llm.tool.code import analyze_repo
12
15
  from zrb.builtin.llm.tool.file import (
@@ -28,8 +31,6 @@ from zrb.builtin.llm.tool.note import (
28
31
  from zrb.builtin.llm.tool.web import (
29
32
  create_search_internet_tool,
30
33
  open_web_page,
31
- search_arxiv,
32
- search_wikipedia,
33
34
  )
34
35
  from zrb.callback.callback import Callback
35
36
  from zrb.config.config import CFG
@@ -85,16 +86,12 @@ def _get_tool(ctx: AnyContext) -> list["ToolOrCallable"]:
85
86
  tools.append(run_shell_command)
86
87
  if CFG.LLM_ALLOW_OPEN_WEB_PAGE:
87
88
  tools.append(open_web_page)
88
- if CFG.LLM_ALLOW_SEARCH_WIKIPEDIA:
89
- tools.append(search_wikipedia)
90
- if CFG.LLM_ALLOW_SEARCH_ARXIV:
91
- tools.append(search_arxiv)
92
89
  if CFG.LLM_ALLOW_GET_CURRENT_LOCATION:
93
- tools.append(get_current_location)
90
+ tools.append(create_get_current_location())
94
91
  if CFG.LLM_ALLOW_GET_CURRENT_WEATHER:
95
- tools.append(get_current_weather)
92
+ tools.append(create_get_current_weather())
96
93
  if CFG.SERPAPI_KEY != "" and CFG.LLM_ALLOW_SEARCH_INTERNET:
97
- tools.append(create_search_internet_tool(CFG.SERPAPI_KEY))
94
+ tools.append(create_search_internet_tool())
98
95
  return tools
99
96
 
100
97
 
@@ -0,0 +1,85 @@
1
+ from typing import Any, Callable, Literal
2
+
3
+ from zrb.config.llm_config import llm_config
4
+
5
+
6
+ def create_get_current_location() -> Callable:
7
+ if llm_config.default_current_location_tool is not None:
8
+ return llm_config.default_current_location_tool
9
+
10
+ def get_current_location() -> dict[str, float]:
11
+ """
12
+ Fetches the user's current geographical location based on their IP address.
13
+
14
+ Use this tool when the user asks "Where am I?", "What is my current
15
+ location?", or has a query that requires knowing their location to be
16
+ answered.
17
+
18
+ Returns:
19
+ dict[str, float]: A dictionary containing the 'lat' and 'lon' of the current
20
+ location.
21
+ Example: {"lat": 48.8584, "lon": 2.2945}
22
+ Raises:
23
+ requests.RequestException: If the API request to the location service
24
+ fails.
25
+ """
26
+ import requests
27
+
28
+ try:
29
+ response = requests.get("http://ip-api.com/json?fields=lat,lon", timeout=5)
30
+ response.raise_for_status()
31
+ return dict(response.json())
32
+ except requests.RequestException as e:
33
+ raise requests.RequestException(f"Failed to get location: {e}")
34
+
35
+ return get_current_location
36
+
37
+
38
+ def create_get_current_weather() -> Callable:
39
+ if llm_config.default_current_weather_tool is not None:
40
+ return llm_config.default_current_weather_tool
41
+
42
+ def get_current_weather(
43
+ latitude: float,
44
+ longitude: float,
45
+ temperature_unit: Literal["celsius", "fahrenheit"],
46
+ ) -> dict[str, Any]:
47
+ """
48
+ Retrieves the current weather conditions for a given geographical location.
49
+
50
+ Use this tool when the user asks about the weather. If the user does not
51
+ provide a location, first use the `get_current_location` tool to
52
+ determine their location.
53
+
54
+ Args:
55
+ latitude (float): The latitude of the location.
56
+ longitude (float): The longitude of the location.
57
+ temperature_unit (Literal["celsius", "fahrenheit"]): The desired unit
58
+ for the temperature reading.
59
+
60
+ Returns:
61
+ dict[str, Any]: A dictionary containing detailed weather data, including
62
+ temperature, wind speed, and weather code.
63
+ Raises:
64
+ requests.RequestException: If the API request to the weather service
65
+ fails.
66
+ """
67
+ import requests
68
+
69
+ try:
70
+ response = requests.get(
71
+ "https://api.open-meteo.com/v1/forecast",
72
+ params={
73
+ "latitude": latitude,
74
+ "longitude": longitude,
75
+ "temperature_unit": temperature_unit,
76
+ "current_weather": True,
77
+ },
78
+ timeout=5,
79
+ )
80
+ response.raise_for_status()
81
+ return dict(response.json())
82
+ except requests.RequestException as e:
83
+ raise requests.RequestException(f"Failed to get weather data: {e}")
84
+
85
+ return get_current_weather
@@ -100,34 +100,19 @@ def list_files(
100
100
  excluded_patterns: Optional[list[str]] = None,
101
101
  ) -> dict[str, list[str]]:
102
102
  """
103
- Lists the files and directories within a specified path.
103
+ Lists files and directories within a specified path, providing a map of the filesystem.
104
104
 
105
- This is a fundamental tool for exploring the file system. Use it to
106
- discover the structure of a directory, find specific files, or get a
107
- general overview of the project layout before performing other operations.
108
- **NOTE:**
109
- User might provide inaccurate file path, so if you failed to read a file,
110
- it is a good idea to list the files to get the accurate file path.
105
+ Use this tool to explore and understand the directory structure of the project. It's essential for finding files before reading or modifying them. If you receive an error about a file not being found, use this tool to verify the correct path.
111
106
 
112
107
  Args:
113
- path (str, optional): The directory path to list. Defaults to the
114
- current directory (".").
115
- recursive (bool, optional): If True, lists files and directories
116
- recursively. If False, lists only the top-level contents.
117
- Defaults to True.
118
- include_hidden (bool, optional): If True, includes hidden files and
119
- directories (those starting with a dot). Defaults to False.
120
- excluded_patterns (list[str], optional): A list of glob patterns to
121
- exclude from the listing. This is useful for ignoring irrelevant
122
- files like build artifacts or virtual environments. Defaults to a
123
- standard list of common exclusion patterns.
108
+ path (str, optional): The directory path to list, preferably an absolute path. Defaults to the current directory (".").
109
+ recursive (bool, optional): If True, lists contents recursively. Defaults to True.
110
+ include_hidden (bool, optional): If True, includes hidden files (e.g., .gitignore). Defaults to False.
111
+ excluded_patterns (list[str], optional): A list of glob patterns to ignore (e.g., ["*.log", "node_modules/"]). Defaults to a standard list of ignores.
124
112
 
125
113
  Returns:
126
- dict[str, list[str]]: A dictionary containing a list of file and directory paths
127
- relative to the input path.
128
- Example: {"files": ["src/main.py", "README.md"]}
129
- Raises:
130
- FileNotFoundError: If the specified path does not exist.
114
+ dict[str, list[str]]: A dictionary with a single key "files" containing a sorted list of file and directory paths relative to the input path.
115
+ Example: {"files": ["README.md", "src/main.py", "src/utils/helpers.py"]}
131
116
  """
132
117
  all_files: list[str] = []
133
118
  abs_path = os.path.abspath(os.path.expanduser(path))
@@ -226,59 +211,24 @@ def read_from_file(
226
211
  end_line: Optional[int] = None,
227
212
  ) -> dict[str, Any]:
228
213
  """
229
- Reads the content of a file, optionally from a specific start line to an
230
- end line.
231
-
232
- This tool is essential for inspecting file contents. It can read both text
233
- and PDF files. The `content` field in the returned dictionary is **always**
234
- prefixed with line numbers (`line_number | `) for each line. These prefixes
235
- are added by the tool for internal processing and to provide contextual
236
- information to the AI agent (e.g., for accurately applying diffs or for
237
- referencing specific lines). They are **not** part of the actual file content.
238
-
239
- When presenting the file content to a user, the AI agent **MUST** omit these
240
- line number prefixes by default for better readability. They should only
241
- be included if explicitly requested by the user or if the request inherently
242
- requires line number context (e.g., 'show me lines 10-20').
214
+ Reads the content of a single file.
243
215
 
244
- Use this tool to:
245
- - Examine the source code of a file.
246
- - Read configuration files.
247
- - Check the contents of a document.
216
+ Use this tool to inspect the contents of a specific file. You can read the entire file or specify a range of lines. The content returned will include line numbers, which are useful for other tools like `replace_in_file`.
248
217
 
249
218
  Args:
250
- path (str): The path to the file to read.
251
- start_line (int, optional): The 1-based line number to start reading
252
- from. If omitted, reading starts from the beginning of the file.
253
- end_line (int, optional): The 1-based line number to stop reading at
254
- (inclusive). If omitted, reads to the end of the file.
219
+ path (str): The absolute path to the file to read.
220
+ start_line (int, optional): The 1-based line number to start reading from. Defaults to the beginning of the file.
221
+ end_line (int, optional): The 1-based line number to stop reading at (inclusive). Defaults to the end of the file.
255
222
 
256
223
  Returns:
257
- dict[str, Any]: A dictionary containing the file path, the requested content
258
- (always with line numbers), the start and end lines, and the total number
259
- of lines in the file.
260
- Example:
261
- ```
262
- {
263
- "path": "src/main.py",
264
- "content": "1| import os\n2|\n3| print(\"Hello, World!\")",
265
- "start_line": 1,
266
- "end_line": 3,
267
- "total_lines": 3
268
- }
269
- ```
270
- If the file 'src/main.py' contains:
271
- ```
272
- import os
273
-
274
- print("Hello, World!")
275
- ```
276
- The 'content' field in the returned dictionary will be:
277
- `"1| import os\n2|\n3| print(\"Hello, World!\")"`
278
- **IMPORTANT:** The "1|", "2|", "3|" prefixes are NOT part of the
279
- original file. They are for internal agent use.
280
- Raises:
281
- FileNotFoundError: If the specified file does not exist.
224
+ dict[str, Any]: A dictionary containing the file path and its content with line numbers.
225
+ Example: {
226
+ "path": "src/main.py",
227
+ "content": "1| import os\n2|\n3| print(\"Hello, World!\")",
228
+ "start_line": 1,
229
+ "end_line": 3,
230
+ "total_lines": 3
231
+ }
282
232
  """
283
233
 
284
234
  abs_path = os.path.abspath(os.path.expanduser(path))
@@ -318,24 +268,19 @@ def read_from_file(
318
268
  def write_to_file(
319
269
  path: str,
320
270
  content: str,
321
- ) -> dict[str, Any]:
271
+ ) -> str:
322
272
  """
323
- Writes content to a file, completely overwriting it if it exists or
324
- creating it if it doesn't.
273
+ Writes content to a file, creating it or completely overwriting it.
325
274
 
326
- Use this tool to create new files or to overwrite the entire content of
327
- existing files. This is a destructive operation, so be certain of your
328
- actions. Always read the file first to understand its contents before
329
- overwriting it, unless you are creating a new file.
275
+ Use this tool to create a new file or replace an existing file's entire content.
276
+ **WARNING:** This is a destructive operation and will overwrite the file if it exists. Use `replace_in_file` for safer, targeted changes.
330
277
 
331
278
  Args:
332
- path (str): The path to the file to write to.
333
- content (str): The full, complete content to be written to the file.
334
- Do not use partial content or omit any lines.
279
+ path (str): The absolute path of the file to write to.
280
+ content (str): The full content to be written to the file.
335
281
 
336
282
  Returns:
337
- dict[str, Any]: A dictionary indicating success or failure.
338
- Example: {"success": true, "path": "new_file.txt"}
283
+ str: A confirmation message indicating the file was written successfully.
339
284
  """
340
285
  try:
341
286
  abs_path = os.path.abspath(os.path.expanduser(path))
@@ -344,7 +289,7 @@ def write_to_file(
344
289
  if directory and not os.path.exists(directory):
345
290
  os.makedirs(directory, exist_ok=True)
346
291
  write_file(abs_path, content)
347
- return {"success": True, "path": path}
292
+ return f"Successfully wrote to file: {path}"
348
293
  except (OSError, IOError) as e:
349
294
  raise OSError(f"Error writing file {path}: {e}")
350
295
  except Exception as e:
@@ -470,29 +415,19 @@ def replace_in_file(
470
415
  path: str,
471
416
  old_string: str,
472
417
  new_string: str,
473
- ) -> dict[str, Any]:
418
+ ) -> str:
474
419
  """
475
420
  Replaces the first occurrence of a string in a file.
476
421
 
477
- This tool is for making targeted modifications to a file. It is a
478
- single-step operation that is generally safer and more ergonomic than
479
- `write_to_file` for small changes.
480
-
481
- To ensure the replacement is applied correctly and to avoid ambiguity, the
482
- `old_string` parameter should be a unique, multi-line string that includes
483
- context from before and after the code you want to change.
422
+ This tool is for making targeted modifications to a file. It is safer than `write_to_file` for small changes. First, use `read_from_file` to get the exact text block you want to change. Then, use that block as the `old_string`.
484
423
 
485
424
  Args:
486
- path (str): The path of the file to modify.
487
- old_string (str): The exact, verbatim string to search for and replace.
488
- This should be a unique, multi-line block of text.
425
+ path (str): The absolute path of the file to modify.
426
+ old_string (str): The exact, verbatim string to replace. This should be a unique, multi-line block of text copied from the file.
489
427
  new_string (str): The new string that will replace the `old_string`.
490
428
 
491
429
  Returns:
492
- dict[str, Any]: A dictionary indicating the success or failure of the operation.
493
- Raises:
494
- FileNotFoundError: If the specified file does not exist.
495
- ValueError: If the `old_string` is not found in the file.
430
+ str: A confirmation message on success.
496
431
  """
497
432
  abs_path = os.path.abspath(os.path.expanduser(path))
498
433
  if not os.path.exists(abs_path):
@@ -503,7 +438,7 @@ def replace_in_file(
503
438
  raise ValueError(f"old_string not found in file: {path}")
504
439
  new_content = content.replace(old_string, new_string, 1)
505
440
  write_file(abs_path, new_content)
506
- return {"success": True, "path": path}
441
+ return f"Successfully replaced content in {path}"
507
442
  except ValueError as e:
508
443
  raise e
509
444
  except (OSError, IOError) as e:
@@ -17,12 +17,12 @@ def read_long_term_note() -> str:
17
17
 
18
18
  def write_long_term_note(content: str) -> str:
19
19
  """
20
- Writes content to the global long-term note.
21
- The content of this note is intended to be read by the AI Agent in the future.
22
- It should contain global information/preference.
20
+ Writes or overwrites the global long-term note for the user.
21
+
22
+ Use this to remember key user preferences, goals, or facts that should apply to all future conversations (e.g., "The user prefers TypeScript," "The user's favorite color is read"). This note is persistent across all projects.
23
23
 
24
24
  Args:
25
- content: The content to write to the long-term note (overwriting the existing one).
25
+ content: The information to save. This will overwrite the entire note.
26
26
 
27
27
  Returns:
28
28
  A confirmation message.
@@ -52,19 +52,16 @@ def read_contextual_note(path: str | None = None) -> str:
52
52
 
53
53
  def write_contextual_note(content: str, path: str | None = None) -> str:
54
54
  """
55
- Writes a contextual note for a specific path.
56
- The content of this note is intended to be read by the AI Agent in the future.
57
- The content should contain contextual information.
55
+ Writes or overwrites a note for a specific file or directory.
58
56
 
59
- If no path is provided, it defaults to the current working directory.
57
+ Use this to save your findings, summaries, or conclusions about a specific part of the project. This note will be available in the future when you are working within that same context.
60
58
 
61
59
  Args:
62
- content: The new content of the note (overwriting the existing one).
63
- path: The file or directory path to associate the note with.
64
- Defaults to the current working directory.
60
+ content: The information to save about the path. This overwrites any existing note for this path.
61
+ path (str, optional): The absolute file or directory path to associate the note with. Defaults to the current working directory.
65
62
 
66
63
  Returns:
67
- A confirmation message indicating where the note was saved.
64
+ A confirmation message.
68
65
  """
69
66
  if path is None:
70
67
  path = os.getcwd()
@@ -2,6 +2,9 @@ from collections.abc import Callable
2
2
  from typing import Any
3
3
  from urllib.parse import urljoin
4
4
 
5
+ from zrb.config.config import CFG
6
+ from zrb.config.llm_config import llm_config
7
+
5
8
  _DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" # noqa
6
9
 
7
10
 
@@ -28,26 +31,11 @@ async def open_web_page(url: str) -> dict[str, Any]:
28
31
  return {"content": markdown_content, "links_on_page": links}
29
32
 
30
33
 
31
- def create_search_internet_tool(
32
- serp_api_key: str,
33
- ) -> Callable[[str, int], dict[str, Any]]:
34
- """
35
- Creates a tool that searches the internet using the SerpAPI Google Search
36
- API.
37
-
38
- This factory returns a function that can be used to find information on the
39
- web. The generated tool is the primary way to answer general knowledge
40
- questions or to find information on topics you are unfamiliar with.
41
-
42
- Args:
43
- serp_api_key (str): The API key for SerpAPI.
44
-
45
- Returns:
46
- Callable: A function that takes a search query and returns a list of
47
- search results.
48
- """
34
+ def create_search_internet_tool() -> Callable:
35
+ if llm_config.default_search_internet_tool is not None:
36
+ return llm_config.default_search_internet_tool
49
37
 
50
- def search_internet(query: str, num_results: int = 10) -> dict[str, Any]:
38
+ def search_internet(query: str, page: int = 1) -> dict[str, Any]:
51
39
  """
52
40
  Performs an internet search using Google and returns a summary of the results.
53
41
 
@@ -56,7 +44,7 @@ def create_search_internet_tool(
56
44
 
57
45
  Args:
58
46
  query (str): The search query.
59
- num_results (int, optional): The desired number of search results. Defaults to 10.
47
+ Page (int, optional): The search page number, default to 1.
60
48
 
61
49
  Returns:
62
50
  dict[str, Any]: A formatted string summarizing the search results,
@@ -64,17 +52,29 @@ def create_search_internet_tool(
64
52
  """
65
53
  import requests
66
54
 
67
- response = requests.get(
68
- "https://serpapi.com/search",
69
- headers={"User-Agent": _DEFAULT_USER_AGENT},
70
- params={
71
- "q": query,
72
- "num": num_results,
73
- "hl": "en",
74
- "safe": "off",
75
- "api_key": serp_api_key,
76
- },
77
- )
55
+ if CFG.SEARCH_INTERNET_METHOD.strip() == "serpapi" and CFG.SERPAPI_KEY != "":
56
+ response = requests.get(
57
+ "https://serpapi.com/search",
58
+ headers={"User-Agent": _DEFAULT_USER_AGENT},
59
+ params={
60
+ "q": query,
61
+ "start": (page - 1) * 10,
62
+ "hl": "en",
63
+ "safe": "off",
64
+ "api_key": CFG.SERPAPI_KEY,
65
+ },
66
+ )
67
+ else:
68
+ response = requests.get(
69
+ url=f"{CFG.SEARXNG_BASE_URL}/search",
70
+ headers={"User-Agent": _DEFAULT_USER_AGENT},
71
+ params={
72
+ "q": query,
73
+ "format": "json",
74
+ "pageno": page,
75
+ "safesearch": 0,
76
+ },
77
+ )
78
78
  if response.status_code != 200:
79
79
  raise Exception(
80
80
  f"Error: Unable to retrieve search results (status code: {response.status_code})" # noqa
@@ -84,62 +84,6 @@ def create_search_internet_tool(
84
84
  return search_internet
85
85
 
86
86
 
87
- def search_wikipedia(query: str) -> dict[str, Any]:
88
- """
89
- Searches for articles on Wikipedia.
90
-
91
- This is a specialized search tool for querying Wikipedia. It's best for
92
- when the user is asking for definitions, historical information, or
93
- biographical details that are likely to be found on an encyclopedia.
94
-
95
- Args:
96
- query (str): The search term or question.
97
-
98
- Returns:
99
- dict[str, Any]: The raw JSON response from the Wikipedia API, containing a list of
100
- search results.
101
- """
102
- import requests
103
-
104
- params = {"action": "query", "list": "search", "srsearch": query, "format": "json"}
105
- response = requests.get(
106
- "https://en.wikipedia.org/w/api.php",
107
- headers={"User-Agent": _DEFAULT_USER_AGENT},
108
- params=params,
109
- )
110
- return response.json()
111
-
112
-
113
- def search_arxiv(query: str, num_results: int = 10) -> dict[str, Any]:
114
- """
115
- Searches for academic papers and preprints on ArXiv.
116
-
117
- Use this tool when the user's query is scientific or technical in nature
118
- and they are likely looking for research papers, articles, or academic
119
- publications.
120
-
121
- Args:
122
- query (str): The search query, which can include keywords, author
123
- names, or titles.
124
- num_results (int, optional): The maximum number of results to return.
125
- Defaults to 10.
126
-
127
- Returns:
128
- dict[str, Any]: The raw XML response from the ArXiv API, containing a list of
129
- matching papers.
130
- """
131
- import requests
132
- import xmltodict
133
-
134
- params = {"search_query": f"all:{query}", "start": 0, "max_results": num_results}
135
- response = requests.get(
136
- "http://export.arxiv.org/api/query",
137
- headers={"User-Agent": _DEFAULT_USER_AGENT},
138
- params=params,
139
- )
140
- return xmltodict.parse(response.content)
141
-
142
-
143
87
  async def _fetch_page_content(url: str) -> tuple[str, list[str]]:
144
88
  """Fetches the HTML content and all absolute links from a URL."""
145
89
  try: