zrb 1.5.7__tar.gz → 1.5.9__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 (373) hide show
  1. {zrb-1.5.7 → zrb-1.5.9}/PKG-INFO +2 -2
  2. {zrb-1.5.7 → zrb-1.5.9}/pyproject.toml +2 -2
  3. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/llm/tool/rag.py +4 -3
  4. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/llm_config.py +38 -0
  5. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/any_task.py +22 -6
  6. zrb-1.5.9/src/zrb/task/base/context.py +108 -0
  7. zrb-1.5.9/src/zrb/task/base/dependencies.py +57 -0
  8. zrb-1.5.9/src/zrb/task/base/execution.py +274 -0
  9. zrb-1.5.9/src/zrb/task/base/lifecycle.py +182 -0
  10. zrb-1.5.9/src/zrb/task/base/monitoring.py +134 -0
  11. zrb-1.5.9/src/zrb/task/base/operators.py +41 -0
  12. zrb-1.5.9/src/zrb/task/base_task.py +227 -0
  13. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/cmd_task.py +2 -1
  14. zrb-1.5.9/src/zrb/task/llm/agent.py +141 -0
  15. zrb-1.5.9/src/zrb/task/llm/config.py +83 -0
  16. zrb-1.5.9/src/zrb/task/llm/context.py +95 -0
  17. zrb-1.5.7/src/zrb/task/llm/context_enricher.py → zrb-1.5.9/src/zrb/task/llm/context_enrichment.py +55 -6
  18. zrb-1.5.9/src/zrb/task/llm/history.py +242 -0
  19. zrb-1.5.9/src/zrb/task/llm/history_summarization.py +173 -0
  20. zrb-1.5.9/src/zrb/task/llm/prompt.py +87 -0
  21. zrb-1.5.9/src/zrb/task/llm/typing.py +3 -0
  22. zrb-1.5.9/src/zrb/task/llm_task.py +322 -0
  23. zrb-1.5.9/src/zrb/xcom/__init__.py +0 -0
  24. zrb-1.5.7/src/zrb/task/base_task.py +0 -533
  25. zrb-1.5.7/src/zrb/task/llm/agent_runner.py +0 -53
  26. zrb-1.5.7/src/zrb/task/llm/default_context.py +0 -45
  27. zrb-1.5.7/src/zrb/task/llm/history.py +0 -92
  28. zrb-1.5.7/src/zrb/task/llm/history_summarizer.py +0 -71
  29. zrb-1.5.7/src/zrb/task/llm_task.py +0 -505
  30. {zrb-1.5.7 → zrb-1.5.9}/README.md +0 -0
  31. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/__init__.py +0 -0
  32. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/__main__.py +0 -0
  33. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/attr/__init__.py +0 -0
  34. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/attr/type.py +0 -0
  35. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/__init__.py +0 -0
  36. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/base64.py +0 -0
  37. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/git.py +0 -0
  38. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/git_subtree.py +0 -0
  39. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/group.py +0 -0
  40. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/llm/history.py +0 -0
  41. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/llm/input.py +0 -0
  42. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/llm/llm_chat.py +0 -0
  43. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/llm/previous-session.js +0 -0
  44. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/llm/tool/api.py +0 -0
  45. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/llm/tool/cli.py +0 -0
  46. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/llm/tool/file.py +0 -0
  47. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/llm/tool/web.py +0 -0
  48. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/md5.py +0 -0
  49. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/__init__.py +0 -0
  50. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  51. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
  52. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
  53. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  54. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  55. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  56. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  57. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  58. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
  59. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
  60. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
  61. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
  62. {zrb-1.5.7 → zrb-1.5.9}/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
  63. {zrb-1.5.7 → zrb-1.5.9}/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
  64. {zrb-1.5.7 → zrb-1.5.9}/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
  65. {zrb-1.5.7 → zrb-1.5.9}/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
  66. {zrb-1.5.7 → zrb-1.5.9}/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
  67. {zrb-1.5.7 → zrb-1.5.9}/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
  68. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
  69. {zrb-1.5.7 → zrb-1.5.9}/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
  70. {zrb-1.5.7 → zrb-1.5.9}/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
  71. {zrb-1.5.7 → zrb-1.5.9}/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
  72. {zrb-1.5.7 → zrb-1.5.9}/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
  73. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
  74. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
  75. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
  76. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
  77. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  78. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
  79. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
  80. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
  81. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  82. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  83. {zrb-1.5.7 → zrb-1.5.9}/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
  84. {zrb-1.5.7 → zrb-1.5.9}/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
  85. {zrb-1.5.7 → zrb-1.5.9}/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
  86. {zrb-1.5.7 → zrb-1.5.9}/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
  87. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  88. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  89. {zrb-1.5.7 → zrb-1.5.9}/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
  90. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  91. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  92. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
  93. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  94. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
  95. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
  96. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
  97. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
  98. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  99. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  100. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  101. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
  102. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
  103. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
  104. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
  105. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  106. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
  107. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
  108. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  109. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
  110. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
  111. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
  112. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
  113. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
  114. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  115. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  116. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  117. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
  118. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
  119. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
  120. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
  121. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  122. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  123. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  124. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
  125. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
  126. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
  127. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
  128. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  129. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
  130. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
  131. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
  132. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
  133. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
  134. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
  135. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
  136. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
  137. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
  138. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
  139. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
  140. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
  141. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
  142. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
  143. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
  144. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
  145. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
  146. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
  147. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  148. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
  149. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  150. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  151. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  152. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  153. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  154. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
  155. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
  156. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
  157. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
  158. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
  159. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
  160. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
  161. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
  162. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
  163. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
  164. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
  165. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
  166. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
  167. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
  168. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
  169. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
  170. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
  171. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
  172. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  173. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  174. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  175. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
  176. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
  177. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
  178. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
  179. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
  180. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
  181. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
  182. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
  183. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
  184. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
  185. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
  186. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
  187. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
  188. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
  189. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
  190. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
  191. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
  192. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
  193. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
  194. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
  195. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
  196. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
  197. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  198. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
  199. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
  200. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
  201. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  202. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
  203. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
  204. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
  205. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
  206. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
  207. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
  208. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
  209. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
  210. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
  211. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
  212. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  213. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/create/__init__.py +0 -0
  214. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  215. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  216. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/project/create/project_task.py +0 -0
  217. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/python.py +0 -0
  218. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/random.py +0 -0
  219. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  220. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  221. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/setup/common_input.py +0 -0
  222. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  223. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  224. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  225. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  226. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/setup/ubuntu.py +0 -0
  227. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
  228. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
  229. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
  230. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/shell/__init__.py +0 -0
  231. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  232. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  233. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  234. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  235. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/builtin/todo.py +0 -0
  236. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/callback/__init__.py +0 -0
  237. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/callback/any_callback.py +0 -0
  238. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/callback/callback.py +0 -0
  239. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/cmd/__init__.py +0 -0
  240. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/cmd/cmd_result.py +0 -0
  241. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/cmd/cmd_val.py +0 -0
  242. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/config.py +0 -0
  243. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/content_transformer/__init__.py +0 -0
  244. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  245. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/content_transformer/content_transformer.py +0 -0
  246. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/context/__init__.py +0 -0
  247. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/context/any_context.py +0 -0
  248. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/context/any_shared_context.py +0 -0
  249. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/context/context.py +0 -0
  250. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/context/shared_context.py +0 -0
  251. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/dot_dict/__init__.py +0 -0
  252. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/dot_dict/dot_dict.py +0 -0
  253. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/env/__init__.py +0 -0
  254. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/env/any_env.py +0 -0
  255. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/env/env.py +0 -0
  256. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/env/env_file.py +0 -0
  257. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/env/env_map.py +0 -0
  258. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/group/__init__.py +0 -0
  259. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/group/any_group.py +0 -0
  260. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/group/group.py +0 -0
  261. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/input/__init__.py +0 -0
  262. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/input/any_input.py +0 -0
  263. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/input/base_input.py +0 -0
  264. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/input/bool_input.py +0 -0
  265. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/input/float_input.py +0 -0
  266. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/input/int_input.py +0 -0
  267. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/input/option_input.py +0 -0
  268. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/input/password_input.py +0 -0
  269. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/input/str_input.py +0 -0
  270. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/input/text_input.py +0 -0
  271. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/__init__.py +0 -0
  272. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/cli.py +0 -0
  273. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/common_util.py +0 -0
  274. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_app.py +0 -0
  275. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_config/config.py +0 -0
  276. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_config/config_factory.py +0 -0
  277. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/__init__.py +0 -0
  278. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/docs_route.py +0 -0
  279. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
  280. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
  281. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/error_page/view.html +0 -0
  282. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
  283. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
  284. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/home_page/view.html +0 -0
  285. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/login_api_route.py +0 -0
  286. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
  287. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/login_page/view.html +0 -0
  288. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/logout_api_route.py +0 -0
  289. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
  290. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/logout_page/view.html +0 -0
  291. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
  292. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
  293. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
  294. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
  295. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
  296. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
  297. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
  298. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
  299. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/static/resources/common.css +0 -0
  300. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
  301. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
  302. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
  303. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/static/resources/pico.min.css +0 -0
  304. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
  305. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
  306. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
  307. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
  308. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/static/static_route.py +0 -0
  309. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
  310. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
  311. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_schema/session.py +0 -0
  312. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_schema/token.py +0 -0
  313. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_schema/user.py +0 -0
  314. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_util/cookie.py +0 -0
  315. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_util/html.py +0 -0
  316. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_util/token.py +0 -0
  317. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/runner/web_util/user.py +0 -0
  318. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/session/__init__.py +0 -0
  319. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/session/any_session.py +0 -0
  320. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/session/session.py +0 -0
  321. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/session_state_log/__init__.py +0 -0
  322. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/session_state_log/session_state_log.py +0 -0
  323. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/session_state_logger/__init__.py +0 -0
  324. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  325. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  326. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
  327. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/__init__.py +0 -0
  328. {zrb-1.5.7/src/zrb/task/llm → zrb-1.5.9/src/zrb/task/base}/__init__.py +0 -0
  329. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/base_trigger.py +0 -0
  330. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/http_check.py +0 -0
  331. {zrb-1.5.7/src/zrb/task_status → zrb-1.5.9/src/zrb/task/llm}/__init__.py +0 -0
  332. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/llm/error.py +0 -0
  333. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/llm/print_node.py +0 -0
  334. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/llm/tool_wrapper.py +0 -0
  335. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/make_task.py +0 -0
  336. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/rsync_task.py +0 -0
  337. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/scaffolder.py +0 -0
  338. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/scheduler.py +0 -0
  339. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/task.py +0 -0
  340. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task/tcp_check.py +0 -0
  341. {zrb-1.5.7/src/zrb/util → zrb-1.5.9/src/zrb/task_status}/__init__.py +0 -0
  342. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/task_status/task_status.py +0 -0
  343. {zrb-1.5.7/src/zrb/util/cli → zrb-1.5.9/src/zrb/util}/__init__.py +0 -0
  344. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/attr.py +0 -0
  345. {zrb-1.5.7/src/zrb/util/cmd → zrb-1.5.9/src/zrb/util/cli}/__init__.py +0 -0
  346. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/cli/style.py +0 -0
  347. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/cli/subcommand.py +0 -0
  348. {zrb-1.5.7/src/zrb/util/codemod → zrb-1.5.9/src/zrb/util/cmd}/__init__.py +0 -0
  349. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/cmd/command.py +0 -0
  350. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/cmd/remote.py +0 -0
  351. {zrb-1.5.7/src/zrb/util/string → zrb-1.5.9/src/zrb/util/codemod}/__init__.py +0 -0
  352. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/codemod/modification_mode.py +0 -0
  353. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/codemod/modify_class.py +0 -0
  354. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/codemod/modify_class_parent.py +0 -0
  355. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/codemod/modify_class_property.py +0 -0
  356. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/codemod/modify_dict.py +0 -0
  357. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/codemod/modify_function.py +0 -0
  358. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/codemod/modify_function_call.py +0 -0
  359. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/codemod/modify_method.py +0 -0
  360. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/codemod/modify_module.py +0 -0
  361. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/cron.py +0 -0
  362. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/file.py +0 -0
  363. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/git.py +0 -0
  364. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/git_subtree.py +0 -0
  365. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/group.py +0 -0
  366. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/load.py +0 -0
  367. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/run.py +0 -0
  368. {zrb-1.5.7/src/zrb/xcom → zrb-1.5.9/src/zrb/util/string}/__init__.py +0 -0
  369. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/string/conversion.py +0 -0
  370. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/string/format.py +0 -0
  371. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/string/name.py +0 -0
  372. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/util/todo.py +0 -0
  373. {zrb-1.5.7 → zrb-1.5.9}/src/zrb/xcom/xcom.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zrb
3
- Version: 1.5.7
3
+ Version: 1.5.9
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -26,7 +26,7 @@ Requires-Dist: openai (>=1.70.0,<2.0.0) ; extra == "rag" or extra == "all"
26
26
  Requires-Dist: pdfplumber (>=0.11.6,<0.12.0) ; extra == "rag" or extra == "all"
27
27
  Requires-Dist: playwright (>=1.51.0,<2.0.0) ; extra == "playwright" or extra == "all"
28
28
  Requires-Dist: psutil (>=7.0.0,<8.0.0)
29
- Requires-Dist: pydantic-ai (>=0.0.52,<0.0.53)
29
+ Requires-Dist: pydantic-ai (>=0.1.2,<0.2.0)
30
30
  Requires-Dist: python-dotenv (>=1.1.0,<2.0.0)
31
31
  Requires-Dist: python-jose[cryptography] (>=3.4.0,<4.0.0)
32
32
  Requires-Dist: requests (>=2.32.3,<3.0.0)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.5.7"
3
+ version = "1.5.9"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -49,7 +49,7 @@ beautifulsoup4 = "^4.13.3"
49
49
  fastapi = {extras = ["standard"], version = "^0.115.12"}
50
50
  python-jose = {extras = ["cryptography"], version = "^3.4.0"}
51
51
  ulid-py = "^1.1.0"
52
- pydantic-ai = "^0.0.52"
52
+ pydantic-ai = "^0.1.2"
53
53
  openai = {version = "^1.70.0", optional = true}
54
54
  playwright = {version = "^1.51.0", optional = true}
55
55
  psutil = "^7.0.0"
@@ -152,13 +152,14 @@ def create_rag_from_directory(
152
152
 
153
153
  retrieve.__name__ = tool_name
154
154
  retrieve.__doc__ = dedent(
155
- f"""{tool_description}
155
+ f"""
156
+ {tool_description}
156
157
  Args:
157
158
  query (str): The user query to search for in documents.
158
159
  Returns:
159
160
  str: JSON string with search results: {{"ids": [...], "documents": [...], ...}}
160
- """
161
- )
161
+ """
162
+ ).strip()
162
163
  return retrieve
163
164
 
164
165
 
@@ -73,6 +73,9 @@ class LLMConfig:
73
73
  default_system_prompt: str | None = None,
74
74
  default_summarization_prompt: str | None = None,
75
75
  default_context_enrichment_prompt: str | None = None,
76
+ default_summarize_history: bool | None = None,
77
+ default_history_summarization_threshold: int | None = None,
78
+ default_enrich_context: bool | None = None,
76
79
  ):
77
80
  self._default_model_name = (
78
81
  default_model_name
@@ -109,6 +112,21 @@ class LLMConfig:
109
112
  if default_context_enrichment_prompt is not None
110
113
  else os.getenv("ZRB_LLM_CONTEXT_ENRICHMENT_PROMPT", None)
111
114
  )
115
+ self._default_summarize_history = (
116
+ default_summarize_history
117
+ if default_summarize_history is not None
118
+ else os.getenv("ZRB_LLM_SUMMARIZE_HISTORY", "true").lower() == "true"
119
+ )
120
+ self._default_history_summarization_threshold = (
121
+ default_history_summarization_threshold
122
+ if default_history_summarization_threshold is not None
123
+ else int(os.getenv("ZRB_LLM_HISTORY_SUMMARIZATION_THRESHOLD", "5"))
124
+ )
125
+ self._default_enrich_context = (
126
+ default_enrich_context
127
+ if default_enrich_context is not None
128
+ else os.getenv("ZRB_LLM_ENRICH_CONTEXT", "false").lower() == "true"
129
+ )
112
130
  self._default_provider = None
113
131
  self._default_model = None
114
132
 
@@ -164,6 +182,15 @@ class LLMConfig:
164
182
  provider=self.get_default_model_provider(),
165
183
  )
166
184
 
185
+ def get_default_summarize_history(self) -> bool:
186
+ return self._default_summarize_history
187
+
188
+ def get_default_history_summarization_threshold(self) -> int:
189
+ return self._default_history_summarization_threshold
190
+
191
+ def get_default_enrich_context(self) -> bool:
192
+ return self._default_enrich_context
193
+
167
194
  def set_default_persona(self, persona: str):
168
195
  self._default_persona = persona
169
196
 
@@ -191,5 +218,16 @@ class LLMConfig:
191
218
  def set_default_model(self, model: Model | str | None):
192
219
  self._default_model = model
193
220
 
221
+ def set_default_summarize_history(self, summarize_history: bool):
222
+ self._default_summarize_history = summarize_history
223
+
224
+ def set_default_history_summarization_threshold(
225
+ self, history_summarization_threshold: int
226
+ ):
227
+ self._default_history_summarization_threshold = history_summarization_threshold
228
+
229
+ def set_default_enrich_context(self, enrich_context: bool):
230
+ self._default_enrich_context = enrich_context
231
+
194
232
 
195
233
  llm_config = LLMConfig()
@@ -12,12 +12,28 @@ if TYPE_CHECKING:
12
12
 
13
13
 
14
14
  class AnyTask(ABC):
15
- """Abstract base class representing a task in the system.
16
-
17
- This class defines the interface for tasks, including methods for retrieving
18
- task metadata (such as name, color, and description), handling inputs and
19
- environment variables, and managing task dependencies (upstreams and fallbacks).
20
- It also includes methods for running tasks synchronously or asynchronously.
15
+ """Abstract base class defining the interface for all executable tasks within Zrb.
16
+
17
+ This interface specifies the essential properties and methods that any concrete
18
+ task implementation must provide. It covers:
19
+
20
+ - **Metadata:** Properties like `name`, `description`, `color`, and `icon` for
21
+ identification and UI representation.
22
+ - **Configuration:** Properties for defining `inputs` (user-provided parameters)
23
+ and `envs` (environment variables).
24
+ - **Execution Control:** Properties like `cli_only` to restrict execution context.
25
+ - **Dependency Management:** Properties for `upstreams` (prerequisites),
26
+ `fallbacks` (error handling), `successors` (post-completion tasks), and
27
+ `readiness_checks` (for long-running tasks). Methods like `append_*` allow
28
+ programmatic modification of these dependencies.
29
+ - **Context Management:** `get_ctx` method to retrieve the task's specific
30
+ execution context.
31
+ - **Execution Methods:** `run` (synchronous) and `async_run` (asynchronous)
32
+ entry points, along with internal execution helpers (`exec_root_tasks`,
33
+ `exec_chain`, `exec`) defining the execution lifecycle.
34
+
35
+ Concrete task classes (like `BaseTask`) inherit from `AnyTask` and provide
36
+ the actual implementation for these abstract members.
21
37
  """
22
38
 
23
39
  @property
@@ -0,0 +1,108 @@
1
+ import os
2
+ from typing import TYPE_CHECKING
3
+
4
+ from zrb.context.any_context import AnyContext
5
+ from zrb.context.any_shared_context import AnySharedContext
6
+ from zrb.env.any_env import AnyEnv
7
+ from zrb.input.any_input import AnyInput
8
+ from zrb.session.any_session import AnySession
9
+ from zrb.task.any_task import AnyTask
10
+
11
+ if TYPE_CHECKING:
12
+ # Keep BaseTask under TYPE_CHECKING for functions that need it
13
+ from zrb.task.base_task import BaseTask
14
+
15
+
16
+ def build_task_context(task: AnyTask, session: AnySession) -> AnyContext:
17
+ """
18
+ Retrieves the context for the task from the session and enhances it
19
+ with the task's specific environment variables.
20
+ """
21
+ ctx = session.get_ctx(task)
22
+ # Enhance session ctx with current task env
23
+ for env in task.envs:
24
+ env.update_context(ctx)
25
+ return ctx
26
+
27
+
28
+ def fill_shared_context_inputs(
29
+ task: AnyTask, shared_context: AnySharedContext, str_kwargs: dict[str, str] = {}
30
+ ):
31
+ """
32
+ Populates the shared context with input values provided via kwargs.
33
+ """
34
+ for task_input in task.inputs:
35
+ if task_input.name not in shared_context.input:
36
+ str_value = str_kwargs.get(task_input.name, None)
37
+ task_input.update_shared_context(shared_context, str_value)
38
+
39
+
40
+ def fill_shared_context_envs(shared_context: AnySharedContext):
41
+ """
42
+ Injects OS environment variables into the shared context if they don't already exist.
43
+ """
44
+ os_env_map = {
45
+ key: val for key, val in os.environ.items() if key not in shared_context.env
46
+ }
47
+ shared_context.env.update(os_env_map)
48
+
49
+
50
+ def combine_inputs(
51
+ existing_inputs: list[AnyInput],
52
+ new_inputs: list[AnyInput | None] | AnyInput | None,
53
+ ):
54
+ """
55
+ Combines new inputs into an existing list, avoiding duplicates by name.
56
+ Modifies the existing_inputs list in place.
57
+ """
58
+ input_names = [task_input.name for task_input in existing_inputs]
59
+ if isinstance(new_inputs, AnyInput):
60
+ new_inputs_list = [new_inputs]
61
+ elif new_inputs is None:
62
+ new_inputs_list = []
63
+ else:
64
+ new_inputs_list = new_inputs
65
+
66
+ for task_input in new_inputs_list:
67
+ if task_input is None:
68
+ continue
69
+ if task_input.name not in input_names:
70
+ existing_inputs.append(task_input)
71
+ input_names.append(task_input.name) # Update names list
72
+
73
+
74
+ def get_combined_envs(task: "BaseTask") -> list[AnyEnv]:
75
+ """
76
+ Aggregates environment variables from the task and its upstreams.
77
+ """
78
+ envs = []
79
+ for upstream in task.upstreams:
80
+ envs.extend(upstream.envs) # Use extend for list concatenation
81
+
82
+ # Access _envs directly as task is BaseTask
83
+ task_envs: list[AnyEnv | None] | AnyEnv | None = task._envs
84
+ if isinstance(task_envs, AnyEnv):
85
+ envs.append(task_envs)
86
+ elif isinstance(task_envs, list):
87
+ # Filter out None while extending
88
+ envs.extend(env for env in task_envs if env is not None)
89
+
90
+ # Filter out None values efficiently from the combined list
91
+ return [env for env in envs if env is not None]
92
+
93
+
94
+ def get_combined_inputs(task: "BaseTask") -> list[AnyInput]:
95
+ """
96
+ Aggregates inputs from the task and its upstreams, avoiding duplicates.
97
+ """
98
+ inputs: list[AnyInput] = []
99
+ for upstream in task.upstreams:
100
+ combine_inputs(inputs, upstream.inputs)
101
+
102
+ # Access _inputs directly as task is BaseTask
103
+ task_inputs: list[AnyInput | None] | AnyInput | None = task._inputs
104
+ if task_inputs is not None:
105
+ combine_inputs(inputs, task_inputs)
106
+
107
+ # Filter out None values (although combine_inputs should handle this)
108
+ return [task_input for task_input in inputs if task_input is not None]
@@ -0,0 +1,57 @@
1
+ from typing import TypeVar
2
+
3
+ from zrb.task.any_task import AnyTask
4
+
5
+ T = TypeVar("T", bound="AnyTask")
6
+
7
+
8
+ def get_dependency_list(task: AnyTask, attr_name: str) -> list[AnyTask]:
9
+ """
10
+ Safely retrieves a list of dependencies (upstreams, fallbacks, etc.)
11
+ from a task attribute, handling None or single-task values.
12
+ """
13
+ dependencies = getattr(task, attr_name, None)
14
+ if dependencies is None:
15
+ return []
16
+ elif isinstance(dependencies, list):
17
+ # Ensure all elements are AnyTask (or compatible) if needed,
18
+ # but for now, assume the list contains tasks.
19
+ return dependencies
20
+ # Assume it's a single AnyTask instance
21
+ return [dependencies]
22
+
23
+
24
+ def append_dependency(
25
+ task: T, attr_name: str, dependencies_to_add: AnyTask | list[AnyTask]
26
+ ) -> None:
27
+ """
28
+ Appends one or more dependencies to the specified attribute list of a task,
29
+ ensuring the attribute becomes a list and avoiding duplicates.
30
+
31
+ Modifies the attribute on the task object directly.
32
+ """
33
+ # Retrieve the current list, handling None or single item cases
34
+ current_deps_list = getattr(task, attr_name, None)
35
+ if current_deps_list is None:
36
+ current_deps_list = []
37
+ elif not isinstance(current_deps_list, list):
38
+ current_deps_list = [current_deps_list]
39
+ else:
40
+ # Create a copy to avoid modifying the original list if no changes occur
41
+ current_deps_list = list(current_deps_list)
42
+
43
+ if isinstance(dependencies_to_add, list):
44
+ new_deps = dependencies_to_add
45
+ else:
46
+ new_deps = [dependencies_to_add] # Ensure it's always a list
47
+
48
+ added = False
49
+ for dep in new_deps:
50
+ # Check for existence before appending
51
+ if dep not in current_deps_list:
52
+ current_deps_list.append(dep)
53
+ added = True
54
+
55
+ # Update the attribute on the task object only if changes were made
56
+ if added:
57
+ setattr(task, attr_name, current_deps_list)
@@ -0,0 +1,274 @@
1
+ import asyncio
2
+ from typing import TYPE_CHECKING, Any
3
+
4
+ from zrb.context.any_context import AnyContext
5
+ from zrb.session.any_session import AnySession
6
+ from zrb.util.attr import get_bool_attr
7
+ from zrb.util.run import run_async
8
+ from zrb.xcom.xcom import Xcom
9
+
10
+ if TYPE_CHECKING:
11
+ from zrb.task.base_task import BaseTask
12
+
13
+
14
+ async def execute_task_chain(task: "BaseTask", session: AnySession):
15
+ """
16
+ Executes the task and its downstream successors if conditions are met.
17
+ """
18
+ if session.is_terminated or not session.is_allowed_to_run(task):
19
+ return
20
+ result = await execute_task_action(task, session)
21
+ # Get next tasks
22
+ nexts = session.get_next_tasks(task)
23
+ if session.is_terminated or len(nexts) == 0:
24
+ return result
25
+ # Run next tasks asynchronously
26
+ next_coros = [run_async(next_task.exec_chain(session)) for next_task in nexts]
27
+ # Wait for the next tasks to complete. The result of the current task is returned.
28
+ await asyncio.gather(*next_coros)
29
+ return result
30
+
31
+
32
+ async def execute_task_action(task: "BaseTask", session: AnySession):
33
+ """
34
+ Executes a single task's action, handling conditions and readiness checks.
35
+ """
36
+ ctx = task.get_ctx(session)
37
+ if not session.is_allowed_to_run(task):
38
+ # Task is not allowed to run, skip it for now.
39
+ # This will be triggered later if dependencies are met.
40
+ ctx.log_info("Not allowed to run")
41
+ return
42
+ if not check_execute_condition(task, session):
43
+ # Skip the task based on its execute_condition
44
+ ctx.log_info("Marked as skipped (condition false)")
45
+ session.get_task_status(task).mark_as_skipped()
46
+ return
47
+ # Wait for task to be ready (handles action execution, readiness checks)
48
+ return await run_async(execute_action_until_ready(task, session))
49
+
50
+
51
+ def check_execute_condition(task: "BaseTask", session: AnySession) -> bool:
52
+ """
53
+ Evaluates the task's execute_condition attribute.
54
+ """
55
+ ctx = task.get_ctx(session)
56
+ execute_condition_attr = getattr(task, "_execute_condition", True)
57
+ return get_bool_attr(ctx, execute_condition_attr, True, auto_render=True)
58
+
59
+
60
+ async def execute_action_until_ready(task: "BaseTask", session: AnySession):
61
+ """
62
+ Manages the execution of the task's action, coordinating with readiness checks.
63
+ """
64
+ ctx = task.get_ctx(session)
65
+ readiness_checks = task.readiness_checks
66
+ readiness_check_delay = getattr(task, "_readiness_check_delay", 0.5)
67
+ monitor_readiness = getattr(task, "_monitor_readiness", False)
68
+
69
+ if not readiness_checks: # Simplified check for empty list
70
+ ctx.log_info("No readiness checks")
71
+ # Task has no readiness check, execute action directly
72
+ result = await run_async(execute_action_with_retry(task, session))
73
+ # Mark ready only if the action completed successfully (not failed/cancelled)
74
+ if session.get_task_status(task).is_completed:
75
+ ctx.log_info("Marked as ready")
76
+ session.get_task_status(task).mark_as_ready()
77
+ return result
78
+
79
+ # Start the task action and readiness checks concurrently
80
+ ctx.log_info("Starting action and readiness checks")
81
+ action_coro = asyncio.create_task(
82
+ run_async(execute_action_with_retry(task, session))
83
+ )
84
+
85
+ await asyncio.sleep(readiness_check_delay)
86
+
87
+ readiness_check_coros = [
88
+ run_async(check.exec_chain(session)) for check in readiness_checks
89
+ ]
90
+
91
+ # Wait primarily for readiness checks to complete
92
+ ctx.log_info("Waiting for readiness checks")
93
+ readiness_passed = False
94
+ try:
95
+ # Gather results, but primarily interested in completion/errors
96
+ await asyncio.gather(*readiness_check_coros)
97
+ # Check if all readiness tasks actually completed successfully
98
+ all_readiness_completed = all(
99
+ session.get_task_status(check).is_completed for check in readiness_checks
100
+ )
101
+ if all_readiness_completed:
102
+ ctx.log_info("Readiness checks completed successfully")
103
+ readiness_passed = True
104
+ # Mark task as ready only if checks passed and action didn't fail during checks
105
+ if not session.get_task_status(task).is_failed:
106
+ ctx.log_info("Marked as ready")
107
+ session.get_task_status(task).mark_as_ready()
108
+ else:
109
+ ctx.log_warning(
110
+ "One or more readiness checks did not complete successfully."
111
+ )
112
+
113
+ except Exception as e:
114
+ ctx.log_error(f"Readiness check failed with exception: {e}")
115
+ # If readiness checks fail with an exception, the task is not ready.
116
+ # The action_coro might still be running or have failed.
117
+ # execute_action_with_retry handles marking the main task status.
118
+
119
+ # Defer the main action coroutine; it will be awaited later if needed
120
+ session.defer_action(task, action_coro)
121
+
122
+ # Start monitoring only if readiness passed and monitoring is enabled
123
+ if readiness_passed and monitor_readiness:
124
+ # Import dynamically to avoid circular dependency if monitoring imports execution
125
+ from zrb.task.base.monitoring import monitor_task_readiness
126
+
127
+ monitor_coro = asyncio.create_task(
128
+ run_async(monitor_task_readiness(task, session, action_coro))
129
+ )
130
+ session.defer_monitoring(task, monitor_coro)
131
+
132
+ # The result here is primarily about readiness check completion.
133
+ # The actual task result is handled by the deferred action_coro.
134
+ return None
135
+
136
+
137
+ async def execute_action_with_retry(task: "BaseTask", session: AnySession) -> Any:
138
+ """
139
+ Executes the task's core action (`_exec_action`) with retry logic,
140
+ handling success (triggering successors) and failure (triggering fallbacks).
141
+ """
142
+ ctx = task.get_ctx(session)
143
+ retries = getattr(task, "_retries", 2)
144
+ retry_period = getattr(task, "_retry_period", 0)
145
+ max_attempt = retries + 1
146
+ ctx.set_max_attempt(max_attempt)
147
+
148
+ for attempt in range(max_attempt):
149
+ ctx.set_attempt(attempt + 1)
150
+ if attempt > 0:
151
+ ctx.log_info(f"Retrying in {retry_period}s...")
152
+ await asyncio.sleep(retry_period)
153
+
154
+ try:
155
+ ctx.log_info("Marked as started")
156
+ session.get_task_status(task).mark_as_started()
157
+
158
+ # Execute the underlying action (which might be overridden in subclasses)
159
+ # We call the task's _exec_action method directly here.
160
+ result = await run_async(task._exec_action(ctx))
161
+
162
+ ctx.log_info("Marked as completed")
163
+ session.get_task_status(task).mark_as_completed()
164
+
165
+ # Store result in XCom
166
+ task_xcom: Xcom = ctx.xcom.get(task.name)
167
+ task_xcom.push(result)
168
+
169
+ # Skip fallbacks and execute successors on success
170
+ skip_fallbacks(task, session)
171
+ await run_async(execute_successors(task, session))
172
+ return result
173
+
174
+ except (asyncio.CancelledError, KeyboardInterrupt):
175
+ ctx.log_warning("Task cancelled or interrupted")
176
+ session.get_task_status(task).mark_as_failed() # Mark as failed on cancel
177
+ # Do not trigger fallbacks/successors on cancellation
178
+ return # Or re-raise? Depends on desired cancellation behavior
179
+
180
+ except BaseException as e:
181
+ ctx.log_error(f"Attempt {attempt + 1}/{max_attempt} failed: {e}")
182
+ session.get_task_status(
183
+ task
184
+ ).mark_as_failed() # Mark failed for this attempt
185
+
186
+ if attempt < max_attempt - 1:
187
+ # More retries available
188
+ continue
189
+ else:
190
+ # Final attempt failed
191
+ ctx.log_error("Marked as permanently failed")
192
+ session.get_task_status(task).mark_as_permanently_failed()
193
+ # Skip successors and execute fallbacks on permanent failure
194
+ skip_successors(task, session)
195
+ await run_async(execute_fallbacks(task, session))
196
+ raise e # Re-raise the exception after handling fallbacks
197
+
198
+
199
+ async def run_default_action(task: "BaseTask", ctx: AnyContext) -> Any:
200
+ """
201
+ Executes the specific action defined by the '_action' attribute for BaseTask.
202
+ This is the default implementation called by BaseTask._exec_action.
203
+ Subclasses like LLMTask override _exec_action with their own logic.
204
+ """
205
+ action = getattr(task, "_action", None)
206
+ if action is None:
207
+ ctx.log_debug("No action defined for this task.")
208
+ return None
209
+ if isinstance(action, str):
210
+ # Render f-string action
211
+ rendered_action = ctx.render(action)
212
+ ctx.log_debug(f"Rendered action string: {rendered_action}")
213
+ # Assuming string actions are meant to be returned as is.
214
+ # If they need execution (e.g., shell commands), that logic would go here.
215
+ return rendered_action
216
+ elif callable(action):
217
+ # Execute callable action
218
+ ctx.log_debug(f"Executing callable action: {action.__name__}")
219
+ return await run_async(action(ctx))
220
+ else:
221
+ ctx.log_warning(f"Unsupported action type: {type(action)}")
222
+ return None
223
+
224
+
225
+ async def execute_successors(task: "BaseTask", session: "AnySession"):
226
+ """Executes all successor tasks."""
227
+ ctx = task.get_ctx(session)
228
+ successors = task.successors
229
+ if successors:
230
+ ctx.log_info(f"Executing {len(successors)} successor(s)")
231
+ successor_coros = [
232
+ run_async(successor.exec_chain(session)) for successor in successors
233
+ ]
234
+ await asyncio.gather(*successor_coros)
235
+ else:
236
+ ctx.log_debug("No successors to execute.")
237
+
238
+
239
+ def skip_successors(task: "BaseTask", session: AnySession):
240
+ """Marks all successor tasks as skipped."""
241
+ ctx = task.get_ctx(session)
242
+ successors = task.successors
243
+ if successors:
244
+ ctx.log_info(f"Skipping {len(successors)} successor(s)")
245
+ for successor in successors:
246
+ # Check if already skipped to avoid redundant logging/state changes
247
+ if not session.get_task_status(successor).is_skipped:
248
+ session.get_task_status(successor).mark_as_skipped()
249
+
250
+
251
+ async def execute_fallbacks(task: "BaseTask", session: AnySession):
252
+ """Executes all fallback tasks."""
253
+ ctx = task.get_ctx(session)
254
+ fallbacks = task.fallbacks
255
+ if fallbacks:
256
+ ctx.log_info(f"Executing {len(fallbacks)} fallback(s)")
257
+ fallback_coros = [
258
+ run_async(fallback.exec_chain(session)) for fallback in fallbacks
259
+ ]
260
+ await asyncio.gather(*fallback_coros)
261
+ else:
262
+ ctx.log_debug("No fallbacks to execute.")
263
+
264
+
265
+ def skip_fallbacks(task: "BaseTask", session: AnySession):
266
+ """Marks all fallback tasks as skipped."""
267
+ ctx = task.get_ctx(session)
268
+ fallbacks = task.fallbacks
269
+ if fallbacks:
270
+ ctx.log_info(f"Skipping {len(fallbacks)} fallback(s)")
271
+ for fallback in fallbacks:
272
+ # Check if already skipped
273
+ if not session.get_task_status(fallback).is_skipped:
274
+ session.get_task_status(fallback).mark_as_skipped()