zrb 1.15.3__tar.gz → 1.15.6__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 (415) hide show
  1. {zrb-1.15.3 → zrb-1.15.6}/PKG-INFO +9 -10
  2. {zrb-1.15.3 → zrb-1.15.6}/pyproject.toml +18 -20
  3. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/chat_session.py +2 -15
  4. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/tool/code.py +4 -3
  5. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/tool/sub_agent.py +4 -3
  6. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/config.py +11 -2
  7. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/llm_rate_limitter.py +51 -40
  8. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/context/context.py +1 -1
  9. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/context/shared_context.py +1 -5
  10. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/input/any_input.py +5 -1
  11. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/input/base_input.py +8 -4
  12. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/cli.py +19 -18
  13. zrb-1.15.6/src/zrb/runner/common_util.py +36 -0
  14. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/task_input_api_route.py +5 -5
  15. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/any_task.py +10 -2
  16. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/base/context.py +16 -8
  17. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/base/lifecycle.py +8 -4
  18. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/base_task.py +54 -4
  19. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/agent.py +14 -3
  20. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/history_summarization.py +8 -4
  21. zrb-1.15.6/src/zrb/task/llm/print_node.py +175 -0
  22. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/tool_wrapper.py +55 -18
  23. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm_task.py +2 -1
  24. zrb-1.15.6/src/zrb/util/cli/markdown.py +12 -0
  25. zrb-1.15.6/src/zrb/util/truncate.py +23 -0
  26. zrb-1.15.3/src/zrb/runner/common_util.py +0 -31
  27. zrb-1.15.3/src/zrb/task/llm/print_node.py +0 -101
  28. {zrb-1.15.3 → zrb-1.15.6}/README.md +0 -0
  29. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/__init__.py +0 -0
  30. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/__main__.py +0 -0
  31. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/attr/__init__.py +0 -0
  32. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/attr/type.py +0 -0
  33. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/__init__.py +0 -0
  34. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/base64.py +0 -0
  35. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/git.py +0 -0
  36. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/git_subtree.py +0 -0
  37. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/group.py +0 -0
  38. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/http.py +0 -0
  39. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/jwt.py +0 -0
  40. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/history.py +0 -0
  41. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/input.py +0 -0
  42. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/llm_ask.py +0 -0
  43. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/previous-session.js +0 -0
  44. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/tool/__init__.py +0 -0
  45. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/tool/api.py +0 -0
  46. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/tool/cli.py +0 -0
  47. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/tool/file.py +0 -0
  48. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/tool/rag.py +0 -0
  49. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/llm/tool/web.py +0 -0
  50. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/md5.py +0 -0
  51. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/__init__.py +0 -0
  52. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  53. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
  54. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
  55. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  56. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  57. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  58. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  59. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  60. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
  61. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
  62. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
  63. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
  64. {zrb-1.15.3 → zrb-1.15.6}/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
  65. {zrb-1.15.3 → zrb-1.15.6}/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
  66. {zrb-1.15.3 → zrb-1.15.6}/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
  67. {zrb-1.15.3 → zrb-1.15.6}/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
  68. {zrb-1.15.3 → zrb-1.15.6}/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
  69. {zrb-1.15.3 → zrb-1.15.6}/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
  70. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
  71. {zrb-1.15.3 → zrb-1.15.6}/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
  72. {zrb-1.15.3 → zrb-1.15.6}/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
  73. {zrb-1.15.3 → zrb-1.15.6}/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
  74. {zrb-1.15.3 → zrb-1.15.6}/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
  75. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
  76. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
  77. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
  78. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
  79. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  80. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
  81. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
  82. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
  83. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  84. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  85. {zrb-1.15.3 → zrb-1.15.6}/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
  86. {zrb-1.15.3 → zrb-1.15.6}/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
  87. {zrb-1.15.3 → zrb-1.15.6}/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
  88. {zrb-1.15.3 → zrb-1.15.6}/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
  89. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  90. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  91. {zrb-1.15.3 → zrb-1.15.6}/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
  92. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  93. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  94. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
  95. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  96. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
  97. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
  98. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
  99. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
  100. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  101. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  102. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  103. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
  104. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
  105. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
  106. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
  107. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  108. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
  109. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
  110. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  111. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
  112. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
  113. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
  114. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
  115. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
  116. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  117. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  118. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  119. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
  120. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
  121. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
  122. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
  123. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  124. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  125. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  126. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
  127. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
  128. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
  129. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
  130. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  131. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
  132. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
  133. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
  134. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
  135. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
  136. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
  137. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
  138. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
  139. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
  140. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
  141. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
  142. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
  143. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
  144. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
  145. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
  146. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
  147. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
  148. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
  149. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  150. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
  151. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  152. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  153. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  154. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  155. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  156. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
  157. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
  158. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
  159. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
  160. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
  161. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
  162. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
  163. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
  164. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
  165. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
  166. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
  167. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
  168. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
  169. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
  170. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
  171. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
  172. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
  173. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
  174. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  175. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  176. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  177. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
  178. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
  179. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
  180. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
  181. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
  182. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
  183. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
  184. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
  185. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
  186. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
  187. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
  188. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
  189. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
  190. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
  191. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
  192. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
  193. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
  194. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
  195. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
  196. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
  197. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
  198. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
  199. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  200. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
  201. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
  202. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
  203. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  204. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
  205. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
  206. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
  207. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
  208. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
  209. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
  210. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
  211. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
  212. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
  213. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
  214. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  215. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/create/__init__.py +0 -0
  216. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  217. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  218. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/project/create/project_task.py +0 -0
  219. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/python.py +0 -0
  220. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/random.py +0 -0
  221. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  222. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  223. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/setup/common_input.py +0 -0
  224. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  225. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  226. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  227. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  228. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/setup/ubuntu.py +0 -0
  229. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
  230. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
  231. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
  232. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/shell/__init__.py +0 -0
  233. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  234. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  235. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  236. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  237. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/todo.py +0 -0
  238. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/builtin/uuid.py +0 -0
  239. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/callback/__init__.py +0 -0
  240. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/callback/any_callback.py +0 -0
  241. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/callback/callback.py +0 -0
  242. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/cmd/__init__.py +0 -0
  243. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/cmd/cmd_result.py +0 -0
  244. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/cmd/cmd_val.py +0 -0
  245. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/default_prompt/file_extractor_system_prompt.md +0 -0
  246. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/default_prompt/interactive_system_prompt.md +0 -0
  247. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/default_prompt/persona.md +0 -0
  248. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/default_prompt/repo_extractor_system_prompt.md +0 -0
  249. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/default_prompt/repo_summarizer_system_prompt.md +0 -0
  250. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/default_prompt/summarization_prompt.md +0 -0
  251. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/default_prompt/system_prompt.md +0 -0
  252. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/llm_config.py +0 -0
  253. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/llm_context/config.py +0 -0
  254. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/llm_context/config_parser.py +0 -0
  255. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/config/web_auth_config.py +0 -0
  256. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/content_transformer/__init__.py +0 -0
  257. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  258. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/content_transformer/content_transformer.py +0 -0
  259. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/context/__init__.py +0 -0
  260. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/context/any_context.py +0 -0
  261. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/context/any_shared_context.py +0 -0
  262. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/dot_dict/__init__.py +0 -0
  263. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/dot_dict/dot_dict.py +0 -0
  264. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/env/__init__.py +0 -0
  265. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/env/any_env.py +0 -0
  266. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/env/env.py +0 -0
  267. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/env/env_file.py +0 -0
  268. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/env/env_map.py +0 -0
  269. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/group/__init__.py +0 -0
  270. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/group/any_group.py +0 -0
  271. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/group/group.py +0 -0
  272. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/input/__init__.py +0 -0
  273. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/input/bool_input.py +0 -0
  274. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/input/float_input.py +0 -0
  275. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/input/int_input.py +0 -0
  276. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/input/option_input.py +0 -0
  277. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/input/password_input.py +0 -0
  278. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/input/str_input.py +0 -0
  279. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/input/text_input.py +0 -0
  280. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/__init__.py +0 -0
  281. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_app.py +0 -0
  282. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/__init__.py +0 -0
  283. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/docs_route.py +0 -0
  284. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
  285. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
  286. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/error_page/view.html +0 -0
  287. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
  288. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
  289. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/home_page/view.html +0 -0
  290. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/login_api_route.py +0 -0
  291. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
  292. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/login_page/view.html +0 -0
  293. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/logout_api_route.py +0 -0
  294. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
  295. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/logout_page/view.html +0 -0
  296. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
  297. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
  298. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
  299. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
  300. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
  301. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
  302. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
  303. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/global_template.html +0 -0
  304. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
  305. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/common.css +0 -0
  306. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/common.js +0 -0
  307. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
  308. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
  309. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
  310. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.amber.min.css +0 -0
  311. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.blue.min.css +0 -0
  312. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.cyan.min.css +0 -0
  313. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.fuchsia.min.css +0 -0
  314. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.green.min.css +0 -0
  315. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.grey.min.css +0 -0
  316. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.indigo.min.css +0 -0
  317. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.jade.min.css +0 -0
  318. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.lime.min.css +0 -0
  319. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.min.css +0 -0
  320. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.orange.min.css +0 -0
  321. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.pink.min.css +0 -0
  322. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.pumpkin.min.css +0 -0
  323. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.purple.min.css +0 -0
  324. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.red.min.css +0 -0
  325. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.sand.min.css +0 -0
  326. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.slate.min.css +0 -0
  327. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.violet.min.css +0 -0
  328. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.yellow.min.css +0 -0
  329. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/pico-css/pico.zinc.min.css +0 -0
  330. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
  331. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
  332. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
  333. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
  334. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/static/static_route.py +0 -0
  335. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
  336. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_schema/session.py +0 -0
  337. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_schema/token.py +0 -0
  338. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_schema/user.py +0 -0
  339. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_util/cookie.py +0 -0
  340. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_util/html.py +0 -0
  341. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_util/token.py +0 -0
  342. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/runner/web_util/user.py +0 -0
  343. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/session/__init__.py +0 -0
  344. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/session/any_session.py +0 -0
  345. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/session/session.py +0 -0
  346. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/session_state_log/__init__.py +0 -0
  347. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/session_state_log/session_state_log.py +0 -0
  348. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/session_state_logger/__init__.py +0 -0
  349. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  350. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  351. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
  352. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/__init__.py +0 -0
  353. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/base/__init__.py +0 -0
  354. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/base/execution.py +0 -0
  355. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/base/monitoring.py +0 -0
  356. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/base/operators.py +0 -0
  357. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/base_trigger.py +0 -0
  358. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/cmd_task.py +0 -0
  359. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/http_check.py +0 -0
  360. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/__init__.py +0 -0
  361. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/config.py +0 -0
  362. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/conversation_history.py +0 -0
  363. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/conversation_history_model.py +0 -0
  364. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/default_workflow/coding.md +0 -0
  365. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/default_workflow/copywriting.md +0 -0
  366. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/default_workflow/researching.md +0 -0
  367. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/error.py +0 -0
  368. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/prompt.py +0 -0
  369. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/llm/typing.py +0 -0
  370. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/make_task.py +0 -0
  371. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/rsync_task.py +0 -0
  372. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/scaffolder.py +0 -0
  373. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/scheduler.py +0 -0
  374. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/task.py +0 -0
  375. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task/tcp_check.py +0 -0
  376. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task_status/__init__.py +0 -0
  377. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/task_status/task_status.py +0 -0
  378. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/__init__.py +0 -0
  379. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/attr.py +0 -0
  380. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/callable.py +0 -0
  381. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/cli/__init__.py +0 -0
  382. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/cli/style.py +0 -0
  383. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/cli/subcommand.py +0 -0
  384. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/cmd/__init__.py +0 -0
  385. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/cmd/command.py +0 -0
  386. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/cmd/remote.py +0 -0
  387. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/codemod/__init__.py +0 -0
  388. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/codemod/modification_mode.py +0 -0
  389. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/codemod/modify_class.py +0 -0
  390. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/codemod/modify_class_parent.py +0 -0
  391. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/codemod/modify_class_property.py +0 -0
  392. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/codemod/modify_dict.py +0 -0
  393. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/codemod/modify_function.py +0 -0
  394. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/codemod/modify_function_call.py +0 -0
  395. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/codemod/modify_method.py +0 -0
  396. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/codemod/modify_module.py +0 -0
  397. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/cron.py +0 -0
  398. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/file.py +0 -0
  399. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/git.py +0 -0
  400. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/git_diff_model.py +0 -0
  401. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/git_subtree.py +0 -0
  402. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/git_subtree_model.py +0 -0
  403. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/group.py +0 -0
  404. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/init_path.py +0 -0
  405. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/llm/prompt.py +0 -0
  406. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/load.py +0 -0
  407. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/run.py +0 -0
  408. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/string/__init__.py +0 -0
  409. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/string/conversion.py +0 -0
  410. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/string/format.py +0 -0
  411. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/string/name.py +0 -0
  412. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/todo.py +0 -0
  413. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/util/todo_model.py +0 -0
  414. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/xcom/__init__.py +0 -0
  415. {zrb-1.15.3 → zrb-1.15.6}/src/zrb/xcom/xcom.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: zrb
3
- Version: 1.15.3
3
+ Version: 1.15.6
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
@@ -16,21 +16,20 @@ Classifier: Programming Language :: Python :: 3.13
16
16
  Provides-Extra: all
17
17
  Provides-Extra: playwright
18
18
  Provides-Extra: rag
19
- Requires-Dist: beautifulsoup4 (>=4.13.3,<5.0.0)
20
- Requires-Dist: black (>=25.1.0,<25.2.0)
19
+ Requires-Dist: beautifulsoup4 (>=4.13.4,<5.0.0)
20
+ Requires-Dist: black (>=25.1.0,<26.0.0)
21
21
  Requires-Dist: chromadb (>=0.6.3,<0.7.0) ; extra == "rag" or extra == "all"
22
22
  Requires-Dist: fastapi[standard] (>=0.116.1,<0.117.0)
23
- Requires-Dist: isort (>=6.0.1,<6.1.0)
24
- Requires-Dist: libcst (>=1.7.0,<2.0.0)
23
+ Requires-Dist: isort (>=6.0.1,<7.0.0)
24
+ Requires-Dist: libcst (>=1.8.2,<2.0.0)
25
25
  Requires-Dist: markdownify (>=1.2.0,<2.0.0)
26
- Requires-Dist: openai (>=1.99.7)
27
- Requires-Dist: pdfplumber (>=0.11.6,<0.12.0)
28
- Requires-Dist: playwright (>=1.53.0,<2.0.0) ; extra == "playwright" or extra == "all"
26
+ Requires-Dist: pdfplumber (>=0.11.7,<0.12.0)
27
+ Requires-Dist: playwright (>=1.54.0,<2.0.0) ; extra == "playwright" or extra == "all"
29
28
  Requires-Dist: psutil (>=7.0.0,<8.0.0)
30
- Requires-Dist: pydantic-ai-slim[anthropic,bedrock,cli,cohere,google,groq,huggingface,mcp,mistral,openai,vertexai] (>=0.7.0,<0.8.0)
29
+ Requires-Dist: pydantic-ai-slim[anthropic,bedrock,cli,cohere,google,groq,huggingface,mcp,mistral,openai,vertexai] (>=0.7.4,<0.8.0)
31
30
  Requires-Dist: pyjwt (>=2.10.1,<3.0.0)
32
31
  Requires-Dist: python-dotenv (>=1.1.1,<2.0.0)
33
- Requires-Dist: python-jose[cryptography] (>=3.4.0,<4.0.0)
32
+ Requires-Dist: python-jose[cryptography] (>=3.5.0,<4.0.0)
34
33
  Requires-Dist: requests (>=2.32.4,<3.0.0)
35
34
  Requires-Dist: tiktoken (>=0.8.0,<0.9.0)
36
35
  Requires-Dist: ulid-py (>=1.1.0,<2.0.0)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.15.3"
3
+ version = "1.15.6"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -39,30 +39,27 @@ exclude = [
39
39
  [tool.poetry.dependencies]
40
40
  python = ">=3.10.0,<4.0.0"
41
41
  python-dotenv = "^1.1.1"
42
- black = "~25.1.0"
43
- isort = "~6.0.1"
42
+ black = "^25.1.0"
43
+ isort = "^6.0.1"
44
44
  requests = "^2.32.4"
45
- libcst = "^1.7.0"
46
- beautifulsoup4 = "^4.13.3"
47
- pdfplumber = "^0.11.6"
45
+ libcst = "^1.8.2"
46
+ beautifulsoup4 = "^4.13.4"
47
+ pdfplumber = "^0.11.7"
48
48
  fastapi = {extras = ["standard"], version = "^0.116.1"}
49
- python-jose = {extras = ["cryptography"], version = "^3.4.0"}
49
+ python-jose = {extras = ["cryptography"], version = "^3.5.0"}
50
50
  ulid-py = "^1.1.0"
51
51
  psutil = "^7.0.0"
52
- pyjwt = "^2.10.1"
53
52
 
54
53
  # NOTE: Look at https://github.com/pydantic/pydantic-ai/blob/main/pydantic_ai_slim/pyproject.toml
55
54
  # - We want to include all models, as well as mcp capability.
56
55
  # - We also need prompt-toolkit and rich which are included in pydantic ai's cli optional dependency
57
- pydantic-ai-slim = {extras = ["openai", "cohere", "vertexai", "google", "anthropic", "groq", "mistral", "bedrock", "huggingface", "cli", "mcp"], version = "^0.7.0"}
58
-
59
- # NOTE: On Pydantic AI 0.7.0, OpenAI is 1.99.2 to 1.99.6 seems to be broken
60
- openai = ">=1.99.7"
56
+ pydantic-ai-slim = {extras = ["openai", "cohere", "vertexai", "google", "anthropic", "groq", "mistral", "bedrock", "huggingface", "cli", "mcp"], version = "~0.7.4"}
61
57
 
62
58
  tiktoken = "^0.8.0"
63
- playwright = {version = "^1.53.0", optional = true}
59
+ playwright = {version = "^1.54.0", optional = true}
64
60
  chromadb = {version = "^0.6.3", optional = true}
65
61
  markdownify = "^1.2.0"
62
+ pyjwt = "^2.10.1"
66
63
 
67
64
  [tool.poetry.extras]
68
65
  # poetry install -E rag
@@ -71,17 +68,18 @@ playwright = ["playwright"]
71
68
  all = ["chromadb", "playwright"]
72
69
 
73
70
  [tool.poetry.group.dev.dependencies]
74
- alembic = "^1.16.2" # FastApp dependencies
75
- autopep8 = "^2.0.4"
76
- flake8 = "~7.2.0"
77
- pytest = "~8.3.5"
78
- pytest-cov = "~6.1.0"
79
- pytest-asyncio = "~0.26.0"
71
+ alembic = "^1.16.4" # FastApp dependencies
72
+ autopep8 = "^2.3.2"
73
+ flake8 = "^7.2.0"
74
+ pytest = "^8.3.5"
75
+ pytest-cov = "^6.1.0"
76
+ pytest-asyncio = "^0.26.0"
80
77
  sqlmodel = "^0.0.24" # FastApp dependencies
81
- tomlkit = "^0.13.2"
78
+ tomlkit = "^0.13.3"
82
79
 
83
80
  [tool.pytest.ini_options]
84
81
  asyncio_default_fixture_loop_scope = "function"
82
+ norecursedirs = "playground src/zrb/builtin/project/add/fastapp/fastapp_template"
85
83
 
86
84
  [tool.poetry.scripts]
87
85
  zrb = "zrb.__main__:serve_cli"
@@ -10,6 +10,7 @@ import sys
10
10
 
11
11
  from zrb.config.llm_config import llm_config
12
12
  from zrb.context.any_context import AnyContext
13
+ from zrb.util.cli.markdown import render_markdown
13
14
  from zrb.util.cli.style import stylize_blue, stylize_bold_yellow, stylize_faint
14
15
  from zrb.util.string.conversion import to_boolean
15
16
 
@@ -200,27 +201,13 @@ async def _trigger_ask_and_wait_for_result(
200
201
  ctx, user_prompt, modes, yolo_mode, previous_session_name, start_new
201
202
  )
202
203
  result = await _wait_ask_result(ctx)
203
- md_result = _render_markdown(result) if result is not None else ""
204
+ md_result = render_markdown(result) if result is not None else ""
204
205
  ctx.print("\n🤖 >>", plain=True)
205
206
  ctx.print(md_result, plain=True)
206
207
  ctx.print("", plain=True)
207
208
  return result
208
209
 
209
210
 
210
- def _render_markdown(markdown_text: str) -> str:
211
- """
212
- Renders Markdown to a string, ensuring link URLs are visible.
213
- """
214
- from rich.console import Console
215
- from rich.markdown import Markdown
216
-
217
- console = Console()
218
- markdown = Markdown(markdown_text, hyperlinks=False)
219
- with console.capture() as capture:
220
- console.print(markdown)
221
- return capture.get()
222
-
223
-
224
211
  def get_llm_ask_input_mapping(callback_ctx: AnyContext):
225
212
  """
226
213
  Generates the input mapping for the LLM ask task from the callback context.
@@ -6,6 +6,7 @@ from zrb.builtin.llm.tool.sub_agent import create_sub_agent_tool
6
6
  from zrb.config.config import CFG
7
7
  from zrb.config.llm_rate_limitter import llm_rate_limitter
8
8
  from zrb.context.any_context import AnyContext
9
+ from zrb.util.cli.style import stylize_faint
9
10
 
10
11
  _DEFAULT_EXTENSIONS = [
11
12
  "py",
@@ -112,7 +113,7 @@ async def analyze_repo(
112
113
  )
113
114
  abs_path = os.path.abspath(os.path.expanduser(path))
114
115
  file_metadatas = _get_file_metadatas(abs_path, extensions, exclude_patterns)
115
- ctx.print("Extraction")
116
+ ctx.print(stylize_faint(" 📝 Extraction"), plain=True)
116
117
  extracted_infos = await _extract_info(
117
118
  ctx,
118
119
  file_metadatas=file_metadatas,
@@ -121,10 +122,10 @@ async def analyze_repo(
121
122
  )
122
123
  if len(extracted_infos) == 1:
123
124
  return extracted_infos[0]
124
- ctx.print("Summarization")
125
+ ctx.print(stylize_faint(" 📝 Summarization"), plain=True)
125
126
  summarized_infos = extracted_infos
126
127
  while len(summarized_infos) > 1:
127
- ctx.print("Summarization")
128
+ ctx.print(stylize_faint(" 📝 Summarization"), plain=True)
128
129
  summarized_infos = await _summarize_info(
129
130
  ctx,
130
131
  extracted_infos=summarized_infos,
@@ -26,6 +26,7 @@ def create_sub_agent_tool(
26
26
  tools: "list[ToolOrCallable]" = [],
27
27
  toolsets: list["AbstractToolset[Agent]"] = [],
28
28
  is_yolo_mode: bool | None = None,
29
+ log_indent_level: int = 2,
29
30
  ) -> Callable[[AnyContext, str], Coroutine[Any, Any, str]]:
30
31
  """
31
32
  Creates a "tool that is another AI agent," capable of handling complex,
@@ -110,15 +111,15 @@ def create_sub_agent_tool(
110
111
  user_prompt=query,
111
112
  attachments=[],
112
113
  history_list=[],
114
+ log_indent_level=log_indent_level,
113
115
  )
114
116
 
115
117
  # Return the sub-agent's final message content
116
118
  if sub_agent_run and sub_agent_run.result:
117
119
  # Return the final message content as a string
118
120
  return json.dumps({"result": sub_agent_run.result.output})
119
- else:
120
- ctx.log_warning("Sub-agent run did not produce a result.")
121
- return "Sub-agent failed to produce a result."
121
+ ctx.log_warning("Sub-agent run did not produce a result.")
122
+ raise ValueError(f"{tool_name} not returning any result")
122
123
 
123
124
  # Set the name and docstring for the callable function
124
125
  run_sub_agent.__name__ = tool_name
@@ -102,6 +102,7 @@ class Config:
102
102
  level = level.upper()
103
103
  log_levels = {
104
104
  "CRITICAL": logging.CRITICAL, # 50
105
+ "FATAL": logging.CRITICAL, # 50
105
106
  "ERROR": logging.ERROR, # 40
106
107
  "WARN": logging.WARNING, # 30
107
108
  "WARNING": logging.WARNING, # 30
@@ -282,7 +283,7 @@ class Config:
282
283
  Maximum number of LLM requests allowed per minute.
283
284
  Default is conservative to accommodate free-tier LLM providers.
284
285
  """
285
- return int(self._getenv("LLM_MAX_REQUESTS_PER_MINUTE", "15"))
286
+ return int(self._getenv("LLM_MAX_REQUESTS_PER_MINUTE", "60"))
286
287
 
287
288
  @property
288
289
  def LLM_MAX_TOKENS_PER_MINUTE(self) -> int:
@@ -295,7 +296,7 @@ class Config:
295
296
  @property
296
297
  def LLM_MAX_TOKENS_PER_REQUEST(self) -> int:
297
298
  """Maximum number of tokens allowed per individual LLM request."""
298
- return int(self._getenv("LLM_MAX_TOKENS_PER_REQUEST", "50000"))
299
+ return int(self._getenv("LLM_MAX_TOKENS_PER_REQUEST", "100000"))
299
300
 
300
301
  @property
301
302
  def LLM_THROTTLE_SLEEP(self) -> float:
@@ -435,5 +436,13 @@ class Config:
435
436
  def LLM_CONTEXT_FILE(self) -> str:
436
437
  return self._getenv("LLM_CONTEXT_FILE", "ZRB.md")
437
438
 
439
+ @property
440
+ def USE_TIKTOKEN(self) -> bool:
441
+ return to_boolean(self._getenv("USE_TIKTOKEN", "true"))
442
+
443
+ @property
444
+ def TIKTOKEN_ENCODING_NAME(self) -> str:
445
+ return self._getenv("TIKTOKEN_ENCODING_NAME", "cl100k_base")
446
+
438
447
 
439
448
  CFG = Config()
@@ -3,27 +3,9 @@ import time
3
3
  from collections import deque
4
4
  from typing import Callable
5
5
 
6
- import tiktoken
7
-
8
6
  from zrb.config.config import CFG
9
7
 
10
8
 
11
- def _estimate_token(text: str) -> int:
12
- """
13
- Estimates the number of tokens in a given text.
14
- Tries to use the 'gpt-4o' model's tokenizer for an accurate count.
15
- If the tokenizer is unavailable (e.g., due to network issues),
16
- it falls back to a heuristic of 4 characters per token.
17
- """
18
- try:
19
- # Primary method: Use tiktoken for an accurate count
20
- enc = tiktoken.encoding_for_model("gpt-4o")
21
- return len(enc.encode(text))
22
- except Exception:
23
- # Fallback method: Heuristic (4 characters per token)
24
- return len(text) // 4
25
-
26
-
27
9
  class LLMRateLimiter:
28
10
  """
29
11
  Helper class to enforce LLM API rate limits and throttling.
@@ -36,13 +18,15 @@ class LLMRateLimiter:
36
18
  max_tokens_per_minute: int | None = None,
37
19
  max_tokens_per_request: int | None = None,
38
20
  throttle_sleep: float | None = None,
39
- token_counter_fn: Callable[[str], int] | None = None,
21
+ use_tiktoken: bool | None = None,
22
+ tiktoken_encodeing_name: str | None = None,
40
23
  ):
41
24
  self._max_requests_per_minute = max_requests_per_minute
42
25
  self._max_tokens_per_minute = max_tokens_per_minute
43
26
  self._max_tokens_per_request = max_tokens_per_request
44
27
  self._throttle_sleep = throttle_sleep
45
- self._token_counter_fn = token_counter_fn
28
+ self._use_tiktoken = use_tiktoken
29
+ self._tiktoken_encoding_name = tiktoken_encodeing_name
46
30
  self.request_times = deque()
47
31
  self.token_times = deque()
48
32
 
@@ -71,10 +55,16 @@ class LLMRateLimiter:
71
55
  return CFG.LLM_THROTTLE_SLEEP
72
56
 
73
57
  @property
74
- def count_token(self) -> Callable[[str], int]:
75
- if self._token_counter_fn is not None:
76
- return self._token_counter_fn
77
- return _estimate_token
58
+ def use_tiktoken(self) -> bool:
59
+ if self._use_tiktoken is not None:
60
+ return self._use_tiktoken
61
+ return CFG.USE_TIKTOKEN
62
+
63
+ @property
64
+ def tiktoken_encoding_name(self) -> str:
65
+ if self._tiktoken_encoding_name is not None:
66
+ return self._tiktoken_encoding_name
67
+ return CFG.TIKTOKEN_ENCODING_NAME
78
68
 
79
69
  def set_max_requests_per_minute(self, value: int):
80
70
  self._max_requests_per_minute = value
@@ -88,24 +78,43 @@ class LLMRateLimiter:
88
78
  def set_throttle_sleep(self, value: float):
89
79
  self._throttle_sleep = value
90
80
 
91
- def set_token_counter_fn(self, fn: Callable[[str], int]):
92
- self._token_counter_fn = fn
81
+ def count_token(self, prompt: str) -> int:
82
+ if not self.use_tiktoken:
83
+ return self._fallback_count_token(prompt)
84
+ try:
85
+ import tiktoken
86
+
87
+ enc = tiktoken.get_encoding(self.tiktoken_encoding_name)
88
+ return len(enc.encode(prompt))
89
+ except Exception:
90
+ return self._fallback_count_token(prompt)
91
+
92
+ def _fallback_count_token(self, prompt: str) -> int:
93
+ return len(prompt) // 4
93
94
 
94
95
  def clip_prompt(self, prompt: str, limit: int) -> str:
95
- token_count = self.count_token(prompt)
96
- if token_count <= limit:
97
- return prompt
98
- while token_count > limit:
99
- prompt_parts = prompt.split(" ")
100
- last_part_index = len(prompt_parts) - 2
101
- clipped_prompt = " ".join(prompt_parts[:last_part_index])
102
- clipped_prompt += "(Content clipped...)"
103
- token_count = self.count_token(clipped_prompt)
104
- if token_count < limit:
105
- return clipped_prompt
106
- return prompt[:limit]
107
-
108
- async def throttle(self, prompt: str):
96
+ if not self.use_tiktoken:
97
+ return self._fallback_clip_prompt(prompt, limit)
98
+ try:
99
+ import tiktoken
100
+
101
+ enc = tiktoken.get_encoding("cl100k_base")
102
+ tokens = enc.encode(prompt)
103
+ if len(tokens) <= limit:
104
+ return prompt
105
+ truncated = tokens[: limit - 3]
106
+ clipped_text = enc.decode(truncated)
107
+ return clipped_text + "..."
108
+ except Exception:
109
+ return self._fallback_clip_prompt(prompt, limit)
110
+
111
+ def _fallback_clip_prompt(self, prompt: str, limit: int) -> str:
112
+ char_limit = limit * 4 if limit * 4 <= 10 else limit * 4 - 10
113
+ return prompt[:char_limit] + "..."
114
+
115
+ async def throttle(
116
+ self, prompt: str, throttle_notif_callback: Callable | None = None
117
+ ):
109
118
  now = time.time()
110
119
  tokens = self.count_token(prompt)
111
120
  # Clean up old entries
@@ -123,6 +132,8 @@ class LLMRateLimiter:
123
132
  len(self.request_times) >= self.max_requests_per_minute
124
133
  or sum(t for _, t in self.token_times) + tokens > self.max_tokens_per_minute
125
134
  ):
135
+ if throttle_notif_callback is not None:
136
+ throttle_notif_callback()
126
137
  await asyncio.sleep(self.throttle_sleep)
127
138
  now = time.time()
128
139
  while self.request_times and now - self.request_times[0] > 60:
@@ -63,7 +63,7 @@ class Context(AnyContext):
63
63
 
64
64
  @property
65
65
  def session(self) -> AnySession | None:
66
- return self._shared_ctx._session
66
+ return self._shared_ctx.session
67
67
 
68
68
  def update_task_env(self, task_env: dict[str, str]):
69
69
  self._env.update(task_env)
@@ -40,11 +40,7 @@ class SharedContext(AnySharedContext):
40
40
 
41
41
  def __repr__(self):
42
42
  class_name = self.__class__.__name__
43
- input = self._input
44
- args = self._args
45
- env = self._env
46
- xcom = self._xcom
47
- return f"<{class_name} input={input} args={args} xcom={xcom} env={env}>"
43
+ return f"<{class_name}>"
48
44
 
49
45
  @property
50
46
  def is_web_mode(self) -> bool:
@@ -1,4 +1,5 @@
1
1
  from abc import ABC, abstractmethod
2
+ from typing import Any
2
3
 
3
4
  from zrb.context.any_shared_context import AnySharedContext
4
5
 
@@ -35,7 +36,10 @@ class AnyInput(ABC):
35
36
 
36
37
  @abstractmethod
37
38
  def update_shared_context(
38
- self, shared_ctx: AnySharedContext, str_value: str | None = None
39
+ self,
40
+ shared_ctx: AnySharedContext,
41
+ str_value: str | None = None,
42
+ value: Any = None,
39
43
  ):
40
44
  pass
41
45
 
@@ -58,11 +58,15 @@ class BaseInput(AnyInput):
58
58
  return f'<input name="{name}" placeholder="{description}" value="{default}" />'
59
59
 
60
60
  def update_shared_context(
61
- self, shared_ctx: AnySharedContext, str_value: str | None = None
61
+ self,
62
+ shared_ctx: AnySharedContext,
63
+ str_value: str | None = None,
64
+ value: Any = None,
62
65
  ):
63
- if str_value is None:
64
- str_value = self.get_default_str(shared_ctx)
65
- value = self._parse_str_value(str_value)
66
+ if value is None:
67
+ if str_value is None:
68
+ str_value = self.get_default_str(shared_ctx)
69
+ value = self._parse_str_value(str_value)
66
70
  if self.name in shared_ctx.input:
67
71
  raise ValueError(f"Input already defined in the context: {self.name}")
68
72
  shared_ctx.input[self.name] = value
@@ -7,7 +7,7 @@ from zrb.context.any_context import AnyContext
7
7
  from zrb.context.shared_context import SharedContext
8
8
  from zrb.group.any_group import AnyGroup
9
9
  from zrb.group.group import Group
10
- from zrb.runner.common_util import get_run_kwargs
10
+ from zrb.runner.common_util import get_task_str_kwargs
11
11
  from zrb.session.session import Session
12
12
  from zrb.session_state_logger.session_state_logger_factory import session_state_logger
13
13
  from zrb.task.any_task import AnyTask
@@ -38,23 +38,25 @@ class Cli(Group):
38
38
  def banner(self) -> str:
39
39
  return CFG.BANNER
40
40
 
41
- def run(self, args: list[str] = []):
42
- kwargs, args = self._extract_kwargs_from_args(args)
43
- node, node_path, args = extract_node_from_args(self, args)
41
+ def run(self, str_args: list[str] = []):
42
+ str_kwargs, str_args = self._extract_kwargs_from_args(str_args)
43
+ node, node_path, str_args = extract_node_from_args(self, str_args)
44
44
  if isinstance(node, AnyGroup):
45
45
  self._show_group_info(node)
46
46
  return
47
- if "h" in kwargs or "help" in kwargs:
47
+ if "h" in str_kwargs or "help" in str_kwargs:
48
48
  self._show_task_info(node)
49
49
  return
50
- run_kwargs = get_run_kwargs(task=node, args=args, kwargs=kwargs, cli_mode=True)
50
+ task_str_kwargs = get_task_str_kwargs(
51
+ task=node, str_args=str_args, str_kwargs=str_kwargs, cli_mode=True
52
+ )
51
53
  try:
52
- result = self._run_task(node, args, run_kwargs)
54
+ result = self._run_task(node, str_args, task_str_kwargs)
53
55
  if result is not None:
54
56
  print(result)
55
57
  return result
56
58
  finally:
57
- run_command = self._get_run_command(node_path, run_kwargs)
59
+ run_command = self._get_run_command(node_path, task_str_kwargs)
58
60
  self._print_run_command(run_command)
59
61
 
60
62
  def _print_run_command(self, run_command: str):
@@ -64,11 +66,14 @@ class Cli(Group):
64
66
  file=sys.stderr,
65
67
  )
66
68
 
67
- def _get_run_command(self, node_path: list[str], run_kwargs: dict[str, str]) -> str:
69
+ def _get_run_command(
70
+ self, node_path: list[str], task_str_kwargs: dict[str, str]
71
+ ) -> str:
68
72
  parts = [self.name] + node_path
69
- if len(run_kwargs) > 0:
73
+ if len(task_str_kwargs) > 0:
70
74
  parts += [
71
- self._get_run_command_param(key, val) for key, val in run_kwargs.items()
75
+ self._get_run_command_param(key, val)
76
+ for key, val in task_str_kwargs.items()
72
77
  ]
73
78
  return " ".join(parts)
74
79
 
@@ -81,13 +86,9 @@ class Cli(Group):
81
86
  self, task: AnyTask, args: list[str], run_kwargs: dict[str, str]
82
87
  ) -> tuple[Any]:
83
88
  shared_ctx = SharedContext(args=args)
84
- for task_input in task.inputs:
85
- if task_input.name in run_kwargs:
86
- task_input.update_shared_context(
87
- shared_ctx, run_kwargs[task_input.name]
88
- )
89
- continue
90
- return task.run(Session(shared_ctx=shared_ctx, root_group=self))
89
+ return task.run(
90
+ Session(shared_ctx=shared_ctx, root_group=self), str_kwargs=run_kwargs
91
+ )
91
92
 
92
93
  def _show_task_info(self, task: AnyTask):
93
94
  description = task.description
@@ -0,0 +1,36 @@
1
+ from zrb.context.shared_context import SharedContext
2
+ from zrb.task.any_task import AnyTask
3
+
4
+
5
+ def get_task_str_kwargs(
6
+ task: AnyTask, str_args: list[str], str_kwargs: dict[str, str], cli_mode: bool
7
+ ) -> dict[str, str]:
8
+ arg_index = 0
9
+ dummmy_shared_ctx = SharedContext()
10
+ task_str_kwargs = {}
11
+ for task_input in task.inputs:
12
+ task_name = task_input.name
13
+ if task_input.name in str_kwargs:
14
+ task_str_kwargs[task_input.name] = str_kwargs[task_name]
15
+ # Update dummy shared context for next input default value
16
+ task_input.update_shared_context(
17
+ dummmy_shared_ctx, str_value=str_kwargs[task_name]
18
+ )
19
+ elif arg_index < len(str_args) and task_input.allow_positional_parsing:
20
+ task_str_kwargs[task_name] = str_args[arg_index]
21
+ # Update dummy shared context for next input default value
22
+ task_input.update_shared_context(
23
+ dummmy_shared_ctx, str_value=task_str_kwargs[task_name]
24
+ )
25
+ arg_index += 1
26
+ else:
27
+ if cli_mode and task_input.always_prompt:
28
+ str_value = task_input.prompt_cli_str(dummmy_shared_ctx)
29
+ else:
30
+ str_value = task_input.get_default_str(dummmy_shared_ctx)
31
+ task_str_kwargs[task_name] = str_value
32
+ # Update dummy shared context for next input default value
33
+ task_input.update_shared_context(
34
+ dummmy_shared_ctx, str_value=task_str_kwargs[task_name]
35
+ )
36
+ return task_str_kwargs
@@ -3,7 +3,7 @@ from typing import TYPE_CHECKING
3
3
 
4
4
  from zrb.config.web_auth_config import WebAuthConfig
5
5
  from zrb.group.any_group import AnyGroup
6
- from zrb.runner.common_util import get_run_kwargs
6
+ from zrb.runner.common_util import get_task_str_kwargs
7
7
  from zrb.runner.web_util.user import get_user_from_request
8
8
  from zrb.task.any_task import AnyTask
9
9
  from zrb.util.group import NodeNotFoundError, extract_node_from_args
@@ -39,9 +39,9 @@ def serve_task_input_api(
39
39
  if isinstance(task, AnyTask):
40
40
  if not user.can_access_task(task):
41
41
  return JSONResponse(content={"detail": "Forbidden"}, status_code=403)
42
- query_dict = json.loads(query)
43
- run_kwargs = get_run_kwargs(
44
- task=task, args=[], kwargs=query_dict, cli_mode=False
42
+ str_kwargs = json.loads(query)
43
+ task_str_kwargs = get_task_str_kwargs(
44
+ task=task, str_args=[], str_kwargs=str_kwargs, cli_mode=False
45
45
  )
46
- return run_kwargs
46
+ return task_str_kwargs
47
47
  return JSONResponse(content={"detail": "Not found"}, status_code=404)
@@ -148,13 +148,17 @@ class AnyTask(ABC):
148
148
 
149
149
  @abstractmethod
150
150
  def run(
151
- self, session: "AnySession | None" = None, str_kwargs: dict[str, str] = {}
151
+ self,
152
+ session: "AnySession | None" = None,
153
+ str_kwargs: dict[str, str] | None = None,
154
+ kwargs: dict[str, Any] | None = None,
152
155
  ) -> Any:
153
156
  """Runs the task synchronously.
154
157
 
155
158
  Args:
156
159
  session (AnySession): The shared session.
157
160
  str_kwargs(dict[str, str]): The input string values.
161
+ kwargs(dict[str, Any]): The input values.
158
162
 
159
163
  Returns:
160
164
  Any: The result of the task execution.
@@ -163,13 +167,17 @@ class AnyTask(ABC):
163
167
 
164
168
  @abstractmethod
165
169
  async def async_run(
166
- self, session: "AnySession | None" = None, str_kwargs: dict[str, str] = {}
170
+ self,
171
+ session: "AnySession | None" = None,
172
+ str_kwargs: dict[str, str] | None = None,
173
+ kwargs: dict[str, Any] | None = None,
167
174
  ) -> Any:
168
175
  """Runs the task asynchronously.
169
176
 
170
177
  Args:
171
178
  session (AnySession): The shared session.
172
179
  str_kwargs(dict[str, str]): The input string values.
180
+ kwargs(dict[str, Any]): The input values.
173
181
 
174
182
  Returns:
175
183
  Any: The result of the task execution.