zrb 1.12.0__tar.gz → 1.13.1__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.12.0 → zrb-1.13.1}/PKG-INFO +3 -3
- {zrb-1.12.0 → zrb-1.13.1}/pyproject.toml +3 -3
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/tool/sub_agent.py +5 -5
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/config/default_prompt/interactive_system_prompt.md +8 -4
- zrb-1.13.1/src/zrb/config/default_prompt/summarization_prompt.md +16 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/config/default_prompt/system_prompt.md +8 -4
- zrb-1.13.1/src/zrb/config/llm_context/config.py +129 -0
- zrb-1.13.1/src/zrb/config/llm_context/config_parser.py +46 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/context/shared_context.py +4 -1
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/agent.py +28 -13
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/conversation_history_model.py +18 -68
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/history_summarization.py +2 -4
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/print_node.py +4 -1
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/prompt.py +2 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/tool_wrapper.py +12 -6
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm_task.py +12 -12
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/llm/prompt.py +19 -10
- zrb-1.12.0/src/zrb/config/default_prompt/summarization_prompt.md +0 -42
- zrb-1.12.0/src/zrb/config/llm_context/config.py +0 -74
- zrb-1.12.0/src/zrb/config/llm_context/config_handler.py +0 -238
- {zrb-1.12.0 → zrb-1.13.1}/README.md +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/__main__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/attr/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/attr/type.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/base64.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/git.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/git_subtree.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/group.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/http.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/jwt.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/chat_session.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/history.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/llm_ask.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/previous-session.js +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/tool/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/tool/api.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/tool/cli.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/tool/code.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/tool/file.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/tool/rag.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/llm/tool/web.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/md5.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/module/gateway/view/content/my-module/my-entity.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/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.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/create/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/create/project-template/README.md +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/project/create/project_task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/python.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/random.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/setup/common_input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/setup/ubuntu.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/shell/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/todo.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/builtin/uuid.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/callback/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/callback/any_callback.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/callback/callback.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/cmd/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/cmd/cmd_result.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/cmd/cmd_val.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/config/config.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/config/default_prompt/file_extractor_system_prompt.md +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/config/default_prompt/persona.md +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/config/default_prompt/repo_extractor_system_prompt.md +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/config/default_prompt/repo_summarizer_system_prompt.md +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/config/llm_config.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/config/llm_rate_limitter.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/config/web_auth_config.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/content_transformer/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/content_transformer/any_content_transformer.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/content_transformer/content_transformer.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/context/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/context/any_context.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/context/any_shared_context.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/context/context.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/dot_dict/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/dot_dict/dot_dict.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/env/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/env/any_env.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/env/env.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/env/env_file.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/env/env_map.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/group/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/group/any_group.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/group/group.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/input/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/input/any_input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/input/base_input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/input/bool_input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/input/float_input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/input/int_input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/input/option_input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/input/password_input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/input/str_input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/input/text_input.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/cli.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/common_util.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_app.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/docs_route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/error_page/view.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/home_page/view.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/login_api_route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/login_page/view.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/logout_api_route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/logout_page/view.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/global_template.html +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/common.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/common.js +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.amber.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.blue.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.cyan.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.fuchsia.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.green.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.grey.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.indigo.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.jade.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.lime.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.orange.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.pink.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.pumpkin.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.purple.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.red.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.sand.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.slate.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.violet.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.yellow.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/pico-css/pico.zinc.min.css +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/static/static_route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_schema/session.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_schema/token.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_schema/user.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_util/cookie.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_util/html.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_util/token.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/runner/web_util/user.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/session/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/session/any_session.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/session/session.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/session_state_log/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/session_state_log/session_state_log.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/session_state_logger/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/any_task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/base/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/base/context.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/base/execution.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/base/lifecycle.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/base/monitoring.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/base/operators.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/base_task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/base_trigger.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/cmd_task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/http_check.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/config.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/conversation_history.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/default_workflow/coding.md +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/default_workflow/copywriting.md +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/default_workflow/researching.md +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/error.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/llm/typing.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/make_task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/rsync_task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/scaffolder.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/scheduler.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/task.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task/tcp_check.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task_status/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/task_status/task_status.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/attr.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/callable.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/cli/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/cli/style.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/cli/subcommand.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/cmd/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/cmd/command.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/cmd/remote.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/codemod/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/codemod/modification_mode.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/codemod/modify_class.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/codemod/modify_class_parent.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/codemod/modify_class_property.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/codemod/modify_dict.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/codemod/modify_function.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/codemod/modify_function_call.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/codemod/modify_method.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/codemod/modify_module.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/cron.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/file.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/git.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/git_diff_model.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/git_subtree.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/git_subtree_model.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/group.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/init_path.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/load.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/run.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/string/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/string/conversion.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/string/format.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/string/name.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/todo.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/util/todo_model.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/xcom/__init__.py +0 -0
- {zrb-1.12.0 → zrb-1.13.1}/src/zrb/xcom/xcom.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: zrb
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.13.1
|
4
4
|
Summary: Your Automation Powerhouse
|
5
5
|
Home-page: https://github.com/state-alchemists/zrb
|
6
6
|
License: AGPL-3.0-or-later
|
@@ -19,7 +19,7 @@ Provides-Extra: rag
|
|
19
19
|
Requires-Dist: beautifulsoup4 (>=4.13.3,<5.0.0)
|
20
20
|
Requires-Dist: black (>=25.1.0,<25.2.0)
|
21
21
|
Requires-Dist: chromadb (>=0.6.3,<0.7.0) ; extra == "rag" or extra == "all"
|
22
|
-
Requires-Dist: fastapi[standard] (>=0.
|
22
|
+
Requires-Dist: fastapi[standard] (>=0.116.1,<0.117.0)
|
23
23
|
Requires-Dist: isort (>=6.0.1,<6.1.0)
|
24
24
|
Requires-Dist: libcst (>=1.7.0,<2.0.0)
|
25
25
|
Requires-Dist: openai (>=1.86.0,<2.0.0) ; extra == "rag" or extra == "all"
|
@@ -27,7 +27,7 @@ Requires-Dist: pdfplumber (>=0.11.6,<0.12.0) ; extra == "rag" or extra == "all"
|
|
27
27
|
Requires-Dist: playwright (>=1.53.0,<2.0.0) ; extra == "playwright" or extra == "all"
|
28
28
|
Requires-Dist: prompt-toolkit (>=3.0.51,<4.0.0)
|
29
29
|
Requires-Dist: psutil (>=7.0.0,<8.0.0)
|
30
|
-
Requires-Dist: pydantic-ai (>=0.4.
|
30
|
+
Requires-Dist: pydantic-ai (>=0.4.5,<0.5.0)
|
31
31
|
Requires-Dist: pyjwt (>=2.10.1,<3.0.0)
|
32
32
|
Requires-Dist: python-dotenv (>=1.1.1,<2.0.0)
|
33
33
|
Requires-Dist: python-jose[cryptography] (>=3.4.0,<4.0.0)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "zrb"
|
3
|
-
version = "1.
|
3
|
+
version = "1.13.1"
|
4
4
|
description = "Your Automation Powerhouse"
|
5
5
|
authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
|
6
6
|
license = "AGPL-3.0-or-later"
|
@@ -46,10 +46,10 @@ libcst = "^1.7.0"
|
|
46
46
|
chromadb = {version = "^0.6.3", optional = true}
|
47
47
|
pdfplumber = {version = "^0.11.6", optional = true}
|
48
48
|
beautifulsoup4 = "^4.13.3"
|
49
|
-
fastapi = {extras = ["standard"], version = "^0.
|
49
|
+
fastapi = {extras = ["standard"], version = "^0.116.1"}
|
50
50
|
python-jose = {extras = ["cryptography"], version = "^3.4.0"}
|
51
51
|
ulid-py = "^1.1.0"
|
52
|
-
pydantic-ai = "^0.4.
|
52
|
+
pydantic-ai = "^0.4.5"
|
53
53
|
tiktoken = "^0.8.0"
|
54
54
|
openai = {version = "^1.86.0", optional = true}
|
55
55
|
playwright = {version = "^1.53.0", optional = true}
|
@@ -9,10 +9,10 @@ from zrb.task.llm.config import get_model, get_model_settings
|
|
9
9
|
from zrb.task.llm.prompt import get_system_and_user_prompt
|
10
10
|
|
11
11
|
if TYPE_CHECKING:
|
12
|
-
from pydantic_ai import Tool
|
13
|
-
from pydantic_ai.mcp import MCPServer
|
12
|
+
from pydantic_ai import Agent, Tool
|
14
13
|
from pydantic_ai.models import Model
|
15
14
|
from pydantic_ai.settings import ModelSettings
|
15
|
+
from pydantic_ai.toolsets import AbstractToolset
|
16
16
|
|
17
17
|
ToolOrCallable = Tool | Callable
|
18
18
|
else:
|
@@ -26,7 +26,7 @@ def create_sub_agent_tool(
|
|
26
26
|
model: "str | Model | None" = None,
|
27
27
|
model_settings: "ModelSettings | None" = None,
|
28
28
|
tools: list[ToolOrCallable] = [],
|
29
|
-
|
29
|
+
toolsets: list["AbstractToolset[Agent]"] = [],
|
30
30
|
) -> Callable[[AnyContext, str], Coroutine[Any, Any, str]]:
|
31
31
|
"""
|
32
32
|
Creates a "tool that is another AI agent," capable of handling complex, multi-step sub-tasks.
|
@@ -42,7 +42,7 @@ def create_sub_agent_tool(
|
|
42
42
|
model (str | Model, optional): The language model the sub-agent will use.
|
43
43
|
model_settings (ModelSettings, optional): Specific settings for the sub-agent's model.
|
44
44
|
tools (list, optional): A list of tools that will be exclusively available to the sub-agent.
|
45
|
-
|
45
|
+
toolsets (list, optional): A list of Toolset for the sub-agent.
|
46
46
|
|
47
47
|
Returns:
|
48
48
|
Callable: An asynchronous function that serves as the sub-agent tool. When called, it runs the sub-agent with a given query and returns its final result.
|
@@ -85,7 +85,7 @@ def create_sub_agent_tool(
|
|
85
85
|
system_prompt=resolved_system_prompt,
|
86
86
|
model_settings=resolved_model_settings,
|
87
87
|
tools=tools,
|
88
|
-
|
88
|
+
toolsets=toolsets,
|
89
89
|
)
|
90
90
|
|
91
91
|
sub_agent_run = None
|
@@ -21,10 +21,14 @@ You are an expert AI agent in a CLI. You MUST follow this workflow for this inte
|
|
21
21
|
* **CRITICAL:** Immediately after execution, you MUST use a tool to verify the outcome (e.g., after `write_file`, use `read_file`; after `rm`, use `ls` to confirm absence).
|
22
22
|
|
23
23
|
4. **Handle Errors (The Debugging Loop):**
|
24
|
-
* If
|
25
|
-
1. **Analyze:** Scrutinize the complete error message
|
26
|
-
2. **Hypothesize:** State a clear, specific hypothesis about the root cause.
|
27
|
-
3. **
|
24
|
+
* If an action fails, you MUST NOT give up. You MUST enter a persistent debugging loop until the error is resolved.
|
25
|
+
1. **Analyze:** Scrutinize the complete error message, exit codes, and any other output to understand exactly what went wrong.
|
26
|
+
2. **Hypothesize:** State a clear, specific hypothesis about the root cause. For example, "The operation failed because the file path was incorrect," "The command failed because a required argument was missing," or "The test failed because the code has a logical error."
|
27
|
+
3. **Strategize and Correct:** Formulate a new action that directly addresses the hypothesis. Do not simply repeat the failed action. Your correction strategy MUST be logical and informed by the analysis. For example:
|
28
|
+
* If a path is wrong, take action to discover the correct path.
|
29
|
+
* If a command is malformed, correct its syntax or arguments.
|
30
|
+
* If an operation failed due to invalid state (e.g., unexpected file content, a logical bug in code), take action to inspect the current state and then formulate a targeted fix.
|
31
|
+
4. **Execute** the corrected action.
|
28
32
|
* **CRITICAL:** Do not ask the user for help or report the failure until you have exhausted all reasonable attempts to fix it yourself. If the user provides a vague follow-up like "try again," you MUST use the context of the previous failure to inform your next action, not just repeat the failed command.
|
29
33
|
|
30
34
|
5. **Report Results:**
|
@@ -0,0 +1,16 @@
|
|
1
|
+
You are a silent memory management AI. Your ONLY output is tool calls.
|
2
|
+
|
3
|
+
**Primary Directive:** Update the conversation memory based on the `Recent Conversation`.
|
4
|
+
|
5
|
+
**Actions:**
|
6
|
+
1. **Update Conversation:**
|
7
|
+
- Call `write_past_conversation_summary` ONCE. The summary must be a narrative condensing the old summary and recent conversation.
|
8
|
+
- Call `write_past_conversation_transcript` ONCE. The transcript MUST contain at most the last 4 (four) conversation turns. The content of these turns must not be altered or truncated, furthermore the timezone has to be included. Use the format: `[YYYY-MM-DD HH:MM:SS UTC+Z] Role: Message/Tool name being called`.
|
9
|
+
2. **Update Factual Notes:**
|
10
|
+
- Read existing notes first.
|
11
|
+
- Call `write_long_term_note` AT MOST ONCE with new or updated global facts (e.g., user preferences).
|
12
|
+
- Call `write_contextual_note` AT MOST ONCE with new or updated project-specific facts.
|
13
|
+
- **CRITICAL - Path Specificity:** Project-specific facts are tied to the directory where they were established. You MUST analyze the `Recent Conversation` to determine the correct `context_path` for the facts you are writing. For example, if a user sets a project name while the working directory is `/tmp/a`, the `context_path` for that fact MUST be `/tmp/a`.
|
14
|
+
- **CRITICAL - Note Content:** Note content MUST be raw, unformatted text. Do NOT include markdown headers. Notes must be timeless facts about the current state, not a chronological log. Only write if the content has changed.
|
15
|
+
|
16
|
+
**Final Step:** After all tool calls, you MUST output the word "DONE" on a new line. Do not output anything else.
|
@@ -18,10 +18,14 @@ You are an expert AI agent fulfilling a single request. You must provide a compl
|
|
18
18
|
* **CRITICAL:** After each step, you MUST use a tool to verify the outcome (e.g., check command exit codes, read back file contents, list files).
|
19
19
|
|
20
20
|
4. **Handle Errors (The Debugging Loop):**
|
21
|
-
* If
|
22
|
-
1. **Analyze:** Scrutinize the complete error message
|
23
|
-
2. **Hypothesize:** State a clear, specific hypothesis about the root cause.
|
24
|
-
3. **
|
21
|
+
* If an action fails, you MUST NOT give up. You MUST enter a persistent debugging loop until the error is resolved.
|
22
|
+
1. **Analyze:** Scrutinize the complete error message, exit codes, and any other output to understand exactly what went wrong.
|
23
|
+
2. **Hypothesize:** State a clear, specific hypothesis about the root cause. For example, "The operation failed because the file path was incorrect," "The command failed because a required argument was missing," or "The test failed because the code has a logical error."
|
24
|
+
3. **Strategize and Correct:** Formulate a new action that directly addresses the hypothesis. Do not simply repeat the failed action. Your correction strategy MUST be logical and informed by the analysis. For example:
|
25
|
+
* If a path is wrong, take action to discover the correct path.
|
26
|
+
* If a command is malformed, correct its syntax or arguments.
|
27
|
+
* If an operation failed due to invalid state (e.g., unexpected file content, a logical bug in code), take action to inspect the current state and then formulate a targeted fix.
|
28
|
+
4. **Execute** the corrected action.
|
25
29
|
* **CRITICAL:** You must exhaust all reasonable attempts to fix the issue yourself before reporting failure.
|
26
30
|
|
27
31
|
5. **Report Final Outcome:**
|
@@ -0,0 +1,129 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.config.config import CFG
|
4
|
+
from zrb.config.llm_context.config_parser import markdown_to_dict
|
5
|
+
from zrb.util.llm.prompt import demote_markdown_headers
|
6
|
+
|
7
|
+
|
8
|
+
class LLMContextConfig:
|
9
|
+
"""High-level API for interacting with cascaded configurations."""
|
10
|
+
|
11
|
+
def _find_config_files(self, cwd: str) -> list[str]:
|
12
|
+
configs = []
|
13
|
+
current_dir = cwd
|
14
|
+
home_dir = os.path.expanduser("~")
|
15
|
+
while True:
|
16
|
+
config_path = os.path.join(current_dir, CFG.LLM_CONTEXT_FILE)
|
17
|
+
if os.path.exists(config_path):
|
18
|
+
configs.append(config_path)
|
19
|
+
if current_dir == home_dir or current_dir == "/":
|
20
|
+
break
|
21
|
+
current_dir = os.path.dirname(current_dir)
|
22
|
+
return configs
|
23
|
+
|
24
|
+
def _parse_config(self, file_path: str) -> dict[str, str]:
|
25
|
+
with open(file_path, "r") as f:
|
26
|
+
content = f.read()
|
27
|
+
return markdown_to_dict(content)
|
28
|
+
|
29
|
+
def _get_all_sections(self, cwd: str) -> list[tuple[str, dict[str, str]]]:
|
30
|
+
config_files = self._find_config_files(cwd)
|
31
|
+
all_sections = []
|
32
|
+
for config_file in config_files:
|
33
|
+
config_dir = os.path.dirname(config_file)
|
34
|
+
sections = self._parse_config(config_file)
|
35
|
+
all_sections.append((config_dir, sections))
|
36
|
+
return all_sections
|
37
|
+
|
38
|
+
def get_contexts(self, cwd: str | None = None) -> dict[str, str]:
|
39
|
+
"""Gathers all relevant contexts for a given path."""
|
40
|
+
if cwd is None:
|
41
|
+
cwd = os.getcwd()
|
42
|
+
all_sections = self._get_all_sections(cwd)
|
43
|
+
contexts: dict[str, str] = {}
|
44
|
+
for config_dir, sections in reversed(all_sections):
|
45
|
+
for key, value in sections.items():
|
46
|
+
if key.startswith("Context:"):
|
47
|
+
context_path = key.replace("Context:", "").strip()
|
48
|
+
if context_path == ".":
|
49
|
+
context_path = config_dir
|
50
|
+
elif not os.path.isabs(context_path):
|
51
|
+
context_path = os.path.abspath(
|
52
|
+
os.path.join(config_dir, context_path)
|
53
|
+
)
|
54
|
+
if os.path.isabs(context_path) or cwd.startswith(context_path):
|
55
|
+
contexts[context_path] = value
|
56
|
+
return contexts
|
57
|
+
|
58
|
+
def get_workflows(self, cwd: str | None = None) -> dict[str, str]:
|
59
|
+
"""Gathers all relevant workflows for a given path."""
|
60
|
+
if cwd is None:
|
61
|
+
cwd = os.getcwd()
|
62
|
+
all_sections = self._get_all_sections(cwd)
|
63
|
+
workflows: dict[str, str] = {}
|
64
|
+
for _, sections in reversed(all_sections):
|
65
|
+
for key, value in sections.items():
|
66
|
+
if key.startswith("Workflow:"):
|
67
|
+
workflow_name = key.replace("Workflow:", "").strip()
|
68
|
+
if workflow_name not in workflows:
|
69
|
+
workflows[workflow_name] = value
|
70
|
+
return workflows
|
71
|
+
|
72
|
+
def write_context(
|
73
|
+
self, content: str, context_path: str | None = None, cwd: str | None = None
|
74
|
+
):
|
75
|
+
"""Writes content to a context block in the nearest configuration file."""
|
76
|
+
if cwd is None:
|
77
|
+
cwd = os.getcwd()
|
78
|
+
if context_path is None:
|
79
|
+
context_path = cwd
|
80
|
+
|
81
|
+
config_files = self._find_config_files(cwd)
|
82
|
+
if config_files:
|
83
|
+
config_file = config_files[0] # Closest config file
|
84
|
+
else:
|
85
|
+
config_file = os.path.join(cwd, CFG.LLM_CONTEXT_FILE)
|
86
|
+
|
87
|
+
sections = {}
|
88
|
+
if os.path.exists(config_file):
|
89
|
+
sections = self._parse_config(config_file)
|
90
|
+
|
91
|
+
# Determine the section key
|
92
|
+
section_key_path = context_path
|
93
|
+
if not os.path.isabs(context_path):
|
94
|
+
config_dir = os.path.dirname(config_file)
|
95
|
+
section_key_path = os.path.abspath(os.path.join(config_dir, context_path))
|
96
|
+
|
97
|
+
# Find existing key
|
98
|
+
found_key = ""
|
99
|
+
for key in sections.keys():
|
100
|
+
if not key.startswith("Context:"):
|
101
|
+
continue
|
102
|
+
key_path = key.replace("Context:", "").strip()
|
103
|
+
if key_path == ".":
|
104
|
+
key_path = os.path.dirname(config_file)
|
105
|
+
elif not os.path.isabs(key_path):
|
106
|
+
key_path = os.path.abspath(
|
107
|
+
os.path.join(os.path.dirname(config_file), key_path)
|
108
|
+
)
|
109
|
+
if key_path == section_key_path:
|
110
|
+
found_key = key
|
111
|
+
break
|
112
|
+
|
113
|
+
if found_key != "":
|
114
|
+
sections[found_key] = content
|
115
|
+
else:
|
116
|
+
# Add new entry
|
117
|
+
new_key = f"Context: {context_path}"
|
118
|
+
sections[new_key] = content
|
119
|
+
|
120
|
+
# Serialize back to markdown
|
121
|
+
new_file_content = ""
|
122
|
+
for key, value in sections.items():
|
123
|
+
new_file_content += f"# {key}\n{demote_markdown_headers(value)}\n\n"
|
124
|
+
|
125
|
+
with open(config_file, "w") as f:
|
126
|
+
f.write(new_file_content)
|
127
|
+
|
128
|
+
|
129
|
+
llm_context_config = LLMContextConfig()
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import re
|
2
|
+
|
3
|
+
from zrb.util.llm.prompt import promote_markdown_headers
|
4
|
+
|
5
|
+
|
6
|
+
def markdown_to_dict(markdown: str) -> dict[str, str]:
|
7
|
+
sections: dict[str, str] = {}
|
8
|
+
current_title = ""
|
9
|
+
current_content: list[str] = []
|
10
|
+
fence_stack: list[str] = []
|
11
|
+
|
12
|
+
fence_pattern = re.compile(r"^([`~]{3,})(.*)$")
|
13
|
+
h1_pattern = re.compile(r"^# (.+)$")
|
14
|
+
|
15
|
+
for line in markdown.splitlines():
|
16
|
+
# Detect code fence open/close
|
17
|
+
fence_match = fence_pattern.match(line.strip())
|
18
|
+
|
19
|
+
if fence_match:
|
20
|
+
fence = fence_match.group(1)
|
21
|
+
if fence_stack and fence_stack[-1] == fence:
|
22
|
+
fence_stack.pop() # close current fence
|
23
|
+
else:
|
24
|
+
fence_stack.append(fence) # open new fence
|
25
|
+
|
26
|
+
# Only parse H1 when not inside a code fence
|
27
|
+
if not fence_stack:
|
28
|
+
h1_match = h1_pattern.match(line)
|
29
|
+
if h1_match:
|
30
|
+
# Save previous section
|
31
|
+
if current_title:
|
32
|
+
sections[current_title] = "\n".join(current_content).strip()
|
33
|
+
# Start new section
|
34
|
+
current_title = h1_match.group(1).strip()
|
35
|
+
current_content = []
|
36
|
+
continue
|
37
|
+
|
38
|
+
current_content.append(line)
|
39
|
+
|
40
|
+
# Save final section
|
41
|
+
if current_title:
|
42
|
+
sections[current_title] = "\n".join(current_content).strip()
|
43
|
+
return {
|
44
|
+
header: promote_markdown_headers(content)
|
45
|
+
for header, content in sections.items()
|
46
|
+
}
|
@@ -7,15 +7,15 @@ from zrb.context.any_context import AnyContext
|
|
7
7
|
from zrb.context.any_shared_context import AnySharedContext
|
8
8
|
from zrb.task.llm.error import extract_api_error_details
|
9
9
|
from zrb.task.llm.print_node import print_node
|
10
|
-
from zrb.task.llm.tool_wrapper import wrap_tool
|
10
|
+
from zrb.task.llm.tool_wrapper import wrap_func, wrap_tool
|
11
11
|
from zrb.task.llm.typing import ListOfDict
|
12
12
|
|
13
13
|
if TYPE_CHECKING:
|
14
14
|
from pydantic_ai import Agent, Tool
|
15
15
|
from pydantic_ai.agent import AgentRun
|
16
|
-
from pydantic_ai.mcp import MCPServer
|
17
16
|
from pydantic_ai.models import Model
|
18
17
|
from pydantic_ai.settings import ModelSettings
|
18
|
+
from pydantic_ai.toolsets import AbstractToolset
|
19
19
|
|
20
20
|
ToolOrCallable = Tool | Callable
|
21
21
|
else:
|
@@ -28,26 +28,43 @@ def create_agent_instance(
|
|
28
28
|
system_prompt: str = "",
|
29
29
|
model_settings: "ModelSettings | None" = None,
|
30
30
|
tools: list[ToolOrCallable] = [],
|
31
|
-
|
31
|
+
toolsets: list["AbstractToolset[Agent]"] = [],
|
32
32
|
retries: int = 3,
|
33
33
|
) -> "Agent":
|
34
34
|
"""Creates a new Agent instance with configured tools and servers."""
|
35
35
|
from pydantic_ai import Agent, Tool
|
36
|
+
from pydantic_ai.tools import GenerateToolJsonSchema
|
36
37
|
|
37
38
|
# Normalize tools
|
38
39
|
tool_list = []
|
39
40
|
for tool_or_callable in tools:
|
40
41
|
if isinstance(tool_or_callable, Tool):
|
41
42
|
tool_list.append(tool_or_callable)
|
43
|
+
# Update tool's function
|
44
|
+
tool = tool_or_callable
|
45
|
+
tool_list.append(
|
46
|
+
Tool(
|
47
|
+
function=wrap_func(tool.function),
|
48
|
+
takes_ctx=tool.takes_ctx,
|
49
|
+
max_retries=tool.max_retries,
|
50
|
+
name=tool.name,
|
51
|
+
description=tool.description,
|
52
|
+
prepare=tool.prepare,
|
53
|
+
docstring_format=tool.docstring_format,
|
54
|
+
require_parameter_descriptions=tool.require_parameter_descriptions,
|
55
|
+
schema_generator=GenerateToolJsonSchema,
|
56
|
+
strict=tool.strict,
|
57
|
+
)
|
58
|
+
)
|
42
59
|
else:
|
43
|
-
#
|
60
|
+
# Turn function into tool
|
44
61
|
tool_list.append(wrap_tool(tool_or_callable, ctx))
|
45
62
|
# Return Agent
|
46
63
|
return Agent(
|
47
64
|
model=model,
|
48
65
|
system_prompt=system_prompt,
|
49
66
|
tools=tool_list,
|
50
|
-
toolsets=
|
67
|
+
toolsets=toolsets,
|
51
68
|
model_settings=model_settings,
|
52
69
|
retries=retries,
|
53
70
|
)
|
@@ -63,8 +80,8 @@ def get_agent(
|
|
63
80
|
list[ToolOrCallable] | Callable[[AnySharedContext], list[ToolOrCallable]]
|
64
81
|
),
|
65
82
|
additional_tools: list[ToolOrCallable],
|
66
|
-
|
67
|
-
|
83
|
+
toolsets_attr: "list[AbstractToolset[Agent]] | Callable[[AnySharedContext], list[AbstractToolset[Agent]]]", # noqa
|
84
|
+
additional_toolsets: "list[AbstractToolset[Agent]]",
|
68
85
|
retries: int = 3,
|
69
86
|
) -> "Agent":
|
70
87
|
"""Retrieves the configured Agent instance or creates one if necessary."""
|
@@ -85,18 +102,16 @@ def get_agent(
|
|
85
102
|
# Get tools for agent
|
86
103
|
tools = list(tools_attr(ctx) if callable(tools_attr) else tools_attr)
|
87
104
|
tools.extend(additional_tools)
|
88
|
-
# Get
|
89
|
-
|
90
|
-
|
91
|
-
)
|
92
|
-
mcp_servers.extend(additional_mcp_servers)
|
105
|
+
# Get Toolsets for agent
|
106
|
+
tool_sets = list(toolsets_attr(ctx) if callable(toolsets_attr) else toolsets_attr)
|
107
|
+
tool_sets.extend(additional_toolsets)
|
93
108
|
# If no agent provided, create one using the configuration
|
94
109
|
return create_agent_instance(
|
95
110
|
ctx=ctx,
|
96
111
|
model=model,
|
97
112
|
system_prompt=system_prompt,
|
98
113
|
tools=tools,
|
99
|
-
|
114
|
+
toolsets=tool_sets,
|
100
115
|
model_settings=model_settings,
|
101
116
|
retries=retries,
|
102
117
|
)
|
@@ -176,46 +176,23 @@ class ConversationHistory:
|
|
176
176
|
"""
|
177
177
|
return json.dumps({"content": self._fetch_long_term_note()})
|
178
178
|
|
179
|
-
def
|
179
|
+
def write_long_term_note(self, content: str) -> str:
|
180
180
|
"""
|
181
|
-
|
181
|
+
Write the entire content of the long-term references.
|
182
|
+
This will overwrite any existing long-term notes.
|
182
183
|
|
183
184
|
Args:
|
184
|
-
|
185
|
+
content (str): The full content of the long-term notes.
|
185
186
|
|
186
187
|
Returns:
|
187
|
-
str: JSON
|
188
|
-
|
189
|
-
Raises:
|
190
|
-
Exception: If the note cannot be read.
|
191
|
-
"""
|
192
|
-
llm_context_config.add_to_context(new_info, cwd="/")
|
193
|
-
return json.dumps({"success": True, "content": self._fetch_long_term_note()})
|
194
|
-
|
195
|
-
def remove_long_term_info(self, irrelevant_info: str) -> str:
|
188
|
+
str: JSON indicating success.
|
196
189
|
"""
|
197
|
-
|
198
|
-
|
199
|
-
Args:
|
200
|
-
irrelevant_info (str): Irrelevant info to be removed from long-term references.
|
201
|
-
|
202
|
-
Returns:
|
203
|
-
str: JSON with new content of the notes and deletion status.
|
204
|
-
|
205
|
-
Raises:
|
206
|
-
Exception: If the note cannot be read.
|
207
|
-
"""
|
208
|
-
was_removed = llm_context_config.remove_from_context(irrelevant_info, cwd="/")
|
209
|
-
return json.dumps(
|
210
|
-
{
|
211
|
-
"success": was_removed,
|
212
|
-
"content": self._fetch_long_term_note(),
|
213
|
-
}
|
214
|
-
)
|
190
|
+
llm_context_config.write_context(content, context_path="/")
|
191
|
+
return json.dumps({"success": True})
|
215
192
|
|
216
193
|
def read_contextual_note(self) -> str:
|
217
194
|
"""
|
218
|
-
Read the content of the contextual references.
|
195
|
+
Read the content of the contextual references for the current project.
|
219
196
|
|
220
197
|
This tool helps you retrieve knowledge or notes stored for contextual reference.
|
221
198
|
If the note does not exist, you may want to create it using the write tool.
|
@@ -228,52 +205,25 @@ class ConversationHistory:
|
|
228
205
|
"""
|
229
206
|
return json.dumps({"content": self._fetch_contextual_note()})
|
230
207
|
|
231
|
-
def
|
232
|
-
|
233
|
-
Add new info for contextual reference.
|
234
|
-
|
235
|
-
Args:
|
236
|
-
new_info (str): New info to be added into contextual references.
|
237
|
-
context_path (str, optional): contextual directory path for new info
|
238
|
-
|
239
|
-
Returns:
|
240
|
-
str: JSON with new content of the notes.
|
241
|
-
|
242
|
-
Raises:
|
243
|
-
Exception: If the note cannot be read.
|
244
|
-
"""
|
245
|
-
if context_path is None:
|
246
|
-
context_path = self.project_path
|
247
|
-
llm_context_config.add_to_context(new_info, context_path=context_path)
|
248
|
-
return json.dumps({"success": True, "content": self._fetch_contextual_note()})
|
249
|
-
|
250
|
-
def remove_contextual_info(
|
251
|
-
self, irrelevant_info: str, context_path: str | None
|
208
|
+
def write_contextual_note(
|
209
|
+
self, content: str, context_path: str | None = None
|
252
210
|
) -> str:
|
253
211
|
"""
|
254
|
-
|
212
|
+
Write the entire content of the contextual references for a specific path.
|
213
|
+
This will overwrite any existing contextual notes for that path.
|
255
214
|
|
256
215
|
Args:
|
257
|
-
|
258
|
-
context_path (str, optional):
|
216
|
+
content (str): The full content of the contextual notes.
|
217
|
+
context_path (str, optional): The directory path for the context.
|
218
|
+
Defaults to the current project path.
|
259
219
|
|
260
220
|
Returns:
|
261
|
-
str: JSON
|
262
|
-
|
263
|
-
Raises:
|
264
|
-
Exception: If the note cannot be read.
|
221
|
+
str: JSON indicating success.
|
265
222
|
"""
|
266
223
|
if context_path is None:
|
267
224
|
context_path = self.project_path
|
268
|
-
|
269
|
-
|
270
|
-
)
|
271
|
-
return json.dumps(
|
272
|
-
{
|
273
|
-
"success": was_removed,
|
274
|
-
"content": self._fetch_contextual_note(),
|
275
|
-
}
|
276
|
-
)
|
225
|
+
llm_context_config.write_context(content, context_path=context_path)
|
226
|
+
return json.dumps({"success": True})
|
277
227
|
|
278
228
|
def _fetch_long_term_note(self):
|
279
229
|
contexts = llm_context_config.get_contexts(cwd=self.project_path)
|
@@ -146,11 +146,9 @@ async def summarize_history(
|
|
146
146
|
conversation_history.write_past_conversation_summary,
|
147
147
|
conversation_history.write_past_conversation_transcript,
|
148
148
|
conversation_history.read_long_term_note,
|
149
|
-
conversation_history.
|
150
|
-
conversation_history.remove_long_term_info,
|
149
|
+
conversation_history.write_long_term_note,
|
151
150
|
conversation_history.read_contextual_note,
|
152
|
-
conversation_history.
|
153
|
-
conversation_history.remove_contextual_info,
|
151
|
+
conversation_history.write_contextual_note,
|
154
152
|
],
|
155
153
|
)
|
156
154
|
try:
|
@@ -14,6 +14,7 @@ async def print_node(print_func: Callable, agent_run: Any, node: Any):
|
|
14
14
|
PartDeltaEvent,
|
15
15
|
PartStartEvent,
|
16
16
|
TextPartDelta,
|
17
|
+
ThinkingPartDelta,
|
17
18
|
ToolCallPartDelta,
|
18
19
|
)
|
19
20
|
|
@@ -33,7 +34,9 @@ async def print_node(print_func: Callable, agent_run: Any, node: Any):
|
|
33
34
|
)
|
34
35
|
is_streaming = False
|
35
36
|
elif isinstance(event, PartDeltaEvent):
|
36
|
-
if isinstance(event.delta, TextPartDelta)
|
37
|
+
if isinstance(event.delta, TextPartDelta) or isinstance(
|
38
|
+
event.delta, ThinkingPartDelta
|
39
|
+
):
|
37
40
|
print_func(
|
38
41
|
stylize_faint(f"{event.delta.content_delta}"),
|
39
42
|
end="",
|
@@ -21,16 +21,19 @@ def wrap_tool(func: Callable, ctx: AnyContext) -> "Tool":
|
|
21
21
|
from pydantic_ai import RunContext, Tool
|
22
22
|
|
23
23
|
original_sig = inspect.signature(func)
|
24
|
-
# Use helper function for clarity
|
25
24
|
needs_run_context_for_pydantic = _has_context_parameter(original_sig, RunContext)
|
25
|
+
wrapper = wrap_func(func, ctx)
|
26
|
+
return Tool(wrapper, takes_ctx=needs_run_context_for_pydantic)
|
27
|
+
|
28
|
+
|
29
|
+
def wrap_func(func: Callable, ctx: AnyContext) -> Callable:
|
30
|
+
original_sig = inspect.signature(func)
|
26
31
|
needs_any_context_for_injection = _has_context_parameter(original_sig, AnyContext)
|
27
32
|
takes_no_args = len(original_sig.parameters) == 0
|
28
33
|
# Pass individual flags to the wrapper creator
|
29
34
|
wrapper = _create_wrapper(func, original_sig, ctx, needs_any_context_for_injection)
|
30
|
-
# Adjust signature - _adjust_signature determines exclusions based on type
|
31
35
|
_adjust_signature(wrapper, original_sig, takes_no_args)
|
32
|
-
|
33
|
-
return Tool(wrapper, takes_ctx=needs_run_context_for_pydantic)
|
36
|
+
return wrapper
|
34
37
|
|
35
38
|
|
36
39
|
def _has_context_parameter(original_sig: inspect.Signature, context_type: type) -> bool:
|
@@ -98,9 +101,12 @@ def _create_wrapper(
|
|
98
101
|
func_name = get_callable_name(func)
|
99
102
|
ctx.print(f"✅ >> Allow to run tool: {func_name} (Y/n)", plain=True)
|
100
103
|
user_confirmation_str = await _read_line()
|
101
|
-
|
104
|
+
try:
|
105
|
+
user_confirmation = to_boolean(user_confirmation_str)
|
106
|
+
except Exception:
|
107
|
+
user_confirmation = False
|
102
108
|
if not user_confirmation:
|
103
|
-
ctx.print("❌ >> Why?", plain=True)
|
109
|
+
ctx.print(f"❌ >> Rejecting {func_name} call. Why?", plain=True)
|
104
110
|
reason = await _read_line()
|
105
111
|
ctx.print("", plain=True)
|
106
112
|
raise ValueError(f"User disapproval: {reason}")
|