zrb 1.12.0__tar.gz → 1.13.1__tar.gz

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