zrb 1.9.12__tar.gz → 1.9.14__tar.gz

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