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.
Files changed (416) hide show
  1. {zrb-1.15.12 → zrb-1.15.14}/PKG-INFO +1 -1
  2. {zrb-1.15.12 → zrb-1.15.14}/pyproject.toml +1 -1
  3. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/code.py +0 -1
  4. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/web.py +14 -2
  5. zrb-1.15.14/src/zrb/config/default_prompt/summarization_prompt.md +17 -0
  6. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/llm_context/config.py +67 -38
  7. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/conversation_history.py +73 -2
  8. zrb-1.15.14/src/zrb/task/llm/conversation_history_model.py +74 -0
  9. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/history_summarization.py +6 -8
  10. zrb-1.15.14/src/zrb/task/llm/history_summarization_tool.py +38 -0
  11. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm_task.py +2 -1
  12. zrb-1.15.12/src/zrb/config/default_prompt/summarization_prompt.md +0 -16
  13. zrb-1.15.12/src/zrb/task/llm/conversation_history_model.py +0 -242
  14. {zrb-1.15.12 → zrb-1.15.14}/README.md +0 -0
  15. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/__init__.py +0 -0
  16. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/__main__.py +0 -0
  17. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/attr/__init__.py +0 -0
  18. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/attr/type.py +0 -0
  19. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/__init__.py +0 -0
  20. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/base64.py +0 -0
  21. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/git.py +0 -0
  22. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/git_subtree.py +0 -0
  23. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/group.py +0 -0
  24. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/http.py +0 -0
  25. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/jwt.py +0 -0
  26. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/chat_session.py +0 -0
  27. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/history.py +0 -0
  28. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/input.py +0 -0
  29. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/llm_ask.py +0 -0
  30. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/previous-session.js +0 -0
  31. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/__init__.py +0 -0
  32. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/api.py +0 -0
  33. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/cli.py +0 -0
  34. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/file.py +0 -0
  35. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/rag.py +0 -0
  36. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/llm/tool/sub_agent.py +0 -0
  37. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/md5.py +0 -0
  38. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/__init__.py +0 -0
  39. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_input.py +0 -0
  40. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_task.py +0 -0
  41. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.coveragerc +0 -0
  42. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.flake8 +0 -0
  43. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/.gitignore +0 -0
  44. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/README.md +0 -0
  45. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/__init__.py +0 -0
  46. {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
  47. {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
  48. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/config.py +0 -0
  49. {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
  50. {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
  51. {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
  52. {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
  53. {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
  54. {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
  55. {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
  56. {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
  57. {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
  58. {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
  59. {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
  60. {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
  61. {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
  62. {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
  63. {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
  64. {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
  65. {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
  66. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/group.py +0 -0
  67. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/input.py +0 -0
  68. {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
  69. {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
  70. {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
  71. {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
  72. {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
  73. {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
  74. {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
  75. {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
  76. {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
  77. {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
  78. {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
  79. {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
  80. {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
  81. {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
  82. {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
  83. {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
  84. {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
  85. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/task.py +0 -0
  86. {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
  87. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/_zrb/util.py +0 -0
  88. {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
  89. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/__init__.py +0 -0
  90. {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
  91. {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
  92. {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
  93. {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
  94. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/error.py +0 -0
  95. {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
  96. {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
  97. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/common/schema.py +0 -0
  98. {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
  99. {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
  100. {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
  101. {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
  102. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/config.py +0 -0
  103. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/main.py +0 -0
  104. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/module/__init__.py +0 -0
  105. {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
  106. {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
  107. {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
  108. {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
  109. {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
  110. {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
  111. {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
  112. {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
  113. {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
  114. {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
  115. {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
  116. {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
  117. {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
  118. {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
  119. {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
  120. {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
  121. {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
  122. {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
  123. {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
  124. {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
  125. {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
  126. {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
  127. {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
  128. {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
  129. {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
  130. {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
  131. {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
  132. {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
  133. {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
  134. {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
  135. {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
  136. {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
  137. {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
  138. {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
  139. {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
  140. {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
  141. {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
  142. {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
  143. {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
  144. {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
  145. {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
  146. {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
  147. {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
  148. {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
  149. {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
  150. {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
  151. {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
  152. {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
  153. {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
  154. {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
  155. {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
  156. {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
  157. {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
  158. {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
  159. {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
  160. {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
  161. {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
  162. {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
  163. {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
  164. {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
  165. {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
  166. {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
  167. {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
  168. {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
  169. {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
  170. {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
  171. {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
  172. {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
  173. {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
  174. {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
  175. {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
  176. {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
  177. {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
  178. {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
  179. {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
  180. {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
  181. {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
  182. {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
  183. {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
  184. {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
  185. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/requirements.txt +0 -0
  186. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/__init__.py +0 -0
  187. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/permission.py +0 -0
  188. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/role.py +0 -0
  189. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/schema/user.py +0 -0
  190. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/template.env +0 -0
  191. {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
  192. {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
  193. {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
  194. {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
  195. {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
  196. {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
  197. {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
  198. {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
  199. {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
  200. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_template/my_app_name/test.sh +0 -0
  201. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/add/fastapp/fastapp_util.py +0 -0
  202. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/create/__init__.py +0 -0
  203. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/create/project-template/README.md +0 -0
  204. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/create/project-template/zrb_init.py +0 -0
  205. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/project/create/project_task.py +0 -0
  206. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/python.py +0 -0
  207. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/random.py +0 -0
  208. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/asdf/asdf.py +0 -0
  209. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/asdf/asdf_helper.py +0 -0
  210. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/common_input.py +0 -0
  211. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/latex/ubuntu.py +0 -0
  212. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/tmux/tmux.py +0 -0
  213. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/tmux/tmux_config.sh +0 -0
  214. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/tmux/tmux_helper.py +0 -0
  215. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/ubuntu.py +0 -0
  216. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/zsh/zsh.py +0 -0
  217. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/zsh/zsh_config.sh +0 -0
  218. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/setup/zsh/zsh_helper.py +0 -0
  219. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/shell/__init__.py +0 -0
  220. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/shell/autocomplete/__init__.py +0 -0
  221. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/shell/autocomplete/bash.py +0 -0
  222. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/shell/autocomplete/subcmd.py +0 -0
  223. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/shell/autocomplete/zsh.py +0 -0
  224. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/todo.py +0 -0
  225. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/builtin/uuid.py +0 -0
  226. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/callback/__init__.py +0 -0
  227. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/callback/any_callback.py +0 -0
  228. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/callback/callback.py +0 -0
  229. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/cmd/__init__.py +0 -0
  230. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/cmd/cmd_result.py +0 -0
  231. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/cmd/cmd_val.py +0 -0
  232. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/config.py +0 -0
  233. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/default_prompt/file_extractor_system_prompt.md +0 -0
  234. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/default_prompt/interactive_system_prompt.md +0 -0
  235. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/default_prompt/persona.md +0 -0
  236. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/default_prompt/repo_extractor_system_prompt.md +0 -0
  237. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/default_prompt/repo_summarizer_system_prompt.md +0 -0
  238. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/default_prompt/system_prompt.md +0 -0
  239. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/llm_config.py +0 -0
  240. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/llm_context/config_parser.py +0 -0
  241. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/llm_rate_limitter.py +0 -0
  242. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/config/web_auth_config.py +0 -0
  243. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/content_transformer/__init__.py +0 -0
  244. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/content_transformer/any_content_transformer.py +0 -0
  245. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/content_transformer/content_transformer.py +0 -0
  246. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/context/__init__.py +0 -0
  247. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/context/any_context.py +0 -0
  248. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/context/any_shared_context.py +0 -0
  249. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/context/context.py +0 -0
  250. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/context/shared_context.py +0 -0
  251. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/dot_dict/__init__.py +0 -0
  252. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/dot_dict/dot_dict.py +0 -0
  253. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/env/__init__.py +0 -0
  254. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/env/any_env.py +0 -0
  255. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/env/env.py +0 -0
  256. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/env/env_file.py +0 -0
  257. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/env/env_map.py +0 -0
  258. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/group/__init__.py +0 -0
  259. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/group/any_group.py +0 -0
  260. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/group/group.py +0 -0
  261. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/__init__.py +0 -0
  262. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/any_input.py +0 -0
  263. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/base_input.py +0 -0
  264. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/bool_input.py +0 -0
  265. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/float_input.py +0 -0
  266. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/int_input.py +0 -0
  267. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/option_input.py +0 -0
  268. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/password_input.py +0 -0
  269. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/str_input.py +0 -0
  270. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/input/text_input.py +0 -0
  271. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/__init__.py +0 -0
  272. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/cli.py +0 -0
  273. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/common_util.py +0 -0
  274. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_app.py +0 -0
  275. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/__init__.py +0 -0
  276. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/docs_route.py +0 -0
  277. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/error_page/serve_default_404.py +0 -0
  278. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/error_page/show_error_page.py +0 -0
  279. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/error_page/view.html +0 -0
  280. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/home_page/__init__.py +0 -0
  281. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/home_page/home_page_route.py +0 -0
  282. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/home_page/view.html +0 -0
  283. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/login_api_route.py +0 -0
  284. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/login_page/login_page_route.py +0 -0
  285. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/login_page/view.html +0 -0
  286. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/logout_api_route.py +0 -0
  287. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/logout_page/logout_page_route.py +0 -0
  288. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/logout_page/view.html +0 -0
  289. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/node_page/group/show_group_page.py +0 -0
  290. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/node_page/group/view.html +0 -0
  291. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/node_page/node_page_route.py +0 -0
  292. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/node_page/task/partial/input.html +0 -0
  293. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/node_page/task/show_task_page.py +0 -0
  294. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/node_page/task/view.html +0 -0
  295. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/refresh_token_api_route.py +0 -0
  296. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/global_template.html +0 -0
  297. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/refresh-token.template.js +0 -0
  298. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/common.css +0 -0
  299. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/common.js +0 -0
  300. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/favicon-32x32.png +0 -0
  301. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/login/event.js +0 -0
  302. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/logout/event.js +0 -0
  303. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.amber.min.css +0 -0
  304. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.blue.min.css +0 -0
  305. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.cyan.min.css +0 -0
  306. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.fuchsia.min.css +0 -0
  307. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.green.min.css +0 -0
  308. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.grey.min.css +0 -0
  309. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.indigo.min.css +0 -0
  310. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.jade.min.css +0 -0
  311. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.lime.min.css +0 -0
  312. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.min.css +0 -0
  313. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.orange.min.css +0 -0
  314. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.pink.min.css +0 -0
  315. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.pumpkin.min.css +0 -0
  316. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.purple.min.css +0 -0
  317. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.red.min.css +0 -0
  318. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.sand.min.css +0 -0
  319. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.slate.min.css +0 -0
  320. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.violet.min.css +0 -0
  321. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.yellow.min.css +0 -0
  322. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/pico-css/pico.zinc.min.css +0 -0
  323. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/session/common-util.js +0 -0
  324. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/session/current-session.js +0 -0
  325. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/session/event.js +0 -0
  326. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/resources/session/past-session.js +0 -0
  327. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/static/static_route.py +0 -0
  328. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/task_input_api_route.py +0 -0
  329. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_route/task_session_api_route.py +0 -0
  330. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_schema/session.py +0 -0
  331. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_schema/token.py +0 -0
  332. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_schema/user.py +0 -0
  333. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_util/cookie.py +0 -0
  334. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_util/html.py +0 -0
  335. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_util/token.py +0 -0
  336. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/runner/web_util/user.py +0 -0
  337. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session/__init__.py +0 -0
  338. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session/any_session.py +0 -0
  339. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session/session.py +0 -0
  340. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session_state_log/__init__.py +0 -0
  341. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session_state_log/session_state_log.py +0 -0
  342. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session_state_logger/__init__.py +0 -0
  343. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session_state_logger/any_session_state_logger.py +0 -0
  344. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session_state_logger/file_session_state_logger.py +0 -0
  345. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/session_state_logger/session_state_logger_factory.py +0 -0
  346. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/__init__.py +0 -0
  347. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/any_task.py +0 -0
  348. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base/__init__.py +0 -0
  349. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base/context.py +0 -0
  350. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base/execution.py +0 -0
  351. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base/lifecycle.py +0 -0
  352. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base/monitoring.py +0 -0
  353. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base/operators.py +0 -0
  354. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base_task.py +0 -0
  355. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/base_trigger.py +0 -0
  356. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/cmd_task.py +0 -0
  357. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/http_check.py +0 -0
  358. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/__init__.py +0 -0
  359. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/agent.py +0 -0
  360. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/config.py +0 -0
  361. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/default_workflow/coding.md +0 -0
  362. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/default_workflow/copywriting.md +0 -0
  363. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/default_workflow/researching.md +0 -0
  364. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/error.py +0 -0
  365. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/print_node.py +0 -0
  366. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/prompt.py +0 -0
  367. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/tool_wrapper.py +0 -0
  368. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/llm/typing.py +0 -0
  369. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/make_task.py +0 -0
  370. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/rsync_task.py +0 -0
  371. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/scaffolder.py +0 -0
  372. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/scheduler.py +0 -0
  373. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/task.py +0 -0
  374. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task/tcp_check.py +0 -0
  375. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task_status/__init__.py +0 -0
  376. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/task_status/task_status.py +0 -0
  377. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/__init__.py +0 -0
  378. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/attr.py +0 -0
  379. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/callable.py +0 -0
  380. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cli/__init__.py +0 -0
  381. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cli/markdown.py +0 -0
  382. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cli/style.py +0 -0
  383. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cli/subcommand.py +0 -0
  384. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cmd/__init__.py +0 -0
  385. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cmd/command.py +0 -0
  386. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cmd/remote.py +0 -0
  387. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/__init__.py +0 -0
  388. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modification_mode.py +0 -0
  389. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_class.py +0 -0
  390. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_class_parent.py +0 -0
  391. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_class_property.py +0 -0
  392. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_dict.py +0 -0
  393. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_function.py +0 -0
  394. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_function_call.py +0 -0
  395. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_method.py +0 -0
  396. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/codemod/modify_module.py +0 -0
  397. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/cron.py +0 -0
  398. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/file.py +0 -0
  399. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/git.py +0 -0
  400. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/git_diff_model.py +0 -0
  401. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/git_subtree.py +0 -0
  402. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/git_subtree_model.py +0 -0
  403. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/group.py +0 -0
  404. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/init_path.py +0 -0
  405. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/llm/prompt.py +0 -0
  406. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/load.py +0 -0
  407. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/run.py +0 -0
  408. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/string/__init__.py +0 -0
  409. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/string/conversion.py +0 -0
  410. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/string/format.py +0 -0
  411. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/string/name.py +0 -0
  412. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/todo.py +0 -0
  413. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/todo_model.py +0 -0
  414. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/util/truncate.py +0 -0
  415. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/xcom/__init__.py +0 -0
  416. {zrb-1.15.12 → zrb-1.15.14}/src/zrb/xcom/xcom.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: zrb
3
- Version: 1.15.12
3
+ Version: 1.15.14
4
4
  Summary: Your Automation Powerhouse
5
5
  License: AGPL-3.0-or-later
6
6
  Keywords: Automation,Task Runner,Code Generator,Monorepo,Low Code
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "zrb"
3
- version = "1.15.12"
3
+ version = "1.15.14"
4
4
  description = "Your Automation Powerhouse"
5
5
  authors = ["Go Frendi Gunawan <gofrendiasgard@gmail.com>"]
6
6
  license = "AGPL-3.0-or-later"
@@ -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("https://en.wikipedia.org/w/api.php", params=params)
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("http://export.arxiv.org/api/query", params=params)
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
- context_path = key[len("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
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
- for _, sections in reversed(all_sections):
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
- workflow_name = key.replace("Workflow:", "").lower().strip()
69
- workflows[workflow_name] = value
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, content: str, context_path: str | None = None, cwd: str | None = None
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 the nearest configuration file."""
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
- 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)
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
- # 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))
124
+ abs_context_path = os.path.abspath(os.path.join(cwd, context_path))
96
125
 
97
- # Find existing key
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
- 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:
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
- # Add new entry
117
- new_key = f"Context: {context_path}"
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 ConversationHistory.read_from_source(
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.fetch_newest_notes()
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.