zrb 1.16.2__tar.gz → 1.16.4__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.16.2 → zrb-1.16.4}/PKG-INFO +1 -1
- {zrb-1.16.2 → zrb-1.16.4}/pyproject.toml +1 -1
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/__init__.py +1 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/chat_session.py +13 -20
- zrb-1.16.4/src/zrb/builtin/llm/chat_trigger.py +73 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/llm_ask.py +15 -4
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/tool/code.py +7 -3
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/tool/file.py +54 -8
- zrb-1.16.4/src/zrb/builtin/llm/tool/note.py +72 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/tool/sub_agent.py +1 -2
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/default_prompt/interactive_system_prompt.md +2 -2
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/default_prompt/summarization_prompt.md +1 -6
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/llm_context/config.py +1 -1
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/group/any_group.py +3 -7
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/group/group.py +7 -9
- zrb-1.16.4/src/zrb/task/llm/default_workflow/coding.md +64 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/history_summarization.py +0 -17
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/history_summarization_tool.py +2 -14
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/tool_wrapper.py +15 -4
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm_task.py +0 -2
- zrb-1.16.2/src/zrb/task/llm/default_workflow/coding.md +0 -24
- {zrb-1.16.2 → zrb-1.16.4}/README.md +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/__main__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/attr/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/attr/type.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/base64.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/git.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/git_subtree.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/group.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/http.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/jwt.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/history.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/previous-session.js +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/tool/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/tool/api.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/tool/cli.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/tool/rag.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/llm/tool/web.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/md5.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/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.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/create/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/create/project-template/README.md +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/project/create/project_task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/python.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/random.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/setup/common_input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/setup/ubuntu.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/shell/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/todo.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/builtin/uuid.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/callback/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/callback/any_callback.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/callback/callback.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/cmd/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/cmd/cmd_result.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/cmd/cmd_val.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/config.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/default_prompt/file_extractor_system_prompt.md +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/default_prompt/persona.md +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/default_prompt/repo_extractor_system_prompt.md +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/default_prompt/repo_summarizer_system_prompt.md +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/default_prompt/system_prompt.md +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/llm_config.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/llm_context/config_parser.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/llm_rate_limitter.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/config/web_auth_config.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/content_transformer/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/content_transformer/any_content_transformer.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/content_transformer/content_transformer.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/context/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/context/any_context.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/context/any_shared_context.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/context/context.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/context/shared_context.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/dot_dict/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/dot_dict/dot_dict.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/env/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/env/any_env.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/env/env.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/env/env_file.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/env/env_map.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/group/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/input/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/input/any_input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/input/base_input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/input/bool_input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/input/float_input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/input/int_input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/input/option_input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/input/password_input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/input/str_input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/input/text_input.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/cli.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/common_util.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_app.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/docs_route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/error_page/view.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/home_page/view.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/login_api_route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/login_page/view.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/logout_api_route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/logout_page/view.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/global_template.html +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/common.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/common.js +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.amber.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.blue.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.cyan.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.fuchsia.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.green.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.grey.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.indigo.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.jade.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.lime.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.orange.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.pink.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.pumpkin.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.purple.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.red.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.sand.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.slate.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.violet.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.yellow.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/pico-css/pico.zinc.min.css +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/static/static_route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_schema/session.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_schema/token.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_schema/user.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_util/cookie.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_util/html.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_util/token.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/runner/web_util/user.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/session/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/session/any_session.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/session/session.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/session_state_log/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/session_state_log/session_state_log.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/session_state_logger/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/any_task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/base/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/base/context.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/base/execution.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/base/lifecycle.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/base/monitoring.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/base/operators.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/base_task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/base_trigger.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/cmd_task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/http_check.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/agent.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/config.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/conversation_history.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/conversation_history_model.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/default_workflow/copywriting.md +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/default_workflow/researching.md +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/error.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/print_node.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/prompt.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/llm/typing.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/make_task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/rsync_task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/scaffolder.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/scheduler.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/task.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task/tcp_check.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task_status/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/task_status/task_status.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/attr.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/callable.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/cli/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/cli/markdown.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/cli/style.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/cli/subcommand.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/cli/text.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/cmd/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/cmd/command.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/cmd/remote.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/codemod/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/codemod/modification_mode.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/codemod/modify_class.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/codemod/modify_class_parent.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/codemod/modify_class_property.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/codemod/modify_dict.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/codemod/modify_function.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/codemod/modify_function_call.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/codemod/modify_method.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/codemod/modify_module.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/cron.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/file.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/git.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/git_diff_model.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/git_subtree.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/git_subtree_model.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/group.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/init_path.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/llm/prompt.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/load.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/run.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/string/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/string/conversion.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/string/format.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/string/name.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/todo.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/todo_model.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/util/truncate.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/xcom/__init__.py +0 -0
- {zrb-1.16.2 → zrb-1.16.4}/src/zrb/xcom/xcom.py +0 -0
@@ -9,6 +9,7 @@ from zrb.builtin.git import (
|
|
9
9
|
from zrb.builtin.git_subtree import git_add_subtree, git_pull_subtree, git_push_subtree
|
10
10
|
from zrb.builtin.http import generate_curl, http_request
|
11
11
|
from zrb.builtin.jwt import decode_jwt, encode_jwt, validate_jwt
|
12
|
+
from zrb.builtin.llm.chat_trigger import llm_chat_trigger
|
12
13
|
from zrb.builtin.llm.llm_ask import llm_ask
|
13
14
|
from zrb.builtin.md5 import hash_md5, sum_md5, validate_md5
|
14
15
|
from zrb.builtin.project.add.fastapp.fastapp_task import add_fastapp_to_project
|
@@ -7,13 +7,20 @@ conversation flow via XCom.
|
|
7
7
|
|
8
8
|
import asyncio
|
9
9
|
import sys
|
10
|
+
from typing import TYPE_CHECKING, Any
|
10
11
|
|
12
|
+
from zrb.builtin.llm.chat_trigger import llm_chat_trigger
|
11
13
|
from zrb.config.llm_config import llm_config
|
12
14
|
from zrb.context.any_context import AnyContext
|
13
15
|
from zrb.util.cli.markdown import render_markdown
|
14
16
|
from zrb.util.cli.style import stylize_blue, stylize_bold_yellow, stylize_faint
|
15
17
|
from zrb.util.string.conversion import to_boolean
|
16
18
|
|
19
|
+
if TYPE_CHECKING:
|
20
|
+
from asyncio import StreamReader
|
21
|
+
|
22
|
+
from prompt_toolkit import PromptSession
|
23
|
+
|
17
24
|
|
18
25
|
async def read_user_prompt(ctx: AnyContext) -> str:
|
19
26
|
"""
|
@@ -22,7 +29,7 @@ async def read_user_prompt(ctx: AnyContext) -> str:
|
|
22
29
|
"""
|
23
30
|
_show_info(ctx)
|
24
31
|
is_tty: bool = ctx.is_tty
|
25
|
-
reader = await _setup_input_reader(is_tty)
|
32
|
+
reader: PromptSession[Any] | StreamReader = await _setup_input_reader(is_tty)
|
26
33
|
multiline_mode = False
|
27
34
|
is_first_time = True
|
28
35
|
current_modes: str = ctx.input.modes
|
@@ -32,7 +39,7 @@ async def read_user_prompt(ctx: AnyContext) -> str:
|
|
32
39
|
while True:
|
33
40
|
await asyncio.sleep(0.01)
|
34
41
|
previous_session_name: str | None = (
|
35
|
-
ctx.input.previous_session if is_first_time else
|
42
|
+
ctx.input.previous_session if is_first_time else ""
|
36
43
|
)
|
37
44
|
start_new: bool = ctx.input.start_new if is_first_time else False
|
38
45
|
if is_first_time and ctx.input.message.strip() != "":
|
@@ -41,7 +48,7 @@ async def read_user_prompt(ctx: AnyContext) -> str:
|
|
41
48
|
# Get user input based on mode
|
42
49
|
if not multiline_mode:
|
43
50
|
ctx.print("💬 >>", plain=True)
|
44
|
-
user_input = await
|
51
|
+
user_input = await llm_chat_trigger.wait(reader, ctx)
|
45
52
|
if not multiline_mode:
|
46
53
|
ctx.print("", plain=True)
|
47
54
|
is_first_time = False
|
@@ -153,7 +160,9 @@ def _show_subcommand(command: str, description: str) -> str:
|
|
153
160
|
return f" {styled_command} {styled_description}"
|
154
161
|
|
155
162
|
|
156
|
-
async def _setup_input_reader(
|
163
|
+
async def _setup_input_reader(
|
164
|
+
is_interactive: bool,
|
165
|
+
) -> "PromptSession[Any] | StreamReader":
|
157
166
|
"""Sets up and returns the appropriate asynchronous input reader."""
|
158
167
|
if is_interactive:
|
159
168
|
from prompt_toolkit import PromptSession
|
@@ -167,22 +176,6 @@ async def _setup_input_reader(is_interactive: bool):
|
|
167
176
|
return reader
|
168
177
|
|
169
178
|
|
170
|
-
async def _read_next_line(reader, ctx: AnyContext) -> str:
|
171
|
-
"""Reads one line of input using the provided reader."""
|
172
|
-
from prompt_toolkit import PromptSession
|
173
|
-
|
174
|
-
if isinstance(reader, PromptSession):
|
175
|
-
return await reader.prompt_async()
|
176
|
-
|
177
|
-
line_bytes = await reader.readline()
|
178
|
-
if not line_bytes:
|
179
|
-
return "/bye" # Signal to exit
|
180
|
-
|
181
|
-
user_input = line_bytes.decode().strip()
|
182
|
-
ctx.print(user_input, plain=True)
|
183
|
-
return user_input
|
184
|
-
|
185
|
-
|
186
179
|
async def _trigger_ask_and_wait_for_result(
|
187
180
|
ctx: AnyContext,
|
188
181
|
user_prompt: str,
|
@@ -0,0 +1,73 @@
|
|
1
|
+
import asyncio
|
2
|
+
from asyncio import StreamReader
|
3
|
+
from typing import TYPE_CHECKING, Any, Callable, Coroutine
|
4
|
+
|
5
|
+
from zrb.context.any_context import AnyContext
|
6
|
+
from zrb.util.run import run_async
|
7
|
+
|
8
|
+
if TYPE_CHECKING:
|
9
|
+
from prompt_toolkit import PromptSession
|
10
|
+
|
11
|
+
|
12
|
+
ChatTrigger = Callable[[AnyContext], Coroutine[Any, Any, str] | str]
|
13
|
+
|
14
|
+
|
15
|
+
class LLMChatTrigger:
|
16
|
+
|
17
|
+
def __init__(self):
|
18
|
+
self._triggers: list[ChatTrigger] = []
|
19
|
+
|
20
|
+
def add_trigger(self, *trigger: ChatTrigger):
|
21
|
+
self.append_trigger(*trigger)
|
22
|
+
|
23
|
+
def append_trigger(self, *trigger: ChatTrigger):
|
24
|
+
for single_trigger in trigger:
|
25
|
+
self._triggers.append(single_trigger)
|
26
|
+
|
27
|
+
async def wait(
|
28
|
+
self, reader: "PromptSession[Any] | StreamReader", ctx: AnyContext
|
29
|
+
) -> str:
|
30
|
+
trigger_tasks = [
|
31
|
+
asyncio.create_task(run_async(self._read_next_line(reader, ctx)))
|
32
|
+
] + [asyncio.create_task(run_async(trigger(ctx))) for trigger in self._triggers]
|
33
|
+
final_result: str = ""
|
34
|
+
try:
|
35
|
+
done, pending = await asyncio.wait(
|
36
|
+
trigger_tasks, return_when=asyncio.FIRST_COMPLETED
|
37
|
+
)
|
38
|
+
for task in done:
|
39
|
+
final_result = await task
|
40
|
+
if pending:
|
41
|
+
for task in pending:
|
42
|
+
task.cancel()
|
43
|
+
for task in done:
|
44
|
+
break
|
45
|
+
except asyncio.CancelledError:
|
46
|
+
ctx.print("Task cancelled.", plain=True)
|
47
|
+
final_result = "/bye"
|
48
|
+
except KeyboardInterrupt:
|
49
|
+
ctx.print("KeyboardInterrupt detected. Exiting...", plain=True)
|
50
|
+
final_result = "/bye"
|
51
|
+
return final_result
|
52
|
+
|
53
|
+
async def _read_next_line(
|
54
|
+
self, reader: "PromptSession[Any] | StreamReader", ctx: AnyContext
|
55
|
+
) -> str:
|
56
|
+
"""Reads one line of input using the provided reader."""
|
57
|
+
from prompt_toolkit import PromptSession
|
58
|
+
|
59
|
+
try:
|
60
|
+
if isinstance(reader, PromptSession):
|
61
|
+
return await reader.prompt_async()
|
62
|
+
line_bytes = await reader.readline()
|
63
|
+
if not line_bytes:
|
64
|
+
return "/bye" # Signal to exit
|
65
|
+
user_input = line_bytes.decode().strip()
|
66
|
+
ctx.print(user_input, plain=True)
|
67
|
+
return user_input
|
68
|
+
except KeyboardInterrupt:
|
69
|
+
ctx.print("KeyboardInterrupt detected. Exiting...", plain=True)
|
70
|
+
return "/bye"
|
71
|
+
|
72
|
+
|
73
|
+
llm_chat_trigger = LLMChatTrigger()
|
@@ -19,6 +19,12 @@ from zrb.builtin.llm.tool.file import (
|
|
19
19
|
write_many_files,
|
20
20
|
write_to_file,
|
21
21
|
)
|
22
|
+
from zrb.builtin.llm.tool.note import (
|
23
|
+
read_contextual_note,
|
24
|
+
read_long_term_note,
|
25
|
+
write_contextual_note,
|
26
|
+
write_long_term_note,
|
27
|
+
)
|
22
28
|
from zrb.builtin.llm.tool.web import (
|
23
29
|
create_search_internet_tool,
|
24
30
|
open_web_page,
|
@@ -57,7 +63,12 @@ def _get_toolset(ctx: AnyContext) -> list["AbstractToolset[None] | str"]:
|
|
57
63
|
|
58
64
|
|
59
65
|
def _get_tool(ctx: AnyContext) -> list["ToolOrCallable"]:
|
60
|
-
tools = [
|
66
|
+
tools = [
|
67
|
+
read_long_term_note,
|
68
|
+
write_long_term_note,
|
69
|
+
read_contextual_note,
|
70
|
+
write_contextual_note,
|
71
|
+
]
|
61
72
|
if CFG.LLM_ALLOW_ANALYZE_REPO:
|
62
73
|
tools.append(analyze_repo)
|
63
74
|
if CFG.LLM_ALLOW_ANALYZE_FILE:
|
@@ -97,8 +108,8 @@ def _get_default_yolo_mode(ctx: AnyContext) -> str:
|
|
97
108
|
def _render_yolo_mode_input(ctx: AnyContext) -> list[str] | bool | None:
|
98
109
|
if ctx.input.yolo.strip() == "":
|
99
110
|
return None
|
100
|
-
elements = ctx.input.yolo.split(",")
|
101
|
-
if len(elements) ==
|
111
|
+
elements = [element.strip() for element in ctx.input.yolo.split(",")]
|
112
|
+
if len(elements) == 1:
|
102
113
|
try:
|
103
114
|
return to_boolean(elements[0])
|
104
115
|
except Exception:
|
@@ -106,7 +117,7 @@ def _render_yolo_mode_input(ctx: AnyContext) -> list[str] | bool | None:
|
|
106
117
|
return elements
|
107
118
|
|
108
119
|
|
109
|
-
def _get_inputs(require_message: bool = True) -> list[AnyInput]:
|
120
|
+
def _get_inputs(require_message: bool = True) -> list[AnyInput | None]:
|
110
121
|
return [
|
111
122
|
StrInput(
|
112
123
|
"model",
|
@@ -120,6 +120,10 @@ async def analyze_repo(
|
|
120
120
|
goal=goal,
|
121
121
|
token_limit=extraction_token_threshold,
|
122
122
|
)
|
123
|
+
if len(extracted_infos) == 0:
|
124
|
+
raise RuntimeError(
|
125
|
+
"No info can be extracted, adjust extensions or exclude_patterns."
|
126
|
+
)
|
123
127
|
if len(extracted_infos) == 1:
|
124
128
|
return extracted_infos[0]
|
125
129
|
summarized_infos = extracted_infos
|
@@ -146,11 +150,11 @@ def _get_file_metadatas(
|
|
146
150
|
if not any(file.endswith(f".{ext}") for ext in extensions):
|
147
151
|
continue
|
148
152
|
file_path = os.path.join(root, file)
|
149
|
-
if is_excluded(file_path, exclude_patterns):
|
150
|
-
continue
|
151
153
|
try:
|
154
|
+
rel_path = os.path.relpath(file_path, dir_path)
|
155
|
+
if is_excluded(rel_path, exclude_patterns):
|
156
|
+
continue
|
152
157
|
with open(file_path, "r", encoding="utf-8", errors="ignore") as f:
|
153
|
-
rel_path = os.path.relpath(file_path, dir_path)
|
154
158
|
metadata_list.append({"path": rel_path, "content": f.read()})
|
155
159
|
except Exception as e:
|
156
160
|
print(f"Error reading file {file_path}: {e}")
|
@@ -104,8 +104,10 @@ def list_files(
|
|
104
104
|
|
105
105
|
This is a fundamental tool for exploring the file system. Use it to
|
106
106
|
discover the structure of a directory, find specific files, or get a
|
107
|
-
|
108
107
|
general overview of the project layout before performing other operations.
|
108
|
+
**NOTE:**
|
109
|
+
User might provide inaccurate file path, so if you failed to read a file,
|
110
|
+
it is a good idea to list the files to get the accurate file path.
|
109
111
|
|
110
112
|
Args:
|
111
113
|
path (str, optional): The directory path to list. Defaults to the
|
@@ -228,9 +230,16 @@ def read_from_file(
|
|
228
230
|
end line.
|
229
231
|
|
230
232
|
This tool is essential for inspecting file contents. It can read both text
|
231
|
-
and PDF files. The
|
232
|
-
|
233
|
-
the
|
233
|
+
and PDF files. The `content` field in the returned dictionary is **always**
|
234
|
+
prefixed with line numbers (`line_number | `) for each line. These prefixes
|
235
|
+
are added by the tool for internal processing and to provide contextual
|
236
|
+
information to the AI agent (e.g., for accurately applying diffs or for
|
237
|
+
referencing specific lines). They are **not** part of the actual file content.
|
238
|
+
|
239
|
+
When presenting the file content to a user, the AI agent **MUST** omit these
|
240
|
+
line number prefixes by default for better readability. They should only
|
241
|
+
be included if explicitly requested by the user or if the request inherently
|
242
|
+
requires line number context (e.g., 'show me lines 10-20').
|
234
243
|
|
235
244
|
Use this tool to:
|
236
245
|
- Examine the source code of a file.
|
@@ -246,18 +255,28 @@ def read_from_file(
|
|
246
255
|
|
247
256
|
Returns:
|
248
257
|
dict[str, Any]: A dictionary containing the file path, the requested content
|
249
|
-
with line numbers, the start and end lines, and the total number
|
258
|
+
(always with line numbers), the start and end lines, and the total number
|
250
259
|
of lines in the file.
|
251
260
|
Example:
|
252
261
|
```
|
253
262
|
{
|
254
263
|
"path": "src/main.py",
|
255
|
-
"content": "1| import os\n2|
|
264
|
+
"content": "1| import os\n2|\n3| print(\"Hello, World!\")",
|
256
265
|
"start_line": 1,
|
257
266
|
"end_line": 3,
|
258
267
|
"total_lines": 3
|
259
268
|
}
|
260
269
|
```
|
270
|
+
If the file 'src/main.py' contains:
|
271
|
+
```
|
272
|
+
import os
|
273
|
+
|
274
|
+
print("Hello, World!")
|
275
|
+
```
|
276
|
+
The 'content' field in the returned dictionary will be:
|
277
|
+
`"1| import os\n2|\n3| print(\"Hello, World!\")"`
|
278
|
+
**IMPORTANT:** The "1|", "2|", "3|" prefixes are NOT part of the
|
279
|
+
original file. They are for internal agent use.
|
261
280
|
Raises:
|
262
281
|
FileNotFoundError: If the specified file does not exist.
|
263
282
|
"""
|
@@ -561,6 +580,17 @@ def read_many_files(paths: list[str]) -> dict[str, str]:
|
|
561
580
|
project relate to each other, or when you need to inspect a set of related
|
562
581
|
configuration or source code files.
|
563
582
|
|
583
|
+
The content for each file in the returned dictionary is **always** prefixed
|
584
|
+
with line numbers (`line_number | `) for each line. These prefixes are added
|
585
|
+
by the tool for internal processing and to provide contextual information to
|
586
|
+
the AI agent (e.g., for accurately applying diffs or for referencing specific
|
587
|
+
lines). They are **not** part of the actual file content.
|
588
|
+
|
589
|
+
When presenting the file content to a user, the AI agent **MUST** omit these
|
590
|
+
line number prefixes by default for better readability. They should only
|
591
|
+
be included if explicitly requested by the user or if the request inherently
|
592
|
+
requires line number context (e.g., 'show me lines 10-20').
|
593
|
+
|
564
594
|
Args:
|
565
595
|
paths (list[str]): A list of paths to the files you want to read. It is
|
566
596
|
crucial to provide accurate paths. Use the `list_files` tool first
|
@@ -568,9 +598,25 @@ def read_many_files(paths: list[str]) -> dict[str, str]:
|
|
568
598
|
|
569
599
|
Returns:
|
570
600
|
dict[str, str]: a dictionary where keys are the file paths and values
|
571
|
-
are their corresponding contents
|
601
|
+
are their corresponding contents (always with line numbers).
|
572
602
|
If a file cannot be read, its value will be an error message.
|
573
|
-
Example:
|
603
|
+
Example:
|
604
|
+
```
|
605
|
+
{
|
606
|
+
"src/api.py": "1| import os\n2|\n3| print("Hello, World!")",
|
607
|
+
"config.yaml": "1| key: value"
|
608
|
+
}
|
609
|
+
```
|
610
|
+
If the file 'src/api.py' contains:
|
611
|
+
```
|
612
|
+
import os
|
613
|
+
|
614
|
+
print("Hello, World!")
|
615
|
+
```
|
616
|
+
The content for 'src/api.py' in the returned dictionary will be:
|
617
|
+
`"1| import os\n2|\n3| print("Hello, World!")"`
|
618
|
+
**IMPORTANT:** The "1|", "2|", "3|" prefixes are NOT part of the
|
619
|
+
original file. They are for internal agent use.
|
574
620
|
"""
|
575
621
|
results = {}
|
576
622
|
for path in paths:
|
@@ -0,0 +1,72 @@
|
|
1
|
+
import os
|
2
|
+
|
3
|
+
from zrb.config.llm_context.config import llm_context_config
|
4
|
+
|
5
|
+
|
6
|
+
def read_long_term_note() -> str:
|
7
|
+
"""
|
8
|
+
Reads the global long-term note.
|
9
|
+
This note is shared across all projects and conversations.
|
10
|
+
|
11
|
+
Returns:
|
12
|
+
The content of the long-term note.
|
13
|
+
"""
|
14
|
+
contexts = llm_context_config.get_notes()
|
15
|
+
return contexts.get("/", "")
|
16
|
+
|
17
|
+
|
18
|
+
def write_long_term_note(content: str) -> str:
|
19
|
+
"""
|
20
|
+
Writes content to the global long-term note.
|
21
|
+
The content of this note is intended to be read by the AI Agent in the future.
|
22
|
+
It should contain global information/preference.
|
23
|
+
|
24
|
+
Args:
|
25
|
+
content: The content to write to the long-term note (overwriting the existing one).
|
26
|
+
|
27
|
+
Returns:
|
28
|
+
A confirmation message.
|
29
|
+
"""
|
30
|
+
llm_context_config.write_note(content, "/")
|
31
|
+
return "Long term note saved"
|
32
|
+
|
33
|
+
|
34
|
+
def read_contextual_note(path: str | None = None) -> str:
|
35
|
+
"""
|
36
|
+
Reads a contextual note for a specific path.
|
37
|
+
If no path is provided, it defaults to the current working directory.
|
38
|
+
|
39
|
+
Args:
|
40
|
+
path: The file or directory path to read the note for.
|
41
|
+
Defaults to the current working directory.
|
42
|
+
|
43
|
+
Returns:
|
44
|
+
The content of the contextual note.
|
45
|
+
"""
|
46
|
+
if path is None:
|
47
|
+
path = os.getcwd()
|
48
|
+
abs_path = os.path.abspath(path)
|
49
|
+
contexts = llm_context_config.get_notes(cwd=abs_path)
|
50
|
+
return contexts.get(abs_path, "")
|
51
|
+
|
52
|
+
|
53
|
+
def write_contextual_note(content: str, path: str | None = None) -> str:
|
54
|
+
"""
|
55
|
+
Writes a contextual note for a specific path.
|
56
|
+
The content of this note is intended to be read by the AI Agent in the future.
|
57
|
+
The content should contain contextual information.
|
58
|
+
|
59
|
+
If no path is provided, it defaults to the current working directory.
|
60
|
+
|
61
|
+
Args:
|
62
|
+
content: The new content of the note (overwriting the existing one).
|
63
|
+
path: The file or directory path to associate the note with.
|
64
|
+
Defaults to the current working directory.
|
65
|
+
|
66
|
+
Returns:
|
67
|
+
A confirmation message indicating where the note was saved.
|
68
|
+
"""
|
69
|
+
if path is None:
|
70
|
+
path = os.getcwd()
|
71
|
+
llm_context_config.write_note(content, path)
|
72
|
+
return f"Contextual note saved to {path}"
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import json
|
2
1
|
from collections.abc import Callable
|
3
2
|
from textwrap import dedent
|
4
3
|
from typing import TYPE_CHECKING, Any, Coroutine
|
@@ -9,7 +8,7 @@ from zrb.task.llm.config import get_model, get_model_settings
|
|
9
8
|
from zrb.task.llm.prompt import get_system_and_user_prompt
|
10
9
|
|
11
10
|
if TYPE_CHECKING:
|
12
|
-
from pydantic_ai import
|
11
|
+
from pydantic_ai import Tool
|
13
12
|
from pydantic_ai.models import Model
|
14
13
|
from pydantic_ai.settings import ModelSettings
|
15
14
|
from pydantic_ai.toolsets import AbstractToolset
|
@@ -1,7 +1,7 @@
|
|
1
1
|
You are an expert interactive AI agent. You MUST follow this workflow for this interactive session. Respond in GitHub-flavored Markdown.
|
2
2
|
|
3
3
|
# Core Principles
|
4
|
-
- **Be Tool-Centric:**
|
4
|
+
- **Be Tool-Centric:** Describe what you are about to do. When a decision is made, call the tool directly. Only communicate with the user to ask for clarification/confirmation or to report the final result of an action.
|
5
5
|
- **Efficiency:** Use your tools to get the job done with the minimum number of steps. Combine commands where possible.
|
6
6
|
- **One Tool at a Time** Only call one tool at a time, wait for the result first before calling the next tool.
|
7
7
|
- **Adhere to Conventions:** When modifying existing files or data, analyze the existing content to match its style and format.
|
@@ -31,4 +31,4 @@ You are an expert interactive AI agent. You MUST follow this workflow for this i
|
|
31
31
|
* **CRITICAL:** Do not ask the user for help or report the failure until you have exhausted all reasonable attempts to fix it yourself.
|
32
32
|
|
33
33
|
5. **Report Results:**
|
34
|
-
* Provide a concise summary of the action taken and explicitly state how you verified it.
|
34
|
+
* Provide a concise summary of the action taken and explicitly state how you verified it.
|
@@ -6,11 +6,6 @@ Follow these instructions carefully:
|
|
6
6
|
2. **Transcript:** Extract ONLY the last 4 (four) turns of the `Recent Conversation` to serve as the new transcript.
|
7
7
|
* **Do not change or shorten the content of these turns, with one exception:** If a tool call returns a very long output, do not include the full output. Instead, briefly summarize the result of the tool call.
|
8
8
|
* Ensure the timestamp format is `[YYYY-MM-DD HH:MM:SS UTC+Z] Role: Message/Tool name being called`.
|
9
|
-
3. **
|
10
|
-
* Update `long_term_note` with global facts about the user.
|
11
|
-
* Update `contextual_note` with facts specific to the current project/directory.
|
12
|
-
* **CRITICAL:** When updating `contextual_note`, you MUST determine the correct `context_path`. For example, if a fact was established when the working directory was `/app`, the `context_path` MUST be `/app`.
|
13
|
-
* **CRITICAL:** Note content must be **brief**, raw, unformatted text, not a log of events. Only update notes if information has changed.
|
14
|
-
4. **Update Memory:** Call the `final_result` tool with all the information you consolidated.
|
9
|
+
3. **Update Memory:** Call the `final_result` tool with all the information you consolidated.
|
15
10
|
|
16
11
|
After you have called the tool, your task is complete.
|
@@ -54,7 +54,7 @@ class LLMContextConfig:
|
|
54
54
|
f.write(new_file_content)
|
55
55
|
|
56
56
|
def get_notes(self, cwd: str | None = None) -> dict[str, str]:
|
57
|
-
"""Gathers all
|
57
|
+
"""Gathers all notes for a given path."""
|
58
58
|
if cwd is None:
|
59
59
|
cwd = os.getcwd()
|
60
60
|
config_file = self._get_home_config_file()
|
@@ -1,13 +1,9 @@
|
|
1
1
|
from abc import ABC, abstractmethod
|
2
|
-
from typing import Generic, TypeVar
|
3
2
|
|
4
3
|
from zrb.task.any_task import AnyTask
|
5
4
|
|
6
|
-
GroupType = TypeVar("GroupType", bound="AnyGroup")
|
7
|
-
TaskType = TypeVar("TaskType", bound=AnyTask)
|
8
5
|
|
9
|
-
|
10
|
-
class AnyGroup(ABC, Generic[GroupType, TaskType]):
|
6
|
+
class AnyGroup(ABC):
|
11
7
|
@property
|
12
8
|
@abstractmethod
|
13
9
|
def name(self) -> str:
|
@@ -39,11 +35,11 @@ class AnyGroup(ABC, Generic[GroupType, TaskType]):
|
|
39
35
|
pass
|
40
36
|
|
41
37
|
@abstractmethod
|
42
|
-
def add_group(self, group:
|
38
|
+
def add_group(self, group: "AnyGroup", alias: str | None) -> "AnyGroup":
|
43
39
|
pass
|
44
40
|
|
45
41
|
@abstractmethod
|
46
|
-
def add_task(self, task:
|
42
|
+
def add_task(self, task: "AnyTask", alias: str | None = None) -> "AnyTask":
|
47
43
|
pass
|
48
44
|
|
49
45
|
@abstractmethod
|
@@ -1,10 +1,8 @@
|
|
1
|
-
from
|
2
|
-
|
3
|
-
from zrb.group.any_group import AnyGroup, GroupType, TaskType
|
1
|
+
from zrb.group.any_group import AnyGroup
|
4
2
|
from zrb.task.any_task import AnyTask
|
5
3
|
|
6
4
|
|
7
|
-
class Group(AnyGroup
|
5
|
+
class Group(AnyGroup):
|
8
6
|
def __init__(
|
9
7
|
self, name: str, description: str | None = None, banner: str | None = None
|
10
8
|
):
|
@@ -35,21 +33,21 @@ class Group(AnyGroup, Generic[GroupType, TaskType]):
|
|
35
33
|
def subgroups(self) -> dict[str, AnyGroup]:
|
36
34
|
names = list(self._groups.keys())
|
37
35
|
names.sort()
|
38
|
-
return {name: self._groups
|
36
|
+
return {name: self._groups[name] for name in names}
|
39
37
|
|
40
38
|
@property
|
41
39
|
def subtasks(self) -> dict[str, AnyTask]:
|
42
40
|
alias = list(self._tasks.keys())
|
43
41
|
alias.sort()
|
44
|
-
return {name: self._tasks
|
42
|
+
return {name: self._tasks[name] for name in alias}
|
45
43
|
|
46
|
-
def add_group(self, group:
|
47
|
-
real_group
|
44
|
+
def add_group(self, group: AnyGroup, alias: str | None = None) -> AnyGroup:
|
45
|
+
real_group = Group(group) if isinstance(group, str) else group
|
48
46
|
alias = alias if alias is not None else real_group.name
|
49
47
|
self._groups[alias] = real_group
|
50
48
|
return real_group
|
51
49
|
|
52
|
-
def add_task(self, task:
|
50
|
+
def add_task(self, task: AnyTask, alias: str | None = None) -> AnyTask:
|
53
51
|
alias = alias if alias is not None else task.name
|
54
52
|
self._tasks[alias] = task
|
55
53
|
return task
|
@@ -0,0 +1,64 @@
|
|
1
|
+
When your primary task is to write, refactor, or fix code, you MUST follow this comprehensive software development workflow. This process is designed to ensure your contributions are safe, high-quality, and align with existing project conventions.
|
2
|
+
|
3
|
+
# 1. Core Mandates & Prohibitions
|
4
|
+
|
5
|
+
These are non-negotiable rules.
|
6
|
+
|
7
|
+
- **Conventions First:** Rigorously adhere to existing project conventions. Your primary goal is to make it look like the existing codebase's author wrote the code.
|
8
|
+
- **Mimic Style & Structure:** Match the formatting, naming, structure, framework choices, typing, and architectural patterns of the code you're editing.
|
9
|
+
- **NEVER Assume Dependencies:** You MUST NOT use a library, framework, or package unless you have first verified it is an existing project dependency (e.g., by checking `package.json`, `requirements.txt`, `pyproject.toml`, etc.).
|
10
|
+
- **NEVER Commit Without Verification:** You MUST NOT use version control tools like `git commit` until you have staged the changes and successfully run the project's own verification steps (tests, linter, build).
|
11
|
+
|
12
|
+
# 2. The Software Development Workflow
|
13
|
+
|
14
|
+
Follow this sequence for all coding tasks.
|
15
|
+
|
16
|
+
### Step 1: Understand & Strategize
|
17
|
+
|
18
|
+
Before writing a single line of code, you MUST gather context.
|
19
|
+
|
20
|
+
- **Analyze the Request:** Break down the user's request into concrete requirements.
|
21
|
+
- **Explore the Codebase:** Use file search and read tools extensively to build a mental model.
|
22
|
+
- **Identify Relevant Files:** Locate the primary files that need modification.
|
23
|
+
- **Discover Conventions:** Look for configuration files (`.eslintrc`, `.prettierrc`, `ruff.toml`, etc.). Analyze surrounding source files to determine naming conventions, typing style, error handling patterns, and architecture.
|
24
|
+
- **Understand the Safety Net:** Find existing tests. Understanding how the project tests its code is critical for your implementation and verification steps.
|
25
|
+
- **Check Dependencies:** Verify that any libraries you plan to use are already part of the project.
|
26
|
+
|
27
|
+
### Step 2: Plan
|
28
|
+
|
29
|
+
Based on your understanding, create and communicate a clear plan.
|
30
|
+
|
31
|
+
- **Formulate a Plan:** Build a coherent, step-by-step plan to implement the required changes.
|
32
|
+
- **Share the Plan:** Present a concise summary of your plan to the user before you begin writing code. This ensures alignment and allows for course correction.
|
33
|
+
|
34
|
+
### Step 3: Implement Idiomatically
|
35
|
+
|
36
|
+
Execute your plan, adhering strictly to the patterns discovered in the "Understand" phase.
|
37
|
+
|
38
|
+
- **Write/Modify Code:** Make the necessary changes.
|
39
|
+
- **CRITICAL: Design for Testability:** Produce code that is easy to test automatically. This is a core principle of good software engineering.
|
40
|
+
- **Prefer `return` over `print`:** Core logic functions MUST `return` values. I/O operations like `print()` should be separated into different, testable functions.
|
41
|
+
- **Embrace Modularity:** Decompose complex tasks into smaller, single-responsibility functions or classes that can be tested independently.
|
42
|
+
- **Use Function Arguments:** Avoid relying on global state. Pass necessary data into functions as arguments to make them pure and predictable.
|
43
|
+
|
44
|
+
### Step 4: Verify with Tests
|
45
|
+
|
46
|
+
This is the first of two critical verification phases. You are responsible for ensuring your changes work as expected.
|
47
|
+
|
48
|
+
- **Run Existing Tests:** Execute the project's full test suite (e.g., `npm run test`, `pytest`).
|
49
|
+
- **Add New Tests:** For new features or bug fixes, add corresponding unit or integration tests to prove your code works and prevent future regressions.
|
50
|
+
- **Debug and Fix:** If any tests fail, you MUST enter a debugging loop. Analyze the errors, fix the code, and re-run the tests until they all pass.
|
51
|
+
|
52
|
+
### Step 5: Verify with Standards
|
53
|
+
|
54
|
+
This second verification phase ensures your code meets the project's quality standards.
|
55
|
+
|
56
|
+
- **Run Linters & Formatters:** Use the project's linting and formatting commands (e.g., `npm run lint`, `ruff check .`).
|
57
|
+
- **Run Build Processes:** If applicable, run the build command (e.g., `npm run build`, `tsc`) to check for compilation or type-checking errors.
|
58
|
+
- **Debug and Fix:** Just as with testing, if any of these checks fail, you MUST debug and fix the issues until all standards are met.
|
59
|
+
|
60
|
+
### Step 6: Finalize
|
61
|
+
|
62
|
+
Only after all verification steps have passed is the task complete.
|
63
|
+
|
64
|
+
- **Await Instruction:** Do not remove any created files (like tests). Await the user's next instruction. If they are satisfied, you can suggest committing the changes.
|
@@ -124,23 +124,6 @@ async def summarize_history(
|
|
124
124
|
json.dumps(truncate_str(conversation_history.history, 1000)),
|
125
125
|
as_code=True,
|
126
126
|
),
|
127
|
-
make_prompt_section(
|
128
|
-
"Notes",
|
129
|
-
"\n".join(
|
130
|
-
[
|
131
|
-
make_prompt_section(
|
132
|
-
"Long Term",
|
133
|
-
conversation_history.long_term_note,
|
134
|
-
as_code=True,
|
135
|
-
),
|
136
|
-
make_prompt_section(
|
137
|
-
"Contextual",
|
138
|
-
conversation_history.contextual_note,
|
139
|
-
as_code=True,
|
140
|
-
),
|
141
|
-
]
|
142
|
-
),
|
143
|
-
),
|
144
127
|
]
|
145
128
|
)
|
146
129
|
summarize = create_history_summarization_tool(conversation_history)
|