zrb 1.16.2__tar.gz → 1.16.4__tar.gz

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