zrb 1.15.12__tar.gz → 1.15.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.15.12 → zrb-1.15.14}/PKG-INFO +1 -1
- {zrb-1.15.12 → zrb-1.15.14}/pyproject.toml +1 -1
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/code.py +0 -1
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/web.py +14 -2
- zrb-1.15.14/src/zrb/config/default_prompt/summarization_prompt.md +17 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/llm_context/config.py +67 -38
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/conversation_history.py +73 -2
- zrb-1.15.14/src/zrb/task/llm/conversation_history_model.py +74 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/history_summarization.py +6 -8
- zrb-1.15.14/src/zrb/task/llm/history_summarization_tool.py +38 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm_task.py +2 -1
- zrb-1.15.12/src/zrb/config/default_prompt/summarization_prompt.md +0 -16
- zrb-1.15.12/src/zrb/task/llm/conversation_history_model.py +0 -242
- {zrb-1.15.12 → zrb-1.15.14}/README.md +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/__main__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/attr/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/attr/type.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/base64.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/git.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/git_subtree.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/group.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/http.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/jwt.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/chat_session.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/history.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/llm_ask.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/previous-session.js +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/api.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/cli.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/file.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/rag.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/sub_agent.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/md5.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/column/add_column_util.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/add_entity_util.py +0 -0
- {zrb-1.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/client_method.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/gateway_subroute.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/entity/template/navigation_config_file.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/format_task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/add_module_util.py +0 -0
- {zrb-1.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/module_task_definition.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/module/template/navigation_config_file.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task_util.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/venv_task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/app_factory.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_db_repository.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/base_service.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/db_engine_factory.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/logger_factory.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/parser_factory.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/app.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/parser.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/user_agent.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/util/view.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/alembic.ini +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_api_client.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_client_factory.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/client/auth_direct_client.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/README +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/env.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/script.py.mako +0 -0
- {zrb-1.15.12 → zrb-1.15.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.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration/versions/8ed025bcc845_create_permissions.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/migration_metadata.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/permission_service_factory.py +0 -0
- {zrb-1.15.12 → zrb-1.15.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.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/permission/repository/permission_repository.py +0 -0
- {zrb-1.15.12 → zrb-1.15.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.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.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.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/repository/role_repository.py +0 -0
- {zrb-1.15.12 → zrb-1.15.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.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/role/role_service_factory.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.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.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/repository/user_repository.py +0 -0
- {zrb-1.15.12 → zrb-1.15.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.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/auth/service/user/user_service_factory.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/alembic.ini +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/config/navigation.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/README +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/env.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/script.py.mako +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration/versions/.gitkeep +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/migration_metadata.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/schema/navigation.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/subroute/auth.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/auth.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/util/view.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/permission.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/role.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/auth/user.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/error.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/homepage.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/login.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/content/logout.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/common/util.js +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/style.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/crud/util.js +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/pico-style.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/script.js +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/default/style.css +0 -0
- {zrb-1.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/static/images/favicon-32x32.png +0 -0
- {zrb-1.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.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.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/gateway/view/template/default.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/_util/access_token.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_create_permission.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_delete_permission.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_read_permission.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/permission/test_update_permission.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/auth/test_user_session.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_health_and_readiness.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_homepage.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test/test_not_found_error.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/create/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/create/project-template/README.md +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/create/project_task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/python.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/random.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/common_input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/ubuntu.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/shell/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/todo.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/uuid.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/callback/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/callback/any_callback.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/callback/callback.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/cmd/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/cmd/cmd_result.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/cmd/cmd_val.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/config.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/default_prompt/file_extractor_system_prompt.md +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/default_prompt/interactive_system_prompt.md +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/default_prompt/persona.md +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/default_prompt/repo_extractor_system_prompt.md +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/default_prompt/repo_summarizer_system_prompt.md +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/default_prompt/system_prompt.md +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/llm_config.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/llm_context/config_parser.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/llm_rate_limitter.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/web_auth_config.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/content_transformer/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/content_transformer/any_content_transformer.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/content_transformer/content_transformer.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/context/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/context/any_context.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/context/any_shared_context.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/context/context.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/context/shared_context.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/dot_dict/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/dot_dict/dot_dict.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/env/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/env/any_env.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/env/env.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/env/env_file.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/env/env_map.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/group/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/group/any_group.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/group/group.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/any_input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/base_input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/bool_input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/float_input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/int_input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/option_input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/password_input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/str_input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/text_input.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/cli.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/common_util.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_app.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/docs_route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/error_page/view.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/home_page/view.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/login_api_route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/login_page/view.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/logout_api_route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/logout_page/view.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/global_template.html +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/common.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/common.js +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.amber.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.blue.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.cyan.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.fuchsia.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.green.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.grey.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.indigo.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.jade.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.lime.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.orange.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.pink.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.pumpkin.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.purple.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.red.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.sand.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.slate.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.violet.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.yellow.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.zinc.min.css +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/static_route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_schema/session.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_schema/token.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_schema/user.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_util/cookie.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_util/html.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_util/token.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_util/user.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session/any_session.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session/session.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session_state_log/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session_state_log/session_state_log.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session_state_logger/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/any_task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base/context.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base/execution.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base/lifecycle.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base/monitoring.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base/operators.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base_task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base_trigger.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/cmd_task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/http_check.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/agent.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/config.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/default_workflow/coding.md +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/default_workflow/copywriting.md +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/default_workflow/researching.md +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/error.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/print_node.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/prompt.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/tool_wrapper.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/typing.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/make_task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/rsync_task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/scaffolder.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/scheduler.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/task.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/tcp_check.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task_status/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task_status/task_status.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/attr.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/callable.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cli/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cli/markdown.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cli/style.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cli/subcommand.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cmd/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cmd/command.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cmd/remote.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modification_mode.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_class.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_class_parent.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_class_property.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_dict.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_function.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_function_call.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_method.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_module.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cron.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/file.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/git.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/git_diff_model.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/git_subtree.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/git_subtree_model.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/group.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/init_path.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/llm/prompt.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/load.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/run.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/string/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/string/conversion.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/string/format.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/string/name.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/todo.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/todo_model.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/truncate.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/xcom/__init__.py +0 -0
- {zrb-1.15.12 → zrb-1.15.14}/src/zrb/xcom/xcom.py +0 -0
@@ -122,7 +122,6 @@ async def analyze_repo(
|
|
122
122
|
)
|
123
123
|
if len(extracted_infos) == 1:
|
124
124
|
return extracted_infos[0]
|
125
|
-
ctx.print(stylize_faint(" 📝 Summarization"), plain=True)
|
126
125
|
summarized_infos = extracted_infos
|
127
126
|
while len(summarized_infos) > 1:
|
128
127
|
ctx.print(stylize_faint(" 📝 Summarization"), plain=True)
|
@@ -98,7 +98,13 @@ def search_wikipedia(query: str) -> str:
|
|
98
98
|
import requests
|
99
99
|
|
100
100
|
params = {"action": "query", "list": "search", "srsearch": query, "format": "json"}
|
101
|
-
response = requests.get(
|
101
|
+
response = requests.get(
|
102
|
+
"https://en.wikipedia.org/w/api.php",
|
103
|
+
headers={
|
104
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
|
105
|
+
},
|
106
|
+
params=params,
|
107
|
+
)
|
102
108
|
return response.json()
|
103
109
|
|
104
110
|
|
@@ -123,7 +129,13 @@ def search_arxiv(query: str, num_results: int = 10) -> str:
|
|
123
129
|
import requests
|
124
130
|
|
125
131
|
params = {"search_query": f"all:{query}", "start": 0, "max_results": num_results}
|
126
|
-
response = requests.get(
|
132
|
+
response = requests.get(
|
133
|
+
"http://export.arxiv.org/api/query",
|
134
|
+
headers={
|
135
|
+
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
|
136
|
+
},
|
137
|
+
params=params,
|
138
|
+
)
|
127
139
|
return response.content
|
128
140
|
|
129
141
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
You are a memory management AI. Your goal is to curate the conversation history by calling the `update_conversation_memory` tool.
|
2
|
+
|
3
|
+
Follow these steps precisely:
|
4
|
+
|
5
|
+
**Step 1: Consolidate Conversation Information**
|
6
|
+
|
7
|
+
1. Create a concise narrative summary that integrates the `Past Conversation Summary` with the `Recent Conversation`.
|
8
|
+
2. Extract ONLY the last 4 (four) turns of the `Recent Conversation` to serve as the new transcript. Do not change or shorten the content of these turns. Ensure the timestamp format is `[YYYY-MM-DD HH:MM:SS UTC+Z] Role: Message/Tool name being called`.
|
9
|
+
3. Review the `Notes` and the `Recent Conversation` to identify any new or updated facts.
|
10
|
+
* Update global facts about the user or their preferences for the `long_term_note`.
|
11
|
+
* Update facts specific to the current project or directory for the `contextual_note`.
|
12
|
+
* **CRITICAL:** When updating `contextual_note`, you MUST determine the correct `context_path` by analyzing the `Recent Conversation`. For example, if a fact was established when the working directory was `/app`, the `context_path` MUST be `/app`.
|
13
|
+
* **CRITICAL:** The content for notes must be raw, unformatted text. Do not use Markdown. Notes should be timeless facts, not a log of events. Only update notes if the information has actually changed.
|
14
|
+
|
15
|
+
**Step 2: Update Memory**
|
16
|
+
|
17
|
+
1. Call the `update_conversation_memory` tool ONCE, providing all the information you consolidated in Step 1 as arguments.
|
@@ -35,6 +35,17 @@ class LLMContextConfig:
|
|
35
35
|
all_sections.append((config_dir, sections))
|
36
36
|
return all_sections
|
37
37
|
|
38
|
+
def _normalize_context_path(
|
39
|
+
self,
|
40
|
+
path_str: str,
|
41
|
+
relative_to_dir: str,
|
42
|
+
) -> str:
|
43
|
+
"""Normalizes a context path string to an absolute path."""
|
44
|
+
expanded_path = os.path.expanduser(path_str)
|
45
|
+
if os.path.isabs(expanded_path):
|
46
|
+
return os.path.abspath(expanded_path)
|
47
|
+
return os.path.abspath(os.path.join(relative_to_dir, expanded_path))
|
48
|
+
|
38
49
|
def get_contexts(self, cwd: str | None = None) -> dict[str, str]:
|
39
50
|
"""Gathers all relevant contexts for a given path."""
|
40
51
|
if cwd is None:
|
@@ -44,15 +55,14 @@ class LLMContextConfig:
|
|
44
55
|
for config_dir, sections in reversed(all_sections):
|
45
56
|
for key, value in sections.items():
|
46
57
|
if key.startswith("Context:"):
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
contexts[context_path] = value
|
58
|
+
context_path_str = key[len("Context:") :].strip()
|
59
|
+
abs_context_path = self._normalize_context_path(
|
60
|
+
context_path_str,
|
61
|
+
config_dir,
|
62
|
+
)
|
63
|
+
# A context is relevant if its path is an ancestor of cwd
|
64
|
+
if os.path.commonpath([cwd, abs_context_path]) == abs_context_path:
|
65
|
+
contexts[abs_context_path] = value
|
56
66
|
return contexts
|
57
67
|
|
58
68
|
def get_workflows(self, cwd: str | None = None) -> dict[str, str]:
|
@@ -61,60 +71,79 @@ class LLMContextConfig:
|
|
61
71
|
cwd = os.getcwd()
|
62
72
|
all_sections = self._get_all_sections(cwd)
|
63
73
|
workflows: dict[str, str] = {}
|
64
|
-
|
74
|
+
# Iterate from closest to farthest
|
75
|
+
for _, sections in all_sections:
|
65
76
|
for key, value in sections.items():
|
66
77
|
if key.startswith("Workflow:"):
|
67
|
-
workflow_name = key[len("Workflow:") :].strip()
|
68
|
-
|
69
|
-
|
78
|
+
workflow_name = key[len("Workflow:") :].strip().lower()
|
79
|
+
# First one found wins
|
80
|
+
if workflow_name not in workflows:
|
81
|
+
workflows[workflow_name] = value
|
70
82
|
return workflows
|
71
83
|
|
84
|
+
def _format_context_path_for_writing(
|
85
|
+
self,
|
86
|
+
path_to_write: str,
|
87
|
+
cwd: str,
|
88
|
+
) -> str:
|
89
|
+
"""Formats a path for writing into a context file key."""
|
90
|
+
home_dir = os.path.expanduser("~")
|
91
|
+
abs_path_to_write = os.path.abspath(os.path.join(cwd, path_to_write))
|
92
|
+
abs_cwd = os.path.abspath(cwd)
|
93
|
+
# Rule 1: Inside CWD
|
94
|
+
if abs_path_to_write.startswith(abs_cwd):
|
95
|
+
if abs_path_to_write == abs_cwd:
|
96
|
+
return "."
|
97
|
+
return os.path.relpath(abs_path_to_write, abs_cwd)
|
98
|
+
# Rule 2: Inside Home
|
99
|
+
if abs_path_to_write.startswith(home_dir):
|
100
|
+
if abs_path_to_write == home_dir:
|
101
|
+
return "~"
|
102
|
+
return os.path.join("~", os.path.relpath(abs_path_to_write, home_dir))
|
103
|
+
# Rule 3: Absolute
|
104
|
+
return abs_path_to_write
|
105
|
+
|
72
106
|
def write_context(
|
73
|
-
self,
|
107
|
+
self,
|
108
|
+
content: str,
|
109
|
+
context_path: str | None = None,
|
110
|
+
cwd: str | None = None,
|
74
111
|
):
|
75
|
-
"""Writes content to a context block in
|
112
|
+
"""Writes content to a context block in CWD's configuration file."""
|
76
113
|
if cwd is None:
|
77
114
|
cwd = os.getcwd()
|
78
115
|
if context_path is None:
|
79
116
|
context_path = cwd
|
80
117
|
|
81
|
-
|
82
|
-
if config_files:
|
83
|
-
config_file = config_files[0] # Closest config file
|
84
|
-
else:
|
85
|
-
config_file = os.path.join(cwd, CFG.LLM_CONTEXT_FILE)
|
118
|
+
config_file = os.path.join(cwd, CFG.LLM_CONTEXT_FILE)
|
86
119
|
|
87
120
|
sections = {}
|
88
121
|
if os.path.exists(config_file):
|
89
122
|
sections = self._parse_config(config_file)
|
90
123
|
|
91
|
-
|
92
|
-
section_key_path = context_path
|
93
|
-
if not os.path.isabs(context_path):
|
94
|
-
config_dir = os.path.dirname(config_file)
|
95
|
-
section_key_path = os.path.abspath(os.path.join(config_dir, context_path))
|
124
|
+
abs_context_path = os.path.abspath(os.path.join(cwd, context_path))
|
96
125
|
|
97
|
-
|
98
|
-
found_key = ""
|
126
|
+
found_key = None
|
99
127
|
for key in sections.keys():
|
100
128
|
if not key.startswith("Context:"):
|
101
129
|
continue
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
)
|
109
|
-
if key_path == section_key_path:
|
130
|
+
context_path_str = key[len("Context:") :].strip()
|
131
|
+
abs_key_path = self._normalize_context_path(
|
132
|
+
context_path_str,
|
133
|
+
os.path.dirname(config_file),
|
134
|
+
)
|
135
|
+
if abs_key_path == abs_context_path:
|
110
136
|
found_key = key
|
111
137
|
break
|
112
138
|
|
113
|
-
if found_key
|
139
|
+
if found_key:
|
114
140
|
sections[found_key] = content
|
115
141
|
else:
|
116
|
-
|
117
|
-
|
142
|
+
formatted_path = self._format_context_path_for_writing(
|
143
|
+
context_path,
|
144
|
+
cwd,
|
145
|
+
)
|
146
|
+
new_key = f"Context: {formatted_path}"
|
118
147
|
sections[new_key] = content
|
119
148
|
|
120
149
|
# Serialize back to markdown
|
@@ -1,18 +1,46 @@
|
|
1
1
|
import json
|
2
|
+
import os
|
2
3
|
from collections.abc import Callable
|
3
4
|
from copy import deepcopy
|
4
5
|
from typing import Any
|
5
6
|
|
6
7
|
from zrb.attr.type import StrAttr
|
8
|
+
from zrb.config.llm_context.config import llm_context_config
|
7
9
|
from zrb.context.any_context import AnyContext
|
8
10
|
from zrb.context.any_shared_context import AnySharedContext
|
9
11
|
from zrb.task.llm.conversation_history_model import ConversationHistory
|
10
12
|
from zrb.task.llm.typing import ListOfDict
|
11
13
|
from zrb.util.attr import get_str_attr
|
12
|
-
from zrb.util.file import write_file
|
14
|
+
from zrb.util.file import read_file, write_file
|
15
|
+
from zrb.util.llm.prompt import make_prompt_section
|
13
16
|
from zrb.util.run import run_async
|
14
17
|
|
15
18
|
|
19
|
+
def inject_conversation_history_notes(conversation_history: ConversationHistory):
|
20
|
+
conversation_history.long_term_note = _fetch_long_term_note(
|
21
|
+
conversation_history.project_path
|
22
|
+
)
|
23
|
+
conversation_history.contextual_note = _fetch_contextual_note(
|
24
|
+
conversation_history.project_path
|
25
|
+
)
|
26
|
+
|
27
|
+
|
28
|
+
def _fetch_long_term_note(project_path: str) -> str:
|
29
|
+
contexts = llm_context_config.get_contexts(cwd=project_path)
|
30
|
+
return contexts.get("/", "")
|
31
|
+
|
32
|
+
|
33
|
+
def _fetch_contextual_note(project_path: str) -> str:
|
34
|
+
contexts = llm_context_config.get_contexts(cwd=project_path)
|
35
|
+
return "\n".join(
|
36
|
+
[
|
37
|
+
make_prompt_section(header, content)
|
38
|
+
for header, content in contexts.items()
|
39
|
+
if header != "/"
|
40
|
+
]
|
41
|
+
)
|
42
|
+
|
43
|
+
|
16
44
|
def get_history_file(
|
17
45
|
ctx: AnyContext,
|
18
46
|
conversation_history_file_attr: StrAttr | None,
|
@@ -27,6 +55,49 @@ def get_history_file(
|
|
27
55
|
)
|
28
56
|
|
29
57
|
|
58
|
+
async def _read_from_source(
|
59
|
+
ctx: AnyContext,
|
60
|
+
reader: Callable[[AnyContext], dict[str, Any] | list | None] | None,
|
61
|
+
file_path: str | None,
|
62
|
+
) -> "ConversationHistory | None":
|
63
|
+
# Priority 1: Reader function
|
64
|
+
if reader:
|
65
|
+
try:
|
66
|
+
raw_data = await run_async(reader(ctx))
|
67
|
+
if raw_data:
|
68
|
+
instance = ConversationHistory.parse_and_validate(
|
69
|
+
ctx, raw_data, "reader"
|
70
|
+
)
|
71
|
+
if instance:
|
72
|
+
return instance
|
73
|
+
except Exception as e:
|
74
|
+
ctx.log_warning(
|
75
|
+
f"Error executing conversation history reader: {e}. Ignoring."
|
76
|
+
)
|
77
|
+
# Priority 2: History file
|
78
|
+
if file_path and os.path.isfile(file_path):
|
79
|
+
try:
|
80
|
+
content = read_file(file_path)
|
81
|
+
raw_data = json.loads(content)
|
82
|
+
instance = ConversationHistory.parse_and_validate(
|
83
|
+
ctx, raw_data, f"file '{file_path}'"
|
84
|
+
)
|
85
|
+
if instance:
|
86
|
+
return instance
|
87
|
+
except json.JSONDecodeError:
|
88
|
+
ctx.log_warning(
|
89
|
+
f"Could not decode JSON from history file '{file_path}'. "
|
90
|
+
"Ignoring file content."
|
91
|
+
)
|
92
|
+
except Exception as e:
|
93
|
+
ctx.log_warning(
|
94
|
+
f"Error reading history file '{file_path}': {e}. "
|
95
|
+
"Ignoring file content."
|
96
|
+
)
|
97
|
+
# Fallback: Return default value
|
98
|
+
return None
|
99
|
+
|
100
|
+
|
30
101
|
async def read_conversation_history(
|
31
102
|
ctx: AnyContext,
|
32
103
|
conversation_history_reader: (
|
@@ -46,7 +117,7 @@ async def read_conversation_history(
|
|
46
117
|
ctx, conversation_history_file_attr, render_history_file
|
47
118
|
)
|
48
119
|
# Use the class method defined above
|
49
|
-
history_data = await
|
120
|
+
history_data = await _read_from_source(
|
50
121
|
ctx=ctx,
|
51
122
|
reader=conversation_history_reader,
|
52
123
|
file_path=history_file,
|
@@ -0,0 +1,74 @@
|
|
1
|
+
import json
|
2
|
+
import os
|
3
|
+
from typing import Any
|
4
|
+
|
5
|
+
from zrb.context.any_context import AnyContext
|
6
|
+
from zrb.task.llm.typing import ListOfDict
|
7
|
+
|
8
|
+
|
9
|
+
class ConversationHistory:
|
10
|
+
|
11
|
+
def __init__(
|
12
|
+
self,
|
13
|
+
past_conversation_summary: str = "",
|
14
|
+
past_conversation_transcript: str = "",
|
15
|
+
history: ListOfDict | None = None,
|
16
|
+
contextual_note: str | None = None,
|
17
|
+
long_term_note: str | None = None,
|
18
|
+
project_path: str | None = None,
|
19
|
+
):
|
20
|
+
self.past_conversation_transcript = past_conversation_transcript
|
21
|
+
self.past_conversation_summary = past_conversation_summary
|
22
|
+
self.history = history if history is not None else []
|
23
|
+
self.contextual_note = contextual_note if contextual_note is not None else ""
|
24
|
+
self.long_term_note = long_term_note if long_term_note is not None else ""
|
25
|
+
self.project_path = project_path if project_path is not None else os.getcwd()
|
26
|
+
|
27
|
+
def to_dict(self) -> dict[str, Any]:
|
28
|
+
return {
|
29
|
+
"past_conversation_summary": self.past_conversation_summary,
|
30
|
+
"past_conversation_transcript": self.past_conversation_transcript,
|
31
|
+
"history": self.history,
|
32
|
+
"contextual_note": self.contextual_note,
|
33
|
+
"long_term_note": self.long_term_note,
|
34
|
+
}
|
35
|
+
|
36
|
+
def model_dump_json(self, indent: int = 2) -> str:
|
37
|
+
return json.dumps(self.to_dict(), indent=indent)
|
38
|
+
|
39
|
+
@classmethod
|
40
|
+
def parse_and_validate(
|
41
|
+
cls, ctx: AnyContext, data: Any, source: str
|
42
|
+
) -> "ConversationHistory":
|
43
|
+
try:
|
44
|
+
if isinstance(data, cls):
|
45
|
+
return data # Already a valid instance
|
46
|
+
if isinstance(data, dict):
|
47
|
+
# This handles both the new format and the old {'context': ..., 'history': ...}
|
48
|
+
return cls(
|
49
|
+
past_conversation_summary=data.get("past_conversation_summary", ""),
|
50
|
+
past_conversation_transcript=data.get(
|
51
|
+
"past_conversation_transcript", ""
|
52
|
+
),
|
53
|
+
history=data.get("history", data.get("messages", [])),
|
54
|
+
contextual_note=data.get("contextual_note", ""),
|
55
|
+
long_term_note=data.get("long_term_note", ""),
|
56
|
+
)
|
57
|
+
elif isinstance(data, list):
|
58
|
+
# Handle very old format (just a list) - wrap it
|
59
|
+
ctx.log_warning(
|
60
|
+
f"History from {source} contains legacy list format. "
|
61
|
+
"Wrapping it into the new structure. "
|
62
|
+
"Consider updating the source format."
|
63
|
+
)
|
64
|
+
return cls(history=data)
|
65
|
+
else:
|
66
|
+
ctx.log_warning(
|
67
|
+
f"History data from {source} has unexpected format "
|
68
|
+
f"(type: {type(data)}). Ignoring."
|
69
|
+
)
|
70
|
+
except Exception as e: # Catch validation errors too
|
71
|
+
ctx.log_warning(
|
72
|
+
f"Error validating/parsing history data from {source}: {e}. Ignoring."
|
73
|
+
)
|
74
|
+
return cls()
|
@@ -9,9 +9,13 @@ from zrb.context.any_context import AnyContext
|
|
9
9
|
from zrb.task.llm.agent import run_agent_iteration
|
10
10
|
from zrb.task.llm.conversation_history import (
|
11
11
|
count_part_in_history_list,
|
12
|
+
inject_conversation_history_notes,
|
12
13
|
replace_system_prompt_in_history,
|
13
14
|
)
|
14
15
|
from zrb.task.llm.conversation_history_model import ConversationHistory
|
16
|
+
from zrb.task.llm.history_summarization_tool import (
|
17
|
+
create_history_summarization_tool,
|
18
|
+
)
|
15
19
|
from zrb.task.llm.typing import ListOfDict
|
16
20
|
from zrb.util.attr import get_bool_attr, get_int_attr
|
17
21
|
from zrb.util.cli.style import stylize_faint
|
@@ -93,6 +97,7 @@ async def summarize_history(
|
|
93
97
|
"""Runs an LLM call to update the conversation summary."""
|
94
98
|
from pydantic_ai import Agent
|
95
99
|
|
100
|
+
inject_conversation_history_notes(conversation_history)
|
96
101
|
ctx.log_info("Attempting to summarize conversation history...")
|
97
102
|
# Construct the user prompt for the summarization agent
|
98
103
|
user_prompt = "\n".join(
|
@@ -143,14 +148,7 @@ async def summarize_history(
|
|
143
148
|
system_prompt=system_prompt,
|
144
149
|
model_settings=settings,
|
145
150
|
retries=retries,
|
146
|
-
tools=[
|
147
|
-
conversation_history.write_past_conversation_summary,
|
148
|
-
conversation_history.write_past_conversation_transcript,
|
149
|
-
conversation_history.read_long_term_note,
|
150
|
-
conversation_history.write_long_term_note,
|
151
|
-
conversation_history.read_contextual_note,
|
152
|
-
conversation_history.write_contextual_note,
|
153
|
-
],
|
151
|
+
tools=[create_history_summarization_tool(conversation_history)],
|
154
152
|
)
|
155
153
|
try:
|
156
154
|
ctx.print(stylize_faint(" 📝 Rollup Conversation"), plain=True)
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import json
|
2
|
+
from typing import Callable
|
3
|
+
|
4
|
+
from zrb.config.llm_context.config import llm_context_config
|
5
|
+
from zrb.task.llm.conversation_history_model import ConversationHistory
|
6
|
+
|
7
|
+
|
8
|
+
def create_history_summarization_tool(
|
9
|
+
conversation_history: ConversationHistory,
|
10
|
+
) -> Callable:
|
11
|
+
def update_conversation_memory(
|
12
|
+
past_conversation_summary: str,
|
13
|
+
past_conversation_transcript: str,
|
14
|
+
long_term_note: str | None = None,
|
15
|
+
contextual_note: str | None = None,
|
16
|
+
context_path: str | None = None,
|
17
|
+
):
|
18
|
+
"""
|
19
|
+
Update the conversation memory including summary, transcript, and notes.
|
20
|
+
- past_conversation_summary: A concise narrative that integrates the
|
21
|
+
previous summary with the recent conversation.
|
22
|
+
- past_conversation_transcript: MUST be ONLY the last 4 (four) turns
|
23
|
+
of the conversation.
|
24
|
+
- long_term_note: Global facts about the user or their preferences.
|
25
|
+
- contextual_note: Facts specific to the current project or directory.
|
26
|
+
- context_path: The directory path for the contextual note.
|
27
|
+
"""
|
28
|
+
conversation_history.past_conversation_summary = past_conversation_summary
|
29
|
+
conversation_history.past_conversation_transcript = past_conversation_transcript
|
30
|
+
if long_term_note is not None:
|
31
|
+
llm_context_config.write_context(long_term_note, context_path="/")
|
32
|
+
if contextual_note is not None:
|
33
|
+
if context_path is None:
|
34
|
+
context_path = conversation_history.project_path
|
35
|
+
llm_context_config.write_context(contextual_note, context_path=context_path)
|
36
|
+
return json.dumps({"success": True})
|
37
|
+
|
38
|
+
return update_conversation_memory
|
@@ -17,6 +17,7 @@ from zrb.task.llm.config import (
|
|
17
17
|
get_model_settings,
|
18
18
|
)
|
19
19
|
from zrb.task.llm.conversation_history import (
|
20
|
+
inject_conversation_history_notes,
|
20
21
|
read_conversation_history,
|
21
22
|
write_conversation_history,
|
22
23
|
)
|
@@ -241,7 +242,7 @@ class LLMTask(BaseTask):
|
|
241
242
|
render_history_file=self._render_history_file,
|
242
243
|
conversation_history_attr=self._conversation_history,
|
243
244
|
)
|
244
|
-
conversation_history
|
245
|
+
inject_conversation_history_notes(conversation_history)
|
245
246
|
# 2. Get system prompt and user prompt
|
246
247
|
system_prompt, user_message = get_system_and_user_prompt(
|
247
248
|
ctx=ctx,
|
@@ -1,16 +0,0 @@
|
|
1
|
-
You are a memory management AI. Your goal is to curate the conversation history by calling `write_past_conversation_summary`, `write_past_conversation_transcript`, `write_long_term_note` and `write_contextual_note`.
|
2
|
-
|
3
|
-
Follow these steps precisely:
|
4
|
-
|
5
|
-
**Step 1: Update Conversation Summary and Transcript**
|
6
|
-
|
7
|
-
1. Call the `write_past_conversation_summary` tool ONCE. The summary you provide must be a concise narrative that integrates the previous summary with the `Recent Conversation`.
|
8
|
-
2. Call the `write_past_conversation_transcript` tool ONCE. The content for this tool MUST be ONLY the last 4 (four) turns of the conversation. Do not change or shorten the content of these turns. Ensure the timestamp format is `[YYYY-MM-DD HH:MM:SS UTC+Z] Role: Message/Tool name being called`.
|
9
|
-
|
10
|
-
**Step 2: Update Factual Notes**
|
11
|
-
|
12
|
-
1. First, read the existing notes to understand the current state.
|
13
|
-
2. Call `write_long_term_note` AT MOST ONCE. Use it to add or update global facts about the user or their preferences.
|
14
|
-
3. Call `write_contextual_note` AT MOST ONCE. Use it to add or update facts specific to the current project or directory (`context_path`).
|
15
|
-
4. **CRITICAL:** When calling `write_contextual_note`, you MUST determine the correct `context_path` by analyzing the `Recent Conversation`. For example, if a fact was established when the working directory was `/app`, the `context_path` MUST be `/app`.
|
16
|
-
5. **CRITICAL:** The content for notes must be raw, unformatted text. Do not use Markdown. Notes should be timeless facts, not a log of events. Only update notes if the information has actually changed.
|