zrb 1.2.1__tar.gz → 1.2.2__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 (346) hide show
  1. {zrb-1.2.1 → zrb-1.2.2}/PKG-INFO +2 -2
  2. {zrb-1.2.1 → zrb-1.2.2}/pyproject.toml +2 -2
  3. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/llm/llm_chat.py +26 -3
  4. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/llm/tool/api.py +4 -2
  5. zrb-1.2.2/src/zrb/builtin/llm/tool/file.py +39 -0
  6. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/llm/tool/rag.py +37 -22
  7. zrb-1.2.2/src/zrb/builtin/llm/tool/web.py +100 -0
  8. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/config.py +3 -1
  9. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/content_transformer/content_transformer.py +7 -1
  10. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/context/context.py +8 -2
  11. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/input/text_input.py +9 -5
  12. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/llm_task.py +103 -16
  13. zrb-1.2.1/src/zrb/builtin/llm/tool/web.py +0 -74
  14. {zrb-1.2.1 → zrb-1.2.2}/README.md +0 -0
  15. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/__init__.py +0 -0
  16. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/__main__.py +0 -0
  17. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/attr/__init__.py +0 -0
  18. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/attr/type.py +0 -0
  19. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/__init__.py +0 -0
  20. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/base64.py +0 -0
  21. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/git.py +0 -0
  22. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/git_subtree.py +0 -0
  23. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/group.py +0 -0
  24. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/llm/previous-session.js +0 -0
  25. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/llm/tool/cli.py +0 -0
  26. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/md5.py +0 -0
  27. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/__init__.py +0 -0
  28. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  29. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
  30. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
  31. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  32. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  33. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  34. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  35. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
  36. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
  37. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
  38. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
  39. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
  40. {zrb-1.2.1 → zrb-1.2.2}/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
  41. {zrb-1.2.1 → zrb-1.2.2}/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
  42. {zrb-1.2.1 → zrb-1.2.2}/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
  43. {zrb-1.2.1 → zrb-1.2.2}/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
  44. {zrb-1.2.1 → zrb-1.2.2}/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
  45. {zrb-1.2.1 → zrb-1.2.2}/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
  46. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
  47. {zrb-1.2.1 → zrb-1.2.2}/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
  48. {zrb-1.2.1 → zrb-1.2.2}/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
  49. {zrb-1.2.1 → zrb-1.2.2}/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
  50. {zrb-1.2.1 → zrb-1.2.2}/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
  51. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
  52. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
  53. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
  54. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
  55. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  56. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
  57. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
  58. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
  59. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
  60. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
  61. {zrb-1.2.1 → zrb-1.2.2}/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
  62. {zrb-1.2.1 → zrb-1.2.2}/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
  63. {zrb-1.2.1 → zrb-1.2.2}/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
  64. {zrb-1.2.1 → zrb-1.2.2}/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
  65. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
  66. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
  67. {zrb-1.2.1 → zrb-1.2.2}/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
  68. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
  69. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
  70. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
  71. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
  72. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
  73. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
  74. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
  75. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
  76. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  77. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
  78. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  79. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
  80. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
  81. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
  82. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
  83. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  84. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
  85. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
  86. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  87. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
  88. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
  89. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
  90. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
  91. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
  92. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  93. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  94. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
  95. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
  96. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
  97. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
  98. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
  99. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
  100. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
  101. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
  102. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
  103. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
  104. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
  105. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
  106. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
  107. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
  108. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
  109. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
  110. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
  111. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
  112. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
  113. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
  114. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
  115. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
  116. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
  117. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
  118. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
  119. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
  120. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
  121. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
  122. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
  123. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
  124. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
  125. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
  126. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
  127. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
  128. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
  129. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
  130. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
  131. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
  132. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
  133. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
  134. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
  135. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
  136. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
  137. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
  138. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
  139. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
  140. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
  141. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
  142. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
  143. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
  144. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
  145. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
  146. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
  147. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
  148. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
  149. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
  150. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
  151. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
  152. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
  153. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
  154. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
  155. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
  156. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
  157. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
  158. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
  159. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
  160. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
  161. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
  162. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
  163. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
  164. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
  165. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
  166. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
  167. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
  168. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
  169. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
  170. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
  171. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
  172. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
  173. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
  174. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
  175. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  176. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
  177. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
  178. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
  179. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  180. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
  181. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
  182. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
  183. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
  184. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
  185. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
  186. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
  187. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
  188. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
  189. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
  190. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  191. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/create/__init__.py +0 -0
  192. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  193. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  194. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/project/create/project_task.py +0 -0
  195. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/python.py +0 -0
  196. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/random.py +0 -0
  197. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  198. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  199. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/setup/common_input.py +0 -0
  200. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  201. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  202. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  203. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  204. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/setup/ubuntu.py +0 -0
  205. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
  206. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
  207. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
  208. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/shell/__init__.py +0 -0
  209. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  210. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  211. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  212. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  213. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/builtin/todo.py +0 -0
  214. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/callback/__init__.py +0 -0
  215. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/callback/any_callback.py +0 -0
  216. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/callback/callback.py +0 -0
  217. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/cmd/__init__.py +0 -0
  218. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/cmd/cmd_result.py +0 -0
  219. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/cmd/cmd_val.py +0 -0
  220. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/content_transformer/__init__.py +0 -0
  221. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  222. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/context/__init__.py +0 -0
  223. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/context/any_context.py +0 -0
  224. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/context/any_shared_context.py +0 -0
  225. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/context/shared_context.py +0 -0
  226. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/dot_dict/__init__.py +0 -0
  227. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/dot_dict/dot_dict.py +0 -0
  228. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/env/__init__.py +0 -0
  229. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/env/any_env.py +0 -0
  230. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/env/env.py +0 -0
  231. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/env/env_file.py +0 -0
  232. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/env/env_map.py +0 -0
  233. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/group/__init__.py +0 -0
  234. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/group/any_group.py +0 -0
  235. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/group/group.py +0 -0
  236. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/input/__init__.py +0 -0
  237. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/input/any_input.py +0 -0
  238. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/input/base_input.py +0 -0
  239. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/input/bool_input.py +0 -0
  240. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/input/float_input.py +0 -0
  241. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/input/int_input.py +0 -0
  242. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/input/option_input.py +0 -0
  243. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/input/password_input.py +0 -0
  244. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/input/str_input.py +0 -0
  245. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/__init__.py +0 -0
  246. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/cli.py +0 -0
  247. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/common_util.py +0 -0
  248. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_app.py +0 -0
  249. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_config/config.py +0 -0
  250. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_config/config_factory.py +0 -0
  251. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/__init__.py +0 -0
  252. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/docs_route.py +0 -0
  253. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
  254. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
  255. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/error_page/view.html +0 -0
  256. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
  257. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
  258. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/home_page/view.html +0 -0
  259. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/login_api_route.py +0 -0
  260. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
  261. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/login_page/view.html +0 -0
  262. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/logout_api_route.py +0 -0
  263. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
  264. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/logout_page/view.html +0 -0
  265. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
  266. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
  267. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
  268. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
  269. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
  270. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
  271. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
  272. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
  273. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/static/resources/common.css +0 -0
  274. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
  275. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
  276. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
  277. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/static/resources/pico.min.css +0 -0
  278. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
  279. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
  280. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
  281. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
  282. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/static/static_route.py +0 -0
  283. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
  284. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
  285. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_schema/session.py +0 -0
  286. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_schema/token.py +0 -0
  287. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_schema/user.py +0 -0
  288. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_util/cookie.py +0 -0
  289. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_util/html.py +0 -0
  290. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_util/token.py +0 -0
  291. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/runner/web_util/user.py +0 -0
  292. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/session/__init__.py +0 -0
  293. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/session/any_session.py +0 -0
  294. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/session/session.py +0 -0
  295. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/session_state_log/__init__.py +0 -0
  296. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/session_state_log/session_state_log.py +0 -0
  297. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/session_state_logger/__init__.py +0 -0
  298. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  299. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  300. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
  301. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/__init__.py +0 -0
  302. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/any_task.py +0 -0
  303. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/base_task.py +0 -0
  304. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/base_trigger.py +0 -0
  305. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/cmd_task.py +0 -0
  306. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/http_check.py +0 -0
  307. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/make_task.py +0 -0
  308. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/rsync_task.py +0 -0
  309. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/scaffolder.py +0 -0
  310. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/scheduler.py +0 -0
  311. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/task.py +0 -0
  312. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task/tcp_check.py +0 -0
  313. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task_status/__init__.py +0 -0
  314. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/task_status/task_status.py +0 -0
  315. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/__init__.py +0 -0
  316. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/attr.py +0 -0
  317. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/cli/__init__.py +0 -0
  318. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/cli/style.py +0 -0
  319. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/cli/subcommand.py +0 -0
  320. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/cmd/__init__.py +0 -0
  321. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/cmd/command.py +0 -0
  322. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/cmd/remote.py +0 -0
  323. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/codemod/__init__.py +0 -0
  324. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/codemod/modification_mode.py +0 -0
  325. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/codemod/modify_class.py +0 -0
  326. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/codemod/modify_class_parent.py +0 -0
  327. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/codemod/modify_class_property.py +0 -0
  328. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/codemod/modify_dict.py +0 -0
  329. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/codemod/modify_function.py +0 -0
  330. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/codemod/modify_function_call.py +0 -0
  331. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/codemod/modify_method.py +0 -0
  332. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/codemod/modify_module.py +0 -0
  333. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/cron.py +0 -0
  334. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/file.py +0 -0
  335. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/git.py +0 -0
  336. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/git_subtree.py +0 -0
  337. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/group.py +0 -0
  338. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/load.py +0 -0
  339. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/run.py +0 -0
  340. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/string/__init__.py +0 -0
  341. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/string/conversion.py +0 -0
  342. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/string/format.py +0 -0
  343. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/string/name.py +0 -0
  344. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/util/todo.py +0 -0
  345. {zrb-1.2.1 → zrb-1.2.2}/src/zrb/xcom/__init__.py +0 -0
  346. {zrb-1.2.1 → zrb-1.2.2}/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.2.2
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)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.2.1"
3
+ version = "1.2.2"
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
 
@@ -5,13 +5,26 @@ from typing import Any
5
5
  from zrb.builtin.group import llm_group
6
6
  from zrb.builtin.llm.tool.api import get_current_location, get_current_weather
7
7
  from zrb.builtin.llm.tool.cli import run_shell_command
8
- from zrb.builtin.llm.tool.web import open_web_route, query_internet
8
+ from zrb.builtin.llm.tool.file import (
9
+ list_file,
10
+ read_source_code,
11
+ read_text_file,
12
+ write_text_file,
13
+ )
14
+ from zrb.builtin.llm.tool.web import (
15
+ create_search_internet_tool,
16
+ open_web_page,
17
+ search_arxiv,
18
+ search_wikipedia,
19
+ )
9
20
  from zrb.config import (
10
21
  LLM_ALLOW_ACCESS_INTERNET,
22
+ LLM_ALLOW_ACCESS_LOCAL_FILE,
11
23
  LLM_ALLOW_ACCESS_SHELL,
12
24
  LLM_HISTORY_DIR,
13
25
  LLM_MODEL,
14
26
  LLM_SYSTEM_PROMPT,
27
+ SERP_API_KEY,
15
28
  )
16
29
  from zrb.context.any_shared_context import AnySharedContext
17
30
  from zrb.input.bool_input import BoolInput
@@ -117,11 +130,21 @@ llm_chat: LLMTask = llm_group.add_task(
117
130
  alias="chat",
118
131
  )
119
132
 
133
+
134
+ if LLM_ALLOW_ACCESS_LOCAL_FILE:
135
+ llm_chat.add_tool(read_source_code)
136
+ llm_chat.add_tool(list_file)
137
+ llm_chat.add_tool(read_text_file)
138
+ llm_chat.add_tool(write_text_file)
139
+
120
140
  if LLM_ALLOW_ACCESS_SHELL:
121
141
  llm_chat.add_tool(run_shell_command)
122
142
 
123
143
  if LLM_ALLOW_ACCESS_INTERNET:
124
- llm_chat.add_tool(open_web_route)
125
- llm_chat.add_tool(query_internet)
144
+ llm_chat.add_tool(open_web_page)
145
+ llm_chat.add_tool(search_wikipedia)
146
+ llm_chat.add_tool(search_arxiv)
147
+ if SERP_API_KEY != "":
148
+ llm_chat.add_tool(create_search_internet_tool(SERP_API_KEY))
126
149
  llm_chat.add_tool(get_current_location)
127
150
  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)
@@ -0,0 +1,100 @@
1
+ import json
2
+ from collections.abc import Callable
3
+ from typing import Annotated
4
+
5
+
6
+ def open_web_page(url: str) -> str:
7
+ """Get content from a web page."""
8
+ import requests
9
+
10
+ response = requests.get(
11
+ url,
12
+ headers={
13
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" # noqa
14
+ },
15
+ )
16
+ if response.status_code != 200:
17
+ raise Exception(
18
+ f"Error: Unable to retrieve search results (status code: {response.status_code})" # noqa
19
+ )
20
+ return json.dumps(parse_html_text(response.text))
21
+
22
+
23
+ def create_search_internet_tool(serp_api_key: str) -> Callable[[str, int], str]:
24
+ def search_internet(
25
+ query: Annotated[str, "Search query"],
26
+ num_results: Annotated[int, "Search result count, by default 10"] = 10,
27
+ ) -> str:
28
+ """Search factual information from the internet by using Google."""
29
+ import requests
30
+
31
+ response = requests.get(
32
+ "https://serpapi.com/search",
33
+ headers={
34
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" # noqa
35
+ },
36
+ params={
37
+ "q": query,
38
+ "num": num_results,
39
+ "hl": "en",
40
+ "safe": "off",
41
+ "api_key": serp_api_key,
42
+ },
43
+ )
44
+ if response.status_code != 200:
45
+ raise Exception(
46
+ f"Error: Unable to retrieve search results (status code: {response.status_code})" # noqa
47
+ )
48
+ return json.dumps(parse_html_text(response.text))
49
+
50
+ return search_internet
51
+
52
+
53
+ def search_wikipedia(query: Annotated[str, "Search query"]) -> str:
54
+ """Search on wikipedia"""
55
+ import requests
56
+
57
+ params = {"action": "query", "list": "search", "srsearch": query, "format": "json"}
58
+ response = requests.get("https://en.wikipedia.org/w/api.php", params=params)
59
+ return response.json()
60
+
61
+
62
+ def search_arxiv(
63
+ query: Annotated[str, "Search query"],
64
+ num_results: Annotated[int, "Search result count, by default 10"] = 10,
65
+ ) -> str:
66
+ """Search on Arxiv"""
67
+ import requests
68
+
69
+ params = {"search_query": f"all:{query}", "start": 0, "max_results": num_results}
70
+ response = requests.get("http://export.arxiv.org/api/query", params=params)
71
+ return response.content
72
+
73
+
74
+ def parse_html_text(html_text: str) -> dict[str, str]:
75
+ from bs4 import BeautifulSoup
76
+
77
+ ignored_tags = [
78
+ "script",
79
+ "link",
80
+ "meta",
81
+ "style",
82
+ "code",
83
+ "footer",
84
+ "nav",
85
+ "header",
86
+ "aside",
87
+ ]
88
+ soup = BeautifulSoup(html_text, "html.parser")
89
+ links = []
90
+ for anchor in soup.find_all("a"):
91
+ if not anchor or "href" not in anchor.attrs:
92
+ continue
93
+ link: str = anchor["href"]
94
+ if link.startswith("#") or link.startswith("/"):
95
+ continue
96
+ links.append(link)
97
+ for tag in soup(ignored_tags):
98
+ tag.decompose()
99
+ html_text = soup.get_text(separator=" ", strip=True)
100
+ return {"content": html_text, "links_on_page": links}
@@ -92,7 +92,8 @@ LLM_HISTORY_DIR = os.getenv(
92
92
  LLM_HISTORY_FILE = os.getenv(
93
93
  "ZRB_LLM_HISTORY_FILE", os.path.join(LLM_HISTORY_DIR, "history.json")
94
94
  )
95
- LLM_ALLOW_ACCESS_SHELL = to_boolean(os.getenv("ZRB_LLM_ACCESS_FILE", "1"))
95
+ LLM_ALLOW_ACCESS_LOCAL_FILE = to_boolean(os.getenv("ZRB_LLM_ACCESS_LOCAL_FILE", "1"))
96
+ LLM_ALLOW_ACCESS_SHELL = to_boolean(os.getenv("ZRB_LLM_ACCESS_SHELL", "1"))
96
97
  LLM_ALLOW_ACCESS_INTERNET = to_boolean(os.getenv("ZRB_LLM_ACCESS_INTERNET", "1"))
97
98
  # noqa See: https://qdrant.github.io/fastembed/examples/Supported_Models/#supported-text-embedding-models
98
99
  RAG_EMBEDDING_MODEL = os.getenv(
@@ -101,6 +102,7 @@ RAG_EMBEDDING_MODEL = os.getenv(
101
102
  RAG_CHUNK_SIZE = int(os.getenv("ZRB_RAG_CHUNK_SIZE", "1024"))
102
103
  RAG_OVERLAP = int(os.getenv("ZRB_RAG_OVERLAP", "128"))
103
104
  RAG_MAX_RESULT_COUNT = int(os.getenv("ZRB_RAG_MAX_RESULT_COUNT", "5"))
105
+ SERP_API_KEY = os.getenv("SERP_API_KEY", "")
104
106
 
105
107
 
106
108
  BANNER = f"""
@@ -1,4 +1,5 @@
1
1
  import fnmatch
2
+ import os
2
3
  import re
3
4
  from collections.abc import Callable
4
5
 
@@ -40,7 +41,12 @@ class ContentTransformer(AnyContentTransformer):
40
41
  return True
41
42
  except re.error:
42
43
  pass
43
- return fnmatch.fnmatch(file_path, pattern)
44
+ if os.sep not in pattern and (
45
+ os.altsep is None or os.altsep not in pattern
46
+ ):
47
+ # Pattern like "*.txt" – match only the basename.
48
+ return fnmatch.fnmatch(file_path, os.path.basename(file_path))
49
+ return fnmatch.fnmatch(file_path, file_path)
44
50
 
45
51
  def transform_file(self, ctx: AnyContext, file_path: str):
46
52
  if callable(self._transform_file):
@@ -88,7 +88,7 @@ class Context(AnyContext):
88
88
  return template
89
89
  return int(self.render(template))
90
90
 
91
- def render_float(self, template: str) -> float:
91
+ def render_float(self, template: str | float) -> float:
92
92
  if isinstance(template, float):
93
93
  return template
94
94
  return float(self.render(template))
@@ -102,9 +102,10 @@ class Context(AnyContext):
102
102
  flush: bool = True,
103
103
  plain: bool = False,
104
104
  ):
105
+ sep = " " if sep is None else sep
105
106
  message = sep.join([f"{value}" for value in values])
106
107
  if plain:
107
- self.append_to_shared_log(remove_style(message))
108
+ # self.append_to_shared_log(remove_style(message))
108
109
  print(message, sep=sep, end=end, file=file, flush=flush)
109
110
  return
110
111
  color = self._color
@@ -132,6 +133,7 @@ class Context(AnyContext):
132
133
  flush: bool = True,
133
134
  ):
134
135
  if self._shared_ctx.get_logging_level() <= logging.DEBUG:
136
+ sep = " " if sep is None else sep
135
137
  message = sep.join([f"{value}" for value in values])
136
138
  stylized_message = stylize_log(f"[DEBUG] {message}")
137
139
  self.print(stylized_message, sep=sep, end=end, file=file, flush=flush)
@@ -145,6 +147,7 @@ class Context(AnyContext):
145
147
  flush: bool = True,
146
148
  ):
147
149
  if self._shared_ctx.get_logging_level() <= logging.INFO:
150
+ sep = " " if sep is None else sep
148
151
  message = sep.join([f"{value}" for value in values])
149
152
  stylized_message = stylize_log(f"[INFO] {message}")
150
153
  self.print(stylized_message, sep=sep, end=end, file=file, flush=flush)
@@ -158,6 +161,7 @@ class Context(AnyContext):
158
161
  flush: bool = True,
159
162
  ):
160
163
  if self._shared_ctx.get_logging_level() <= logging.INFO:
164
+ sep = " " if sep is None else sep
161
165
  message = sep.join([f"{value}" for value in values])
162
166
  stylized_message = stylize_warning(f"[WARNING] {message}")
163
167
  self.print(stylized_message, sep=sep, end=end, file=file, flush=flush)
@@ -171,6 +175,7 @@ class Context(AnyContext):
171
175
  flush: bool = True,
172
176
  ):
173
177
  if self._shared_ctx.get_logging_level() <= logging.ERROR:
178
+ sep = " " if sep is None else sep
174
179
  message = sep.join([f"{value}" for value in values])
175
180
  stylized_message = stylize_error(f"[ERROR] {message}")
176
181
  self.print(stylized_message, sep=sep, end=end, file=file, flush=flush)
@@ -184,6 +189,7 @@ class Context(AnyContext):
184
189
  flush: bool = True,
185
190
  ):
186
191
  if self._shared_ctx.get_logging_level() <= logging.CRITICAL:
192
+ sep = " " if sep is None else sep
187
193
  message = sep.join([f"{value}" for value in values])
188
194
  stylized_message = stylize_error(f"[CRITICAL] {message}")
189
195
  self.print(stylized_message, sep=sep, end=end, file=file, flush=flush)
@@ -69,16 +69,17 @@ class TextInput(BaseInput):
69
69
  )
70
70
 
71
71
  def _prompt_cli_str(self, shared_ctx: AnySharedContext) -> str:
72
- prompt_message = (
73
- f"{self.comment_start}{super().prompt_message}{self.comment_end}"
72
+ prompt_message = super().prompt_message
73
+ comment_prompt_message = (
74
+ f"{self.comment_start}{prompt_message}{self.comment_end}"
74
75
  )
75
- prompt_message_eol = f"{prompt_message}\n"
76
+ comment_prompt_message_eol = f"{comment_prompt_message}\n"
76
77
  default_value = self.get_default_str(shared_ctx)
77
78
  with tempfile.NamedTemporaryFile(
78
79
  delete=False, suffix=self._extension
79
80
  ) as temp_file:
80
81
  temp_file_name = temp_file.name
81
- temp_file.write(prompt_message_eol.encode())
82
+ temp_file.write(comment_prompt_message_eol.encode())
82
83
  # Pre-fill with default content
83
84
  if default_value:
84
85
  temp_file.write(default_value.encode())
@@ -87,7 +88,10 @@ class TextInput(BaseInput):
87
88
  subprocess.call([self._editor, temp_file_name])
88
89
  # Read the edited content
89
90
  edited_content = read_file(temp_file_name)
90
- parts = [text.strip() for text in edited_content.split(prompt_message, 1)]
91
+ parts = [
92
+ text.strip() for text in edited_content.split(comment_prompt_message, 1)
93
+ ]
91
94
  edited_content = "\n".join(parts).lstrip()
92
95
  os.remove(temp_file_name)
96
+ print(f"{prompt_message}: {edited_content}")
93
97
  return edited_content