zrb 1.17.2__tar.gz → 1.17.4__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 (419) hide show
  1. {zrb-1.17.2 → zrb-1.17.4}/PKG-INFO +1 -1
  2. {zrb-1.17.2 → zrb-1.17.4}/pyproject.toml +1 -1
  3. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/tool/cli.py +5 -1
  4. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/tool/file.py +8 -7
  5. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/tool/web.py +28 -4
  6. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/config.py +33 -0
  7. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/llm_rate_limitter.py +42 -19
  8. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/prompt.py +105 -43
  9. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/tool_wrapper.py +10 -0
  10. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/rsync_task.py +24 -10
  11. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/attr.py +5 -1
  12. {zrb-1.17.2 → zrb-1.17.4}/README.md +0 -0
  13. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/__init__.py +0 -0
  14. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/__main__.py +0 -0
  15. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/attr/__init__.py +0 -0
  16. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/attr/type.py +0 -0
  17. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/__init__.py +0 -0
  18. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/base64.py +0 -0
  19. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/git.py +0 -0
  20. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/git_subtree.py +0 -0
  21. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/group.py +0 -0
  22. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/http.py +0 -0
  23. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/jwt.py +0 -0
  24. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/chat_session.py +0 -0
  25. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/chat_trigger.py +0 -0
  26. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/history.py +0 -0
  27. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/input.py +0 -0
  28. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/llm_ask.py +0 -0
  29. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/previous-session.js +0 -0
  30. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/tool/__init__.py +0 -0
  31. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/tool/api.py +0 -0
  32. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/tool/code.py +0 -0
  33. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/tool/note.py +0 -0
  34. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/tool/rag.py +0 -0
  35. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/llm/tool/sub_agent.py +0 -0
  36. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/md5.py +0 -0
  37. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/__init__.py +0 -0
  38. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  39. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
  40. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
  41. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  42. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  43. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  44. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  45. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  46. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
  47. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
  48. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
  49. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
  50. {zrb-1.17.2 → zrb-1.17.4}/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
  51. {zrb-1.17.2 → zrb-1.17.4}/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
  52. {zrb-1.17.2 → zrb-1.17.4}/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
  53. {zrb-1.17.2 → zrb-1.17.4}/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
  54. {zrb-1.17.2 → zrb-1.17.4}/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
  55. {zrb-1.17.2 → zrb-1.17.4}/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
  56. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
  57. {zrb-1.17.2 → zrb-1.17.4}/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
  58. {zrb-1.17.2 → zrb-1.17.4}/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
  59. {zrb-1.17.2 → zrb-1.17.4}/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
  60. {zrb-1.17.2 → zrb-1.17.4}/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
  61. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
  62. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
  63. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
  64. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
  65. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  66. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
  67. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
  68. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
  69. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  70. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  71. {zrb-1.17.2 → zrb-1.17.4}/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
  72. {zrb-1.17.2 → zrb-1.17.4}/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
  73. {zrb-1.17.2 → zrb-1.17.4}/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
  74. {zrb-1.17.2 → zrb-1.17.4}/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
  75. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  76. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  77. {zrb-1.17.2 → zrb-1.17.4}/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
  78. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  79. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  80. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
  81. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  82. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
  83. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
  84. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
  85. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
  86. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  87. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  88. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  89. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
  90. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
  91. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
  92. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
  93. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  94. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
  95. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
  96. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  97. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
  98. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
  99. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
  100. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
  101. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
  102. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  103. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  104. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  105. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
  106. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
  107. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
  108. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
  109. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  110. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  111. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  112. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
  113. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
  114. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
  115. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
  116. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  117. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
  118. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
  119. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
  120. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
  121. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
  122. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
  123. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
  124. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
  125. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
  126. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
  127. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
  128. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
  129. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
  130. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
  131. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
  132. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
  133. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
  134. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
  135. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  136. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
  137. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  138. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  139. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  140. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  141. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  142. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
  143. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
  144. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
  145. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
  146. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
  147. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
  148. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
  149. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
  150. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
  151. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
  152. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
  153. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
  154. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
  155. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
  156. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
  157. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
  158. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
  159. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
  160. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  161. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  162. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  163. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
  164. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
  165. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
  166. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
  167. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
  168. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
  169. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
  170. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
  171. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
  172. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
  173. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
  174. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
  175. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
  176. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
  177. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
  178. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
  179. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
  180. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
  181. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
  182. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
  183. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
  184. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
  185. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  186. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
  187. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
  188. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
  189. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  190. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
  191. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
  192. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
  193. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
  194. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
  195. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
  196. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
  197. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
  198. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
  199. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
  200. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  201. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/create/__init__.py +0 -0
  202. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  203. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  204. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/project/create/project_task.py +0 -0
  205. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/python.py +0 -0
  206. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/random.py +0 -0
  207. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/searxng/config/settings.yml +0 -0
  208. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/searxng/start.py +0 -0
  209. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  210. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  211. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/setup/common_input.py +0 -0
  212. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  213. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  214. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  215. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  216. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/setup/ubuntu.py +0 -0
  217. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
  218. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
  219. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
  220. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/shell/__init__.py +0 -0
  221. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  222. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  223. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  224. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  225. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/todo.py +0 -0
  226. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/builtin/uuid.py +0 -0
  227. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/callback/__init__.py +0 -0
  228. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/callback/any_callback.py +0 -0
  229. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/callback/callback.py +0 -0
  230. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/cmd/__init__.py +0 -0
  231. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/cmd/cmd_result.py +0 -0
  232. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/cmd/cmd_val.py +0 -0
  233. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/default_prompt/file_extractor_system_prompt.md +0 -0
  234. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/default_prompt/interactive_system_prompt.md +0 -0
  235. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/default_prompt/persona.md +0 -0
  236. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/default_prompt/repo_extractor_system_prompt.md +0 -0
  237. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/default_prompt/repo_summarizer_system_prompt.md +0 -0
  238. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/default_prompt/summarization_prompt.md +0 -0
  239. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/default_prompt/system_prompt.md +0 -0
  240. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/llm_config.py +0 -0
  241. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/llm_context/config.py +0 -0
  242. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/llm_context/config_parser.py +0 -0
  243. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/config/web_auth_config.py +0 -0
  244. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/content_transformer/__init__.py +0 -0
  245. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  246. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/content_transformer/content_transformer.py +0 -0
  247. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/context/__init__.py +0 -0
  248. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/context/any_context.py +0 -0
  249. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/context/any_shared_context.py +0 -0
  250. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/context/context.py +0 -0
  251. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/context/shared_context.py +0 -0
  252. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/dot_dict/__init__.py +0 -0
  253. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/dot_dict/dot_dict.py +0 -0
  254. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/env/__init__.py +0 -0
  255. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/env/any_env.py +0 -0
  256. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/env/env.py +0 -0
  257. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/env/env_file.py +0 -0
  258. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/env/env_map.py +0 -0
  259. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/group/__init__.py +0 -0
  260. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/group/any_group.py +0 -0
  261. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/group/group.py +0 -0
  262. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/input/__init__.py +0 -0
  263. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/input/any_input.py +0 -0
  264. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/input/base_input.py +0 -0
  265. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/input/bool_input.py +0 -0
  266. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/input/float_input.py +0 -0
  267. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/input/int_input.py +0 -0
  268. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/input/option_input.py +0 -0
  269. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/input/password_input.py +0 -0
  270. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/input/str_input.py +0 -0
  271. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/input/text_input.py +0 -0
  272. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/__init__.py +0 -0
  273. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/cli.py +0 -0
  274. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/common_util.py +0 -0
  275. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_app.py +0 -0
  276. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/__init__.py +0 -0
  277. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/docs_route.py +0 -0
  278. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
  279. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
  280. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/error_page/view.html +0 -0
  281. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
  282. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
  283. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/home_page/view.html +0 -0
  284. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/login_api_route.py +0 -0
  285. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
  286. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/login_page/view.html +0 -0
  287. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/logout_api_route.py +0 -0
  288. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
  289. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/logout_page/view.html +0 -0
  290. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
  291. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
  292. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
  293. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
  294. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
  295. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
  296. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
  297. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/global_template.html +0 -0
  298. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
  299. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/common.css +0 -0
  300. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/common.js +0 -0
  301. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
  302. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
  303. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
  304. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.amber.min.css +0 -0
  305. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.blue.min.css +0 -0
  306. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.cyan.min.css +0 -0
  307. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.fuchsia.min.css +0 -0
  308. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.green.min.css +0 -0
  309. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.grey.min.css +0 -0
  310. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.indigo.min.css +0 -0
  311. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.jade.min.css +0 -0
  312. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.lime.min.css +0 -0
  313. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.min.css +0 -0
  314. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.orange.min.css +0 -0
  315. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.pink.min.css +0 -0
  316. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.pumpkin.min.css +0 -0
  317. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.purple.min.css +0 -0
  318. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.red.min.css +0 -0
  319. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.sand.min.css +0 -0
  320. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.slate.min.css +0 -0
  321. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.violet.min.css +0 -0
  322. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.yellow.min.css +0 -0
  323. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.zinc.min.css +0 -0
  324. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
  325. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
  326. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
  327. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
  328. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/static/static_route.py +0 -0
  329. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
  330. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
  331. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_schema/session.py +0 -0
  332. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_schema/token.py +0 -0
  333. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_schema/user.py +0 -0
  334. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_util/cookie.py +0 -0
  335. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_util/html.py +0 -0
  336. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_util/token.py +0 -0
  337. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/runner/web_util/user.py +0 -0
  338. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/session/__init__.py +0 -0
  339. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/session/any_session.py +0 -0
  340. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/session/session.py +0 -0
  341. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/session_state_log/__init__.py +0 -0
  342. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/session_state_log/session_state_log.py +0 -0
  343. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/session_state_logger/__init__.py +0 -0
  344. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  345. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  346. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
  347. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/__init__.py +0 -0
  348. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/any_task.py +0 -0
  349. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/base/__init__.py +0 -0
  350. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/base/context.py +0 -0
  351. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/base/execution.py +0 -0
  352. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/base/lifecycle.py +0 -0
  353. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/base/monitoring.py +0 -0
  354. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/base/operators.py +0 -0
  355. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/base_task.py +0 -0
  356. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/base_trigger.py +0 -0
  357. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/cmd_task.py +0 -0
  358. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/http_check.py +0 -0
  359. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/__init__.py +0 -0
  360. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/agent.py +0 -0
  361. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/config.py +0 -0
  362. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/conversation_history.py +0 -0
  363. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/conversation_history_model.py +0 -0
  364. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/default_workflow/coding.md +0 -0
  365. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/default_workflow/copywriting.md +0 -0
  366. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/default_workflow/researching.md +0 -0
  367. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/error.py +0 -0
  368. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/history_summarization.py +0 -0
  369. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/history_summarization_tool.py +0 -0
  370. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/print_node.py +0 -0
  371. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm/typing.py +0 -0
  372. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/llm_task.py +0 -0
  373. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/make_task.py +0 -0
  374. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/scaffolder.py +0 -0
  375. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/scheduler.py +0 -0
  376. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/task.py +0 -0
  377. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task/tcp_check.py +0 -0
  378. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task_status/__init__.py +0 -0
  379. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/task_status/task_status.py +0 -0
  380. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/__init__.py +0 -0
  381. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/callable.py +0 -0
  382. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/cli/__init__.py +0 -0
  383. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/cli/markdown.py +0 -0
  384. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/cli/style.py +0 -0
  385. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/cli/subcommand.py +0 -0
  386. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/cli/text.py +0 -0
  387. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/cmd/__init__.py +0 -0
  388. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/cmd/command.py +0 -0
  389. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/cmd/remote.py +0 -0
  390. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/codemod/__init__.py +0 -0
  391. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/codemod/modification_mode.py +0 -0
  392. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/codemod/modify_class.py +0 -0
  393. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/codemod/modify_class_parent.py +0 -0
  394. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/codemod/modify_class_property.py +0 -0
  395. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/codemod/modify_dict.py +0 -0
  396. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/codemod/modify_function.py +0 -0
  397. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/codemod/modify_function_call.py +0 -0
  398. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/codemod/modify_method.py +0 -0
  399. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/codemod/modify_module.py +0 -0
  400. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/cron.py +0 -0
  401. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/file.py +0 -0
  402. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/git.py +0 -0
  403. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/git_diff_model.py +0 -0
  404. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/git_subtree.py +0 -0
  405. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/git_subtree_model.py +0 -0
  406. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/group.py +0 -0
  407. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/init_path.py +0 -0
  408. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/llm/prompt.py +0 -0
  409. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/load.py +0 -0
  410. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/run.py +0 -0
  411. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/string/__init__.py +0 -0
  412. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/string/conversion.py +0 -0
  413. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/string/format.py +0 -0
  414. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/string/name.py +0 -0
  415. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/todo.py +0 -0
  416. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/todo_model.py +0 -0
  417. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/util/truncate.py +0 -0
  418. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/xcom/__init__.py +0 -0
  419. {zrb-1.17.2 → zrb-1.17.4}/src/zrb/xcom/xcom.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: zrb
3
- Version: 1.17.2
3
+ Version: 1.17.4
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
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.17.2"
3
+ version = "1.17.4"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -4,7 +4,8 @@ from typing import Any
4
4
 
5
5
  def run_shell_command(command: str) -> dict[str, Any]:
6
6
  """
7
- Executes a shell command on the user's local machine and returns the output.
7
+ Executes a non interactive shell command on the user's local machine and returns
8
+ the output.
8
9
 
9
10
  This tool is powerful and should be used for tasks that require interacting
10
11
  with the command line, such as running scripts, managing system processes,
@@ -15,6 +16,9 @@ def run_shell_command(command: str) -> dict[str, Any]:
15
16
  modify files or system state (e.g., `git`, `npm`, `pip`, `docker`), you
16
17
  MUST explain what the command does and ask the user for confirmation.
17
18
 
19
+ **Note:** Make sure to run any server or long running process, as background process.
20
+ (e.g., python -m http.server &)
21
+
18
22
  Args:
19
23
  command (str): The exact shell command to execute.
20
24
 
@@ -500,10 +500,13 @@ async def analyze_file(
500
500
  tools=[read_from_file, search_files],
501
501
  )
502
502
  payload = json.dumps(
503
- {"instruction": query, "file_path": abs_path, "file_content": file_content}
503
+ {
504
+ "instruction": query,
505
+ "file_path": abs_path,
506
+ "file_content": llm_rate_limitter.clip_prompt(file_content, token_limit),
507
+ }
504
508
  )
505
- clipped_payload = llm_rate_limitter.clip_prompt(payload, token_limit)
506
- return await _analyze_file(ctx, clipped_payload)
509
+ return await _analyze_file(ctx, payload)
507
510
 
508
511
 
509
512
  def read_many_files(paths: list[str]) -> dict[str, str]:
@@ -593,11 +596,9 @@ def write_many_files(files: list[FileToWrite]) -> dict[str, Any]:
593
596
  errors = {}
594
597
  # 4. Access the data using dictionary key-lookup syntax.
595
598
  for file in files:
599
+ path = file["path"]
600
+ content = file["content"]
596
601
  try:
597
- # Use file['path'] and file['content'] instead of file.path
598
- path = file["path"]
599
- content = file["content"]
600
-
601
602
  abs_path = os.path.abspath(os.path.expanduser(path))
602
603
  directory = os.path.dirname(abs_path)
603
604
  if directory and not os.path.exists(directory):
@@ -52,18 +52,41 @@ def create_search_internet_tool() -> Callable:
52
52
  """
53
53
  import requests
54
54
 
55
- if CFG.SEARCH_INTERNET_METHOD.strip() == "serpapi" and CFG.SERPAPI_KEY != "":
55
+ if (
56
+ CFG.SEARCH_INTERNET_METHOD.strip().lower() == "serpapi"
57
+ and CFG.SERPAPI_KEY != ""
58
+ ):
56
59
  response = requests.get(
57
60
  "https://serpapi.com/search",
58
61
  headers={"User-Agent": _DEFAULT_USER_AGENT},
59
62
  params={
60
63
  "q": query,
61
64
  "start": (page - 1) * 10,
62
- "hl": "en",
63
- "safe": "off",
65
+ "hl": CFG.SERPAPI_LANG,
66
+ "safe": CFG.SERPAPI_SAFE,
64
67
  "api_key": CFG.SERPAPI_KEY,
65
68
  },
66
69
  )
70
+ elif (
71
+ CFG.SEARCH_INTERNET_METHOD.strip().lower() == "brave"
72
+ and CFG.BRAVE_API_KEY != ""
73
+ ):
74
+ response = requests.get(
75
+ "https://api.search.brave.com/res/v1/web/search",
76
+ headers={
77
+ "User-Agent": _DEFAULT_USER_AGENT,
78
+ "Accept": "application/json",
79
+ "x-subscription-token": CFG.BRAVE_API_KEY,
80
+ },
81
+ params={
82
+ "q": query,
83
+ "count": "10",
84
+ "offset": (page - 1) * 10,
85
+ "safesearch": CFG.BRAVE_API_SAFE,
86
+ "search_lang": CFG.BRAVE_API_LANG,
87
+ "summary": "true",
88
+ },
89
+ )
67
90
  else:
68
91
  response = requests.get(
69
92
  url=f"{CFG.SEARXNG_BASE_URL}/search",
@@ -72,7 +95,8 @@ def create_search_internet_tool() -> Callable:
72
95
  "q": query,
73
96
  "format": "json",
74
97
  "pageno": page,
75
- "safesearch": 0,
98
+ "safesearch": CFG.SEARXNG_SAFE,
99
+ "language": CFG.SEARXNG_LANG,
76
100
  },
77
101
  )
78
102
  if response.status_code != 200:
@@ -313,6 +313,11 @@ class Config:
313
313
  """Maximum number of tokens allowed per individual LLM request."""
314
314
  return int(self._getenv("LLM_MAX_TOKENS_PER_REQUEST", "100000"))
315
315
 
316
+ @property
317
+ def LLM_MAX_TOKENS_PER_TOOL_CALL_RESULT(self) -> int:
318
+ """Maximum number of tokens allowed per tool call result."""
319
+ return int(self._getenv("LLM_MAX_TOKENS_PER_TOOL_CALL_RESULT", "75000"))
320
+
316
321
  @property
317
322
  def LLM_THROTTLE_SLEEP(self) -> float:
318
323
  """Number of seconds to sleep when throttling is required."""
@@ -437,10 +442,30 @@ class Config:
437
442
  """Either serpapi or searxng"""
438
443
  return self._getenv("SEARCH_INTERNET_METHOD", "serpapi")
439
444
 
445
+ @property
446
+ def BRAVE_API_KEY(self) -> str:
447
+ return os.getenv("BRAVE_API_KEY", "")
448
+
449
+ @property
450
+ def BRAVE_API_SAFE(self) -> str:
451
+ return self._getenv("BRAVE_API_SAFE", "off")
452
+
453
+ @property
454
+ def BRAVE_API_LANG(self) -> str:
455
+ return self._getenv("BRAVE_API_LANG", "en")
456
+
440
457
  @property
441
458
  def SERPAPI_KEY(self) -> str:
442
459
  return os.getenv("SERPAPI_KEY", "")
443
460
 
461
+ @property
462
+ def SERPAPI_SAFE(self) -> str:
463
+ return self._getenv("SERPAPI_SAFE", "off")
464
+
465
+ @property
466
+ def SERPAPI_LANG(self) -> str:
467
+ return self._getenv("SERPAPI_LANG", "en")
468
+
444
469
  @property
445
470
  def SEARXNG_PORT(self) -> int:
446
471
  return int(self._getenv("SEARXNG_PORT", "8080"))
@@ -449,6 +474,14 @@ class Config:
449
474
  def SEARXNG_BASE_URL(self) -> str:
450
475
  return self._getenv("SEARXNG_BASE_URL", f"http://localhost:{self.SEARXNG_PORT}")
451
476
 
477
+ @property
478
+ def SEARXNG_SAFE(self) -> int:
479
+ return int(self._getenv("SEARXNG_SAFE", "0"))
480
+
481
+ @property
482
+ def SEARXNG_LANG(self) -> int:
483
+ return int(self._getenv("SEARXNG_LANG", "en"))
484
+
452
485
  @property
453
486
  def BANNER(self) -> str:
454
487
  return fstring_format(
@@ -1,7 +1,8 @@
1
1
  import asyncio
2
+ import json
2
3
  import time
3
4
  from collections import deque
4
- from typing import Callable
5
+ from typing import Any, Callable
5
6
 
6
7
  from zrb.config.config import CFG
7
8
 
@@ -17,16 +18,18 @@ class LLMRateLimiter:
17
18
  max_requests_per_minute: int | None = None,
18
19
  max_tokens_per_minute: int | None = None,
19
20
  max_tokens_per_request: int | None = None,
21
+ max_tokens_per_tool_call_result: int | None = None,
20
22
  throttle_sleep: float | None = None,
21
23
  use_tiktoken: bool | None = None,
22
- tiktoken_encodeing_name: str | None = None,
24
+ tiktoken_encoding_name: str | None = None,
23
25
  ):
24
26
  self._max_requests_per_minute = max_requests_per_minute
25
27
  self._max_tokens_per_minute = max_tokens_per_minute
26
28
  self._max_tokens_per_request = max_tokens_per_request
29
+ self._max_tokens_per_tool_call_result = max_tokens_per_tool_call_result
27
30
  self._throttle_sleep = throttle_sleep
28
31
  self._use_tiktoken = use_tiktoken
29
- self._tiktoken_encoding_name = tiktoken_encodeing_name
32
+ self._tiktoken_encoding_name = tiktoken_encoding_name
30
33
  self.request_times = deque()
31
34
  self.token_times = deque()
32
35
 
@@ -48,6 +51,12 @@ class LLMRateLimiter:
48
51
  return self._max_tokens_per_request
49
52
  return CFG.LLM_MAX_TOKENS_PER_REQUEST
50
53
 
54
+ @property
55
+ def max_tokens_per_tool_call_result(self) -> int:
56
+ if self._max_tokens_per_tool_call_result is not None:
57
+ return self._max_tokens_per_tool_call_result
58
+ return CFG.LLM_MAX_TOKENS_PER_TOOL_CALL_RESULT
59
+
51
60
  @property
52
61
  def throttle_sleep(self) -> float:
53
62
  if self._throttle_sleep is not None:
@@ -75,48 +84,56 @@ class LLMRateLimiter:
75
84
  def set_max_tokens_per_request(self, value: int):
76
85
  self._max_tokens_per_request = value
77
86
 
87
+ def set_max_tokens_per_tool_call_result(self, value: int):
88
+ self._max_tokens_per_tool_call_result = value
89
+
78
90
  def set_throttle_sleep(self, value: float):
79
91
  self._throttle_sleep = value
80
92
 
81
- def count_token(self, prompt: str) -> int:
93
+ def count_token(self, prompt: Any) -> int:
94
+ str_prompt = self._prompt_to_str(prompt)
82
95
  if not self.use_tiktoken:
83
- return self._fallback_count_token(prompt)
96
+ return self._fallback_count_token(str_prompt)
84
97
  try:
85
98
  import tiktoken
86
99
 
87
100
  enc = tiktoken.get_encoding(self.tiktoken_encoding_name)
88
- return len(enc.encode(prompt))
101
+ return len(enc.encode(str_prompt))
89
102
  except Exception:
90
- return self._fallback_count_token(prompt)
103
+ return self._fallback_count_token(str_prompt)
91
104
 
92
- def _fallback_count_token(self, prompt: str) -> int:
93
- return len(prompt) // 4
105
+ def _fallback_count_token(self, str_prompt: str) -> int:
106
+ return len(str_prompt) // 4
94
107
 
95
- def clip_prompt(self, prompt: str, limit: int) -> str:
108
+ def clip_prompt(self, prompt: Any, limit: int) -> str:
109
+ str_prompt = self._prompt_to_str(prompt)
96
110
  if not self.use_tiktoken:
97
- return self._fallback_clip_prompt(prompt, limit)
111
+ return self._fallback_clip_prompt(str_prompt, limit)
98
112
  try:
99
113
  import tiktoken
100
114
 
101
- enc = tiktoken.get_encoding("cl100k_base")
102
- tokens = enc.encode(prompt)
115
+ enc = tiktoken.get_encoding(self.tiktoken_encoding_name)
116
+ tokens = enc.encode(str_prompt)
103
117
  if len(tokens) <= limit:
104
- return prompt
118
+ return str_prompt
105
119
  truncated = tokens[: limit - 3]
106
120
  clipped_text = enc.decode(truncated)
107
121
  return clipped_text + "..."
108
122
  except Exception:
109
- return self._fallback_clip_prompt(prompt, limit)
123
+ return self._fallback_clip_prompt(str_prompt, limit)
110
124
 
111
- def _fallback_clip_prompt(self, prompt: str, limit: int) -> str:
125
+ def _fallback_clip_prompt(self, str_prompt: str, limit: int) -> str:
112
126
  char_limit = limit * 4 if limit * 4 <= 10 else limit * 4 - 10
113
- return prompt[:char_limit] + "..."
127
+ return str_prompt[:char_limit] + "..."
114
128
 
115
129
  async def throttle(
116
- self, prompt: str, throttle_notif_callback: Callable | None = None
130
+ self,
131
+ prompt: Any,
132
+ throttle_notif_callback: Callable | None = None,
117
133
  ):
118
134
  now = time.time()
119
- tokens = self.count_token(prompt)
135
+ str_prompt = self._prompt_to_str(prompt)
136
+ tokens = self.count_token(str_prompt)
120
137
  # Clean up old entries
121
138
  while self.request_times and now - self.request_times[0] > 60:
122
139
  self.request_times.popleft()
@@ -144,5 +161,11 @@ class LLMRateLimiter:
144
161
  self.request_times.append(now)
145
162
  self.token_times.append((now, tokens))
146
163
 
164
+ def _prompt_to_str(self, prompt: Any) -> str:
165
+ try:
166
+ return json.dumps(prompt)
167
+ except Exception:
168
+ return f"{prompt}"
169
+
147
170
 
148
171
  llm_rate_limitter = LLMRateLimiter()
@@ -2,11 +2,12 @@ import os
2
2
  import platform
3
3
  import re
4
4
  from datetime import datetime, timezone
5
- from typing import TYPE_CHECKING, Callable
5
+ from typing import TYPE_CHECKING, Any, Callable
6
6
 
7
7
  from zrb.attr.type import StrAttr, StrListAttr
8
- from zrb.config.llm_config import llm_config as llm_config
8
+ from zrb.config.llm_config import llm_config
9
9
  from zrb.config.llm_context.config import llm_context_config
10
+ from zrb.config.llm_rate_limitter import llm_rate_limitter
10
11
  from zrb.context.any_context import AnyContext
11
12
  from zrb.context.any_shared_context import AnySharedContext
12
13
  from zrb.task.llm.conversation_history_model import ConversationHistory
@@ -173,7 +174,43 @@ def get_system_and_user_prompt(
173
174
  render_modes: bool = False,
174
175
  conversation_history: ConversationHistory | None = None,
175
176
  ) -> tuple[str, str]:
176
- """Combines persona, base system prompt, and special instructions."""
177
+ if conversation_history is None:
178
+ conversation_history = ConversationHistory()
179
+ modified_user_message, user_message_context = _extract_user_prompt_components(
180
+ user_message
181
+ )
182
+ new_system_prompt = _construct_system_prompt(
183
+ ctx=ctx,
184
+ persona_attr=persona_attr,
185
+ render_persona=render_persona,
186
+ system_prompt_attr=system_prompt_attr,
187
+ render_system_prompt=render_system_prompt,
188
+ special_instruction_prompt_attr=special_instruction_prompt_attr,
189
+ render_special_instruction_prompt=render_special_instruction_prompt,
190
+ modes_attr=modes_attr,
191
+ render_modes=render_modes,
192
+ conversation_history=conversation_history,
193
+ )
194
+ user_message_context["Token Counter"] = _get_token_usage_info(
195
+ new_system_prompt, user_message, conversation_history
196
+ )
197
+ return new_system_prompt, _contruct_user_message_prompt(
198
+ modified_user_message, user_message_context
199
+ )
200
+
201
+
202
+ def _construct_system_prompt(
203
+ ctx: AnyContext,
204
+ persona_attr: StrAttr | None = None,
205
+ render_persona: bool = False,
206
+ system_prompt_attr: StrAttr | None = None,
207
+ render_system_prompt: bool = False,
208
+ special_instruction_prompt_attr: StrAttr | None = None,
209
+ render_special_instruction_prompt: bool = False,
210
+ modes_attr: StrListAttr | None = None,
211
+ render_modes: bool = False,
212
+ conversation_history: ConversationHistory | None = None,
213
+ ) -> str:
177
214
  persona = get_persona(ctx, persona_attr, render_persona)
178
215
  base_system_prompt = get_base_system_prompt(
179
216
  ctx, system_prompt_attr, render_system_prompt
@@ -185,10 +222,9 @@ def get_system_and_user_prompt(
185
222
  project_context_prompt = get_project_context_prompt()
186
223
  if conversation_history is None:
187
224
  conversation_history = ConversationHistory()
188
- conversation_environment, new_user_message = extract_conversation_environment(
189
- user_message
190
- )
191
- new_system_prompt = "\n".join(
225
+ current_directory = os.getcwd()
226
+ directory_tree = _generate_directory_tree(current_directory, max_depth=2)
227
+ return "\n".join(
192
228
  [
193
229
  make_prompt_section("Persona", persona),
194
230
  make_prompt_section("System Prompt", base_system_prompt),
@@ -229,10 +265,42 @@ def get_system_and_user_prompt(
229
265
  ),
230
266
  ),
231
267
  make_prompt_section("Project Context", project_context_prompt),
232
- make_prompt_section("Conversation Environment", conversation_environment),
268
+ make_prompt_section(
269
+ "Conversation Environment",
270
+ "\n".join(
271
+ [
272
+ make_prompt_section("Current OS", platform.system()),
273
+ make_prompt_section("OS Version", platform.version()),
274
+ make_prompt_section(
275
+ "Python Version", platform.python_version()
276
+ ),
277
+ make_prompt_section(
278
+ "Directory Tree (depth=2)", directory_tree, as_code=True
279
+ ),
280
+ ]
281
+ ),
282
+ ),
283
+ ]
284
+ )
285
+
286
+
287
+ def _contruct_user_message_prompt(
288
+ modified_user_message: str, user_message_context: dict[str, str]
289
+ ) -> str:
290
+ return "\n".join(
291
+ [
292
+ make_prompt_section("User Message", modified_user_message),
293
+ make_prompt_section(
294
+ "Context",
295
+ "\n".join(
296
+ [
297
+ make_prompt_section(key, val)
298
+ for key, val in user_message_context.items()
299
+ ]
300
+ ),
301
+ ),
233
302
  ]
234
303
  )
235
- return new_system_prompt, new_user_message
236
304
 
237
305
 
238
306
  def _generate_directory_tree(
@@ -258,13 +326,13 @@ def _generate_directory_tree(
258
326
 
259
327
  for i, entry in enumerate(entries):
260
328
  if i >= max_children:
261
- tree_lines.append(f"{prefix}└───... (more)")
329
+ tree_lines.append(f"{prefix}└─... (more)")
262
330
  break
263
331
  is_last = i == len(entries) - 1
264
- connector = "└───" if is_last else "├───"
332
+ connector = "└─" if is_last else "├─"
265
333
  tree_lines.append(f"{prefix}{connector}{entry.name}")
266
334
  if entry.is_dir():
267
- new_prefix = prefix + (" " if is_last else "│ ")
335
+ new_prefix = prefix + (" " if is_last else "│ ")
268
336
  recurse(entry.path, depth + 1, new_prefix)
269
337
 
270
338
  tree_lines.append(os.path.basename(dir_path))
@@ -272,7 +340,24 @@ def _generate_directory_tree(
272
340
  return "\n".join(tree_lines)
273
341
 
274
342
 
275
- def extract_conversation_environment(user_message: str) -> tuple[str, str]:
343
+ def _get_token_usage_info(
344
+ system_prompt: str, user_message: str, conversation_history: ConversationHistory
345
+ ) -> str:
346
+ system_prompt_token_count = llm_rate_limitter.count_token(system_prompt)
347
+ user_message_token_count = llm_rate_limitter.count_token(user_message)
348
+ conversation_history_token_count = llm_rate_limitter.count_token(
349
+ conversation_history.history
350
+ )
351
+ total_token_count = (
352
+ system_prompt_token_count
353
+ + user_message_token_count
354
+ + conversation_history_token_count
355
+ )
356
+ max_token = llm_rate_limitter.max_tokens_per_request
357
+ return f"{total_token_count} tokens of {max_token} tokens"
358
+
359
+
360
+ def _extract_user_prompt_components(user_message: str) -> tuple[str, dict[str, Any]]:
276
361
  modified_user_message = user_message
277
362
  # Match “@” + any non-space/comma sequence that contains at least one “/”
278
363
  pattern = r"(?<!\w)@(?=[^,\s]*\/)([^,\?\!\s]+)"
@@ -297,41 +382,18 @@ def extract_conversation_environment(user_message: str) -> tuple[str, str]:
297
382
  apendixes.append(
298
383
  make_prompt_section(
299
384
  f"{placeholder} ({ref_type} path: `{resource_path}`)",
300
- content,
385
+ "\n".join(content) if isinstance(content, list) else content,
301
386
  as_code=True,
302
387
  )
303
388
  )
304
389
  current_directory = os.getcwd()
305
- directory_tree = _generate_directory_tree(current_directory, max_depth=2)
306
- conversation_environment = "\n".join(
307
- [
308
- make_prompt_section("Current OS", platform.system()),
309
- make_prompt_section("OS Version", platform.version()),
310
- make_prompt_section("Python Version", platform.python_version()),
311
- make_prompt_section(
312
- "Directory Tree (depth=2)", directory_tree, as_code=True
313
- ),
314
- ]
315
- )
316
390
  iso_date = datetime.now(timezone.utc).astimezone().isoformat()
317
- modified_user_message = "\n".join(
318
- [
319
- make_prompt_section("User Message", modified_user_message),
320
- make_prompt_section(
321
- "Context",
322
- "\n".join(
323
- [
324
- make_prompt_section(
325
- "Current working directory", current_directory
326
- ),
327
- make_prompt_section("Current time", iso_date),
328
- make_prompt_section("Apendixes", "\n".join(apendixes)),
329
- ]
330
- ),
331
- ),
332
- ]
333
- )
334
- return conversation_environment, modified_user_message
391
+ user_message_context = {
392
+ "Current Working Directory": current_directory,
393
+ "Current Time": iso_date,
394
+ "Apendixes": "\n".join(apendixes),
395
+ }
396
+ return modified_user_message, user_message_context
335
397
 
336
398
 
337
399
  def get_user_message(
@@ -7,6 +7,7 @@ from collections.abc import Callable
7
7
  from typing import TYPE_CHECKING, Any
8
8
 
9
9
  from zrb.config.config import CFG
10
+ from zrb.config.llm_rate_limitter import llm_rate_limitter
10
11
  from zrb.context.any_context import AnyContext
11
12
  from zrb.task.llm.error import ToolExecutionError
12
13
  from zrb.util.callable import get_callable_name
@@ -124,6 +125,7 @@ def _create_wrapper(
124
125
  f"Tool execution cancelled. User disapproving: {reason}"
125
126
  )
126
127
  result = await run_async(func(*args, **kwargs))
128
+ _check_tool_call_result_limit(result)
127
129
  if has_ever_edited:
128
130
  return {
129
131
  "tool_call_result": result,
@@ -145,6 +147,14 @@ def _create_wrapper(
145
147
  return wrapper
146
148
 
147
149
 
150
+ def _check_tool_call_result_limit(result: Any):
151
+ if (
152
+ llm_rate_limitter.count_token(result)
153
+ > llm_rate_limitter.max_tokens_per_tool_call_result
154
+ ):
155
+ raise ValueError("Result value is too large, please adjust the parameter")
156
+
157
+
148
158
  async def _handle_user_response(
149
159
  ctx: AnyContext,
150
160
  func: Callable,
@@ -1,6 +1,4 @@
1
- from collections.abc import Callable
2
-
3
- from zrb.attr.type import IntAttr, StrAttr
1
+ from zrb.attr.type import BoolAttr, IntAttr, StrAttr
4
2
  from zrb.context.any_context import AnyContext
5
3
  from zrb.env.any_env import AnyEnv
6
4
  from zrb.input.any_input import AnyInput
@@ -17,8 +15,8 @@ class RsyncTask(CmdTask):
17
15
  icon: str | None = None,
18
16
  description: str | None = None,
19
17
  cli_only: bool = False,
20
- input: list[AnyInput] | AnyInput | None = None,
21
- env: list[AnyEnv] | AnyEnv | None = None,
18
+ input: list[AnyInput | None] | AnyInput | None = None,
19
+ env: list[AnyEnv | None] | AnyEnv | None = None,
22
20
  shell: StrAttr | None = None,
23
21
  auto_render_shell: bool = True,
24
22
  remote_host: StrAttr | None = None,
@@ -39,12 +37,14 @@ class RsyncTask(CmdTask):
39
37
  render_local_source_path: bool = True,
40
38
  local_destination_path: StrAttr | None = None,
41
39
  render_local_destination_path: bool = True,
40
+ exclude_from: StrAttr | None = None,
41
+ render_exclude_from: bool = True,
42
42
  cwd: str | None = None,
43
43
  render_cwd: bool = True,
44
44
  plain_print: bool = False,
45
45
  max_output_line: int = 1000,
46
46
  max_error_line: int = 1000,
47
- execute_condition: bool | str | Callable[[AnyContext], bool] = True,
47
+ execute_condition: BoolAttr = True,
48
48
  retries: int = 2,
49
49
  retry_period: float = 0,
50
50
  readiness_check: list[AnyTask] | AnyTask | None = None,
@@ -93,6 +93,8 @@ class RsyncTask(CmdTask):
93
93
  self._render_local_source_path = render_local_source_path
94
94
  self._local_destination_path = local_destination_path
95
95
  self._render_local_destination_path = render_local_destination_path
96
+ self._exclude_from = exclude_from
97
+ self._render_exclude_from = render_exclude_from
96
98
 
97
99
  def _get_source_path(self, ctx: AnyContext) -> str:
98
100
  local_source_path = self._get_local_source_path(ctx)
@@ -144,16 +146,28 @@ class RsyncTask(CmdTask):
144
146
  auto_render=self._render_local_destination_path,
145
147
  )
146
148
 
149
+ def _get_exclude_from_param(self, ctx: AnyContext) -> str:
150
+ exclude_from = get_str_attr(
151
+ ctx,
152
+ self._exclude_from,
153
+ "",
154
+ auto_render=self._render_exclude_from,
155
+ ).strip()
156
+ if exclude_from == "":
157
+ return ""
158
+ return f"--exclude-from='{exclude_from}'"
159
+
147
160
  def _get_cmd_script(self, ctx: AnyContext) -> str:
148
161
  port = self._get_remote_port(ctx)
149
162
  password = self._get_remote_password(ctx)
150
163
  key = self._get_remote_ssh_key(ctx)
151
164
  src = self._get_source_path(ctx)
152
165
  dst = self._get_destination_path(ctx)
166
+ exclude_from = self._get_exclude_from_param(ctx)
153
167
  if key != "" and password != "":
154
- return f'sshpass -p "$_ZRB_SSH_PASSWORD" rsync --mkpath -avz -e "ssh -i {key} -p {port}" {src} {dst}' # noqa
168
+ return f'sshpass -p "$_ZRB_SSH_PASSWORD" rsync --mkpath -avz -e "ssh -i {key} -p {port}" {exclude_from} {src} {dst}' # noqa
155
169
  if key != "":
156
- return f'rsync --mkpath -avz -e "ssh -i {key} -p {port}" {src} {dst}'
170
+ return f'rsync --mkpath -avz -e "ssh -i {key} -p {port}" {exclude_from} {src} {dst}'
157
171
  if password != "":
158
- return f'sshpass -p "$_ZRB_SSH_PASSWORD" rsync --mkpath -avz -e "ssh -p {port}" {src} {dst}' # noqa
159
- return f'rsync --mkpath -avz -e "ssh -p {port}" {src} {dst}'
172
+ return f'sshpass -p "$_ZRB_SSH_PASSWORD" rsync --mkpath -avz -e "ssh -p {port}" {exclude_from} {src} {dst}' # noqa
173
+ return f'rsync --mkpath -avz -e "ssh -p {port}" {exclude_from} {src} {dst}'
@@ -27,9 +27,11 @@ def get_str_list_attr(
27
27
  Returns:
28
28
  list[str]: A list of string attributes.
29
29
  """
30
+ if attr is None:
31
+ return []
30
32
  if callable(attr):
31
33
  return attr(shared_ctx)
32
- return {get_str_attr(shared_ctx, val, "", auto_render) for val in attr}
34
+ return [get_str_attr(shared_ctx, val, "", auto_render) for val in attr]
33
35
 
34
36
 
35
37
  def get_str_dict_attr(
@@ -46,6 +48,8 @@ def get_str_dict_attr(
46
48
  Returns:
47
49
  dict[str, Any]: A dictionary of string attributes.
48
50
  """
51
+ if attr is None:
52
+ return {}
49
53
  if callable(attr):
50
54
  return attr(shared_ctx)
51
55
  return {
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes