zrb 1.8.3__tar.gz → 1.8.5__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 (395) hide show
  1. {zrb-1.8.3 → zrb-1.8.5}/PKG-INFO +2 -2
  2. {zrb-1.8.3 → zrb-1.8.5}/pyproject.toml +2 -2
  3. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/__init__.py +2 -0
  4. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/chat_session.py +3 -3
  5. zrb-1.8.5/src/zrb/builtin/llm/tool/code.py +233 -0
  6. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/file.py +12 -9
  7. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/sub_agent.py +11 -15
  8. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/callback/callback.py +4 -0
  9. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/config.py +20 -0
  10. zrb-1.8.5/src/zrb/llm_rate_limitter.py +105 -0
  11. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session/session.py +4 -5
  12. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/agent.py +33 -27
  13. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/config.py +9 -9
  14. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/context_enrichment.py +6 -4
  15. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/history_summarization.py +6 -3
  16. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm_task.py +6 -0
  17. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/run.py +2 -0
  18. {zrb-1.8.3 → zrb-1.8.5}/README.md +0 -0
  19. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/__main__.py +0 -0
  20. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/attr/__init__.py +0 -0
  21. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/attr/type.py +0 -0
  22. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/__init__.py +0 -0
  23. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/base64.py +0 -0
  24. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/git.py +0 -0
  25. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/git_subtree.py +0 -0
  26. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/group.py +0 -0
  27. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/http.py +0 -0
  28. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/jwt.py +0 -0
  29. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/history.py +0 -0
  30. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/input.py +0 -0
  31. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/llm_ask.py +0 -0
  32. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/previous-session.js +0 -0
  33. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/__init__.py +0 -0
  34. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/api.py +0 -0
  35. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/cli.py +0 -0
  36. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/rag.py +0 -0
  37. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/web.py +0 -0
  38. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/md5.py +0 -0
  39. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/__init__.py +0 -0
  40. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  41. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
  42. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
  43. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  44. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  45. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  46. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  47. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  48. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
  49. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
  50. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
  51. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
  52. {zrb-1.8.3 → zrb-1.8.5}/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
  53. {zrb-1.8.3 → zrb-1.8.5}/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
  54. {zrb-1.8.3 → zrb-1.8.5}/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
  55. {zrb-1.8.3 → zrb-1.8.5}/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
  56. {zrb-1.8.3 → zrb-1.8.5}/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
  57. {zrb-1.8.3 → zrb-1.8.5}/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
  58. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
  59. {zrb-1.8.3 → zrb-1.8.5}/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
  60. {zrb-1.8.3 → zrb-1.8.5}/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
  61. {zrb-1.8.3 → zrb-1.8.5}/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
  62. {zrb-1.8.3 → zrb-1.8.5}/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
  63. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
  64. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
  65. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
  66. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
  67. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  68. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
  69. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
  70. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
  71. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  72. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  73. {zrb-1.8.3 → zrb-1.8.5}/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
  74. {zrb-1.8.3 → zrb-1.8.5}/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
  75. {zrb-1.8.3 → zrb-1.8.5}/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
  76. {zrb-1.8.3 → zrb-1.8.5}/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
  77. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  78. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  79. {zrb-1.8.3 → zrb-1.8.5}/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
  80. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  81. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  82. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
  83. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  84. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
  85. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
  86. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
  87. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
  88. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  89. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  90. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  91. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
  92. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
  93. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
  94. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
  95. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  96. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
  97. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
  98. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  99. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
  100. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
  101. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
  102. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
  103. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
  104. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  105. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  106. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  107. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
  108. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
  109. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
  110. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
  111. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  112. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  113. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  114. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
  115. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
  116. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
  117. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
  118. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  119. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
  120. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
  121. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
  122. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
  123. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
  124. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
  125. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
  126. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
  127. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
  128. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
  129. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
  130. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
  131. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
  132. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
  133. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
  134. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
  135. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
  136. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
  137. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  138. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
  139. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  140. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  141. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  142. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  143. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  144. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
  145. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
  146. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
  147. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
  148. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
  149. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
  150. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
  151. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
  152. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
  153. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
  154. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
  155. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
  156. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
  157. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
  158. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
  159. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
  160. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
  161. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
  162. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  163. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  164. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  165. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
  166. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
  167. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
  168. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
  169. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
  170. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
  171. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
  172. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
  173. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
  174. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
  175. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
  176. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
  177. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
  178. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
  179. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
  180. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
  181. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
  182. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
  183. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
  184. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
  185. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
  186. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
  187. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  188. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
  189. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
  190. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
  191. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  192. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
  193. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
  194. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
  195. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
  196. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
  197. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
  198. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
  199. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
  200. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
  201. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
  202. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  203. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/create/__init__.py +0 -0
  204. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  205. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  206. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/create/project_task.py +0 -0
  207. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/python.py +0 -0
  208. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/random.py +0 -0
  209. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  210. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  211. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/common_input.py +0 -0
  212. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  213. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  214. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  215. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  216. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/ubuntu.py +0 -0
  217. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
  218. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
  219. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
  220. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/shell/__init__.py +0 -0
  221. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  222. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  223. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  224. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  225. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/todo.py +0 -0
  226. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/uuid.py +0 -0
  227. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/callback/__init__.py +0 -0
  228. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/callback/any_callback.py +0 -0
  229. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/cmd/__init__.py +0 -0
  230. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/cmd/cmd_result.py +0 -0
  231. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/cmd/cmd_val.py +0 -0
  232. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/content_transformer/__init__.py +0 -0
  233. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  234. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/content_transformer/content_transformer.py +0 -0
  235. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/context/__init__.py +0 -0
  236. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/context/any_context.py +0 -0
  237. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/context/any_shared_context.py +0 -0
  238. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/context/context.py +0 -0
  239. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/context/shared_context.py +0 -0
  240. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/dot_dict/__init__.py +0 -0
  241. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/dot_dict/dot_dict.py +0 -0
  242. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/env/__init__.py +0 -0
  243. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/env/any_env.py +0 -0
  244. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/env/env.py +0 -0
  245. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/env/env_file.py +0 -0
  246. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/env/env_map.py +0 -0
  247. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/group/__init__.py +0 -0
  248. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/group/any_group.py +0 -0
  249. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/group/group.py +0 -0
  250. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/__init__.py +0 -0
  251. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/any_input.py +0 -0
  252. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/base_input.py +0 -0
  253. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/bool_input.py +0 -0
  254. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/float_input.py +0 -0
  255. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/int_input.py +0 -0
  256. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/option_input.py +0 -0
  257. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/password_input.py +0 -0
  258. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/str_input.py +0 -0
  259. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/text_input.py +0 -0
  260. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/llm_config.py +0 -0
  261. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/__init__.py +0 -0
  262. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/cli.py +0 -0
  263. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/common_util.py +0 -0
  264. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_app.py +0 -0
  265. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_auth_config.py +0 -0
  266. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/__init__.py +0 -0
  267. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/docs_route.py +0 -0
  268. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
  269. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
  270. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/error_page/view.html +0 -0
  271. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
  272. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
  273. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/home_page/view.html +0 -0
  274. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/login_api_route.py +0 -0
  275. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
  276. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/login_page/view.html +0 -0
  277. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/logout_api_route.py +0 -0
  278. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
  279. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/logout_page/view.html +0 -0
  280. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
  281. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
  282. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
  283. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
  284. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
  285. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
  286. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
  287. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/global_template.html +0 -0
  288. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
  289. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/common.css +0 -0
  290. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/common.js +0 -0
  291. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
  292. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
  293. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
  294. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.amber.min.css +0 -0
  295. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.blue.min.css +0 -0
  296. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.cyan.min.css +0 -0
  297. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.fuchsia.min.css +0 -0
  298. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.green.min.css +0 -0
  299. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.grey.min.css +0 -0
  300. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.indigo.min.css +0 -0
  301. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.jade.min.css +0 -0
  302. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.lime.min.css +0 -0
  303. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.min.css +0 -0
  304. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.orange.min.css +0 -0
  305. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.pink.min.css +0 -0
  306. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.pumpkin.min.css +0 -0
  307. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.purple.min.css +0 -0
  308. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.red.min.css +0 -0
  309. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.sand.min.css +0 -0
  310. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.slate.min.css +0 -0
  311. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.violet.min.css +0 -0
  312. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.yellow.min.css +0 -0
  313. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.zinc.min.css +0 -0
  314. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
  315. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
  316. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
  317. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
  318. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/static_route.py +0 -0
  319. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
  320. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
  321. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_schema/session.py +0 -0
  322. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_schema/token.py +0 -0
  323. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_schema/user.py +0 -0
  324. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_util/cookie.py +0 -0
  325. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_util/html.py +0 -0
  326. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_util/token.py +0 -0
  327. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_util/user.py +0 -0
  328. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session/__init__.py +0 -0
  329. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session/any_session.py +0 -0
  330. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session_state_log/__init__.py +0 -0
  331. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session_state_log/session_state_log.py +0 -0
  332. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session_state_logger/__init__.py +0 -0
  333. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  334. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  335. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
  336. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/__init__.py +0 -0
  337. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/any_task.py +0 -0
  338. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base/__init__.py +0 -0
  339. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base/context.py +0 -0
  340. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base/execution.py +0 -0
  341. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base/lifecycle.py +0 -0
  342. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base/monitoring.py +0 -0
  343. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base/operators.py +0 -0
  344. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base_task.py +0 -0
  345. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base_trigger.py +0 -0
  346. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/cmd_task.py +0 -0
  347. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/http_check.py +0 -0
  348. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/__init__.py +0 -0
  349. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/context.py +0 -0
  350. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/error.py +0 -0
  351. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/history.py +0 -0
  352. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/print_node.py +0 -0
  353. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/prompt.py +0 -0
  354. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/tool_wrapper.py +0 -0
  355. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/typing.py +0 -0
  356. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/make_task.py +0 -0
  357. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/rsync_task.py +0 -0
  358. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/scaffolder.py +0 -0
  359. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/scheduler.py +0 -0
  360. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/task.py +0 -0
  361. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/tcp_check.py +0 -0
  362. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task_status/__init__.py +0 -0
  363. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task_status/task_status.py +0 -0
  364. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/__init__.py +0 -0
  365. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/attr.py +0 -0
  366. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cli/__init__.py +0 -0
  367. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cli/style.py +0 -0
  368. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cli/subcommand.py +0 -0
  369. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cmd/__init__.py +0 -0
  370. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cmd/command.py +0 -0
  371. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cmd/remote.py +0 -0
  372. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/__init__.py +0 -0
  373. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modification_mode.py +0 -0
  374. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_class.py +0 -0
  375. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_class_parent.py +0 -0
  376. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_class_property.py +0 -0
  377. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_dict.py +0 -0
  378. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_function.py +0 -0
  379. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_function_call.py +0 -0
  380. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_method.py +0 -0
  381. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_module.py +0 -0
  382. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cron.py +0 -0
  383. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/file.py +0 -0
  384. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/git.py +0 -0
  385. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/git_subtree.py +0 -0
  386. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/group.py +0 -0
  387. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/init_path.py +0 -0
  388. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/load.py +0 -0
  389. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/string/__init__.py +0 -0
  390. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/string/conversion.py +0 -0
  391. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/string/format.py +0 -0
  392. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/string/name.py +0 -0
  393. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/todo.py +0 -0
  394. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/xcom/__init__.py +0 -0
  395. {zrb-1.8.3 → zrb-1.8.5}/src/zrb/xcom/xcom.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zrb
3
- Version: 1.8.3
3
+ Version: 1.8.5
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -30,7 +30,7 @@ Requires-Dist: pydantic-ai (>=0.2.7,<0.3.0)
30
30
  Requires-Dist: pyjwt (>=2.10.1,<3.0.0)
31
31
  Requires-Dist: python-dotenv (>=1.1.0,<2.0.0)
32
32
  Requires-Dist: python-jose[cryptography] (>=3.4.0,<4.0.0)
33
- Requires-Dist: requests (>=2.32.3,<3.0.0)
33
+ Requires-Dist: requests (>=2.32.4,<3.0.0)
34
34
  Requires-Dist: ulid-py (>=1.1.0,<2.0.0)
35
35
  Project-URL: Documentation, https://github.com/state-alchemists/zrb
36
36
  Project-URL: Repository, https://github.com/state-alchemists/zrb
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.8.3"
3
+ version = "1.8.5"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -41,7 +41,7 @@ python = ">=3.10.0,<4.0.0"
41
41
  python-dotenv = "^1.1.0"
42
42
  black = "~25.1.0"
43
43
  isort = "~6.0.1"
44
- requests = "^2.32.3"
44
+ requests = "^2.32.4"
45
45
  libcst = "^1.7.0"
46
46
  chromadb = {version = "^0.6.3", optional = true}
47
47
  pdfplumber = {version = "^0.11.6", optional = true}
@@ -34,6 +34,7 @@ from zrb.input.password_input import PasswordInput
34
34
  from zrb.input.str_input import StrInput
35
35
  from zrb.input.text_input import TextInput
36
36
  from zrb.llm_config import llm_config
37
+ from zrb.llm_rate_limitter import llm_rate_limitter
37
38
  from zrb.runner.cli import cli
38
39
  from zrb.runner.web_auth_config import web_auth_config
39
40
  from zrb.runner.web_schema.user import User
@@ -105,6 +106,7 @@ assert Scaffolder
105
106
  assert Scheduler
106
107
  assert cli
107
108
  assert llm_config
109
+ assert llm_rate_limitter
108
110
  assert Xcom
109
111
  assert web_auth_config
110
112
  assert User
@@ -33,10 +33,10 @@ async def read_user_prompt(ctx: AnyContext) -> str:
33
33
  previous_session_name=ctx.input.previous_session,
34
34
  start_new=ctx.input.start_new,
35
35
  )
36
+ if result is not None:
37
+ final_result = result
36
38
  if ctx.env.get("_ZRB_WEB_ENV", "0") != "0":
37
- # Don't run in web environment
38
- if result is not None:
39
- final_result = result
39
+ # On web environment this won't be interactive
40
40
  return final_result
41
41
  multiline_mode = False
42
42
  user_inputs = []
@@ -0,0 +1,233 @@
1
+ import os
2
+
3
+ from zrb.builtin.llm.tool.file import DEFAULT_EXCLUDED_PATTERNS, is_excluded
4
+ from zrb.builtin.llm.tool.sub_agent import create_sub_agent_tool
5
+ from zrb.context.any_context import AnyContext
6
+
7
+ _EXTRACT_INFO_SYSTEM_PROMPT = """
8
+ You are an extraction info agent.
9
+ Your goal is to help to extract relevant information to help the main LLM Agent.
10
+ You write your output is in markdown format containing path and relevant information.
11
+ Extract only information that relevant to main LLM Agent's goal.
12
+
13
+ Extracted Information format (Use this as reference, extract relevant information only):
14
+ # <file-name>
15
+ ## imports
16
+ - <imported-package>
17
+ - ...
18
+ ## variables
19
+ - <variable-type> <variable-name>: <the-purpose-of-the-variable>
20
+ - ...
21
+ ## functions
22
+ - <function-name>:
23
+ - parameters: <parameters>
24
+ - logic/description: <what-the-function-do-and-how-it-works>
25
+ ...
26
+ # <other-file-name>
27
+ ...
28
+ """.strip()
29
+
30
+
31
+ _SUMMARIZE_INFO_SYSTEM_PROMPT = """
32
+ You are an information summarization agent.
33
+ Your goal is to summarize information to help the main LLM Agent.
34
+ The summarization result should contains all necessary details
35
+ to help main LLM Agent achieve the goal.
36
+ """
37
+
38
+ _DEFAULT_EXTENSIONS = [
39
+ "py",
40
+ "go",
41
+ "java",
42
+ "ts",
43
+ "js",
44
+ "rs",
45
+ "rb",
46
+ "php",
47
+ "sh",
48
+ "bash",
49
+ "c",
50
+ "cpp",
51
+ "h",
52
+ "hpp",
53
+ "cs",
54
+ "swift",
55
+ "kt",
56
+ "scala",
57
+ "m",
58
+ "pl",
59
+ "lua",
60
+ "sql",
61
+ "html",
62
+ "css",
63
+ "scss",
64
+ "less",
65
+ "json",
66
+ "yaml",
67
+ "yml",
68
+ "toml",
69
+ "ini",
70
+ "xml",
71
+ "md",
72
+ "rst",
73
+ "txt",
74
+ ]
75
+
76
+
77
+ async def analyze_repo(
78
+ ctx: AnyContext,
79
+ path: str,
80
+ goal: str,
81
+ extensions: list[str] = _DEFAULT_EXTENSIONS,
82
+ exclude_patterns: list[str] = DEFAULT_EXCLUDED_PATTERNS,
83
+ extraction_char_limit: int = 150000,
84
+ summarization_char_limit: int = 150000,
85
+ ) -> str:
86
+ """
87
+ Extract and summarize information from a directory that probably
88
+ contains a large resources.
89
+ You should state the goal specifically so that the tool can return relevant informations.
90
+ Use this tool for:
91
+ - summarization
92
+ - outline/structure extraction
93
+ - code review
94
+ - create diagram as code
95
+ - other tasks
96
+ Args:
97
+ path (str): File path to be analyze. Pass exactly as provided, including '~'.
98
+ goal(str): Goal of extracting information (for example creating C4 diagram)
99
+ extensions(Optional[list[str]]): List of extension to be included
100
+ while reading resources. Defaults to common programming languages and config files.
101
+ exclude_patterns(Optional[list[str]]): List of patterns to exclude from analysis.
102
+ Common patterns like '.venv', 'node_modules' should be excluded by default.
103
+ extraction_char_limit(Optional[int]): Max resource content char length
104
+ the extraction assistant able to handle. Defaults to 150000
105
+ summarization_char_limit(Optional[int]): Max resource content char length
106
+ the summarization assistant able to handle. Defaults to 150000
107
+ Returns:
108
+ str: The analysis result
109
+ Raises:
110
+ Exception: If an error occurs.
111
+ """
112
+ abs_path = os.path.abspath(os.path.expanduser(path))
113
+ file_metadatas = _get_file_metadatas(abs_path, extensions, exclude_patterns)
114
+ ctx.print("Extraction")
115
+ extracted_infos = await _extract_info(
116
+ ctx,
117
+ file_metadatas=file_metadatas,
118
+ goal=goal,
119
+ char_limit=extraction_char_limit,
120
+ )
121
+ ctx.print("Summarization")
122
+ summarized_infos = await _summarize_info(
123
+ ctx,
124
+ extracted_infos=extracted_infos,
125
+ goal=goal,
126
+ char_limit=summarization_char_limit,
127
+ )
128
+ while len(summarized_infos) > 1:
129
+ ctx.print("Summarization")
130
+ summarized_infos = await _summarize_info(
131
+ ctx,
132
+ extracted_infos=summarized_infos,
133
+ goal=goal,
134
+ char_limit=summarization_char_limit,
135
+ )
136
+ return summarized_infos[0]
137
+
138
+
139
+ def _get_file_metadatas(
140
+ dir_path: str,
141
+ extensions: list[str],
142
+ exclude_patterns: list[str],
143
+ ) -> list[dict[str, str]]:
144
+ metadata_list = []
145
+ for root, _, files in os.walk(dir_path):
146
+ files.sort()
147
+ for file in files:
148
+ if not any(file.endswith(f".{ext}") for ext in extensions):
149
+ continue
150
+ file_path = os.path.join(root, file)
151
+ if is_excluded(file_path, exclude_patterns):
152
+ continue
153
+ try:
154
+ with open(file_path, "r", encoding="utf-8", errors="ignore") as f:
155
+ rel_path = os.path.relpath(file_path, dir_path)
156
+ metadata_list.append({"path": rel_path, "content": f.read()})
157
+ except Exception as e:
158
+ print(f"Error reading file {file_path}: {e}")
159
+ metadata_list.sort(key=lambda m: m["path"])
160
+ return metadata_list
161
+
162
+
163
+ async def _extract_info(
164
+ ctx: AnyContext,
165
+ file_metadatas: list[dict[str, str]],
166
+ goal: str,
167
+ char_limit: int,
168
+ ) -> list[str]:
169
+ extract = create_sub_agent_tool(
170
+ tool_name="extract",
171
+ tool_description="extract",
172
+ system_prompt=_EXTRACT_INFO_SYSTEM_PROMPT,
173
+ )
174
+ extracted_infos = []
175
+ content_buffer = ""
176
+ for metadata in file_metadatas:
177
+ path = metadata.get("path", "")
178
+ content = metadata.get("content", "")
179
+ metadata_str = f"Path: {path}\nContent: {content}"
180
+ if len(content_buffer) + len(metadata_str) > char_limit:
181
+ if content_buffer:
182
+ prompt = _create_extract_info_prompt(goal, content_buffer)
183
+ extracted_info = await extract(ctx, prompt)
184
+ extracted_infos.append(extracted_info)
185
+ content_buffer = metadata_str
186
+ else:
187
+ content_buffer += metadata_str + "\n"
188
+
189
+ # Process any remaining content in the buffer
190
+ if content_buffer:
191
+ prompt = _create_extract_info_prompt(goal, content_buffer)
192
+ extracted_info = await extract(ctx, prompt)
193
+ extracted_infos.append(extracted_info)
194
+ return extracted_infos
195
+
196
+
197
+ def _create_extract_info_prompt(goal: str, content_buffer: str) -> str:
198
+ return f"# Main LLM Agent Goal\n{goal}\n# Files\n{content_buffer}"
199
+
200
+
201
+ async def _summarize_info(
202
+ ctx: AnyContext,
203
+ extracted_infos: list[str],
204
+ goal: str,
205
+ char_limit: int,
206
+ ) -> list[str]:
207
+ summarize = create_sub_agent_tool(
208
+ tool_name="extract",
209
+ tool_description="extract",
210
+ system_prompt=_SUMMARIZE_INFO_SYSTEM_PROMPT,
211
+ )
212
+ summarized_infos = []
213
+ content_buffer = ""
214
+ for extracted_info in extracted_infos:
215
+ if len(content_buffer) + len(extracted_info) > char_limit:
216
+ if content_buffer:
217
+ prompt = _create_summarize_info_prompt(goal, content_buffer)
218
+ summarized_info = await summarize(ctx, prompt)
219
+ summarized_infos.append(summarized_info)
220
+ content_buffer = extracted_info
221
+ else:
222
+ content_buffer += extracted_info + "\n"
223
+
224
+ # Process any remaining content in the buffer
225
+ if content_buffer:
226
+ prompt = _create_summarize_info_prompt(goal, content_buffer)
227
+ summarized_info = await summarize(ctx, prompt)
228
+ summarized_infos.append(summarized_info)
229
+ return summarized_infos
230
+
231
+
232
+ def _create_summarize_info_prompt(goal: str, content_buffer: str) -> str:
233
+ return f"# Main LLM Agent Goal\n{goal}\n# Extracted Info\n{content_buffer}"
@@ -71,6 +71,9 @@ DEFAULT_EXCLUDED_PATTERNS = [
71
71
  "*.so",
72
72
  "*.dylib",
73
73
  "*.dll",
74
+ # Minified files
75
+ "*.min.css",
76
+ "*.min.js",
74
77
  ]
75
78
 
76
79
 
@@ -112,17 +115,17 @@ def list_files(
112
115
  d
113
116
  for d in dirs
114
117
  if (include_hidden or not _is_hidden(d))
115
- and not _is_excluded(d, patterns_to_exclude)
118
+ and not is_excluded(d, patterns_to_exclude)
116
119
  ]
117
120
  # Process files
118
121
  for filename in files:
119
- if (
120
- include_hidden or not _is_hidden(filename)
121
- ) and not _is_excluded(filename, patterns_to_exclude):
122
+ if (include_hidden or not _is_hidden(filename)) and not is_excluded(
123
+ filename, patterns_to_exclude
124
+ ):
122
125
  full_path = os.path.join(root, filename)
123
126
  # Check rel path for patterns like '**/node_modules/*'
124
127
  rel_full_path = os.path.relpath(full_path, abs_path)
125
- is_rel_path_excluded = _is_excluded(
128
+ is_rel_path_excluded = is_excluded(
126
129
  rel_full_path, patterns_to_exclude
127
130
  )
128
131
  if not is_rel_path_excluded:
@@ -132,7 +135,7 @@ def list_files(
132
135
  for item in os.listdir(abs_path):
133
136
  full_path = os.path.join(abs_path, item)
134
137
  # Include both files and directories if not recursive
135
- if (include_hidden or not _is_hidden(item)) and not _is_excluded(
138
+ if (include_hidden or not _is_hidden(item)) and not is_excluded(
136
139
  item, patterns_to_exclude
137
140
  ):
138
141
  all_files.append(full_path)
@@ -169,7 +172,7 @@ def _is_hidden(path: str) -> bool:
169
172
  return basename.startswith(".")
170
173
 
171
174
 
172
- def _is_excluded(name: str, patterns: list[str]) -> bool:
175
+ def is_excluded(name: str, patterns: list[str]) -> bool:
173
176
  """Check if a name/path matches any exclusion patterns."""
174
177
  for pattern in patterns:
175
178
  if fnmatch.fnmatch(name, pattern):
@@ -461,14 +464,14 @@ async def analyze_file(ctx: AnyContext, path: str, query: str) -> str:
461
464
  _analyze_file = create_sub_agent_tool(
462
465
  tool_name="analyze_file",
463
466
  tool_description="analyze file with LLM capability",
464
- sub_agent_system_prompt="\n".join(
467
+ system_prompt="\n".join(
465
468
  [
466
469
  "You are a file analyzer assistant",
467
470
  "Your goal is to help the main asisstant by reading file",
468
471
  "and perform necessary indepth analysis required by the main assistant",
469
472
  ]
470
473
  ),
471
- sub_agent_tools=[read_from_file, search_files],
474
+ tools=[read_from_file, search_files],
472
475
  )
473
476
  return await _analyze_file(
474
477
  ctx,
@@ -28,11 +28,11 @@ else:
28
28
  def create_sub_agent_tool(
29
29
  tool_name: str,
30
30
  tool_description: str,
31
- sub_agent_system_prompt: str | None = None, # Make optional
32
- sub_agent_model: str | Model | None = None,
33
- sub_agent_model_settings: ModelSettings | None = None,
34
- sub_agent_tools: list[ToolOrCallable] = [],
35
- sub_agent_mcp_servers: list[MCPServer] = [],
31
+ system_prompt: str | None = None,
32
+ model: str | Model | None = None,
33
+ model_settings: ModelSettings | None = None,
34
+ tools: list[ToolOrCallable] = [],
35
+ mcp_servers: list[MCPServer] = [],
36
36
  ) -> Callable[[AnyContext, str], str]:
37
37
  """
38
38
  Create an LLM "sub-agent" tool function for use by a main LLM agent.
@@ -63,7 +63,7 @@ def create_sub_agent_tool(
63
63
  # Resolve parameters, falling back to llm_config defaults if None
64
64
  resolved_model = get_model(
65
65
  ctx=ctx,
66
- model_attr=sub_agent_model,
66
+ model_attr=model,
67
67
  render_model=True, # Assuming we always want to render model string attributes
68
68
  model_base_url_attr=None,
69
69
  # Sub-agent tool doesn't have separate base_url/api_key params
@@ -73,10 +73,10 @@ def create_sub_agent_tool(
73
73
  )
74
74
  resolved_model_settings = get_model_settings(
75
75
  ctx=ctx,
76
- model_settings_attr=sub_agent_model_settings,
76
+ model_settings_attr=model_settings,
77
77
  )
78
78
 
79
- if sub_agent_system_prompt is None:
79
+ if system_prompt is None:
80
80
  resolved_system_prompt = get_combined_system_prompt(
81
81
  ctx=ctx,
82
82
  persona_attr=None,
@@ -87,20 +87,16 @@ def create_sub_agent_tool(
87
87
  render_special_instruction_prompt=False,
88
88
  )
89
89
  else:
90
- resolved_system_prompt = sub_agent_system_prompt
91
-
90
+ resolved_system_prompt = system_prompt
92
91
  # Create the sub-agent instance
93
92
  sub_agent_agent = create_agent_instance(
94
93
  ctx=ctx,
95
94
  model=resolved_model,
96
95
  system_prompt=resolved_system_prompt,
97
96
  model_settings=resolved_model_settings,
98
- tools_attr=sub_agent_tools, # Pass tools from factory closure
99
- additional_tools=[], # No additional tools added after factory creation
100
- mcp_servers_attr=sub_agent_mcp_servers, # Pass servers from factory closure
101
- additional_mcp_servers=[], # No additional servers added after factory creation
97
+ tools=tools,
98
+ mcp_servers=mcp_servers,
102
99
  )
103
-
104
100
  # Run the sub-agent iteration
105
101
  # Start with an empty history for the sub-agent
106
102
  sub_agent_run = await run_agent_iteration(
@@ -1,3 +1,4 @@
1
+ import traceback
1
2
  from typing import Any
2
3
 
3
4
  from zrb.attr.type import StrDictAttr
@@ -5,6 +6,7 @@ from zrb.callback.any_callback import AnyCallback
5
6
  from zrb.session.any_session import AnySession
6
7
  from zrb.task.any_task import AnyTask
7
8
  from zrb.util.attr import get_str_dict_attr
9
+ from zrb.util.cli.style import stylize_faint
8
10
  from zrb.util.string.conversion import to_snake_case
9
11
  from zrb.xcom.xcom import Xcom
10
12
 
@@ -67,6 +69,8 @@ class Callback(AnyCallback):
67
69
  self._maybe_publish_result_to_parent_session(parent_session, result)
68
70
  return result
69
71
  except BaseException as e:
72
+ ctx = session.get_ctx(self._task)
73
+ ctx.print(traceback.format_exc())
70
74
  self._maybe_publish_error_to_parent_session(parent_session, e)
71
75
 
72
76
  def _maybe_publish_session_name_to_parent_session(
@@ -237,6 +237,26 @@ class Config:
237
237
  def LLM_SUMMARIZATION_PROMPT(self) -> str | None:
238
238
  return os.getenv("ZRB_LLM_SUMMARIZATION_PROMPT", None)
239
239
 
240
+ @property
241
+ def LLM_MAX_REQUESTS_PER_MINUTE(self) -> int:
242
+ """Maximum number of LLM requests allowed per minute."""
243
+ return int(os.getenv("LLM_MAX_REQUESTS_PER_MINUTE", "60"))
244
+
245
+ @property
246
+ def LLM_MAX_TOKENS_PER_MINUTE(self) -> int:
247
+ """Maximum number of LLM tokens allowed per minute."""
248
+ return int(os.getenv("LLM_MAX_TOKENS_PER_MINUTE", "120000"))
249
+
250
+ @property
251
+ def LLM_MAX_TOKENS_PER_REQUEST(self) -> int:
252
+ """Maximum number of tokens allowed per individual LLM request."""
253
+ return int(os.getenv("LLM_MAX_TOKENS_PER_REQUEST", "4096"))
254
+
255
+ @property
256
+ def LLM_THROTTLE_SLEEP(self) -> float:
257
+ """Number of seconds to sleep when throttling is required."""
258
+ return float(os.getenv("LLM_THROTTLE_SLEEP", "1.0"))
259
+
240
260
  @property
241
261
  def LLM_CONTEXT_ENRICHMENT_PROMPT(self) -> str | None:
242
262
  return os.getenv("ZRB_LLM_CONTEXT_ENRICHMENT_PROMPT", None)
@@ -0,0 +1,105 @@
1
+ import asyncio
2
+ import time
3
+ from collections import deque
4
+ from typing import Callable
5
+
6
+ from zrb.config import CFG
7
+
8
+
9
+ class LLMRateLimiter:
10
+ """
11
+ Helper class to enforce LLM API rate limits and throttling.
12
+ Tracks requests and tokens in a rolling 60-second window.
13
+ """
14
+
15
+ def __init__(
16
+ self,
17
+ max_requests_per_minute: int | None = None,
18
+ max_tokens_per_minute: int | None = None,
19
+ max_tokens_per_request: int | None = None,
20
+ throttle_sleep: float | None = None,
21
+ token_counter_fn: Callable[[str], int] | None = None,
22
+ ):
23
+ self._max_requests_per_minute = max_requests_per_minute
24
+ self._max_tokens_per_minute = max_tokens_per_minute
25
+ self._max_tokens_per_request = max_tokens_per_request
26
+ self._throttle_sleep = throttle_sleep
27
+ self._token_counter_fn = token_counter_fn
28
+ self.request_times = deque()
29
+ self.token_times = deque()
30
+
31
+ @property
32
+ def max_requests_per_minute(self) -> int:
33
+ if self._max_requests_per_minute is not None:
34
+ return self._max_requests_per_minute
35
+ return CFG.LLM_MAX_REQUESTS_PER_MINUTE
36
+
37
+ @property
38
+ def max_tokens_per_minute(self) -> int:
39
+ if self._max_tokens_per_minute is not None:
40
+ return self._max_tokens_per_minute
41
+ return CFG.LLM_MAX_TOKENS_PER_MINUTE
42
+
43
+ @property
44
+ def max_tokens_per_request(self) -> int:
45
+ if self._max_tokens_per_request is not None:
46
+ return self._max_tokens_per_request
47
+ return CFG.LLM_MAX_TOKENS_PER_REQUEST
48
+
49
+ @property
50
+ def throttle_sleep(self) -> float:
51
+ if self._throttle_sleep is not None:
52
+ return self._throttle_sleep
53
+ return CFG.LLM_THROTTLE_SLEEP
54
+
55
+ @property
56
+ def token_counter_fn(self) -> Callable[[str], int]:
57
+ if self._token_counter_fn is not None:
58
+ return self._token_counter_fn
59
+ return lambda x: len(x.split())
60
+
61
+ def set_max_requests_per_minute(self, value: int):
62
+ self._max_requests_per_minute = value
63
+
64
+ def set_max_tokens_per_minute(self, value: int):
65
+ self._max_tokens_per_minute = value
66
+
67
+ def set_max_tokens_per_request(self, value: int):
68
+ self._max_tokens_per_request = value
69
+
70
+ def set_throttle_sleep(self, value: float):
71
+ self._throttle_sleep = value
72
+
73
+ def set_token_counter_fn(self, fn: Callable[[str], int]):
74
+ self._token_counter_fn = fn
75
+
76
+ async def throttle(self, prompt: str):
77
+ now = time.time()
78
+ tokens = self.token_counter_fn(prompt)
79
+ # Clean up old entries
80
+ while self.request_times and now - self.request_times[0] > 60:
81
+ self.request_times.popleft()
82
+ while self.token_times and now - self.token_times[0][0] > 60:
83
+ self.token_times.popleft()
84
+ # Check per-request token limit
85
+ if tokens > self.max_tokens_per_request:
86
+ raise ValueError(
87
+ f"Request exceeds max_tokens_per_request ({self.max_tokens_per_request})."
88
+ )
89
+ # Wait if over per-minute request or token limit
90
+ while (
91
+ len(self.request_times) >= self.max_requests_per_minute
92
+ or sum(t for _, t in self.token_times) + tokens > self.max_tokens_per_minute
93
+ ):
94
+ await asyncio.sleep(self.throttle_sleep)
95
+ now = time.time()
96
+ while self.request_times and now - self.request_times[0] > 60:
97
+ self.request_times.popleft()
98
+ while self.token_times and now - self.token_times[0][0] > 60:
99
+ self.token_times.popleft()
100
+ # Record this request
101
+ self.request_times.append(now)
102
+ self.token_times.append((now, tokens))
103
+
104
+
105
+ llm_rate_limitter = LLMRateLimiter()
@@ -186,17 +186,16 @@ class Session(AnySession):
186
186
 
187
187
  def defer_monitoring(self, task: AnyTask, coro: Coroutine):
188
188
  self._register_single_task(task)
189
- self._monitoring_coros[task] = asyncio.create_task(coro)
189
+ self._monitoring_coros[task] = coro
190
190
 
191
191
  def defer_action(self, task: AnyTask, coro: Coroutine):
192
192
  self._register_single_task(task)
193
- self._action_coros[task] = asyncio.create_task(coro)
193
+ self._action_coros[task] = coro
194
194
 
195
195
  def defer_coro(self, coro: Coroutine):
196
- task = asyncio.create_task(coro)
197
- self._coros.append(task)
196
+ self._coros.append(coro)
198
197
  self._coros = [
199
- existing_task for existing_task in self._coros if not existing_task.done()
198
+ existing_coro for existing_coro in self._coros if not existing_coro.done()
200
199
  ]
201
200
 
202
201
  async def wait_deferred(self):