zrb 1.5.6__tar.gz → 1.5.8__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 (365) hide show
  1. {zrb-1.5.6 → zrb-1.5.8}/PKG-INFO +1 -1
  2. {zrb-1.5.6 → zrb-1.5.8}/pyproject.toml +1 -1
  3. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/llm/tool/file.py +8 -7
  4. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/llm/tool/rag.py +4 -3
  5. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/cmd_task.py +2 -1
  6. zrb-1.5.8/src/zrb/task/llm/agent.py +141 -0
  7. zrb-1.5.8/src/zrb/task/llm/config.py +83 -0
  8. zrb-1.5.8/src/zrb/task/llm/context.py +95 -0
  9. zrb-1.5.6/src/zrb/task/llm/context_enricher.py → zrb-1.5.8/src/zrb/task/llm/context_enrichment.py +52 -6
  10. zrb-1.5.8/src/zrb/task/llm/history.py +242 -0
  11. zrb-1.5.8/src/zrb/task/llm/history_summarization.py +170 -0
  12. zrb-1.5.8/src/zrb/task/llm/prompt.py +87 -0
  13. zrb-1.5.8/src/zrb/task/llm/typing.py +3 -0
  14. zrb-1.5.8/src/zrb/task/llm_task.py +320 -0
  15. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/file.py +9 -0
  16. zrb-1.5.6/src/zrb/task/llm/agent_runner.py +0 -53
  17. zrb-1.5.6/src/zrb/task/llm/default_context.py +0 -44
  18. zrb-1.5.6/src/zrb/task/llm/history.py +0 -92
  19. zrb-1.5.6/src/zrb/task/llm/history_summarizer.py +0 -71
  20. zrb-1.5.6/src/zrb/task/llm_task.py +0 -505
  21. {zrb-1.5.6 → zrb-1.5.8}/README.md +0 -0
  22. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/__init__.py +0 -0
  23. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/__main__.py +0 -0
  24. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/attr/__init__.py +0 -0
  25. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/attr/type.py +0 -0
  26. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/__init__.py +0 -0
  27. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/base64.py +0 -0
  28. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/git.py +0 -0
  29. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/git_subtree.py +0 -0
  30. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/group.py +0 -0
  31. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/llm/history.py +0 -0
  32. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/llm/input.py +0 -0
  33. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/llm/llm_chat.py +0 -0
  34. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/llm/previous-session.js +0 -0
  35. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/llm/tool/api.py +0 -0
  36. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/llm/tool/cli.py +0 -0
  37. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/llm/tool/web.py +0 -0
  38. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/md5.py +0 -0
  39. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/__init__.py +0 -0
  40. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  41. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
  42. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
  43. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  44. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  45. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  46. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  47. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  48. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
  49. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
  50. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
  51. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
  52. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/gateway/view/content/my-module/my-entity.html +0 -0
  53. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/my_entity_service.py +0 -0
  54. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/my_entity_service_factory.py +0 -0
  55. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_db_repository.py +0 -0
  56. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_repository.py +0 -0
  57. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/my_module/service/my_entity/repository/my_entity_repository_factory.py +0 -0
  58. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
  59. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/test/my_module/my_entity/test_create_my_entity.py +0 -0
  60. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/test/my_module/my_entity/test_delete_my_entity.py +0 -0
  61. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/test/my_module/my_entity/test_read_my_entity.py +0 -0
  62. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/test/my_module/my_entity/test_update_my_entity.py +0 -0
  63. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
  64. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
  65. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
  66. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
  67. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  68. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
  69. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
  70. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
  71. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  72. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  73. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_api_client.py +0 -0
  74. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_client.py +0 -0
  75. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_client_factory.py +0 -0
  76. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/client/my_module_direct_client.py +0 -0
  77. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  78. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  79. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/script.py.mako +0 -0
  80. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  81. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  82. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
  83. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  84. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
  85. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
  86. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
  87. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
  88. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  89. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  90. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  91. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
  92. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
  93. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
  94. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
  95. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  96. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
  97. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
  98. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  99. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
  100. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
  101. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
  102. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
  103. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
  104. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  105. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  106. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  107. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
  108. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
  109. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
  110. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
  111. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  112. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  113. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  114. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
  115. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
  116. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
  117. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
  118. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  119. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
  120. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
  121. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
  122. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
  123. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
  124. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
  125. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
  126. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
  127. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
  128. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
  129. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
  130. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
  131. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
  132. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
  133. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
  134. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
  135. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
  136. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
  137. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  138. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
  139. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  140. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  141. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  142. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  143. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  144. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
  145. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
  146. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
  147. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
  148. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
  149. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
  150. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
  151. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
  152. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
  153. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
  154. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
  155. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
  156. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
  157. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
  158. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
  159. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
  160. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
  161. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
  162. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  163. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  164. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  165. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
  166. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
  167. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
  168. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
  169. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
  170. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
  171. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
  172. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
  173. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
  174. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
  175. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
  176. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
  177. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
  178. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
  179. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
  180. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
  181. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
  182. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
  183. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
  184. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
  185. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
  186. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
  187. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  188. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
  189. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
  190. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
  191. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  192. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
  193. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
  194. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
  195. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
  196. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
  197. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
  198. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
  199. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
  200. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
  201. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
  202. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  203. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/create/__init__.py +0 -0
  204. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  205. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  206. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/project/create/project_task.py +0 -0
  207. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/python.py +0 -0
  208. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/random.py +0 -0
  209. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  210. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  211. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/setup/common_input.py +0 -0
  212. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  213. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  214. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  215. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  216. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/setup/ubuntu.py +0 -0
  217. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
  218. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
  219. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
  220. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/shell/__init__.py +0 -0
  221. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  222. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  223. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  224. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  225. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/builtin/todo.py +0 -0
  226. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/callback/__init__.py +0 -0
  227. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/callback/any_callback.py +0 -0
  228. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/callback/callback.py +0 -0
  229. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/cmd/__init__.py +0 -0
  230. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/cmd/cmd_result.py +0 -0
  231. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/cmd/cmd_val.py +0 -0
  232. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/config.py +0 -0
  233. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/content_transformer/__init__.py +0 -0
  234. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  235. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/content_transformer/content_transformer.py +0 -0
  236. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/context/__init__.py +0 -0
  237. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/context/any_context.py +0 -0
  238. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/context/any_shared_context.py +0 -0
  239. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/context/context.py +0 -0
  240. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/context/shared_context.py +0 -0
  241. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/dot_dict/__init__.py +0 -0
  242. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/dot_dict/dot_dict.py +0 -0
  243. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/env/__init__.py +0 -0
  244. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/env/any_env.py +0 -0
  245. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/env/env.py +0 -0
  246. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/env/env_file.py +0 -0
  247. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/env/env_map.py +0 -0
  248. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/group/__init__.py +0 -0
  249. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/group/any_group.py +0 -0
  250. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/group/group.py +0 -0
  251. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/input/__init__.py +0 -0
  252. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/input/any_input.py +0 -0
  253. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/input/base_input.py +0 -0
  254. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/input/bool_input.py +0 -0
  255. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/input/float_input.py +0 -0
  256. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/input/int_input.py +0 -0
  257. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/input/option_input.py +0 -0
  258. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/input/password_input.py +0 -0
  259. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/input/str_input.py +0 -0
  260. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/input/text_input.py +0 -0
  261. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/llm_config.py +0 -0
  262. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/__init__.py +0 -0
  263. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/cli.py +0 -0
  264. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/common_util.py +0 -0
  265. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_app.py +0 -0
  266. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_config/config.py +0 -0
  267. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_config/config_factory.py +0 -0
  268. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/__init__.py +0 -0
  269. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/docs_route.py +0 -0
  270. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
  271. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
  272. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/error_page/view.html +0 -0
  273. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
  274. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
  275. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/home_page/view.html +0 -0
  276. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/login_api_route.py +0 -0
  277. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
  278. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/login_page/view.html +0 -0
  279. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/logout_api_route.py +0 -0
  280. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
  281. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/logout_page/view.html +0 -0
  282. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
  283. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
  284. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
  285. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
  286. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
  287. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
  288. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
  289. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
  290. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/static/resources/common.css +0 -0
  291. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
  292. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
  293. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
  294. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/static/resources/pico.min.css +0 -0
  295. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
  296. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
  297. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
  298. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
  299. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/static/static_route.py +0 -0
  300. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
  301. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
  302. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_schema/session.py +0 -0
  303. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_schema/token.py +0 -0
  304. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_schema/user.py +0 -0
  305. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_util/cookie.py +0 -0
  306. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_util/html.py +0 -0
  307. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_util/token.py +0 -0
  308. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/runner/web_util/user.py +0 -0
  309. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/session/__init__.py +0 -0
  310. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/session/any_session.py +0 -0
  311. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/session/session.py +0 -0
  312. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/session_state_log/__init__.py +0 -0
  313. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/session_state_log/session_state_log.py +0 -0
  314. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/session_state_logger/__init__.py +0 -0
  315. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  316. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  317. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
  318. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/__init__.py +0 -0
  319. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/any_task.py +0 -0
  320. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/base_task.py +0 -0
  321. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/base_trigger.py +0 -0
  322. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/http_check.py +0 -0
  323. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/llm/__init__.py +0 -0
  324. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/llm/error.py +0 -0
  325. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/llm/print_node.py +0 -0
  326. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/llm/tool_wrapper.py +0 -0
  327. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/make_task.py +0 -0
  328. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/rsync_task.py +0 -0
  329. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/scaffolder.py +0 -0
  330. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/scheduler.py +0 -0
  331. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/task.py +0 -0
  332. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task/tcp_check.py +0 -0
  333. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task_status/__init__.py +0 -0
  334. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/task_status/task_status.py +0 -0
  335. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/__init__.py +0 -0
  336. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/attr.py +0 -0
  337. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/cli/__init__.py +0 -0
  338. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/cli/style.py +0 -0
  339. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/cli/subcommand.py +0 -0
  340. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/cmd/__init__.py +0 -0
  341. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/cmd/command.py +0 -0
  342. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/cmd/remote.py +0 -0
  343. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/codemod/__init__.py +0 -0
  344. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/codemod/modification_mode.py +0 -0
  345. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/codemod/modify_class.py +0 -0
  346. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/codemod/modify_class_parent.py +0 -0
  347. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/codemod/modify_class_property.py +0 -0
  348. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/codemod/modify_dict.py +0 -0
  349. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/codemod/modify_function.py +0 -0
  350. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/codemod/modify_function_call.py +0 -0
  351. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/codemod/modify_method.py +0 -0
  352. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/codemod/modify_module.py +0 -0
  353. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/cron.py +0 -0
  354. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/git.py +0 -0
  355. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/git_subtree.py +0 -0
  356. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/group.py +0 -0
  357. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/load.py +0 -0
  358. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/run.py +0 -0
  359. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/string/__init__.py +0 -0
  360. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/string/conversion.py +0 -0
  361. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/string/format.py +0 -0
  362. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/string/name.py +0 -0
  363. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/util/todo.py +0 -0
  364. {zrb-1.5.6 → zrb-1.5.8}/src/zrb/xcom/__init__.py +0 -0
  365. {zrb-1.5.6 → zrb-1.5.8}/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.6
3
+ Version: 1.5.8
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.5.6"
3
+ version = "1.5.8"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -4,8 +4,7 @@ import os
4
4
  import re
5
5
  from typing import Any, Optional
6
6
 
7
- from zrb.util.file import read_file as _read_file
8
- from zrb.util.file import write_file as _write_file
7
+ from zrb.util.file import read_file, read_file_with_line_numbers, write_file
9
8
 
10
9
  DEFAULT_EXCLUDED_PATTERNS = [
11
10
  # Common Python artifacts
@@ -182,7 +181,7 @@ def read_from_file(
182
181
  start_line: Optional[int] = None,
183
182
  end_line: Optional[int] = None,
184
183
  ) -> str:
185
- """Read file content (or specific lines) at a path.
184
+ """Read file content (or specific lines) at a path, including line numbers.
186
185
  Args:
187
186
  path (str): Path to read. Pass exactly as provided, including '~'.
188
187
  start_line (Optional[int]): Starting line number (1-based).
@@ -191,6 +190,7 @@ def read_from_file(
191
190
  Defaults to None (end of file).
192
191
  Returns:
193
192
  str: JSON: {"path": "...", "content": "...", "start_line": N, ...} or {"error": "..."}
193
+ The content includes line numbers.
194
194
  Raises:
195
195
  Exception: If an error occurs.
196
196
  """
@@ -199,7 +199,7 @@ def read_from_file(
199
199
  # Check if file exists
200
200
  if not os.path.exists(abs_path):
201
201
  return json.dumps({"error": f"File {path} does not exist"})
202
- content = _read_file(abs_path)
202
+ content = read_file_with_line_numbers(abs_path)
203
203
  lines = content.splitlines()
204
204
  total_lines = len(lines)
205
205
  # Adjust line indices (convert from 1-based to 0-based)
@@ -259,7 +259,7 @@ def write_to_file(
259
259
  directory = os.path.dirname(abs_path)
260
260
  if directory and not os.path.exists(directory):
261
261
  os.makedirs(directory, exist_ok=True)
262
- _write_file(abs_path, content)
262
+ write_file(abs_path, content)
263
263
  result_data = {"success": True, "path": path}
264
264
  if warning:
265
265
  result_data["warning"] = warning
@@ -391,6 +391,7 @@ def apply_diff(
391
391
  replace_marker (str): Marker for end of replacement block.
392
392
  Defaults to ">>>>>> REPLACE".
393
393
  SEARCH block must exactly match file content including whitespace/indentation.
394
+ SEARCH block should NOT contains line numbers
394
395
  Format example:
395
396
  [Search Marker, e.g., <<<<<< SEARCH]
396
397
  :start_line:10
@@ -414,7 +415,7 @@ def apply_diff(
414
415
  return json.dumps(
415
416
  {"success": False, "path": path, "error": f"File not found at {path}"}
416
417
  )
417
- content = _read_file(abs_path)
418
+ content = read_file(abs_path)
418
419
  lines = content.splitlines()
419
420
  if start_line < 1 or end_line > len(lines) or start_line > end_line:
420
421
  return json.dumps(
@@ -444,7 +445,7 @@ def apply_diff(
444
445
  new_content = "\n".join(new_lines)
445
446
  if content.endswith("\n"):
446
447
  new_content += "\n"
447
- _write_file(abs_path, new_content)
448
+ write_file(abs_path, new_content)
448
449
  return json.dumps({"success": True, "path": path})
449
450
  except ValueError as e:
450
451
  raise ValueError(f"Error parsing diff: {e}")
@@ -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
 
@@ -130,7 +130,8 @@ class CmdTask(BaseTask):
130
130
  partial(ctx.print, plain=True) if self._should_plain_print else ctx.print
131
131
  )
132
132
  xcom_pid_key = f"{self.name}-pid"
133
- ctx.xcom[xcom_pid_key] = Xcom([])
133
+ if xcom_pid_key not in ctx.xcom:
134
+ ctx.xcom[xcom_pid_key] = Xcom([])
134
135
  cmd_result, return_code = await run_command(
135
136
  cmd=[shell, shell_flag, cmd_script],
136
137
  cwd=cwd,
@@ -0,0 +1,141 @@
1
+ import inspect
2
+ from collections.abc import Callable
3
+
4
+ from openai import APIError
5
+ from pydantic_ai import Agent, Tool
6
+ from pydantic_ai.agent import AgentRun
7
+ from pydantic_ai.mcp import MCPServer
8
+ from pydantic_ai.messages import ModelMessagesTypeAdapter
9
+ from pydantic_ai.models import Model
10
+ from pydantic_ai.settings import ModelSettings
11
+
12
+ from zrb.context.any_context import AnyContext
13
+ from zrb.context.any_shared_context import AnySharedContext
14
+ from zrb.task.llm.error import extract_api_error_details
15
+ from zrb.task.llm.print_node import print_node
16
+ from zrb.task.llm.tool_wrapper import wrap_tool
17
+ from zrb.task.llm.typing import ListOfDict
18
+
19
+ ToolOrCallable = Tool | Callable
20
+
21
+
22
+ def create_agent_instance(
23
+ ctx: AnyContext,
24
+ model: str | Model | None,
25
+ system_prompt: str,
26
+ model_settings: ModelSettings | None,
27
+ tools_attr: (
28
+ list[ToolOrCallable] | Callable[[AnySharedContext], list[ToolOrCallable]]
29
+ ),
30
+ additional_tools: list[ToolOrCallable],
31
+ mcp_servers_attr: list[MCPServer] | Callable[[AnySharedContext], list[MCPServer]],
32
+ additional_mcp_servers: list[MCPServer],
33
+ ) -> Agent:
34
+ """Creates a new Agent instance with configured tools and servers."""
35
+ tools_or_callables = list(tools_attr(ctx) if callable(tools_attr) else tools_attr)
36
+ tools_or_callables.extend(additional_tools)
37
+ tools = []
38
+ for tool_or_callable in tools_or_callables:
39
+ if isinstance(tool_or_callable, Tool):
40
+ tools.append(tool_or_callable)
41
+ else:
42
+ # Inspect original callable for 'ctx' parameter (pydantic-ai context)
43
+ original_sig = inspect.signature(tool_or_callable)
44
+ takes_ctx = "ctx" in original_sig.parameters
45
+ wrapped_tool = wrap_tool(tool_or_callable)
46
+ tools.append(Tool(wrapped_tool, takes_ctx=takes_ctx))
47
+
48
+ mcp_servers = list(
49
+ mcp_servers_attr(ctx) if callable(mcp_servers_attr) else mcp_servers_attr
50
+ )
51
+ mcp_servers.extend(additional_mcp_servers)
52
+
53
+ return Agent(
54
+ model=model,
55
+ system_prompt=system_prompt,
56
+ tools=tools,
57
+ mcp_servers=mcp_servers,
58
+ model_settings=model_settings,
59
+ retries=3, # Consider making retries configurable?
60
+ )
61
+
62
+
63
+ def get_agent(
64
+ ctx: AnyContext,
65
+ agent_attr: Agent | Callable[[AnySharedContext], Agent] | None,
66
+ model: str | Model | None,
67
+ system_prompt: str,
68
+ model_settings: ModelSettings | None,
69
+ tools_attr: (
70
+ list[ToolOrCallable] | Callable[[AnySharedContext], list[ToolOrCallable]]
71
+ ),
72
+ additional_tools: list[ToolOrCallable],
73
+ mcp_servers_attr: list[MCPServer] | Callable[[AnySharedContext], list[MCPServer]],
74
+ additional_mcp_servers: list[MCPServer],
75
+ ) -> Agent:
76
+ """Retrieves the configured Agent instance or creates one if necessary."""
77
+ if isinstance(agent_attr, Agent):
78
+ return agent_attr
79
+ if callable(agent_attr):
80
+ agent_instance = agent_attr(ctx)
81
+ if not isinstance(agent_instance, Agent):
82
+ err_msg = (
83
+ "Callable agent factory did not return an Agent instance, "
84
+ f"got: {type(agent_instance)}"
85
+ )
86
+ raise TypeError(err_msg)
87
+ return agent_instance
88
+ # If no agent provided, create one using the configuration
89
+ return create_agent_instance(
90
+ ctx=ctx,
91
+ model=model,
92
+ system_prompt=system_prompt,
93
+ model_settings=model_settings,
94
+ tools_attr=tools_attr,
95
+ additional_tools=additional_tools,
96
+ mcp_servers_attr=mcp_servers_attr,
97
+ additional_mcp_servers=additional_mcp_servers,
98
+ )
99
+
100
+
101
+ async def run_agent_iteration(
102
+ ctx: AnyContext,
103
+ agent: Agent,
104
+ user_prompt: str,
105
+ history_list: ListOfDict,
106
+ ) -> AgentRun:
107
+ """
108
+ Runs a single iteration of the agent execution loop.
109
+
110
+ Args:
111
+ ctx: The task context.
112
+ agent: The Pydantic AI agent instance.
113
+ user_prompt: The user's input prompt.
114
+ history_list: The current conversation history.
115
+
116
+ Returns:
117
+ The agent run result object.
118
+
119
+ Raises:
120
+ Exception: If any error occurs during agent execution.
121
+ """
122
+ async with agent.run_mcp_servers():
123
+ async with agent.iter(
124
+ user_prompt=user_prompt,
125
+ message_history=ModelMessagesTypeAdapter.validate_python(history_list),
126
+ ) as agent_run:
127
+ async for node in agent_run:
128
+ # Each node represents a step in the agent's execution
129
+ # Reference: https://ai.pydantic.dev/agents/#streaming
130
+ try:
131
+ await print_node(ctx.print, agent_run, node)
132
+ except APIError as e:
133
+ # Extract detailed error information from the response
134
+ error_details = extract_api_error_details(e)
135
+ ctx.log_error(f"API Error: {error_details}")
136
+ raise
137
+ except Exception as e:
138
+ ctx.log_error(f"Error processing node: {str(e)}")
139
+ ctx.log_error(f"Error type: {type(e).__name__}")
140
+ raise
141
+ return agent_run
@@ -0,0 +1,83 @@
1
+ from typing import Callable
2
+
3
+ from pydantic_ai.models import Model
4
+ from pydantic_ai.settings import ModelSettings
5
+
6
+ from zrb.attr.type import StrAttr, fstring
7
+ from zrb.context.any_context import AnyContext
8
+ from zrb.context.any_shared_context import AnySharedContext
9
+ from zrb.llm_config import LLMConfig
10
+ from zrb.llm_config import llm_config as default_llm_config
11
+ from zrb.util.attr import get_attr
12
+
13
+
14
+ def get_model_settings(
15
+ ctx: AnyContext,
16
+ model_settings_attr: (
17
+ ModelSettings | Callable[[AnySharedContext], ModelSettings] | None
18
+ ),
19
+ ) -> ModelSettings | None:
20
+ """Gets the model settings, resolving callables if necessary."""
21
+ if callable(model_settings_attr):
22
+ return model_settings_attr(ctx)
23
+ return model_settings_attr
24
+
25
+
26
+ def get_model_base_url(
27
+ ctx: AnyContext,
28
+ model_base_url_attr: StrAttr | None,
29
+ render_model_base_url: bool,
30
+ ) -> str | None:
31
+ """Gets the model base URL, rendering if configured."""
32
+ base_url = get_attr(
33
+ ctx, model_base_url_attr, None, auto_render=render_model_base_url
34
+ )
35
+ if isinstance(base_url, str) or base_url is None:
36
+ return base_url
37
+ raise ValueError(f"Invalid model base URL: {base_url}")
38
+
39
+
40
+ def get_model_api_key(
41
+ ctx: AnyContext,
42
+ model_api_key_attr: StrAttr | None,
43
+ render_model_api_key: bool,
44
+ ) -> str | None:
45
+ """Gets the model API key, rendering if configured."""
46
+ api_key = get_attr(ctx, model_api_key_attr, None, auto_render=render_model_api_key)
47
+ if isinstance(api_key, str) or api_key is None:
48
+ return api_key
49
+ raise ValueError(f"Invalid model API key: {api_key}")
50
+
51
+
52
+ def get_model(
53
+ ctx: AnyContext,
54
+ model_attr: Callable[[AnySharedContext], Model | str | fstring] | Model | None,
55
+ render_model: bool,
56
+ model_base_url_attr: StrAttr | None,
57
+ render_model_base_url: bool,
58
+ model_api_key_attr: StrAttr | None,
59
+ render_model_api_key: bool,
60
+ ) -> str | Model | None:
61
+ """Gets the model instance or name, handling defaults and configuration."""
62
+ model = get_attr(ctx, model_attr, None, auto_render=render_model)
63
+ if model is None:
64
+ return default_llm_config.get_default_model()
65
+ if isinstance(model, str):
66
+ model_base_url = get_model_base_url(
67
+ ctx, model_base_url_attr, render_model_base_url
68
+ )
69
+ model_api_key = get_model_api_key(ctx, model_api_key_attr, render_model_api_key)
70
+ llm_config = LLMConfig(
71
+ default_model_name=model,
72
+ default_base_url=model_base_url,
73
+ default_api_key=model_api_key,
74
+ )
75
+ if model_base_url is None and model_api_key is None:
76
+ default_model_provider = default_llm_config.get_default_model_provider()
77
+ if default_model_provider is not None:
78
+ llm_config.set_default_provider(default_model_provider)
79
+ return llm_config.get_default_model()
80
+ # If it's already a Model instance, return it directly
81
+ if isinstance(model, Model):
82
+ return model
83
+ raise ValueError(f"Invalid model type resolved: {type(model)}, value: {model}")
@@ -0,0 +1,95 @@
1
+ import datetime
2
+ import inspect
3
+ import os
4
+ import platform
5
+ import re
6
+ from collections.abc import Callable
7
+ from typing import Any
8
+
9
+ from zrb.context.any_context import AnyContext
10
+ from zrb.context.any_shared_context import AnySharedContext
11
+ from zrb.util.attr import get_attr
12
+ from zrb.util.file import read_dir, read_file_with_line_numbers
13
+
14
+
15
+ def get_default_context(user_message: str) -> dict[str, Any]:
16
+ """Generates default context including time, OS, and file references."""
17
+ references = re.findall(r"@(\S+)", user_message)
18
+ current_references = []
19
+
20
+ for ref in references:
21
+ resource_path = os.path.abspath(os.path.expanduser(ref))
22
+ if os.path.isfile(resource_path):
23
+ content = read_file_with_line_numbers(resource_path)
24
+ current_references.append(
25
+ {
26
+ "reference": ref,
27
+ "name": resource_path,
28
+ "type": "file",
29
+ "note": "line numbers are included in the content",
30
+ "content": content,
31
+ }
32
+ )
33
+ elif os.path.isdir(resource_path):
34
+ content = read_dir(resource_path)
35
+ current_references.append(
36
+ {
37
+ "reference": ref,
38
+ "name": resource_path,
39
+ "type": "directory",
40
+ "content": content,
41
+ }
42
+ )
43
+
44
+ return {
45
+ "current_time": datetime.datetime.now().isoformat(),
46
+ "current_working_directory": os.getcwd(),
47
+ "current_os": platform.system(),
48
+ "os_version": platform.version(),
49
+ "python_version": platform.python_version(),
50
+ "current_references": current_references,
51
+ }
52
+
53
+
54
+ def get_conversation_context(
55
+ ctx: AnyContext,
56
+ conversation_context_attr: (
57
+ dict[str, Any] | Callable[[AnySharedContext], dict[str, Any]] | None
58
+ ),
59
+ ) -> dict[str, Any]:
60
+ """
61
+ Retrieves the conversation context.
62
+ If a value in the context dict is callable, it executes it with ctx.
63
+ """
64
+ raw_context = get_attr(
65
+ ctx, conversation_context_attr, {}, auto_render=False
66
+ ) # Context usually shouldn't be rendered
67
+ if not isinstance(raw_context, dict):
68
+ ctx.log_warning(
69
+ f"Conversation context resolved to type {type(raw_context)}, "
70
+ "expected dict. Returning empty context."
71
+ )
72
+ return {}
73
+ # If conversation_context contains callable value, execute them.
74
+ processed_context: dict[str, Any] = {}
75
+ for key, value in raw_context.items():
76
+ if callable(value):
77
+ try:
78
+ # Check if the callable expects 'ctx'
79
+ sig = inspect.signature(value)
80
+ if "ctx" in sig.parameters:
81
+ processed_context[key] = value(ctx)
82
+ else:
83
+ processed_context[key] = value()
84
+ except Exception as e:
85
+ ctx.log_warning(
86
+ f"Error executing callable for context key '{key}': {e}. "
87
+ "Skipping."
88
+ )
89
+ processed_context[key] = None
90
+ else:
91
+ processed_context[key] = value
92
+ return processed_context
93
+
94
+
95
+ # Context enrichment functions moved to context_enrichment.py
@@ -8,12 +8,13 @@ from pydantic_ai import Agent
8
8
  from pydantic_ai.models import Model
9
9
  from pydantic_ai.settings import ModelSettings
10
10
 
11
+ from zrb.attr.type import BoolAttr
11
12
  from zrb.context.any_context import AnyContext
12
- from zrb.task.llm.agent_runner import run_agent_iteration
13
- from zrb.task.llm.history import ListOfDict
13
+ from zrb.task.llm.agent import run_agent_iteration
14
+ from zrb.task.llm.typing import ListOfDict
15
+ from zrb.util.attr import get_bool_attr
14
16
 
15
17
 
16
- # Configuration model for context enrichment
17
18
  class EnrichmentConfig(BaseModel):
18
19
  model_config = {"arbitrary_types_allowed": True}
19
20
  model: Model | str | None = None
@@ -74,13 +75,58 @@ async def enrich_context(
74
75
  response = enrichment_run.result.data.response
75
76
  if response:
76
77
  conversation_context.update(response)
77
- ctx.log_info("History summarized and added/updated in context.")
78
+ ctx.log_info("Context enriched based on history.")
78
79
  ctx.log_info(
79
- f"New conversation context: {json.dumps(conversation_context)}"
80
+ f"Updated conversation context: {json.dumps(conversation_context)}"
80
81
  )
81
82
  else:
82
- ctx.log_warning("Context enrichment return no data")
83
+ ctx.log_warning("Context enrichment returned no data")
83
84
  except Exception as e:
84
85
  ctx.log_warning(f"Error during context enrichment LLM call: {e}")
85
86
  traceback.print_exc()
86
87
  return conversation_context
88
+
89
+
90
+ def should_enrich_context(
91
+ ctx: AnyContext,
92
+ history_list: ListOfDict,
93
+ should_enrich_context_attr: BoolAttr,
94
+ render_enrich_context: bool,
95
+ ) -> bool:
96
+ """Determines if context enrichment should occur based on history and config."""
97
+ if len(history_list) == 0:
98
+ return False
99
+ return get_bool_attr(
100
+ ctx,
101
+ should_enrich_context_attr,
102
+ True, # Default to True if not specified
103
+ auto_render=render_enrich_context,
104
+ )
105
+
106
+
107
+ async def maybe_enrich_context(
108
+ ctx: AnyContext,
109
+ history_list: ListOfDict,
110
+ conversation_context: dict[str, Any],
111
+ should_enrich_context_attr: BoolAttr,
112
+ render_enrich_context: bool,
113
+ model: str | Model | None,
114
+ model_settings: ModelSettings | None,
115
+ context_enrichment_prompt: str,
116
+ ) -> dict[str, Any]:
117
+ """Enriches context based on history if enabled."""
118
+ if should_enrich_context(
119
+ ctx, history_list, should_enrich_context_attr, render_enrich_context
120
+ ):
121
+ # Use the enrich_context function now defined in this file
122
+ return await enrich_context(
123
+ ctx=ctx,
124
+ config=EnrichmentConfig(
125
+ model=model,
126
+ settings=model_settings,
127
+ prompt=context_enrichment_prompt,
128
+ ),
129
+ conversation_context=conversation_context,
130
+ history_list=history_list,
131
+ )
132
+ return conversation_context