zrb 1.2.1__tar.gz → 1.3.0__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 (352) hide show
  1. {zrb-1.2.1 → zrb-1.3.0}/PKG-INFO +85 -18
  2. zrb-1.3.0/README.md +139 -0
  3. {zrb-1.2.1 → zrb-1.3.0}/pyproject.toml +2 -2
  4. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/llm/llm_chat.py +68 -9
  5. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/llm/tool/api.py +4 -2
  6. zrb-1.3.0/src/zrb/builtin/llm/tool/file.py +39 -0
  7. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/llm/tool/rag.py +37 -22
  8. zrb-1.3.0/src/zrb/builtin/llm/tool/web.py +100 -0
  9. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +28 -6
  10. zrb-1.3.0/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 +325 -0
  11. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +3 -1
  12. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +18 -1
  13. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +4 -0
  14. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +20 -11
  15. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +17 -2
  16. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +4 -0
  17. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +19 -11
  18. zrb-1.3.0/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +340 -0
  19. zrb-1.3.0/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +362 -0
  20. zrb-1.3.0/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +377 -0
  21. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +68 -13
  22. zrb-1.3.0/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +115 -0
  23. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +3 -1
  24. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +6 -5
  25. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +9 -3
  26. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/config.py +3 -1
  27. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/content_transformer/content_transformer.py +7 -1
  28. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/context/context.py +8 -2
  29. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/input/any_input.py +5 -0
  30. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/input/base_input.py +6 -0
  31. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/input/bool_input.py +2 -0
  32. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/input/float_input.py +2 -0
  33. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/input/int_input.py +2 -0
  34. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/input/option_input.py +2 -0
  35. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/input/password_input.py +2 -0
  36. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/input/text_input.py +11 -5
  37. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/cli.py +1 -1
  38. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/common_util.py +3 -3
  39. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/task_input_api_route.py +1 -1
  40. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/llm_task.py +103 -16
  41. zrb-1.2.1/README.md +0 -72
  42. zrb-1.2.1/src/zrb/builtin/llm/tool/web.py +0 -74
  43. zrb-1.2.1/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 -297
  44. zrb-1.2.1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -311
  45. zrb-1.2.1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
  46. zrb-1.2.1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
  47. zrb-1.2.1/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -94
  48. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/__init__.py +0 -0
  49. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/__main__.py +0 -0
  50. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/attr/__init__.py +0 -0
  51. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/attr/type.py +0 -0
  52. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/__init__.py +0 -0
  53. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/base64.py +0 -0
  54. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/git.py +0 -0
  55. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/git_subtree.py +0 -0
  56. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/group.py +0 -0
  57. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/llm/previous-session.js +0 -0
  58. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/llm/tool/cli.py +0 -0
  59. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/md5.py +0 -0
  60. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/__init__.py +0 -0
  61. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  62. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
  63. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
  64. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  65. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  66. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  67. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  68. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  69. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
  70. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
  71. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
  72. {zrb-1.2.1 → zrb-1.3.0}/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
  73. {zrb-1.2.1 → zrb-1.3.0}/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
  74. {zrb-1.2.1 → zrb-1.3.0}/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
  75. {zrb-1.2.1 → zrb-1.3.0}/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
  76. {zrb-1.2.1 → zrb-1.3.0}/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
  77. {zrb-1.2.1 → zrb-1.3.0}/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
  78. {zrb-1.2.1 → zrb-1.3.0}/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
  79. {zrb-1.2.1 → zrb-1.3.0}/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
  80. {zrb-1.2.1 → zrb-1.3.0}/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
  81. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
  82. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
  83. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
  84. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
  85. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  86. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
  87. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
  88. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
  89. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  90. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  91. {zrb-1.2.1 → zrb-1.3.0}/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
  92. {zrb-1.2.1 → zrb-1.3.0}/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
  93. {zrb-1.2.1 → zrb-1.3.0}/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
  94. {zrb-1.2.1 → zrb-1.3.0}/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
  95. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  96. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  97. {zrb-1.2.1 → zrb-1.3.0}/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
  98. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  99. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  100. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
  101. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  102. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
  103. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
  104. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
  105. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
  106. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  107. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  108. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  109. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
  110. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
  111. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
  112. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
  113. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  114. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
  115. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
  116. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  117. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
  118. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
  119. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
  120. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
  121. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
  122. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  123. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  124. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  125. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
  126. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
  127. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
  128. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
  129. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  130. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  131. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  132. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
  133. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
  134. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
  135. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
  136. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  137. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
  138. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
  139. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
  140. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
  141. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
  142. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
  143. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
  144. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
  145. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
  146. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
  147. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
  148. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
  149. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  150. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
  151. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  152. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  153. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  154. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  155. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  156. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
  157. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
  158. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
  159. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
  160. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
  161. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
  162. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
  163. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
  164. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
  165. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
  166. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
  167. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
  168. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
  169. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  170. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  171. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  172. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
  173. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
  174. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
  175. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
  176. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
  177. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
  178. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
  179. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
  180. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
  181. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
  182. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
  183. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
  184. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
  185. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
  186. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
  187. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
  188. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
  189. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
  190. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
  191. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
  192. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
  193. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
  194. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  195. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  196. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
  197. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
  198. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
  199. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
  200. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
  201. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
  202. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
  203. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
  204. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
  205. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
  206. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  207. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/create/__init__.py +0 -0
  208. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  209. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  210. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/project/create/project_task.py +0 -0
  211. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/python.py +0 -0
  212. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/random.py +0 -0
  213. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  214. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  215. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/setup/common_input.py +0 -0
  216. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  217. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  218. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  219. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  220. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/setup/ubuntu.py +0 -0
  221. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
  222. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
  223. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
  224. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/shell/__init__.py +0 -0
  225. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  226. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  227. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  228. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  229. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/builtin/todo.py +0 -0
  230. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/callback/__init__.py +0 -0
  231. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/callback/any_callback.py +0 -0
  232. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/callback/callback.py +0 -0
  233. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/cmd/__init__.py +0 -0
  234. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/cmd/cmd_result.py +0 -0
  235. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/cmd/cmd_val.py +0 -0
  236. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/content_transformer/__init__.py +0 -0
  237. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  238. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/context/__init__.py +0 -0
  239. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/context/any_context.py +0 -0
  240. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/context/any_shared_context.py +0 -0
  241. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/context/shared_context.py +0 -0
  242. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/dot_dict/__init__.py +0 -0
  243. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/dot_dict/dot_dict.py +0 -0
  244. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/env/__init__.py +0 -0
  245. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/env/any_env.py +0 -0
  246. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/env/env.py +0 -0
  247. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/env/env_file.py +0 -0
  248. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/env/env_map.py +0 -0
  249. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/group/__init__.py +0 -0
  250. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/group/any_group.py +0 -0
  251. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/group/group.py +0 -0
  252. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/input/__init__.py +0 -0
  253. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/input/str_input.py +0 -0
  254. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/__init__.py +0 -0
  255. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_app.py +0 -0
  256. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_config/config.py +0 -0
  257. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_config/config_factory.py +0 -0
  258. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/__init__.py +0 -0
  259. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/docs_route.py +0 -0
  260. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
  261. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
  262. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/error_page/view.html +0 -0
  263. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
  264. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
  265. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/home_page/view.html +0 -0
  266. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/login_api_route.py +0 -0
  267. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
  268. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/login_page/view.html +0 -0
  269. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/logout_api_route.py +0 -0
  270. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
  271. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/logout_page/view.html +0 -0
  272. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
  273. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
  274. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
  275. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
  276. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
  277. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
  278. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
  279. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
  280. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/static/resources/common.css +0 -0
  281. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
  282. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
  283. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
  284. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/static/resources/pico.min.css +0 -0
  285. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
  286. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
  287. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
  288. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
  289. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/static/static_route.py +0 -0
  290. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
  291. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_schema/session.py +0 -0
  292. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_schema/token.py +0 -0
  293. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_schema/user.py +0 -0
  294. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_util/cookie.py +0 -0
  295. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_util/html.py +0 -0
  296. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_util/token.py +0 -0
  297. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/runner/web_util/user.py +0 -0
  298. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/session/__init__.py +0 -0
  299. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/session/any_session.py +0 -0
  300. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/session/session.py +0 -0
  301. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/session_state_log/__init__.py +0 -0
  302. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/session_state_log/session_state_log.py +0 -0
  303. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/session_state_logger/__init__.py +0 -0
  304. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  305. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  306. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
  307. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/__init__.py +0 -0
  308. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/any_task.py +0 -0
  309. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/base_task.py +0 -0
  310. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/base_trigger.py +0 -0
  311. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/cmd_task.py +0 -0
  312. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/http_check.py +0 -0
  313. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/make_task.py +0 -0
  314. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/rsync_task.py +0 -0
  315. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/scaffolder.py +0 -0
  316. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/scheduler.py +0 -0
  317. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/task.py +0 -0
  318. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task/tcp_check.py +0 -0
  319. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task_status/__init__.py +0 -0
  320. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/task_status/task_status.py +0 -0
  321. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/__init__.py +0 -0
  322. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/attr.py +0 -0
  323. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/cli/__init__.py +0 -0
  324. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/cli/style.py +0 -0
  325. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/cli/subcommand.py +0 -0
  326. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/cmd/__init__.py +0 -0
  327. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/cmd/command.py +0 -0
  328. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/cmd/remote.py +0 -0
  329. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/codemod/__init__.py +0 -0
  330. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/codemod/modification_mode.py +0 -0
  331. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/codemod/modify_class.py +0 -0
  332. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/codemod/modify_class_parent.py +0 -0
  333. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/codemod/modify_class_property.py +0 -0
  334. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/codemod/modify_dict.py +0 -0
  335. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/codemod/modify_function.py +0 -0
  336. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/codemod/modify_function_call.py +0 -0
  337. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/codemod/modify_method.py +0 -0
  338. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/codemod/modify_module.py +0 -0
  339. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/cron.py +0 -0
  340. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/file.py +0 -0
  341. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/git.py +0 -0
  342. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/git_subtree.py +0 -0
  343. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/group.py +0 -0
  344. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/load.py +0 -0
  345. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/run.py +0 -0
  346. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/string/__init__.py +0 -0
  347. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/string/conversion.py +0 -0
  348. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/string/format.py +0 -0
  349. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/string/name.py +0 -0
  350. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/util/todo.py +0 -0
  351. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/xcom/__init__.py +0 -0
  352. {zrb-1.2.1 → zrb-1.3.0}/src/zrb/xcom/xcom.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zrb
3
- Version: 1.2.1
3
+ Version: 1.3.0
4
4
  Summary: Your Automation Powerhouse
5
5
  Home-page: https://github.com/state-alchemists/zrb
6
6
  License: AGPL-3.0-or-later
@@ -24,7 +24,7 @@ Requires-Dist: isort (>=5.13.2,<5.14.0)
24
24
  Requires-Dist: libcst (>=1.5.0,<2.0.0)
25
25
  Requires-Dist: pdfplumber (>=0.11.4,<0.12.0) ; extra == "rag"
26
26
  Requires-Dist: psutil (>=6.1.1,<7.0.0)
27
- Requires-Dist: pydantic-ai (>=0.0.19,<0.0.20)
27
+ Requires-Dist: pydantic-ai (>=0.0.31,<0.0.32)
28
28
  Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
29
29
  Requires-Dist: python-jose[cryptography] (>=3.4.0,<4.0.0)
30
30
  Requires-Dist: requests (>=2.32.3,<3.0.0)
@@ -39,29 +39,96 @@ Description-Content-Type: text/markdown
39
39
 
40
40
  # 🤖 Zrb: Your Automation Powerhouse
41
41
 
42
- Zrb allows you to write your automation tasks in Python and declaratively:
42
+ Zrb allows you to write your automation tasks in Python. For example, you can define the following script in your home directory (`/home/<your-user-name>/zrb_init.py`).
43
43
 
44
44
 
45
45
  ```python
46
- # Filename: zrb_init.py
47
- from zrb import cli, Task, Group, IntInput
48
-
49
- math = cli.add_group(Group("math", description="Math tools"))
50
- math.add_task(Task(
51
- name="add",
52
- input=[
53
- IntInput("a", description="First number"),
54
- IntInput("b", description="Second number")
55
- ],
56
- action=lambda ctx: ctx.input.a + ctx.input.b
57
- ))
46
+ import os
47
+ from zrb import cli, LLMTask, CmdTask, StrInput
48
+ from zrb.builtin.llm.tool.file import read_source_code, write_text_file
49
+ from pydantic_ai.models.openai import OpenAIModel
50
+
51
+
52
+ CURRENT_DIR = os.getcwd()
53
+ OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1"
54
+ OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY", "")
55
+ OPENROUTER_MODEL_NAME = os.getenv(
56
+ "AGENT_MODEL_NAME", "anthropic/claude-3.7-sonnet"
57
+ )
58
+
59
+
60
+ # Defining a LLM Task to create a Plantuml script based on source code in current directory.
61
+ # User can choose the diagram type. By default it is "state diagram"
62
+ make_uml = cli.add_task(
63
+ LLMTask(
64
+ name="make-uml",
65
+ description="Creating plantuml diagram based on source code in current directory",
66
+ input=StrInput(name="diagram", default="state diagram"),
67
+ model=OpenAIModel(
68
+ OPENROUTER_MODEL_NAME,
69
+ base_url=OPENROUTER_BASE_URL,
70
+ api_key=OPENROUTER_API_KEY,
71
+ ),
72
+ message=(
73
+ f"Read source code in {CURRENT_DIR}, "
74
+ "make a {ctx.input.diagram} in plantuml format. "
75
+ f"Write the script into {CURRENT_DIR}/{{ctx.input.diagram}}.uml"
76
+ ),
77
+ tools=[
78
+ read_source_code,
79
+ write_text_file,
80
+ ],
81
+ )
82
+ )
83
+
84
+ # Defining a Cmd Task to transform Plantuml script into a png image.
85
+ make_png = cli.add_task(
86
+ CmdTask(
87
+ name="make-png",
88
+ description="Creating png based on source code in current directory",
89
+ input=StrInput(name="diagram", default="state diagram"),
90
+ cmd="plantuml -tpng '{ctx.input.diagram}.uml'",
91
+ cwd=CURRENT_DIR,
92
+ )
93
+ )
94
+
95
+ # Making sure that make_png has make_uml as its dependency.
96
+ make_uml >> make_png
58
97
  ```
59
98
 
60
- Once defined, you will be able to access your automation tasks from the CLI, Web Interface, or via HTTP API.
99
+ Once defined, your automation tasks are immediately accessible from the CLI. You can then invoke the tasks by invoking.
61
100
 
62
- For more complex scenario, you can also defined Task dependencies (upstreams) and retry mechanisms. You can also make a scheduled tasks, just like in Apache Airflow.
101
+ ```bash
102
+ zrb make-png --diagram "state diagram"
103
+ ```
104
+
105
+ Or you can invoke the tasks without parameter.
106
+
107
+ ```bash
108
+ zrb make-png
109
+ ```
110
+
111
+ At this point, Zrb will politely ask you to provide the diagram type.
112
+
113
+ ```
114
+ diagram [state diagram]:
115
+ ```
116
+
117
+ You can just press enter if you want to use the default value.
118
+
119
+ Finally, you can run Zrb as a server and make your tasks available for non technical users by invoking the following command.
120
+
121
+ ```bash
122
+ zrb server start
123
+ ```
124
+
125
+ You will have a nice web interface running on `http://localhost:12123`
126
+
127
+ ![Zrb Web UI](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/zrb-web-ui.png)
128
+
129
+ Now, let's see how Zrb generate the state diagram. Based on the source code in your current directory, Zrb will generate a `state diagram.uml` and transform it into `state diagram.png`.
63
130
 
64
- Furthermore, Zrb has some builtin tasks to manage monorepo, generate FastAPI application, or play around with LLM.
131
+ ![State Diagram](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/state-diagram.png)
65
132
 
66
133
  See the [getting started guide](https://github.com/state-alchemists/zrb/blob/main/docs/recipes/getting-started/README.md) for more information. Or just watch the demo:
67
134
 
zrb-1.3.0/README.md ADDED
@@ -0,0 +1,139 @@
1
+ ![](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/zrb/android-chrome-192x192.png)
2
+
3
+ [Documentation](https://github.com/state-alchemists/zrb/blob/main/docs/README.md)
4
+
5
+ # 🤖 Zrb: Your Automation Powerhouse
6
+
7
+ Zrb allows you to write your automation tasks in Python. For example, you can define the following script in your home directory (`/home/<your-user-name>/zrb_init.py`).
8
+
9
+
10
+ ```python
11
+ import os
12
+ from zrb import cli, LLMTask, CmdTask, StrInput
13
+ from zrb.builtin.llm.tool.file import read_source_code, write_text_file
14
+ from pydantic_ai.models.openai import OpenAIModel
15
+
16
+
17
+ CURRENT_DIR = os.getcwd()
18
+ OPENROUTER_BASE_URL = "https://openrouter.ai/api/v1"
19
+ OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY", "")
20
+ OPENROUTER_MODEL_NAME = os.getenv(
21
+ "AGENT_MODEL_NAME", "anthropic/claude-3.7-sonnet"
22
+ )
23
+
24
+
25
+ # Defining a LLM Task to create a Plantuml script based on source code in current directory.
26
+ # User can choose the diagram type. By default it is "state diagram"
27
+ make_uml = cli.add_task(
28
+ LLMTask(
29
+ name="make-uml",
30
+ description="Creating plantuml diagram based on source code in current directory",
31
+ input=StrInput(name="diagram", default="state diagram"),
32
+ model=OpenAIModel(
33
+ OPENROUTER_MODEL_NAME,
34
+ base_url=OPENROUTER_BASE_URL,
35
+ api_key=OPENROUTER_API_KEY,
36
+ ),
37
+ message=(
38
+ f"Read source code in {CURRENT_DIR}, "
39
+ "make a {ctx.input.diagram} in plantuml format. "
40
+ f"Write the script into {CURRENT_DIR}/{{ctx.input.diagram}}.uml"
41
+ ),
42
+ tools=[
43
+ read_source_code,
44
+ write_text_file,
45
+ ],
46
+ )
47
+ )
48
+
49
+ # Defining a Cmd Task to transform Plantuml script into a png image.
50
+ make_png = cli.add_task(
51
+ CmdTask(
52
+ name="make-png",
53
+ description="Creating png based on source code in current directory",
54
+ input=StrInput(name="diagram", default="state diagram"),
55
+ cmd="plantuml -tpng '{ctx.input.diagram}.uml'",
56
+ cwd=CURRENT_DIR,
57
+ )
58
+ )
59
+
60
+ # Making sure that make_png has make_uml as its dependency.
61
+ make_uml >> make_png
62
+ ```
63
+
64
+ Once defined, your automation tasks are immediately accessible from the CLI. You can then invoke the tasks by invoking.
65
+
66
+ ```bash
67
+ zrb make-png --diagram "state diagram"
68
+ ```
69
+
70
+ Or you can invoke the tasks without parameter.
71
+
72
+ ```bash
73
+ zrb make-png
74
+ ```
75
+
76
+ At this point, Zrb will politely ask you to provide the diagram type.
77
+
78
+ ```
79
+ diagram [state diagram]:
80
+ ```
81
+
82
+ You can just press enter if you want to use the default value.
83
+
84
+ Finally, you can run Zrb as a server and make your tasks available for non technical users by invoking the following command.
85
+
86
+ ```bash
87
+ zrb server start
88
+ ```
89
+
90
+ You will have a nice web interface running on `http://localhost:12123`
91
+
92
+ ![Zrb Web UI](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/zrb-web-ui.png)
93
+
94
+ Now, let's see how Zrb generate the state diagram. Based on the source code in your current directory, Zrb will generate a `state diagram.uml` and transform it into `state diagram.png`.
95
+
96
+ ![State Diagram](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/state-diagram.png)
97
+
98
+ See the [getting started guide](https://github.com/state-alchemists/zrb/blob/main/docs/recipes/getting-started/README.md) for more information. Or just watch the demo:
99
+
100
+ [![Video Title](https://img.youtube.com/vi/W7dgk96l__o/0.jpg)](https://www.youtube.com/watch?v=W7dgk96l__o)
101
+
102
+
103
+ # 🫰 Installing Zrb
104
+
105
+ You can install Zrb as a pip package by invoking the following command:
106
+
107
+ ```bash
108
+ pip install --pre zrb
109
+ ```
110
+
111
+ Alternatively, you can also use our installation script to install Zrb along with some prerequisites:
112
+
113
+ ```bash
114
+ bash -c "$(curl -fsSL https://raw.githubusercontent.com/state-alchemists/zrb/main/install.sh)"
115
+ ```
116
+
117
+ # 🐞 Bug Report + Feature Request
118
+
119
+ You can submit bug reports and feature requests by creating a new [issue](https://github.com/state-alchemists/zrb/issues) on Zrb's GitHub Repositories. When reporting a bug or requesting a feature, please be sure to:
120
+
121
+ - Include the version of Zrb you are using (i.e., `zrb version`)
122
+ - Tell us what you have tried
123
+ - Tell us what you expect
124
+ - Tell us what you get
125
+
126
+ We will also welcome your [pull requests and contributions](https://github.com/state-alchemists/zrb/pulls).
127
+
128
+
129
+ # ☕ Donation
130
+
131
+ Help Red Skull to click the donation button:
132
+
133
+ [![](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/donator.png)](https://stalchmst.com/donation)
134
+
135
+ # 🎉 Fun Fact
136
+
137
+ > Madou Ring Zaruba (魔導輪ザルバ, Madōrin Zaruba) is a Madougu which supports bearers of the Garo Armor. [(Garo Wiki | Fandom)](https://garo.fandom.com/wiki/Zaruba)
138
+
139
+ ![Madou Ring Zaruba on Kouga's Hand](https://raw.githubusercontent.com/state-alchemists/zrb/main/_images/madou-ring-zaruba.jpg)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.2.1"
3
+ version = "1.3.0"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -50,7 +50,7 @@ beautifulsoup4 = "^4.12.3"
50
50
  fastapi = {extras = ["standard"], version = "^0.115.6"}
51
51
  python-jose = {extras = ["cryptography"], version = "^3.4.0"}
52
52
  ulid-py = "^1.1.0"
53
- pydantic-ai = "^0.0.19"
53
+ pydantic-ai = "^0.0.31"
54
54
  fastembed = "^0.5.1"
55
55
  psutil = "^6.1.1"
56
56
 
@@ -2,22 +2,40 @@ import json
2
2
  import os
3
3
  from typing import Any
4
4
 
5
+ from pydantic_ai.models import Model
6
+
5
7
  from zrb.builtin.group import llm_group
6
8
  from zrb.builtin.llm.tool.api import get_current_location, get_current_weather
7
9
  from zrb.builtin.llm.tool.cli import run_shell_command
8
- from zrb.builtin.llm.tool.web import open_web_route, query_internet
10
+ from zrb.builtin.llm.tool.file import (
11
+ list_file,
12
+ read_source_code,
13
+ read_text_file,
14
+ write_text_file,
15
+ )
16
+ from zrb.builtin.llm.tool.web import (
17
+ create_search_internet_tool,
18
+ open_web_page,
19
+ search_arxiv,
20
+ search_wikipedia,
21
+ )
9
22
  from zrb.config import (
10
23
  LLM_ALLOW_ACCESS_INTERNET,
24
+ LLM_ALLOW_ACCESS_LOCAL_FILE,
11
25
  LLM_ALLOW_ACCESS_SHELL,
12
26
  LLM_HISTORY_DIR,
13
27
  LLM_MODEL,
14
28
  LLM_SYSTEM_PROMPT,
29
+ SERP_API_KEY,
15
30
  )
31
+ from zrb.context.any_context import AnyContext
16
32
  from zrb.context.any_shared_context import AnySharedContext
33
+ from zrb.input.any_input import AnyInput
17
34
  from zrb.input.bool_input import BoolInput
18
35
  from zrb.input.str_input import StrInput
19
36
  from zrb.input.text_input import TextInput
20
37
  from zrb.task.llm_task import LLMTask
38
+ from zrb.util.attr import get_attr
21
39
  from zrb.util.file import read_file, write_file
22
40
  from zrb.util.string.conversion import to_pascal_case
23
41
 
@@ -72,23 +90,53 @@ def _write_chat_conversation(
72
90
  write_file(last_session_file_path, current_session_name)
73
91
 
74
92
 
75
- llm_chat: LLMTask = llm_group.add_task(
76
- LLMTask(
77
- name="llm-chat",
78
- input=[
93
+ class _LLMChat(LLMTask):
94
+
95
+ _default_model: Model | str | None = None
96
+
97
+ def set_default_model(self, model: Model | str):
98
+ self._default_model = model
99
+
100
+ @property
101
+ def inputs(self) -> list[AnyInput]:
102
+ task_inputs = super().inputs
103
+ model_input_default = LLM_MODEL if self._default_model is None else "default"
104
+ return [
79
105
  StrInput(
80
106
  "model",
81
107
  description="LLM Model",
82
108
  prompt="LLM Model",
83
- default=LLM_MODEL,
109
+ default=model_input_default,
84
110
  allow_positional_parsing=False,
111
+ always_prompt=False,
85
112
  ),
113
+ *task_inputs,
114
+ ]
115
+
116
+ def _get_model(self, ctx: AnyContext) -> str | Model | None:
117
+ if ctx.input.model == "default":
118
+ if self._default_model is not None:
119
+ return self._default_model
120
+ return super()._get_model(ctx)
121
+ model = get_attr(
122
+ ctx, ctx.input.model, "ollama_chat/llama3.1", auto_render=self._render_model
123
+ )
124
+ if isinstance(model, (Model, str)) or model is None:
125
+ return model
126
+ raise ValueError("Invalid model")
127
+
128
+
129
+ llm_chat: LLMTask = llm_group.add_task(
130
+ _LLMChat(
131
+ name="llm-chat",
132
+ input=[
86
133
  TextInput(
87
134
  "system-prompt",
88
135
  description="System prompt",
89
136
  prompt="System prompt",
90
137
  default=LLM_SYSTEM_PROMPT,
91
138
  allow_positional_parsing=False,
139
+ always_prompt=False,
92
140
  ),
93
141
  BoolInput(
94
142
  "start-new",
@@ -96,6 +144,7 @@ llm_chat: LLMTask = llm_group.add_task(
96
144
  prompt="Start new conversation (LLM will forget everything)",
97
145
  default=False,
98
146
  allow_positional_parsing=False,
147
+ always_prompt=False,
99
148
  ),
100
149
  TextInput("message", description="User message", prompt="Your message"),
101
150
  PreviousSessionInput(
@@ -104,12 +153,12 @@ llm_chat: LLMTask = llm_group.add_task(
104
153
  prompt="Previous conversation session (can be empty)",
105
154
  allow_positional_parsing=False,
106
155
  allow_empty=True,
156
+ always_prompt=False,
107
157
  ),
108
158
  ],
109
159
  conversation_history_reader=_read_chat_conversation,
110
160
  conversation_history_writer=_write_chat_conversation,
111
161
  description="Chat with LLM",
112
- model="{ctx.input.model}",
113
162
  system_prompt="{ctx.input['system-prompt']}",
114
163
  message="{ctx.input.message}",
115
164
  retries=0,
@@ -117,11 +166,21 @@ llm_chat: LLMTask = llm_group.add_task(
117
166
  alias="chat",
118
167
  )
119
168
 
169
+
170
+ if LLM_ALLOW_ACCESS_LOCAL_FILE:
171
+ llm_chat.add_tool(read_source_code)
172
+ llm_chat.add_tool(list_file)
173
+ llm_chat.add_tool(read_text_file)
174
+ llm_chat.add_tool(write_text_file)
175
+
120
176
  if LLM_ALLOW_ACCESS_SHELL:
121
177
  llm_chat.add_tool(run_shell_command)
122
178
 
123
179
  if LLM_ALLOW_ACCESS_INTERNET:
124
- llm_chat.add_tool(open_web_route)
125
- llm_chat.add_tool(query_internet)
180
+ llm_chat.add_tool(open_web_page)
181
+ llm_chat.add_tool(search_wikipedia)
182
+ llm_chat.add_tool(search_arxiv)
183
+ if SERP_API_KEY != "":
184
+ llm_chat.add_tool(create_search_internet_tool(SERP_API_KEY))
126
185
  llm_chat.add_tool(get_current_location)
127
186
  llm_chat.add_tool(get_current_weather)
@@ -1,13 +1,13 @@
1
1
  import json
2
2
  from typing import Annotated, Literal
3
3
 
4
- import requests
5
-
6
4
 
7
5
  def get_current_location() -> (
8
6
  Annotated[str, "JSON string representing latitude and longitude"]
9
7
  ): # noqa
10
8
  """Get the user's current location."""
9
+ import requests
10
+
11
11
  return json.dumps(requests.get("http://ip-api.com/json?fields=lat,lon").json())
12
12
 
13
13
 
@@ -17,6 +17,8 @@ def get_current_weather(
17
17
  temperature_unit: Literal["celsius", "fahrenheit"],
18
18
  ) -> str:
19
19
  """Get the current weather in a given location."""
20
+ import requests
21
+
20
22
  resp = requests.get(
21
23
  "https://api.open-meteo.com/v1/forecast",
22
24
  params={
@@ -0,0 +1,39 @@
1
+ import os
2
+
3
+ from zrb.util.file import read_file, write_file
4
+
5
+
6
+ def list_file(
7
+ directory: str = ".",
8
+ extensions: list[str] = [".py", ".go", ".js", ".ts", ".java", ".c", ".cpp"],
9
+ ) -> list[str]:
10
+ """List all files in a directory"""
11
+ all_files: list[str] = []
12
+ for root, _, files in os.walk(directory):
13
+ for filename in files:
14
+ for extension in extensions:
15
+ if filename.lower().endswith(extension):
16
+ all_files.append(os.path.join(root, filename))
17
+ return all_files
18
+
19
+
20
+ def read_text_file(file: str) -> str:
21
+ """Read a text file"""
22
+ return read_file(os.path.abspath(file))
23
+
24
+
25
+ def write_text_file(file: str, content: str):
26
+ """Write a text file"""
27
+ return write_file(os.path.abspath(file), content)
28
+
29
+
30
+ def read_source_code(
31
+ directory: str = ".",
32
+ extensions: list[str] = [".py", ".go", ".js", ".ts", ".java", ".c", ".cpp"],
33
+ ) -> list[str]:
34
+ """Read source code in a directory"""
35
+ files = list_file(directory, extensions)
36
+ for index, file in enumerate(files):
37
+ content = read_text_file(file)
38
+ files[index] = f"# {file}\n```\n{content}\n```"
39
+ return files
@@ -1,7 +1,9 @@
1
+ import fnmatch
1
2
  import hashlib
2
3
  import json
3
4
  import os
4
5
  import sys
6
+ from collections.abc import Callable
5
7
 
6
8
  import ulid
7
9
 
@@ -15,6 +17,20 @@ from zrb.util.cli.style import stylize_error, stylize_faint
15
17
  from zrb.util.file import read_file
16
18
 
17
19
 
20
+ class RAGFileReader:
21
+ def __init__(self, glob_pattern: str, read: Callable[[str], str]):
22
+ self.glob_pattern = glob_pattern
23
+ self.read = read
24
+
25
+ def is_match(self, file_name: str):
26
+ if os.sep not in self.glob_pattern and (
27
+ os.altsep is None or os.altsep not in self.glob_pattern
28
+ ):
29
+ # Pattern like "*.txt" – match only the basename.
30
+ return fnmatch.fnmatch(os.path.basename(file_name), self.glob_pattern)
31
+ return fnmatch.fnmatch(file_name, self.glob_pattern)
32
+
33
+
18
34
  def create_rag_from_directory(
19
35
  tool_name: str,
20
36
  tool_description: str,
@@ -25,6 +41,7 @@ def create_rag_from_directory(
25
41
  chunk_size: int = RAG_CHUNK_SIZE,
26
42
  overlap: int = RAG_OVERLAP,
27
43
  max_result_count: int = RAG_MAX_RESULT_COUNT,
44
+ file_reader: list[RAGFileReader] = [],
28
45
  ):
29
46
  async def retrieve(query: str) -> str:
30
47
  from chromadb import PersistentClient
@@ -36,35 +53,31 @@ def create_rag_from_directory(
36
53
  path=vector_db_path, settings=Settings(allow_reset=True)
37
54
  )
38
55
  collection = client.get_or_create_collection(vector_db_collection)
39
-
40
56
  # Track file changes using a hash-based approach
41
57
  hash_file_path = os.path.join(vector_db_path, "file_hashes.json")
42
58
  previous_hashes = _load_hashes(hash_file_path)
43
59
  current_hashes = {}
44
-
60
+ # Get updated_files
45
61
  updated_files = []
46
-
47
62
  for root, _, files in os.walk(document_dir_path):
48
63
  for file in files:
49
64
  file_path = os.path.join(root, file)
50
65
  file_hash = _compute_file_hash(file_path)
51
66
  relative_path = os.path.relpath(file_path, document_dir_path)
52
67
  current_hashes[relative_path] = file_hash
53
-
54
68
  if previous_hashes.get(relative_path) != file_hash:
55
69
  updated_files.append(file_path)
56
-
70
+ # Upsert updated_files to vector db
57
71
  if updated_files:
58
72
  print(
59
73
  stylize_faint(f"Updating {len(updated_files)} changed files"),
60
74
  file=sys.stderr,
61
75
  )
62
-
63
76
  for file_path in updated_files:
64
77
  try:
65
78
  relative_path = os.path.relpath(file_path, document_dir_path)
66
79
  collection.delete(where={"file_path": relative_path})
67
- content = _read_file_content(file_path)
80
+ content = _read_txt_content(file_path, file_reader)
68
81
  file_id = ulid.new().str
69
82
  for i in range(0, len(content), chunk_size - overlap):
70
83
  chunk = content[i : i + chunk_size]
@@ -92,14 +105,13 @@ def create_rag_from_directory(
92
105
  stylize_error(f"Error processing {file_path}: {e}"),
93
106
  file=sys.stderr,
94
107
  )
95
-
96
108
  _save_hashes(hash_file_path, current_hashes)
97
109
  else:
98
110
  print(
99
111
  stylize_faint("No changes detected. Skipping database update."),
100
112
  file=sys.stderr,
101
113
  )
102
-
114
+ # Vectorize query and get related document chunks
103
115
  print(stylize_faint("Vectorizing query"), file=sys.stderr)
104
116
  embedding_result = list(embedding_model.embed([query]))
105
117
  query_vector = embedding_result[0]
@@ -123,7 +135,22 @@ def _compute_file_hash(file_path: str) -> str:
123
135
  return hash_md5.hexdigest()
124
136
 
125
137
 
126
- def _read_file_content(file_path: str) -> str:
138
+ def _load_hashes(file_path: str) -> dict:
139
+ if os.path.exists(file_path):
140
+ with open(file_path, "r") as f:
141
+ return json.load(f)
142
+ return {}
143
+
144
+
145
+ def _save_hashes(file_path: str, hashes: dict):
146
+ with open(file_path, "w") as f:
147
+ json.dump(hashes, f)
148
+
149
+
150
+ def _read_txt_content(file_path: str, file_reader: list[RAGFileReader]):
151
+ for reader in file_reader:
152
+ if reader.is_match(file_path):
153
+ return reader.read(file_path)
127
154
  if file_path.lower().endswith(".pdf"):
128
155
  return _read_pdf(file_path)
129
156
  return read_file(file_path)
@@ -136,15 +163,3 @@ def _read_pdf(file_path: str) -> str:
136
163
  return "\n".join(
137
164
  page.extract_text() for page in pdf.pages if page.extract_text()
138
165
  )
139
-
140
-
141
- def _load_hashes(file_path: str) -> dict:
142
- if os.path.exists(file_path):
143
- with open(file_path, "r") as f:
144
- return json.load(f)
145
- return {}
146
-
147
-
148
- def _save_hashes(file_path: str, hashes: dict):
149
- with open(file_path, "w") as f:
150
- json.dump(hashes, f)