zrb 1.9.12__tar.gz → 1.9.14__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.9.12 → zrb-1.9.14}/PKG-INFO +1 -1
- {zrb-1.9.12 → zrb-1.9.14}/pyproject.toml +1 -1
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/chat_session.py +71 -46
- zrb-1.9.14/src/zrb/config/llm_config.py +373 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm/error.py +24 -8
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/rsync_task.py +1 -1
- zrb-1.9.14/src/zrb/util/git_diff_model.py +10 -0
- zrb-1.9.14/src/zrb/util/git_subtree_model.py +32 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/string/conversion.py +1 -1
- zrb-1.9.14/src/zrb/util/todo_model.py +46 -0
- zrb-1.9.12/src/zrb/config/llm_config.py +0 -441
- zrb-1.9.12/src/zrb/util/git_diff_model.py +0 -7
- zrb-1.9.12/src/zrb/util/git_subtree_model.py +0 -11
- zrb-1.9.12/src/zrb/util/todo_model.py +0 -40
- {zrb-1.9.12 → zrb-1.9.14}/README.md +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/__main__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/attr/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/attr/type.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/base64.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/git.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/git_subtree.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/group.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/http.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/jwt.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/history.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/llm_ask.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/previous-session.js +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/tool/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/tool/api.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/tool/cli.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/tool/code.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/tool/file.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/tool/rag.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/tool/sub_agent.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/llm/tool/web.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/md5.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/app_template/schema/my_entity.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/3093c7336477_add_auth_tables.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_db_repository.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository_factory.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_db_repository.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository_factory.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_db_repository.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository_factory.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-192x192.png +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/android-chrome-512x512.png +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/pico-css/pico.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/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.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/create/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/create/project-template/README.md +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/project/create/project_task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/python.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/random.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/setup/common_input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/setup/ubuntu.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/shell/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/todo.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/builtin/uuid.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/callback/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/callback/any_callback.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/callback/callback.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/cmd/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/cmd/cmd_result.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/cmd/cmd_val.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/config/config.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/config/llm_rate_limitter.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/config/web_auth_config.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/content_transformer/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/content_transformer/any_content_transformer.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/content_transformer/content_transformer.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/context/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/context/any_context.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/context/any_shared_context.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/context/context.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/context/shared_context.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/dot_dict/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/dot_dict/dot_dict.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/env/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/env/any_env.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/env/env.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/env/env_file.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/env/env_map.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/group/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/group/any_group.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/group/group.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/input/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/input/any_input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/input/base_input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/input/bool_input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/input/float_input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/input/int_input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/input/option_input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/input/password_input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/input/str_input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/input/text_input.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/cli.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/common_util.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_app.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/docs_route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/error_page/view.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/home_page/view.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/login_api_route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/login_page/view.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/logout_api_route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/logout_page/view.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/global_template.html +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/common.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/common.js +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.amber.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.blue.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.cyan.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.fuchsia.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.green.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.grey.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.indigo.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.jade.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.lime.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.orange.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.pink.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.pumpkin.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.purple.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.red.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.sand.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.slate.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.violet.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.yellow.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.zinc.min.css +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/static/static_route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_schema/session.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_schema/token.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_schema/user.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_util/cookie.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_util/html.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_util/token.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/runner/web_util/user.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/session/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/session/any_session.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/session/session.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/session_state_log/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/session_state_log/session_state_log.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/session_state_logger/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/any_task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/base/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/base/context.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/base/execution.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/base/lifecycle.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/base/monitoring.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/base/operators.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/base_task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/base_trigger.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/cmd_task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/http_check.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm/agent.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm/config.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm/context.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm/context_enrichment.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm/history.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm/history_summarization.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm/print_node.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm/prompt.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm/tool_wrapper.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm/typing.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/llm_task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/make_task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/scaffolder.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/scheduler.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/task.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task/tcp_check.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task_status/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/task_status/task_status.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/attr.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/cli/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/cli/style.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/cli/subcommand.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/cmd/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/cmd/command.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/cmd/remote.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/codemod/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/codemod/modification_mode.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/codemod/modify_class.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/codemod/modify_class_parent.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/codemod/modify_class_property.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/codemod/modify_dict.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/codemod/modify_function.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/codemod/modify_function_call.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/codemod/modify_method.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/codemod/modify_module.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/cron.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/file.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/git.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/git_subtree.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/group.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/init_path.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/load.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/run.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/string/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/string/format.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/string/name.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/util/todo.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/xcom/__init__.py +0 -0
- {zrb-1.9.12 → zrb-1.9.14}/src/zrb/xcom/xcom.py +0 -0
@@ -6,6 +6,7 @@ conversation flow via XCom.
|
|
6
6
|
"""
|
7
7
|
|
8
8
|
import asyncio
|
9
|
+
import sys
|
9
10
|
|
10
11
|
from zrb.config.llm_config import llm_config
|
11
12
|
from zrb.context.any_context import AnyContext
|
@@ -15,45 +16,26 @@ from zrb.util.cli.style import stylize_bold_yellow, stylize_faint
|
|
15
16
|
async def read_user_prompt(ctx: AnyContext) -> str:
|
16
17
|
"""
|
17
18
|
Reads user input from the CLI for an interactive chat session.
|
18
|
-
|
19
|
-
Handles special commands like /bye, /multi, /end, and /help.
|
20
|
-
Triggers the LLM task and waits for the result.
|
21
|
-
|
22
|
-
Args:
|
23
|
-
ctx: The context object for the task.
|
24
|
-
|
25
|
-
Returns:
|
26
|
-
The final result from the LLM session.
|
19
|
+
Orchestrates the session by calling helper functions.
|
27
20
|
"""
|
28
|
-
from prompt_toolkit import PromptSession
|
29
|
-
|
30
21
|
_show_info(ctx)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
ctx.print("", plain=True)
|
35
|
-
result = await _trigger_ask_and_wait_for_result(
|
36
|
-
ctx,
|
37
|
-
user_prompt=ctx.input.message,
|
38
|
-
previous_session_name=ctx.input.previous_session,
|
39
|
-
start_new=ctx.input.start_new,
|
40
|
-
)
|
41
|
-
if result is not None:
|
42
|
-
final_result = result
|
43
|
-
if ctx.env.get("_ZRB_WEB_ENV", "0") != "0":
|
44
|
-
# On web environment this won't be interactive
|
22
|
+
is_web = ctx.env.get("_ZRB_WEB_ENV", "0") == "1"
|
23
|
+
final_result = await _handle_initial_message(ctx)
|
24
|
+
if is_web:
|
45
25
|
return final_result
|
26
|
+
is_interactive = sys.stdin.isatty()
|
27
|
+
reader = await _setup_input_reader(is_interactive)
|
46
28
|
multiline_mode = False
|
47
29
|
user_inputs = []
|
48
|
-
user_input_session = PromptSession()
|
49
30
|
while True:
|
50
31
|
await asyncio.sleep(0.01)
|
32
|
+
# Get user input based on mode
|
51
33
|
if not multiline_mode:
|
52
34
|
ctx.print("💬 >>", plain=True)
|
53
|
-
user_input = await
|
35
|
+
user_input = await _read_next_line(is_interactive, reader, ctx)
|
54
36
|
if not multiline_mode:
|
55
37
|
ctx.print("", plain=True)
|
56
|
-
# Handle
|
38
|
+
# Handle user input
|
57
39
|
if user_input.strip().lower() in ("/bye", "/quit", "/q", "/exit"):
|
58
40
|
user_prompt = "\n".join(user_inputs)
|
59
41
|
user_inputs = []
|
@@ -86,6 +68,67 @@ async def read_user_prompt(ctx: AnyContext) -> str:
|
|
86
68
|
return final_result
|
87
69
|
|
88
70
|
|
71
|
+
def _show_info(ctx: AnyContext):
|
72
|
+
"""
|
73
|
+
Displays the available chat session commands to the user.
|
74
|
+
Args:
|
75
|
+
ctx: The context object for the task.
|
76
|
+
"""
|
77
|
+
ctx.print(
|
78
|
+
(
|
79
|
+
f" {stylize_bold_yellow('/bye')} {stylize_faint('Quit from chat session')}\n"
|
80
|
+
f" {stylize_bold_yellow('/multi')} {stylize_faint('Start multiline input')}\n"
|
81
|
+
f" {stylize_bold_yellow('/end')} {stylize_faint('End multiline input')}\n"
|
82
|
+
f" {stylize_bold_yellow('/help')} {stylize_faint('Show this message')}\n"
|
83
|
+
),
|
84
|
+
plain=True,
|
85
|
+
)
|
86
|
+
|
87
|
+
|
88
|
+
async def _handle_initial_message(ctx: AnyContext) -> str:
|
89
|
+
"""Processes the initial message from the command line."""
|
90
|
+
if not ctx.input.message or ctx.input.message.strip() == "":
|
91
|
+
return ""
|
92
|
+
ctx.print("💬 >>", plain=True)
|
93
|
+
ctx.print(ctx.input.message, plain=True)
|
94
|
+
ctx.print("", plain=True)
|
95
|
+
result = await _trigger_ask_and_wait_for_result(
|
96
|
+
ctx,
|
97
|
+
user_prompt=ctx.input.message,
|
98
|
+
previous_session_name=ctx.input.previous_session,
|
99
|
+
start_new=ctx.input.start_new,
|
100
|
+
)
|
101
|
+
return result if result is not None else ""
|
102
|
+
|
103
|
+
|
104
|
+
async def _setup_input_reader(is_interactive: bool):
|
105
|
+
"""Sets up and returns the appropriate asynchronous input reader."""
|
106
|
+
if is_interactive:
|
107
|
+
from prompt_toolkit import PromptSession
|
108
|
+
|
109
|
+
return PromptSession()
|
110
|
+
|
111
|
+
loop = asyncio.get_event_loop()
|
112
|
+
reader = asyncio.StreamReader(loop=loop)
|
113
|
+
protocol = asyncio.StreamReaderProtocol(reader)
|
114
|
+
await loop.connect_read_pipe(lambda: protocol, sys.stdin)
|
115
|
+
return reader
|
116
|
+
|
117
|
+
|
118
|
+
async def _read_next_line(is_interactive: bool, reader, ctx: AnyContext) -> str:
|
119
|
+
"""Reads one line of input using the provided reader."""
|
120
|
+
if is_interactive:
|
121
|
+
return await reader.prompt_async()
|
122
|
+
|
123
|
+
line_bytes = await reader.readline()
|
124
|
+
if not line_bytes:
|
125
|
+
return "/bye" # Signal to exit
|
126
|
+
|
127
|
+
user_input = line_bytes.decode().strip()
|
128
|
+
ctx.print(user_input, plain=True)
|
129
|
+
return user_input
|
130
|
+
|
131
|
+
|
89
132
|
async def _trigger_ask_and_wait_for_result(
|
90
133
|
ctx: AnyContext,
|
91
134
|
user_prompt: str,
|
@@ -211,21 +254,3 @@ async def _wait_ask_session_name(ctx: AnyContext) -> str:
|
|
211
254
|
while "ask_session_name" not in ctx.xcom or len(ctx.xcom.ask_session_name) == 0:
|
212
255
|
await asyncio.sleep(0.1)
|
213
256
|
return ctx.xcom.ask_session_name.pop()
|
214
|
-
|
215
|
-
|
216
|
-
def _show_info(ctx: AnyContext):
|
217
|
-
"""
|
218
|
-
Displays the available chat session commands to the user.
|
219
|
-
|
220
|
-
Args:
|
221
|
-
ctx: The context object for the task.
|
222
|
-
"""
|
223
|
-
ctx.print(
|
224
|
-
(
|
225
|
-
f" {stylize_bold_yellow('/bye')} {stylize_faint('Quit from chat session')}\n"
|
226
|
-
f" {stylize_bold_yellow('/multi')} {stylize_faint('Start multiline input')}\n"
|
227
|
-
f" {stylize_bold_yellow('/end')} {stylize_faint('End multiline input')}\n"
|
228
|
-
f" {stylize_bold_yellow('/help')} {stylize_faint('Show this message')}\n"
|
229
|
-
),
|
230
|
-
plain=True,
|
231
|
-
)
|
@@ -0,0 +1,373 @@
|
|
1
|
+
from typing import TYPE_CHECKING
|
2
|
+
|
3
|
+
from zrb.config.config import CFG
|
4
|
+
|
5
|
+
if TYPE_CHECKING:
|
6
|
+
from pydantic_ai.models import Model
|
7
|
+
from pydantic_ai.providers import Provider
|
8
|
+
from pydantic_ai.settings import ModelSettings
|
9
|
+
|
10
|
+
|
11
|
+
_DEFAULT_PERSONA = "You are a helpful and efficient AI agent."
|
12
|
+
|
13
|
+
_DEFAULT_INTERACTIVE_SYSTEM_PROMPT = (
|
14
|
+
"You are an expert AI agent in a CLI. You MUST follow this workflow for "
|
15
|
+
"this interactive session. Respond in GitHub-flavored Markdown.\n\n"
|
16
|
+
"1. **Analyze and Clarify:** Understand the user's goal. If the request "
|
17
|
+
"is ambiguous, ask clarifying questions. Use your tools to gather "
|
18
|
+
"necessary information before proceeding.\n\n"
|
19
|
+
"2. **Assess and Decide:**\n"
|
20
|
+
" * For **read-only** actions, proceed directly.\n"
|
21
|
+
" * For **destructive** actions (modifying or deleting data), you "
|
22
|
+
"MUST evaluate the risk. Consider the command's nature, the target's "
|
23
|
+
"importance (e.g., temp file vs. project file vs. system file), and the "
|
24
|
+
"user's specificity. Based on your assessment, decide the appropriate "
|
25
|
+
"course of action:\n"
|
26
|
+
" * **Low Risk:** Proceed directly.\n"
|
27
|
+
" * **Moderate Risk:** Proceed, but issue a warning.\n"
|
28
|
+
" * **High Risk or Vague Request:** Formulate a plan and ask "
|
29
|
+
"for approval.\n"
|
30
|
+
" * **Extreme Risk (e.g., operating on critical system "
|
31
|
+
"files):** Refuse and explain the danger.\n\n"
|
32
|
+
"3. **Execute and Verify (The E+V Loop):**\n"
|
33
|
+
" * Execute the action.\n"
|
34
|
+
" * **CRITICAL:** Immediately after execution, you MUST use a tool "
|
35
|
+
"to verify the outcome (e.g., after `write_file`, use `read_file`; "
|
36
|
+
"after `rm`, use `ls` to confirm absence).\n\n"
|
37
|
+
"4. **Report Results:**\n"
|
38
|
+
" * Provide a concise summary of the action taken.\n"
|
39
|
+
" * **You MUST explicitly state how you verified the action** (e.g., "
|
40
|
+
"'I have deleted the file and verified its removal by listing the "
|
41
|
+
"directory.').\n"
|
42
|
+
" * If an error occurs, report the error and the failed verification "
|
43
|
+
"step."
|
44
|
+
).strip()
|
45
|
+
|
46
|
+
_DEFAULT_SYSTEM_PROMPT = (
|
47
|
+
"You are an expert AI agent executing a one-shot CLI command. You MUST "
|
48
|
+
"follow this workflow. Your final output MUST be in GitHub-flavored "
|
49
|
+
"Markdown.\n\n"
|
50
|
+
"1. **Plan:** Internally devise a step-by-step plan. This plan MUST "
|
51
|
+
"include verification steps for each action.\n\n"
|
52
|
+
"2. **Execute and Verify (The E+V Loop):**\n"
|
53
|
+
" * Execute each step of your plan.\n"
|
54
|
+
" * **CRITICAL:** After each step, you MUST use a tool to verify "
|
55
|
+
"the outcome (e.g., check exit codes, read back file contents, check "
|
56
|
+
"system state).\n\n"
|
57
|
+
"3. **Report Final Outcome:**\n"
|
58
|
+
" * Provide a concise summary of the result.\n"
|
59
|
+
" * **You MUST explicitly state how you verified the final state** "
|
60
|
+
"(e.g., 'The script was executed, and I verified its success by checking "
|
61
|
+
"for the presence of the output file `results.txt`.').\n"
|
62
|
+
" * If an error occurred, report the error and the failed "
|
63
|
+
"verification step."
|
64
|
+
).strip()
|
65
|
+
|
66
|
+
_DEFAULT_SPECIAL_INSTRUCTION_PROMPT = (
|
67
|
+
"## Guiding Principles\n"
|
68
|
+
"- **Safety First:** Never run commands that are destructive or could "
|
69
|
+
"compromise the system without explicit user confirmation. When in "
|
70
|
+
"doubt, ask.\n"
|
71
|
+
"- **Adhere to Conventions:** When working within a project, analyze "
|
72
|
+
"existing code, files, and configuration to match its style and "
|
73
|
+
"conventions.\n"
|
74
|
+
"- **Efficiency:** Use your tools to get the job done with the minimum "
|
75
|
+
"number of steps. Combine commands where possible.\n\n"
|
76
|
+
"## Common Task Workflows\n\n"
|
77
|
+
"**File System Operations:**\n"
|
78
|
+
"1. **Analyze:** Before modifying, read the file or list the "
|
79
|
+
"directory.\n"
|
80
|
+
"2. **Execute:** Perform the write, delete, or move operation.\n"
|
81
|
+
"3. **Verify:** Check that the file/directory now exists (or doesn't) in "
|
82
|
+
"its expected state.\n\n"
|
83
|
+
"**Code & Software Development:**\n"
|
84
|
+
"1. **Understand:** Use tools to analyze the codebase, dependencies, "
|
85
|
+
"and existing patterns.\n"
|
86
|
+
"2. **Plan:** For non-trivial changes, formulate a plan.\n"
|
87
|
+
"3. **Implement:** Make the changes, strictly adhering to project "
|
88
|
+
"conventions.\n"
|
89
|
+
"4. **Verify:** Run all relevant tests, linters, and build commands to "
|
90
|
+
"ensure your changes are correct and meet quality standards.\n\n"
|
91
|
+
"**Research & Analysis:**\n"
|
92
|
+
"1. **Clarify:** Understand the core question and the desired output "
|
93
|
+
"format.\n"
|
94
|
+
"2. **Search:** Use web search tools to gather information from multiple "
|
95
|
+
"reputable sources.\n"
|
96
|
+
"3. **Synthesize & Cite:** Present the information clearly. For factual "
|
97
|
+
"claims, cite the source URL."
|
98
|
+
).strip()
|
99
|
+
|
100
|
+
|
101
|
+
_DEFAULT_SUMMARIZATION_PROMPT = (
|
102
|
+
"You are a Conversation Historian. Your task is to create a dense, "
|
103
|
+
"structured snapshot of the conversation for the main assistant.\n\n"
|
104
|
+
"You will receive a `Previous Summary` and the `Recent Conversation "
|
105
|
+
"History`. Your goal is to produce an updated, rolling summary. Your "
|
106
|
+
"output MUST be a single block of text with two sections:\n\n"
|
107
|
+
"1. `## Narrative Summary`\n"
|
108
|
+
" - **Identify Key Information:** From the `Recent Conversation "
|
109
|
+
"History`, extract critical facts, user decisions, and final outcomes "
|
110
|
+
"of tasks.\n"
|
111
|
+
" - **Integrate and Condense:** Integrate these key facts into the "
|
112
|
+
"`Previous Summary`. Discard conversational filler and intermediate "
|
113
|
+
"steps of completed tasks (e.g., 'User asked to see file X, I showed "
|
114
|
+
"them' can be discarded if the file was just a step towards a larger "
|
115
|
+
"goal). The summary should reflect the current state of the project or "
|
116
|
+
"conversation, not a log of every single turn.\n\n"
|
117
|
+
"2. `## Transcript`\n"
|
118
|
+
" - The Transcript is the assistant's working memory. It MUST "
|
119
|
+
"contain the last few turns of the conversation in full detail.\n"
|
120
|
+
" - **CRITICAL REQUIREMENT:** The assistant's last response MUST be "
|
121
|
+
"COPIED VERBATIM into the Transcript. Do not alter it."
|
122
|
+
).strip()
|
123
|
+
|
124
|
+
|
125
|
+
_DEFAULT_CONTEXT_ENRICHMENT_PROMPT = (
|
126
|
+
"You are a Memory Curator. Your sole purpose is to produce a concise, "
|
127
|
+
"up-to-date Markdown block of long-term context.\n\n"
|
128
|
+
"You will be given the `Previous Long-Term Context` and the `Recent "
|
129
|
+
"Conversation History`. Your job is to return a NEW, UPDATED version of "
|
130
|
+
"the `Long-Term Context` by applying these rules:\n\n"
|
131
|
+
"**Curation Heuristics:**\n"
|
132
|
+
"- **Extract Stable Facts:** Identify durable information such as user "
|
133
|
+
"preferences (e.g., 'I prefer tabs over spaces'), project-level "
|
134
|
+
"decisions, or architectural choices.\n"
|
135
|
+
"- **Integrate, Don't Just Append:** Update existing facts if new "
|
136
|
+
"information overrides them. Merge related facts to keep the context "
|
137
|
+
"dense.\n"
|
138
|
+
"- **Discard Ephemeral Details:** Omit temporary states, resolved "
|
139
|
+
"errors, and one-off requests that do not reflect a permanent preference "
|
140
|
+
"or project state.\n"
|
141
|
+
"- **Mark Dynamic Info:** For temporary information that must be "
|
142
|
+
"retained (e.g., CWD, contents of a file being actively edited), you "
|
143
|
+
"MUST add a note: `(short-term, must be re-verified)`."
|
144
|
+
).strip()
|
145
|
+
|
146
|
+
|
147
|
+
class LLMConfig:
|
148
|
+
|
149
|
+
def __init__(
|
150
|
+
self,
|
151
|
+
default_model_name: str | None = None,
|
152
|
+
default_base_url: str | None = None,
|
153
|
+
default_api_key: str | None = None,
|
154
|
+
default_persona: str | None = None,
|
155
|
+
default_system_prompt: str | None = None,
|
156
|
+
default_interactive_system_prompt: str | None = None,
|
157
|
+
default_special_instruction_prompt: str | None = None,
|
158
|
+
default_summarization_prompt: str | None = None,
|
159
|
+
default_context_enrichment_prompt: str | None = None,
|
160
|
+
default_summarize_history: bool | None = None,
|
161
|
+
default_history_summarization_token_threshold: int | None = None,
|
162
|
+
default_enrich_context: bool | None = None,
|
163
|
+
default_context_enrichment_token_threshold: int | None = None,
|
164
|
+
default_model: "Model | None" = None,
|
165
|
+
default_model_settings: "ModelSettings | None" = None,
|
166
|
+
default_model_provider: "Provider | None" = None,
|
167
|
+
):
|
168
|
+
self._default_model_name = default_model_name
|
169
|
+
self._default_model_base_url = default_base_url
|
170
|
+
self._default_model_api_key = default_api_key
|
171
|
+
self._default_persona = default_persona
|
172
|
+
self._default_system_prompt = default_system_prompt
|
173
|
+
self._default_interactive_system_prompt = default_interactive_system_prompt
|
174
|
+
self._default_special_instruction_prompt = default_special_instruction_prompt
|
175
|
+
self._default_summarization_prompt = default_summarization_prompt
|
176
|
+
self._default_context_enrichment_prompt = default_context_enrichment_prompt
|
177
|
+
self._default_summarize_history = default_summarize_history
|
178
|
+
self._default_history_summarization_token_threshold = (
|
179
|
+
default_history_summarization_token_threshold
|
180
|
+
)
|
181
|
+
self._default_enrich_context = default_enrich_context
|
182
|
+
self._default_context_enrichment_token_threshold = (
|
183
|
+
default_context_enrichment_token_threshold
|
184
|
+
)
|
185
|
+
self._default_model_settings = default_model_settings
|
186
|
+
self._default_model_provider = default_model_provider
|
187
|
+
self._default_model = default_model
|
188
|
+
|
189
|
+
@property
|
190
|
+
def default_model_name(self) -> str | None:
|
191
|
+
if self._default_model_name is not None:
|
192
|
+
return self._default_model_name
|
193
|
+
if CFG.LLM_MODEL is not None:
|
194
|
+
return CFG.LLM_MODEL
|
195
|
+
return None
|
196
|
+
|
197
|
+
@property
|
198
|
+
def default_model_base_url(self) -> str | None:
|
199
|
+
if self._default_model_base_url is not None:
|
200
|
+
return self._default_model_base_url
|
201
|
+
if CFG.LLM_BASE_URL is not None:
|
202
|
+
return CFG.LLM_BASE_URL
|
203
|
+
return None
|
204
|
+
|
205
|
+
@property
|
206
|
+
def default_model_api_key(self) -> str | None:
|
207
|
+
if self._default_model_api_key is not None:
|
208
|
+
return self._default_model_api_key
|
209
|
+
if CFG.LLM_API_KEY is not None:
|
210
|
+
return CFG.LLM_API_KEY
|
211
|
+
|
212
|
+
@property
|
213
|
+
def default_model_settings(self) -> "ModelSettings | None":
|
214
|
+
if self._default_model_settings is not None:
|
215
|
+
return self._default_model_settings
|
216
|
+
return None
|
217
|
+
|
218
|
+
@property
|
219
|
+
def default_model_provider(self) -> "Provider | str":
|
220
|
+
if self._default_model_provider is not None:
|
221
|
+
return self._default_model_provider
|
222
|
+
if self.default_model_base_url is None and self.default_model_api_key is None:
|
223
|
+
return "openai"
|
224
|
+
from pydantic_ai.providers.openai import OpenAIProvider
|
225
|
+
|
226
|
+
return OpenAIProvider(
|
227
|
+
base_url=self.default_model_base_url, api_key=self.default_model_api_key
|
228
|
+
)
|
229
|
+
|
230
|
+
@property
|
231
|
+
def default_system_prompt(self) -> str:
|
232
|
+
if self._default_system_prompt is not None:
|
233
|
+
return self._default_system_prompt
|
234
|
+
if CFG.LLM_SYSTEM_PROMPT is not None:
|
235
|
+
return CFG.LLM_SYSTEM_PROMPT
|
236
|
+
return _DEFAULT_SYSTEM_PROMPT
|
237
|
+
|
238
|
+
@property
|
239
|
+
def default_interactive_system_prompt(self) -> str:
|
240
|
+
if self._default_interactive_system_prompt is not None:
|
241
|
+
return self._default_interactive_system_prompt
|
242
|
+
if CFG.LLM_INTERACTIVE_SYSTEM_PROMPT is not None:
|
243
|
+
return CFG.LLM_INTERACTIVE_SYSTEM_PROMPT
|
244
|
+
return _DEFAULT_INTERACTIVE_SYSTEM_PROMPT
|
245
|
+
|
246
|
+
@property
|
247
|
+
def default_persona(self) -> str:
|
248
|
+
if self._default_persona is not None:
|
249
|
+
return self._default_persona
|
250
|
+
if CFG.LLM_PERSONA is not None:
|
251
|
+
return CFG.LLM_PERSONA
|
252
|
+
return _DEFAULT_PERSONA
|
253
|
+
|
254
|
+
@property
|
255
|
+
def default_special_instruction_prompt(self) -> str:
|
256
|
+
if self._default_special_instruction_prompt is not None:
|
257
|
+
return self._default_special_instruction_prompt
|
258
|
+
if CFG.LLM_SPECIAL_INSTRUCTION_PROMPT is not None:
|
259
|
+
return CFG.LLM_SPECIAL_INSTRUCTION_PROMPT
|
260
|
+
return _DEFAULT_SPECIAL_INSTRUCTION_PROMPT
|
261
|
+
|
262
|
+
@property
|
263
|
+
def default_summarization_prompt(self) -> str:
|
264
|
+
if self._default_summarization_prompt is not None:
|
265
|
+
return self._default_summarization_prompt
|
266
|
+
if CFG.LLM_SUMMARIZATION_PROMPT is not None:
|
267
|
+
return CFG.LLM_SUMMARIZATION_PROMPT
|
268
|
+
return _DEFAULT_SUMMARIZATION_PROMPT
|
269
|
+
|
270
|
+
@property
|
271
|
+
def default_context_enrichment_prompt(self) -> str:
|
272
|
+
if self._default_context_enrichment_prompt is not None:
|
273
|
+
return self._default_context_enrichment_prompt
|
274
|
+
if CFG.LLM_CONTEXT_ENRICHMENT_PROMPT is not None:
|
275
|
+
return CFG.LLM_CONTEXT_ENRICHMENT_PROMPT
|
276
|
+
return _DEFAULT_CONTEXT_ENRICHMENT_PROMPT
|
277
|
+
|
278
|
+
@property
|
279
|
+
def default_model(self) -> "Model | str | None":
|
280
|
+
if self._default_model is not None:
|
281
|
+
return self._default_model
|
282
|
+
model_name = self.default_model_name
|
283
|
+
if model_name is None:
|
284
|
+
return None
|
285
|
+
from pydantic_ai.models.openai import OpenAIModel
|
286
|
+
|
287
|
+
return OpenAIModel(
|
288
|
+
model_name=model_name,
|
289
|
+
provider=self.default_model_provider,
|
290
|
+
)
|
291
|
+
|
292
|
+
@property
|
293
|
+
def default_summarize_history(self) -> bool:
|
294
|
+
if self._default_summarize_history is not None:
|
295
|
+
return self._default_summarize_history
|
296
|
+
return CFG.LLM_SUMMARIZE_HISTORY
|
297
|
+
|
298
|
+
@property
|
299
|
+
def default_history_summarization_token_threshold(self) -> int:
|
300
|
+
if self._default_history_summarization_token_threshold is not None:
|
301
|
+
return self._default_history_summarization_token_threshold
|
302
|
+
return CFG.LLM_HISTORY_SUMMARIZATION_TOKEN_THRESHOLD
|
303
|
+
|
304
|
+
@property
|
305
|
+
def default_enrich_context(self) -> bool:
|
306
|
+
if self._default_enrich_context is not None:
|
307
|
+
return self._default_enrich_context
|
308
|
+
return CFG.LLM_ENRICH_CONTEXT
|
309
|
+
|
310
|
+
@property
|
311
|
+
def default_context_enrichment_token_threshold(self) -> int:
|
312
|
+
if self._default_context_enrichment_token_threshold is not None:
|
313
|
+
return self._default_context_enrichment_token_threshold
|
314
|
+
return CFG.LLM_CONTEXT_ENRICHMENT_TOKEN_THRESHOLD
|
315
|
+
|
316
|
+
def set_default_persona(self, persona: str):
|
317
|
+
self._default_persona = persona
|
318
|
+
|
319
|
+
def set_default_system_prompt(self, system_prompt: str):
|
320
|
+
self._default_system_prompt = system_prompt
|
321
|
+
|
322
|
+
def set_default_interactive_system_prompt(self, interactive_system_prompt: str):
|
323
|
+
self._default_interactive_system_prompt = interactive_system_prompt
|
324
|
+
|
325
|
+
def set_default_special_instruction_prompt(self, special_instruction_prompt: str):
|
326
|
+
self._default_special_instruction_prompt = special_instruction_prompt
|
327
|
+
|
328
|
+
def set_default_summarization_prompt(self, summarization_prompt: str):
|
329
|
+
self._default_summarization_prompt = summarization_prompt
|
330
|
+
|
331
|
+
def set_default_context_enrichment_prompt(self, context_enrichment_prompt: str):
|
332
|
+
self._default_context_enrichment_prompt = context_enrichment_prompt
|
333
|
+
|
334
|
+
def set_default_model_name(self, model_name: str):
|
335
|
+
self._default_model_name = model_name
|
336
|
+
|
337
|
+
def set_default_model_api_key(self, model_api_key: str):
|
338
|
+
self._default_model_api_key = model_api_key
|
339
|
+
|
340
|
+
def set_default_model_base_url(self, model_base_url: str):
|
341
|
+
self._default_model_base_url = model_base_url
|
342
|
+
|
343
|
+
def set_default_model_provider(self, provider: "Provider | str"):
|
344
|
+
self._default_model_provider = provider
|
345
|
+
|
346
|
+
def set_default_model(self, model: "Model | str"):
|
347
|
+
self._default_model = model
|
348
|
+
|
349
|
+
def set_default_summarize_history(self, summarize_history: bool):
|
350
|
+
self._default_summarize_history = summarize_history
|
351
|
+
|
352
|
+
def set_default_history_summarization_token_threshold(
|
353
|
+
self, history_summarization_token_threshold: int
|
354
|
+
):
|
355
|
+
self._default_history_summarization_token_threshold = (
|
356
|
+
history_summarization_token_threshold
|
357
|
+
)
|
358
|
+
|
359
|
+
def set_default_enrich_context(self, enrich_context: bool):
|
360
|
+
self._default_enrich_context = enrich_context
|
361
|
+
|
362
|
+
def set_default_context_enrichment_token_threshold(
|
363
|
+
self, context_enrichment_token_threshold: int
|
364
|
+
):
|
365
|
+
self._default_context_enrichment_token_threshold = (
|
366
|
+
context_enrichment_token_threshold
|
367
|
+
)
|
368
|
+
|
369
|
+
def set_default_model_settings(self, model_settings: "ModelSettings"):
|
370
|
+
self._default_model_settings = model_settings
|
371
|
+
|
372
|
+
|
373
|
+
llm_config = LLMConfig()
|
@@ -1,18 +1,34 @@
|
|
1
1
|
import json
|
2
|
-
from typing import TYPE_CHECKING, Optional
|
3
|
-
|
4
|
-
from pydantic import BaseModel
|
2
|
+
from typing import TYPE_CHECKING, Any, Optional
|
5
3
|
|
6
4
|
if TYPE_CHECKING:
|
7
5
|
from openai import APIError
|
8
6
|
|
9
7
|
|
10
8
|
# Define a structured error model for tool execution failures
|
11
|
-
class ToolExecutionError
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
class ToolExecutionError:
|
10
|
+
def __init__(
|
11
|
+
self,
|
12
|
+
tool_name: str,
|
13
|
+
error_type: str,
|
14
|
+
message: str,
|
15
|
+
details: Optional[str] = None,
|
16
|
+
):
|
17
|
+
self.tool_name = tool_name
|
18
|
+
self.error_type = error_type
|
19
|
+
self.message = message
|
20
|
+
self.details = details
|
21
|
+
|
22
|
+
def to_dict(self) -> dict[str, Any]:
|
23
|
+
return {
|
24
|
+
"tool_name": self.tool_name,
|
25
|
+
"error_type": self.error_type,
|
26
|
+
"message": self.message,
|
27
|
+
"details": self.details,
|
28
|
+
}
|
29
|
+
|
30
|
+
def model_dump_json(self, indent: int = 2) -> str:
|
31
|
+
return json.dumps(self.to_dict(), indent=indent)
|
16
32
|
|
17
33
|
|
18
34
|
def extract_api_error_details(error: "APIError") -> str:
|
@@ -65,7 +65,7 @@ class RsyncTask(CmdTask):
|
|
65
65
|
remote_host=remote_host,
|
66
66
|
render_remote_host=render_remote_host,
|
67
67
|
remote_port=remote_port,
|
68
|
-
|
68
|
+
render_remote_port=render_remote_port,
|
69
69
|
remote_user=remote_user,
|
70
70
|
render_remote_user=render_remote_user,
|
71
71
|
remote_password=remote_password,
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class DiffResult:
|
2
|
+
def __init__(
|
3
|
+
self,
|
4
|
+
created: list[str] | None = None,
|
5
|
+
removed: list[str] | None = None,
|
6
|
+
updated: list[str] | None = None,
|
7
|
+
):
|
8
|
+
self.created = created if created is not None else []
|
9
|
+
self.removed = removed if removed is not None else []
|
10
|
+
self.updated = updated if updated is not None else []
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import json
|
2
|
+
from typing import Any
|
3
|
+
|
4
|
+
|
5
|
+
class SingleSubTreeConfig:
|
6
|
+
def __init__(self, repo_url: str, branch: str, prefix: str):
|
7
|
+
self.repo_url = repo_url
|
8
|
+
self.branch = branch
|
9
|
+
self.prefix = prefix
|
10
|
+
|
11
|
+
def to_dict(self) -> dict[str, Any]:
|
12
|
+
return {
|
13
|
+
"repo_url": self.repo_url,
|
14
|
+
"branch": self.branch,
|
15
|
+
"prefix": self.prefix,
|
16
|
+
}
|
17
|
+
|
18
|
+
def model_dump_json(self, indent: int = 2) -> str:
|
19
|
+
return json.dumps(self.to_dict(), indent=indent)
|
20
|
+
|
21
|
+
|
22
|
+
class SubTreeConfig:
|
23
|
+
def __init__(self, data: dict[str, SingleSubTreeConfig]):
|
24
|
+
self.data = data
|
25
|
+
|
26
|
+
def to_dict(self) -> dict[str, Any]:
|
27
|
+
return {
|
28
|
+
"data": {k: self.data[k].to_dict() for k in self.data},
|
29
|
+
}
|
30
|
+
|
31
|
+
def model_dump_json(self, indent: int = 2) -> str:
|
32
|
+
return json.dumps(self.to_dict(), indent=indent)
|
@@ -178,7 +178,7 @@ def pluralize(noun: str) -> str:
|
|
178
178
|
if noun.lower() in irregulars:
|
179
179
|
return irregulars[noun.lower()]
|
180
180
|
# Handle words ending in 'y' preceded by a consonant
|
181
|
-
if noun.endswith("y") and not re.match(r"[aeiou]y$", noun):
|
181
|
+
if noun.endswith("y") and not re.match(r".*[aeiou]y$", noun, re.IGNORECASE):
|
182
182
|
return re.sub(r"y$", "ies", noun)
|
183
183
|
# Handle words ending in 's', 'x', 'z', 'ch', or 'sh'
|
184
184
|
if re.search(r"(s|x|z|ch|sh)$", noun):
|