zrb 1.8.3__tar.gz → 1.8.5__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.
- {zrb-1.8.3 → zrb-1.8.5}/PKG-INFO +2 -2
- {zrb-1.8.3 → zrb-1.8.5}/pyproject.toml +2 -2
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/__init__.py +2 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/chat_session.py +3 -3
- zrb-1.8.5/src/zrb/builtin/llm/tool/code.py +233 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/file.py +12 -9
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/sub_agent.py +11 -15
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/callback/callback.py +4 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/config.py +20 -0
- zrb-1.8.5/src/zrb/llm_rate_limitter.py +105 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session/session.py +4 -5
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/agent.py +33 -27
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/config.py +9 -9
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/context_enrichment.py +6 -4
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/history_summarization.py +6 -3
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm_task.py +6 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/run.py +2 -0
- {zrb-1.8.3 → zrb-1.8.5}/README.md +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/__main__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/attr/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/attr/type.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/base64.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/git.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/git_subtree.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/group.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/http.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/jwt.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/history.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/llm_ask.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/previous-session.js +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/api.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/cli.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/rag.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/llm/tool/web.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/md5.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/gateway/subroute/my_module.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/alembic.ini +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/README +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/env.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/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
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration/versions/.gitkeep +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/migration_metadata.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/app_template/module/my_module/service/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.amber.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.blue.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.cyan.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.fuchsia.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.green.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.grey.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.indigo.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.jade.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.lime.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.orange.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pink.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.pumpkin.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.purple.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.red.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.sand.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.slate.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.violet.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.yellow.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.zinc.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/create/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/create/project-template/README.md +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/project/create/project_task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/python.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/random.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/common_input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/ubuntu.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/shell/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/todo.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/builtin/uuid.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/callback/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/callback/any_callback.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/cmd/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/cmd/cmd_result.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/cmd/cmd_val.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/content_transformer/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/content_transformer/any_content_transformer.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/content_transformer/content_transformer.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/context/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/context/any_context.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/context/any_shared_context.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/context/context.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/context/shared_context.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/dot_dict/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/dot_dict/dot_dict.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/env/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/env/any_env.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/env/env.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/env/env_file.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/env/env_map.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/group/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/group/any_group.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/group/group.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/any_input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/base_input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/bool_input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/float_input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/int_input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/option_input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/password_input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/str_input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/input/text_input.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/llm_config.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/cli.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/common_util.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_app.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_auth_config.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/docs_route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/error_page/view.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/home_page/view.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/login_api_route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/login_page/view.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/logout_api_route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/logout_page/view.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/global_template.html +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/common.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/common.js +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.amber.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.blue.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.cyan.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.fuchsia.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.green.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.grey.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.indigo.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.jade.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.lime.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.orange.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.pink.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.pumpkin.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.purple.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.red.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.sand.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.slate.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.violet.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.yellow.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/pico-css/pico.zinc.min.css +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/static/static_route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_schema/session.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_schema/token.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_schema/user.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_util/cookie.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_util/html.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_util/token.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/runner/web_util/user.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session/any_session.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session_state_log/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session_state_log/session_state_log.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session_state_logger/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/any_task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base/context.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base/execution.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base/lifecycle.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base/monitoring.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base/operators.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base_task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/base_trigger.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/cmd_task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/http_check.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/context.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/error.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/history.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/print_node.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/prompt.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/tool_wrapper.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/llm/typing.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/make_task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/rsync_task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/scaffolder.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/scheduler.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/task.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task/tcp_check.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task_status/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/task_status/task_status.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/attr.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cli/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cli/style.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cli/subcommand.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cmd/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cmd/command.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cmd/remote.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modification_mode.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_class.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_class_parent.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_class_property.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_dict.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_function.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_function_call.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_method.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/codemod/modify_module.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/cron.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/file.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/git.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/git_subtree.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/group.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/init_path.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/load.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/string/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/string/conversion.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/string/format.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/string/name.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/util/todo.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/xcom/__init__.py +0 -0
- {zrb-1.8.3 → zrb-1.8.5}/src/zrb/xcom/xcom.py +0 -0
{zrb-1.8.3 → zrb-1.8.5}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: zrb
|
3
|
-
Version: 1.8.
|
3
|
+
Version: 1.8.5
|
4
4
|
Summary: Your Automation Powerhouse
|
5
5
|
Home-page: https://github.com/state-alchemists/zrb
|
6
6
|
License: AGPL-3.0-or-later
|
@@ -30,7 +30,7 @@ Requires-Dist: pydantic-ai (>=0.2.7,<0.3.0)
|
|
30
30
|
Requires-Dist: pyjwt (>=2.10.1,<3.0.0)
|
31
31
|
Requires-Dist: python-dotenv (>=1.1.0,<2.0.0)
|
32
32
|
Requires-Dist: python-jose[cryptography] (>=3.4.0,<4.0.0)
|
33
|
-
Requires-Dist: requests (>=2.32.
|
33
|
+
Requires-Dist: requests (>=2.32.4,<3.0.0)
|
34
34
|
Requires-Dist: ulid-py (>=1.1.0,<2.0.0)
|
35
35
|
Project-URL: Documentation, https://github.com/state-alchemists/zrb
|
36
36
|
Project-URL: Repository, https://github.com/state-alchemists/zrb
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "zrb"
|
3
|
-
version = "1.8.
|
3
|
+
version = "1.8.5"
|
4
4
|
description = "Your Automation Powerhouse"
|
5
5
|
authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
|
6
6
|
license = "AGPL-3.0-or-later"
|
@@ -41,7 +41,7 @@ python = ">=3.10.0,<4.0.0"
|
|
41
41
|
python-dotenv = "^1.1.0"
|
42
42
|
black = "~25.1.0"
|
43
43
|
isort = "~6.0.1"
|
44
|
-
requests = "^2.32.
|
44
|
+
requests = "^2.32.4"
|
45
45
|
libcst = "^1.7.0"
|
46
46
|
chromadb = {version = "^0.6.3", optional = true}
|
47
47
|
pdfplumber = {version = "^0.11.6", optional = true}
|
@@ -34,6 +34,7 @@ from zrb.input.password_input import PasswordInput
|
|
34
34
|
from zrb.input.str_input import StrInput
|
35
35
|
from zrb.input.text_input import TextInput
|
36
36
|
from zrb.llm_config import llm_config
|
37
|
+
from zrb.llm_rate_limitter import llm_rate_limitter
|
37
38
|
from zrb.runner.cli import cli
|
38
39
|
from zrb.runner.web_auth_config import web_auth_config
|
39
40
|
from zrb.runner.web_schema.user import User
|
@@ -105,6 +106,7 @@ assert Scaffolder
|
|
105
106
|
assert Scheduler
|
106
107
|
assert cli
|
107
108
|
assert llm_config
|
109
|
+
assert llm_rate_limitter
|
108
110
|
assert Xcom
|
109
111
|
assert web_auth_config
|
110
112
|
assert User
|
@@ -33,10 +33,10 @@ async def read_user_prompt(ctx: AnyContext) -> str:
|
|
33
33
|
previous_session_name=ctx.input.previous_session,
|
34
34
|
start_new=ctx.input.start_new,
|
35
35
|
)
|
36
|
+
if result is not None:
|
37
|
+
final_result = result
|
36
38
|
if ctx.env.get("_ZRB_WEB_ENV", "0") != "0":
|
37
|
-
#
|
38
|
-
if result is not None:
|
39
|
-
final_result = result
|
39
|
+
# On web environment this won't be interactive
|
40
40
|
return final_result
|
41
41
|
multiline_mode = False
|
42
42
|
user_inputs = []
|
@@ -0,0 +1,233 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.builtin.llm.tool.file import DEFAULT_EXCLUDED_PATTERNS, is_excluded
|
4
|
+
from zrb.builtin.llm.tool.sub_agent import create_sub_agent_tool
|
5
|
+
from zrb.context.any_context import AnyContext
|
6
|
+
|
7
|
+
_EXTRACT_INFO_SYSTEM_PROMPT = """
|
8
|
+
You are an extraction info agent.
|
9
|
+
Your goal is to help to extract relevant information to help the main LLM Agent.
|
10
|
+
You write your output is in markdown format containing path and relevant information.
|
11
|
+
Extract only information that relevant to main LLM Agent's goal.
|
12
|
+
|
13
|
+
Extracted Information format (Use this as reference, extract relevant information only):
|
14
|
+
# <file-name>
|
15
|
+
## imports
|
16
|
+
- <imported-package>
|
17
|
+
- ...
|
18
|
+
## variables
|
19
|
+
- <variable-type> <variable-name>: <the-purpose-of-the-variable>
|
20
|
+
- ...
|
21
|
+
## functions
|
22
|
+
- <function-name>:
|
23
|
+
- parameters: <parameters>
|
24
|
+
- logic/description: <what-the-function-do-and-how-it-works>
|
25
|
+
...
|
26
|
+
# <other-file-name>
|
27
|
+
...
|
28
|
+
""".strip()
|
29
|
+
|
30
|
+
|
31
|
+
_SUMMARIZE_INFO_SYSTEM_PROMPT = """
|
32
|
+
You are an information summarization agent.
|
33
|
+
Your goal is to summarize information to help the main LLM Agent.
|
34
|
+
The summarization result should contains all necessary details
|
35
|
+
to help main LLM Agent achieve the goal.
|
36
|
+
"""
|
37
|
+
|
38
|
+
_DEFAULT_EXTENSIONS = [
|
39
|
+
"py",
|
40
|
+
"go",
|
41
|
+
"java",
|
42
|
+
"ts",
|
43
|
+
"js",
|
44
|
+
"rs",
|
45
|
+
"rb",
|
46
|
+
"php",
|
47
|
+
"sh",
|
48
|
+
"bash",
|
49
|
+
"c",
|
50
|
+
"cpp",
|
51
|
+
"h",
|
52
|
+
"hpp",
|
53
|
+
"cs",
|
54
|
+
"swift",
|
55
|
+
"kt",
|
56
|
+
"scala",
|
57
|
+
"m",
|
58
|
+
"pl",
|
59
|
+
"lua",
|
60
|
+
"sql",
|
61
|
+
"html",
|
62
|
+
"css",
|
63
|
+
"scss",
|
64
|
+
"less",
|
65
|
+
"json",
|
66
|
+
"yaml",
|
67
|
+
"yml",
|
68
|
+
"toml",
|
69
|
+
"ini",
|
70
|
+
"xml",
|
71
|
+
"md",
|
72
|
+
"rst",
|
73
|
+
"txt",
|
74
|
+
]
|
75
|
+
|
76
|
+
|
77
|
+
async def analyze_repo(
|
78
|
+
ctx: AnyContext,
|
79
|
+
path: str,
|
80
|
+
goal: str,
|
81
|
+
extensions: list[str] = _DEFAULT_EXTENSIONS,
|
82
|
+
exclude_patterns: list[str] = DEFAULT_EXCLUDED_PATTERNS,
|
83
|
+
extraction_char_limit: int = 150000,
|
84
|
+
summarization_char_limit: int = 150000,
|
85
|
+
) -> str:
|
86
|
+
"""
|
87
|
+
Extract and summarize information from a directory that probably
|
88
|
+
contains a large resources.
|
89
|
+
You should state the goal specifically so that the tool can return relevant informations.
|
90
|
+
Use this tool for:
|
91
|
+
- summarization
|
92
|
+
- outline/structure extraction
|
93
|
+
- code review
|
94
|
+
- create diagram as code
|
95
|
+
- other tasks
|
96
|
+
Args:
|
97
|
+
path (str): File path to be analyze. Pass exactly as provided, including '~'.
|
98
|
+
goal(str): Goal of extracting information (for example creating C4 diagram)
|
99
|
+
extensions(Optional[list[str]]): List of extension to be included
|
100
|
+
while reading resources. Defaults to common programming languages and config files.
|
101
|
+
exclude_patterns(Optional[list[str]]): List of patterns to exclude from analysis.
|
102
|
+
Common patterns like '.venv', 'node_modules' should be excluded by default.
|
103
|
+
extraction_char_limit(Optional[int]): Max resource content char length
|
104
|
+
the extraction assistant able to handle. Defaults to 150000
|
105
|
+
summarization_char_limit(Optional[int]): Max resource content char length
|
106
|
+
the summarization assistant able to handle. Defaults to 150000
|
107
|
+
Returns:
|
108
|
+
str: The analysis result
|
109
|
+
Raises:
|
110
|
+
Exception: If an error occurs.
|
111
|
+
"""
|
112
|
+
abs_path = os.path.abspath(os.path.expanduser(path))
|
113
|
+
file_metadatas = _get_file_metadatas(abs_path, extensions, exclude_patterns)
|
114
|
+
ctx.print("Extraction")
|
115
|
+
extracted_infos = await _extract_info(
|
116
|
+
ctx,
|
117
|
+
file_metadatas=file_metadatas,
|
118
|
+
goal=goal,
|
119
|
+
char_limit=extraction_char_limit,
|
120
|
+
)
|
121
|
+
ctx.print("Summarization")
|
122
|
+
summarized_infos = await _summarize_info(
|
123
|
+
ctx,
|
124
|
+
extracted_infos=extracted_infos,
|
125
|
+
goal=goal,
|
126
|
+
char_limit=summarization_char_limit,
|
127
|
+
)
|
128
|
+
while len(summarized_infos) > 1:
|
129
|
+
ctx.print("Summarization")
|
130
|
+
summarized_infos = await _summarize_info(
|
131
|
+
ctx,
|
132
|
+
extracted_infos=summarized_infos,
|
133
|
+
goal=goal,
|
134
|
+
char_limit=summarization_char_limit,
|
135
|
+
)
|
136
|
+
return summarized_infos[0]
|
137
|
+
|
138
|
+
|
139
|
+
def _get_file_metadatas(
|
140
|
+
dir_path: str,
|
141
|
+
extensions: list[str],
|
142
|
+
exclude_patterns: list[str],
|
143
|
+
) -> list[dict[str, str]]:
|
144
|
+
metadata_list = []
|
145
|
+
for root, _, files in os.walk(dir_path):
|
146
|
+
files.sort()
|
147
|
+
for file in files:
|
148
|
+
if not any(file.endswith(f".{ext}") for ext in extensions):
|
149
|
+
continue
|
150
|
+
file_path = os.path.join(root, file)
|
151
|
+
if is_excluded(file_path, exclude_patterns):
|
152
|
+
continue
|
153
|
+
try:
|
154
|
+
with open(file_path, "r", encoding="utf-8", errors="ignore") as f:
|
155
|
+
rel_path = os.path.relpath(file_path, dir_path)
|
156
|
+
metadata_list.append({"path": rel_path, "content": f.read()})
|
157
|
+
except Exception as e:
|
158
|
+
print(f"Error reading file {file_path}: {e}")
|
159
|
+
metadata_list.sort(key=lambda m: m["path"])
|
160
|
+
return metadata_list
|
161
|
+
|
162
|
+
|
163
|
+
async def _extract_info(
|
164
|
+
ctx: AnyContext,
|
165
|
+
file_metadatas: list[dict[str, str]],
|
166
|
+
goal: str,
|
167
|
+
char_limit: int,
|
168
|
+
) -> list[str]:
|
169
|
+
extract = create_sub_agent_tool(
|
170
|
+
tool_name="extract",
|
171
|
+
tool_description="extract",
|
172
|
+
system_prompt=_EXTRACT_INFO_SYSTEM_PROMPT,
|
173
|
+
)
|
174
|
+
extracted_infos = []
|
175
|
+
content_buffer = ""
|
176
|
+
for metadata in file_metadatas:
|
177
|
+
path = metadata.get("path", "")
|
178
|
+
content = metadata.get("content", "")
|
179
|
+
metadata_str = f"Path: {path}\nContent: {content}"
|
180
|
+
if len(content_buffer) + len(metadata_str) > char_limit:
|
181
|
+
if content_buffer:
|
182
|
+
prompt = _create_extract_info_prompt(goal, content_buffer)
|
183
|
+
extracted_info = await extract(ctx, prompt)
|
184
|
+
extracted_infos.append(extracted_info)
|
185
|
+
content_buffer = metadata_str
|
186
|
+
else:
|
187
|
+
content_buffer += metadata_str + "\n"
|
188
|
+
|
189
|
+
# Process any remaining content in the buffer
|
190
|
+
if content_buffer:
|
191
|
+
prompt = _create_extract_info_prompt(goal, content_buffer)
|
192
|
+
extracted_info = await extract(ctx, prompt)
|
193
|
+
extracted_infos.append(extracted_info)
|
194
|
+
return extracted_infos
|
195
|
+
|
196
|
+
|
197
|
+
def _create_extract_info_prompt(goal: str, content_buffer: str) -> str:
|
198
|
+
return f"# Main LLM Agent Goal\n{goal}\n# Files\n{content_buffer}"
|
199
|
+
|
200
|
+
|
201
|
+
async def _summarize_info(
|
202
|
+
ctx: AnyContext,
|
203
|
+
extracted_infos: list[str],
|
204
|
+
goal: str,
|
205
|
+
char_limit: int,
|
206
|
+
) -> list[str]:
|
207
|
+
summarize = create_sub_agent_tool(
|
208
|
+
tool_name="extract",
|
209
|
+
tool_description="extract",
|
210
|
+
system_prompt=_SUMMARIZE_INFO_SYSTEM_PROMPT,
|
211
|
+
)
|
212
|
+
summarized_infos = []
|
213
|
+
content_buffer = ""
|
214
|
+
for extracted_info in extracted_infos:
|
215
|
+
if len(content_buffer) + len(extracted_info) > char_limit:
|
216
|
+
if content_buffer:
|
217
|
+
prompt = _create_summarize_info_prompt(goal, content_buffer)
|
218
|
+
summarized_info = await summarize(ctx, prompt)
|
219
|
+
summarized_infos.append(summarized_info)
|
220
|
+
content_buffer = extracted_info
|
221
|
+
else:
|
222
|
+
content_buffer += extracted_info + "\n"
|
223
|
+
|
224
|
+
# Process any remaining content in the buffer
|
225
|
+
if content_buffer:
|
226
|
+
prompt = _create_summarize_info_prompt(goal, content_buffer)
|
227
|
+
summarized_info = await summarize(ctx, prompt)
|
228
|
+
summarized_infos.append(summarized_info)
|
229
|
+
return summarized_infos
|
230
|
+
|
231
|
+
|
232
|
+
def _create_summarize_info_prompt(goal: str, content_buffer: str) -> str:
|
233
|
+
return f"# Main LLM Agent Goal\n{goal}\n# Extracted Info\n{content_buffer}"
|
@@ -71,6 +71,9 @@ DEFAULT_EXCLUDED_PATTERNS = [
|
|
71
71
|
"*.so",
|
72
72
|
"*.dylib",
|
73
73
|
"*.dll",
|
74
|
+
# Minified files
|
75
|
+
"*.min.css",
|
76
|
+
"*.min.js",
|
74
77
|
]
|
75
78
|
|
76
79
|
|
@@ -112,17 +115,17 @@ def list_files(
|
|
112
115
|
d
|
113
116
|
for d in dirs
|
114
117
|
if (include_hidden or not _is_hidden(d))
|
115
|
-
and not
|
118
|
+
and not is_excluded(d, patterns_to_exclude)
|
116
119
|
]
|
117
120
|
# Process files
|
118
121
|
for filename in files:
|
119
|
-
if (
|
120
|
-
|
121
|
-
)
|
122
|
+
if (include_hidden or not _is_hidden(filename)) and not is_excluded(
|
123
|
+
filename, patterns_to_exclude
|
124
|
+
):
|
122
125
|
full_path = os.path.join(root, filename)
|
123
126
|
# Check rel path for patterns like '**/node_modules/*'
|
124
127
|
rel_full_path = os.path.relpath(full_path, abs_path)
|
125
|
-
is_rel_path_excluded =
|
128
|
+
is_rel_path_excluded = is_excluded(
|
126
129
|
rel_full_path, patterns_to_exclude
|
127
130
|
)
|
128
131
|
if not is_rel_path_excluded:
|
@@ -132,7 +135,7 @@ def list_files(
|
|
132
135
|
for item in os.listdir(abs_path):
|
133
136
|
full_path = os.path.join(abs_path, item)
|
134
137
|
# Include both files and directories if not recursive
|
135
|
-
if (include_hidden or not _is_hidden(item)) and not
|
138
|
+
if (include_hidden or not _is_hidden(item)) and not is_excluded(
|
136
139
|
item, patterns_to_exclude
|
137
140
|
):
|
138
141
|
all_files.append(full_path)
|
@@ -169,7 +172,7 @@ def _is_hidden(path: str) -> bool:
|
|
169
172
|
return basename.startswith(".")
|
170
173
|
|
171
174
|
|
172
|
-
def
|
175
|
+
def is_excluded(name: str, patterns: list[str]) -> bool:
|
173
176
|
"""Check if a name/path matches any exclusion patterns."""
|
174
177
|
for pattern in patterns:
|
175
178
|
if fnmatch.fnmatch(name, pattern):
|
@@ -461,14 +464,14 @@ async def analyze_file(ctx: AnyContext, path: str, query: str) -> str:
|
|
461
464
|
_analyze_file = create_sub_agent_tool(
|
462
465
|
tool_name="analyze_file",
|
463
466
|
tool_description="analyze file with LLM capability",
|
464
|
-
|
467
|
+
system_prompt="\n".join(
|
465
468
|
[
|
466
469
|
"You are a file analyzer assistant",
|
467
470
|
"Your goal is to help the main asisstant by reading file",
|
468
471
|
"and perform necessary indepth analysis required by the main assistant",
|
469
472
|
]
|
470
473
|
),
|
471
|
-
|
474
|
+
tools=[read_from_file, search_files],
|
472
475
|
)
|
473
476
|
return await _analyze_file(
|
474
477
|
ctx,
|
@@ -28,11 +28,11 @@ else:
|
|
28
28
|
def create_sub_agent_tool(
|
29
29
|
tool_name: str,
|
30
30
|
tool_description: str,
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
31
|
+
system_prompt: str | None = None,
|
32
|
+
model: str | Model | None = None,
|
33
|
+
model_settings: ModelSettings | None = None,
|
34
|
+
tools: list[ToolOrCallable] = [],
|
35
|
+
mcp_servers: list[MCPServer] = [],
|
36
36
|
) -> Callable[[AnyContext, str], str]:
|
37
37
|
"""
|
38
38
|
Create an LLM "sub-agent" tool function for use by a main LLM agent.
|
@@ -63,7 +63,7 @@ def create_sub_agent_tool(
|
|
63
63
|
# Resolve parameters, falling back to llm_config defaults if None
|
64
64
|
resolved_model = get_model(
|
65
65
|
ctx=ctx,
|
66
|
-
model_attr=
|
66
|
+
model_attr=model,
|
67
67
|
render_model=True, # Assuming we always want to render model string attributes
|
68
68
|
model_base_url_attr=None,
|
69
69
|
# Sub-agent tool doesn't have separate base_url/api_key params
|
@@ -73,10 +73,10 @@ def create_sub_agent_tool(
|
|
73
73
|
)
|
74
74
|
resolved_model_settings = get_model_settings(
|
75
75
|
ctx=ctx,
|
76
|
-
model_settings_attr=
|
76
|
+
model_settings_attr=model_settings,
|
77
77
|
)
|
78
78
|
|
79
|
-
if
|
79
|
+
if system_prompt is None:
|
80
80
|
resolved_system_prompt = get_combined_system_prompt(
|
81
81
|
ctx=ctx,
|
82
82
|
persona_attr=None,
|
@@ -87,20 +87,16 @@ def create_sub_agent_tool(
|
|
87
87
|
render_special_instruction_prompt=False,
|
88
88
|
)
|
89
89
|
else:
|
90
|
-
resolved_system_prompt =
|
91
|
-
|
90
|
+
resolved_system_prompt = system_prompt
|
92
91
|
# Create the sub-agent instance
|
93
92
|
sub_agent_agent = create_agent_instance(
|
94
93
|
ctx=ctx,
|
95
94
|
model=resolved_model,
|
96
95
|
system_prompt=resolved_system_prompt,
|
97
96
|
model_settings=resolved_model_settings,
|
98
|
-
|
99
|
-
|
100
|
-
mcp_servers_attr=sub_agent_mcp_servers, # Pass servers from factory closure
|
101
|
-
additional_mcp_servers=[], # No additional servers added after factory creation
|
97
|
+
tools=tools,
|
98
|
+
mcp_servers=mcp_servers,
|
102
99
|
)
|
103
|
-
|
104
100
|
# Run the sub-agent iteration
|
105
101
|
# Start with an empty history for the sub-agent
|
106
102
|
sub_agent_run = await run_agent_iteration(
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import traceback
|
1
2
|
from typing import Any
|
2
3
|
|
3
4
|
from zrb.attr.type import StrDictAttr
|
@@ -5,6 +6,7 @@ from zrb.callback.any_callback import AnyCallback
|
|
5
6
|
from zrb.session.any_session import AnySession
|
6
7
|
from zrb.task.any_task import AnyTask
|
7
8
|
from zrb.util.attr import get_str_dict_attr
|
9
|
+
from zrb.util.cli.style import stylize_faint
|
8
10
|
from zrb.util.string.conversion import to_snake_case
|
9
11
|
from zrb.xcom.xcom import Xcom
|
10
12
|
|
@@ -67,6 +69,8 @@ class Callback(AnyCallback):
|
|
67
69
|
self._maybe_publish_result_to_parent_session(parent_session, result)
|
68
70
|
return result
|
69
71
|
except BaseException as e:
|
72
|
+
ctx = session.get_ctx(self._task)
|
73
|
+
ctx.print(traceback.format_exc())
|
70
74
|
self._maybe_publish_error_to_parent_session(parent_session, e)
|
71
75
|
|
72
76
|
def _maybe_publish_session_name_to_parent_session(
|
@@ -237,6 +237,26 @@ class Config:
|
|
237
237
|
def LLM_SUMMARIZATION_PROMPT(self) -> str | None:
|
238
238
|
return os.getenv("ZRB_LLM_SUMMARIZATION_PROMPT", None)
|
239
239
|
|
240
|
+
@property
|
241
|
+
def LLM_MAX_REQUESTS_PER_MINUTE(self) -> int:
|
242
|
+
"""Maximum number of LLM requests allowed per minute."""
|
243
|
+
return int(os.getenv("LLM_MAX_REQUESTS_PER_MINUTE", "60"))
|
244
|
+
|
245
|
+
@property
|
246
|
+
def LLM_MAX_TOKENS_PER_MINUTE(self) -> int:
|
247
|
+
"""Maximum number of LLM tokens allowed per minute."""
|
248
|
+
return int(os.getenv("LLM_MAX_TOKENS_PER_MINUTE", "120000"))
|
249
|
+
|
250
|
+
@property
|
251
|
+
def LLM_MAX_TOKENS_PER_REQUEST(self) -> int:
|
252
|
+
"""Maximum number of tokens allowed per individual LLM request."""
|
253
|
+
return int(os.getenv("LLM_MAX_TOKENS_PER_REQUEST", "4096"))
|
254
|
+
|
255
|
+
@property
|
256
|
+
def LLM_THROTTLE_SLEEP(self) -> float:
|
257
|
+
"""Number of seconds to sleep when throttling is required."""
|
258
|
+
return float(os.getenv("LLM_THROTTLE_SLEEP", "1.0"))
|
259
|
+
|
240
260
|
@property
|
241
261
|
def LLM_CONTEXT_ENRICHMENT_PROMPT(self) -> str | None:
|
242
262
|
return os.getenv("ZRB_LLM_CONTEXT_ENRICHMENT_PROMPT", None)
|
@@ -0,0 +1,105 @@
|
|
1
|
+
import asyncio
|
2
|
+
import time
|
3
|
+
from collections import deque
|
4
|
+
from typing import Callable
|
5
|
+
|
6
|
+
from zrb.config import CFG
|
7
|
+
|
8
|
+
|
9
|
+
class LLMRateLimiter:
|
10
|
+
"""
|
11
|
+
Helper class to enforce LLM API rate limits and throttling.
|
12
|
+
Tracks requests and tokens in a rolling 60-second window.
|
13
|
+
"""
|
14
|
+
|
15
|
+
def __init__(
|
16
|
+
self,
|
17
|
+
max_requests_per_minute: int | None = None,
|
18
|
+
max_tokens_per_minute: int | None = None,
|
19
|
+
max_tokens_per_request: int | None = None,
|
20
|
+
throttle_sleep: float | None = None,
|
21
|
+
token_counter_fn: Callable[[str], int] | None = None,
|
22
|
+
):
|
23
|
+
self._max_requests_per_minute = max_requests_per_minute
|
24
|
+
self._max_tokens_per_minute = max_tokens_per_minute
|
25
|
+
self._max_tokens_per_request = max_tokens_per_request
|
26
|
+
self._throttle_sleep = throttle_sleep
|
27
|
+
self._token_counter_fn = token_counter_fn
|
28
|
+
self.request_times = deque()
|
29
|
+
self.token_times = deque()
|
30
|
+
|
31
|
+
@property
|
32
|
+
def max_requests_per_minute(self) -> int:
|
33
|
+
if self._max_requests_per_minute is not None:
|
34
|
+
return self._max_requests_per_minute
|
35
|
+
return CFG.LLM_MAX_REQUESTS_PER_MINUTE
|
36
|
+
|
37
|
+
@property
|
38
|
+
def max_tokens_per_minute(self) -> int:
|
39
|
+
if self._max_tokens_per_minute is not None:
|
40
|
+
return self._max_tokens_per_minute
|
41
|
+
return CFG.LLM_MAX_TOKENS_PER_MINUTE
|
42
|
+
|
43
|
+
@property
|
44
|
+
def max_tokens_per_request(self) -> int:
|
45
|
+
if self._max_tokens_per_request is not None:
|
46
|
+
return self._max_tokens_per_request
|
47
|
+
return CFG.LLM_MAX_TOKENS_PER_REQUEST
|
48
|
+
|
49
|
+
@property
|
50
|
+
def throttle_sleep(self) -> float:
|
51
|
+
if self._throttle_sleep is not None:
|
52
|
+
return self._throttle_sleep
|
53
|
+
return CFG.LLM_THROTTLE_SLEEP
|
54
|
+
|
55
|
+
@property
|
56
|
+
def token_counter_fn(self) -> Callable[[str], int]:
|
57
|
+
if self._token_counter_fn is not None:
|
58
|
+
return self._token_counter_fn
|
59
|
+
return lambda x: len(x.split())
|
60
|
+
|
61
|
+
def set_max_requests_per_minute(self, value: int):
|
62
|
+
self._max_requests_per_minute = value
|
63
|
+
|
64
|
+
def set_max_tokens_per_minute(self, value: int):
|
65
|
+
self._max_tokens_per_minute = value
|
66
|
+
|
67
|
+
def set_max_tokens_per_request(self, value: int):
|
68
|
+
self._max_tokens_per_request = value
|
69
|
+
|
70
|
+
def set_throttle_sleep(self, value: float):
|
71
|
+
self._throttle_sleep = value
|
72
|
+
|
73
|
+
def set_token_counter_fn(self, fn: Callable[[str], int]):
|
74
|
+
self._token_counter_fn = fn
|
75
|
+
|
76
|
+
async def throttle(self, prompt: str):
|
77
|
+
now = time.time()
|
78
|
+
tokens = self.token_counter_fn(prompt)
|
79
|
+
# Clean up old entries
|
80
|
+
while self.request_times and now - self.request_times[0] > 60:
|
81
|
+
self.request_times.popleft()
|
82
|
+
while self.token_times and now - self.token_times[0][0] > 60:
|
83
|
+
self.token_times.popleft()
|
84
|
+
# Check per-request token limit
|
85
|
+
if tokens > self.max_tokens_per_request:
|
86
|
+
raise ValueError(
|
87
|
+
f"Request exceeds max_tokens_per_request ({self.max_tokens_per_request})."
|
88
|
+
)
|
89
|
+
# Wait if over per-minute request or token limit
|
90
|
+
while (
|
91
|
+
len(self.request_times) >= self.max_requests_per_minute
|
92
|
+
or sum(t for _, t in self.token_times) + tokens > self.max_tokens_per_minute
|
93
|
+
):
|
94
|
+
await asyncio.sleep(self.throttle_sleep)
|
95
|
+
now = time.time()
|
96
|
+
while self.request_times and now - self.request_times[0] > 60:
|
97
|
+
self.request_times.popleft()
|
98
|
+
while self.token_times and now - self.token_times[0][0] > 60:
|
99
|
+
self.token_times.popleft()
|
100
|
+
# Record this request
|
101
|
+
self.request_times.append(now)
|
102
|
+
self.token_times.append((now, tokens))
|
103
|
+
|
104
|
+
|
105
|
+
llm_rate_limitter = LLMRateLimiter()
|
@@ -186,17 +186,16 @@ class Session(AnySession):
|
|
186
186
|
|
187
187
|
def defer_monitoring(self, task: AnyTask, coro: Coroutine):
|
188
188
|
self._register_single_task(task)
|
189
|
-
self._monitoring_coros[task] =
|
189
|
+
self._monitoring_coros[task] = coro
|
190
190
|
|
191
191
|
def defer_action(self, task: AnyTask, coro: Coroutine):
|
192
192
|
self._register_single_task(task)
|
193
|
-
self._action_coros[task] =
|
193
|
+
self._action_coros[task] = coro
|
194
194
|
|
195
195
|
def defer_coro(self, coro: Coroutine):
|
196
|
-
|
197
|
-
self._coros.append(task)
|
196
|
+
self._coros.append(coro)
|
198
197
|
self._coros = [
|
199
|
-
|
198
|
+
existing_coro for existing_coro in self._coros if not existing_coro.done()
|
200
199
|
]
|
201
200
|
|
202
201
|
async def wait_deferred(self):
|