geny-executor 2.0.6__tar.gz → 2.1.0__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 (620) hide show
  1. {geny_executor-2.0.6 → geny_executor-2.1.0}/PKG-INFO +1 -1
  2. {geny_executor-2.0.6 → geny_executor-2.1.0}/pyproject.toml +1 -1
  3. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/__init__.py +3 -1
  4. geny_executor-2.1.0/src/geny_executor/core/errors.py +333 -0
  5. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/pipeline.py +36 -5
  6. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/artifact/default/stage.py +15 -3
  7. geny_executor-2.1.0/tests/contract/test_error_codes_stability.py +203 -0
  8. geny_executor-2.0.6/src/geny_executor/core/errors.py +0 -145
  9. {geny_executor-2.0.6 → geny_executor-2.1.0}/.gitignore +0 -0
  10. {geny_executor-2.0.6 → geny_executor-2.1.0}/LICENSE +0 -0
  11. {geny_executor-2.0.6 → geny_executor-2.1.0}/README.md +0 -0
  12. {geny_executor-2.0.6 → geny_executor-2.1.0}/README_ko.md +0 -0
  13. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/channels/__init__.py +0 -0
  14. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/channels/send_message_channel.py +0 -0
  15. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/channels/user_file_channel.py +0 -0
  16. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/__init__.py +0 -0
  17. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/artifact.py +0 -0
  18. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/builder.py +0 -0
  19. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/config.py +0 -0
  20. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/diff.py +0 -0
  21. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/environment.py +0 -0
  22. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/introspection.py +0 -0
  23. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/mutation.py +0 -0
  24. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/presets.py +0 -0
  25. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/result.py +0 -0
  26. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/schema.py +0 -0
  27. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/shared_keys.py +0 -0
  28. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/slot.py +0 -0
  29. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/snapshot.py +0 -0
  30. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/stage.py +0 -0
  31. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/core/state.py +0 -0
  32. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/cron/__init__.py +0 -0
  33. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/cron/runner.py +0 -0
  34. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/cron/store_abc.py +0 -0
  35. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/cron/store_impl/__init__.py +0 -0
  36. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/cron/store_impl/file_backed.py +0 -0
  37. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/cron/store_impl/in_memory.py +0 -0
  38. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/cron/types.py +0 -0
  39. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/events/__init__.py +0 -0
  40. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/events/bus.py +0 -0
  41. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/events/types.py +0 -0
  42. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/history/__init__.py +0 -0
  43. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/history/ab_test.py +0 -0
  44. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/history/cost.py +0 -0
  45. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/history/models.py +0 -0
  46. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/history/monitor.py +0 -0
  47. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/history/replay.py +0 -0
  48. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/history/service.py +0 -0
  49. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/hooks/__init__.py +0 -0
  50. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/hooks/config.py +0 -0
  51. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/hooks/events.py +0 -0
  52. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/hooks/runner.py +0 -0
  53. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/__init__.py +0 -0
  54. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/_cli_runtime.py +0 -0
  55. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/anthropic.py +0 -0
  56. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/base.py +0 -0
  57. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/claude_code.py +0 -0
  58. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/credentials.py +0 -0
  59. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/google.py +0 -0
  60. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/openai.py +0 -0
  61. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/registry.py +0 -0
  62. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/translators/__init__.py +0 -0
  63. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/translators/_canonical.py +0 -0
  64. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/translators/_cli.py +0 -0
  65. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/types.py +0 -0
  66. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/llm_client/vllm.py +0 -0
  67. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/__init__.py +0 -0
  68. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/_locks.py +0 -0
  69. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/_progressive.py +0 -0
  70. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/composite/__init__.py +0 -0
  71. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/composite/handles.py +0 -0
  72. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/composite/provider.py +0 -0
  73. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/composite/routing.py +0 -0
  74. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/composite/snapshot.py +0 -0
  75. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/embedding/__init__.py +0 -0
  76. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/embedding/client.py +0 -0
  77. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/embedding/google.py +0 -0
  78. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/embedding/local.py +0 -0
  79. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/embedding/openai.py +0 -0
  80. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/embedding/registry.py +0 -0
  81. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/embedding/voyage.py +0 -0
  82. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/factory.py +0 -0
  83. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/presets.py +0 -0
  84. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/provider.py +0 -0
  85. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/__init__.py +0 -0
  86. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/ephemeral.py +0 -0
  87. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/file/__init__.py +0 -0
  88. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/file/config.py +0 -0
  89. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/file/frontmatter.py +0 -0
  90. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/file/index_store.py +0 -0
  91. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/file/layout.py +0 -0
  92. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/file/ltm_store.py +0 -0
  93. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/file/notes_store.py +0 -0
  94. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/file/provider.py +0 -0
  95. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/file/snapshot.py +0 -0
  96. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/file/stm_store.py +0 -0
  97. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/file/timezone.py +0 -0
  98. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/file/vector_store.py +0 -0
  99. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/sql/__init__.py +0 -0
  100. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/sql/config.py +0 -0
  101. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/sql/connection.py +0 -0
  102. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/sql/index_store.py +0 -0
  103. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/sql/ltm_store.py +0 -0
  104. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/sql/notes_store.py +0 -0
  105. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/sql/provider.py +0 -0
  106. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/sql/schema.py +0 -0
  107. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/sql/snapshot.py +0 -0
  108. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/sql/stm_store.py +0 -0
  109. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/providers/sql/vector_store.py +0 -0
  110. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/retriever.py +0 -0
  111. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/memory/strategy.py +0 -0
  112. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/notifications/__init__.py +0 -0
  113. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/notifications/registry.py +0 -0
  114. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/permission/__init__.py +0 -0
  115. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/permission/loader.py +0 -0
  116. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/permission/matrix.py +0 -0
  117. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/permission/types.py +0 -0
  118. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/py.typed +0 -0
  119. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/runtime/__init__.py +0 -0
  120. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/runtime/task_executors.py +0 -0
  121. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/runtime/task_runner.py +0 -0
  122. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/security/__init__.py +0 -0
  123. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/security/import_validator.py +0 -0
  124. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/security/script_sandbox.py +0 -0
  125. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/session/__init__.py +0 -0
  126. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/session/freshness.py +0 -0
  127. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/session/manager.py +0 -0
  128. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/session/persistence.py +0 -0
  129. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/session/session.py +0 -0
  130. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/settings/__init__.py +0 -0
  131. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/settings/loader.py +0 -0
  132. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/settings/section_registry.py +0 -0
  133. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/__init__.py +0 -0
  134. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/bundled/batch/SKILL.md +0 -0
  135. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/bundled/debug/SKILL.md +0 -0
  136. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/bundled/loop/SKILL.md +0 -0
  137. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/bundled/lorem-ipsum/SKILL.md +0 -0
  138. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/bundled/simplify/SKILL.md +0 -0
  139. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/bundled/skillify/SKILL.md +0 -0
  140. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/bundled/stuck/SKILL.md +0 -0
  141. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/bundled/verify/SKILL.md +0 -0
  142. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/bundled_skills.py +0 -0
  143. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/fork.py +0 -0
  144. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/frontmatter.py +0 -0
  145. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/loader.py +0 -0
  146. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/mcp_bridge.py +0 -0
  147. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/path_match.py +0 -0
  148. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/registry.py +0 -0
  149. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/shell_blocks.py +0 -0
  150. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/skill_tool.py +0 -0
  151. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/types.py +0 -0
  152. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/skills/watcher.py +0 -0
  153. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/__init__.py +0 -0
  154. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/__init__.py +0 -0
  155. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/_helpers.py +0 -0
  156. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/cancel.py +0 -0
  157. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/clear.py +0 -0
  158. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/compact.py +0 -0
  159. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/config.py +0 -0
  160. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/context.py +0 -0
  161. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/cost.py +0 -0
  162. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/help.py +0 -0
  163. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/memory.py +0 -0
  164. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/model.py +0 -0
  165. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/preset_info.py +0 -0
  166. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/status.py +0 -0
  167. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/built_in/tasks.py +0 -0
  168. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/md_template.py +0 -0
  169. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/parser.py +0 -0
  170. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/registry.py +0 -0
  171. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/slash_commands/types.py +0 -0
  172. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/__init__.py +0 -0
  173. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s01_input/__init__.py +0 -0
  174. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s01_input/artifact/__init__.py +0 -0
  175. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s01_input/artifact/default/__init__.py +0 -0
  176. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s01_input/artifact/default/normalizers.py +0 -0
  177. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s01_input/artifact/default/stage.py +0 -0
  178. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s01_input/artifact/default/validators.py +0 -0
  179. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s01_input/interface.py +0 -0
  180. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s01_input/normalizers.py +0 -0
  181. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s01_input/stage.py +0 -0
  182. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s01_input/types.py +0 -0
  183. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s01_input/validators.py +0 -0
  184. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/__init__.py +0 -0
  185. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/artifact/__init__.py +0 -0
  186. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/artifact/default/__init__.py +0 -0
  187. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/artifact/default/compactors.py +0 -0
  188. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/artifact/default/retrievers.py +0 -0
  189. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/artifact/default/stage.py +0 -0
  190. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/artifact/default/strategies.py +0 -0
  191. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/compactors.py +0 -0
  192. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/interface.py +0 -0
  193. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/retrievers.py +0 -0
  194. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/stage.py +0 -0
  195. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/strategies.py +0 -0
  196. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s02_context/types.py +0 -0
  197. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s03_system/__init__.py +0 -0
  198. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s03_system/artifact/__init__.py +0 -0
  199. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s03_system/artifact/default/__init__.py +0 -0
  200. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s03_system/artifact/default/builders.py +0 -0
  201. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s03_system/artifact/default/stage.py +0 -0
  202. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s03_system/builders.py +0 -0
  203. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s03_system/interface.py +0 -0
  204. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s03_system/persona/__init__.py +0 -0
  205. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s03_system/persona/builder.py +0 -0
  206. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s03_system/persona/provider.py +0 -0
  207. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s03_system/stage.py +0 -0
  208. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s04_guard/__init__.py +0 -0
  209. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s04_guard/artifact/__init__.py +0 -0
  210. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s04_guard/artifact/default/__init__.py +0 -0
  211. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s04_guard/artifact/default/guards.py +0 -0
  212. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s04_guard/artifact/default/stage.py +0 -0
  213. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s04_guard/guards.py +0 -0
  214. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s04_guard/interface.py +0 -0
  215. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s04_guard/stage.py +0 -0
  216. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s04_guard/types.py +0 -0
  217. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s05_cache/__init__.py +0 -0
  218. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s05_cache/artifact/__init__.py +0 -0
  219. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s05_cache/artifact/default/__init__.py +0 -0
  220. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s05_cache/artifact/default/stage.py +0 -0
  221. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s05_cache/artifact/default/strategies.py +0 -0
  222. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s05_cache/interface.py +0 -0
  223. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s05_cache/stage.py +0 -0
  224. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s05_cache/strategies.py +0 -0
  225. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/__init__.py +0 -0
  226. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/_translate.py +0 -0
  227. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/artifact/__init__.py +0 -0
  228. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/artifact/default/__init__.py +0 -0
  229. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/artifact/default/providers.py +0 -0
  230. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/artifact/default/retry.py +0 -0
  231. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/artifact/default/router.py +0 -0
  232. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/artifact/google/__init__.py +0 -0
  233. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/artifact/google/providers.py +0 -0
  234. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/artifact/openai/__init__.py +0 -0
  235. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/artifact/openai/providers.py +0 -0
  236. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/interface.py +0 -0
  237. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/providers.py +0 -0
  238. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/retry.py +0 -0
  239. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/stage.py +0 -0
  240. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s06_api/types.py +0 -0
  241. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s07_token/__init__.py +0 -0
  242. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s07_token/artifact/__init__.py +0 -0
  243. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s07_token/artifact/default/__init__.py +0 -0
  244. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s07_token/artifact/default/pricing.py +0 -0
  245. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s07_token/artifact/default/stage.py +0 -0
  246. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s07_token/artifact/default/trackers.py +0 -0
  247. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s07_token/interface.py +0 -0
  248. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s07_token/pricing.py +0 -0
  249. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s07_token/stage.py +0 -0
  250. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s07_token/trackers.py +0 -0
  251. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s08_think/__init__.py +0 -0
  252. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s08_think/artifact/default/__init__.py +0 -0
  253. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s08_think/artifact/default/budget.py +0 -0
  254. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s08_think/artifact/default/processors.py +0 -0
  255. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s08_think/artifact/default/stage.py +0 -0
  256. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s08_think/interface.py +0 -0
  257. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s08_think/processors.py +0 -0
  258. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s08_think/stage.py +0 -0
  259. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s08_think/types.py +0 -0
  260. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s09_parse/__init__.py +0 -0
  261. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s09_parse/artifact/default/__init__.py +0 -0
  262. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s09_parse/artifact/default/parsers.py +0 -0
  263. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s09_parse/artifact/default/signals.py +0 -0
  264. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s09_parse/artifact/default/stage.py +0 -0
  265. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s09_parse/interface.py +0 -0
  266. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s09_parse/parsers.py +0 -0
  267. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s09_parse/signals.py +0 -0
  268. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s09_parse/stage.py +0 -0
  269. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s09_parse/types.py +0 -0
  270. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/__init__.py +0 -0
  271. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/artifact/__init__.py +0 -0
  272. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/artifact/default/__init__.py +0 -0
  273. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/artifact/default/executors.py +0 -0
  274. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/artifact/default/routers.py +0 -0
  275. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/artifact/default/stage.py +0 -0
  276. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/executors.py +0 -0
  277. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/interface.py +0 -0
  278. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/persistence.py +0 -0
  279. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/routers.py +0 -0
  280. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/stage.py +0 -0
  281. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/state_mutation.py +0 -0
  282. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s10_tool/streaming.py +0 -0
  283. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s11_tool_review/__init__.py +0 -0
  284. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s11_tool_review/artifact/__init__.py +0 -0
  285. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s11_tool_review/artifact/default/__init__.py +0 -0
  286. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s11_tool_review/artifact/default/reviewers.py +0 -0
  287. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s11_tool_review/artifact/default/stage.py +0 -0
  288. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s11_tool_review/interface.py +0 -0
  289. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s12_agent/__init__.py +0 -0
  290. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s12_agent/artifact/__init__.py +0 -0
  291. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s12_agent/artifact/default/__init__.py +0 -0
  292. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s12_agent/artifact/default/orchestrators.py +0 -0
  293. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s12_agent/artifact/default/stage.py +0 -0
  294. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s12_agent/interface.py +0 -0
  295. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s12_agent/orchestrators.py +0 -0
  296. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s12_agent/stage.py +0 -0
  297. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s12_agent/subagent_type.py +0 -0
  298. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s12_agent/types.py +0 -0
  299. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s13_task_registry/__init__.py +0 -0
  300. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s13_task_registry/artifact/__init__.py +0 -0
  301. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s13_task_registry/artifact/default/__init__.py +0 -0
  302. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s13_task_registry/artifact/default/file_backed_registry.py +0 -0
  303. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s13_task_registry/artifact/default/policies.py +0 -0
  304. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s13_task_registry/artifact/default/registry.py +0 -0
  305. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s13_task_registry/artifact/default/stage.py +0 -0
  306. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s13_task_registry/interface.py +0 -0
  307. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s13_task_registry/types.py +0 -0
  308. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s14_evaluate/__init__.py +0 -0
  309. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s14_evaluate/artifact/__init__.py +0 -0
  310. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/__init__.py +0 -0
  311. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/strategy.py +0 -0
  312. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s14_evaluate/artifact/default/__init__.py +0 -0
  313. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s14_evaluate/artifact/default/stage.py +0 -0
  314. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s14_evaluate/artifact/default/strategies.py +0 -0
  315. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s14_evaluate/interface.py +0 -0
  316. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s14_evaluate/stage.py +0 -0
  317. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s14_evaluate/strategies.py +0 -0
  318. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s14_evaluate/types.py +0 -0
  319. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s15_hitl/__init__.py +0 -0
  320. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s15_hitl/artifact/__init__.py +0 -0
  321. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s15_hitl/artifact/default/__init__.py +0 -0
  322. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s15_hitl/artifact/default/requesters.py +0 -0
  323. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s15_hitl/artifact/default/stage.py +0 -0
  324. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s15_hitl/artifact/default/timeouts.py +0 -0
  325. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s15_hitl/interface.py +0 -0
  326. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s15_hitl/types.py +0 -0
  327. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s16_loop/__init__.py +0 -0
  328. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s16_loop/artifact/__init__.py +0 -0
  329. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s16_loop/artifact/default/__init__.py +0 -0
  330. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s16_loop/artifact/default/controllers.py +0 -0
  331. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s16_loop/artifact/default/stage.py +0 -0
  332. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s16_loop/controllers.py +0 -0
  333. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s16_loop/interface.py +0 -0
  334. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s16_loop/stage.py +0 -0
  335. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s17_emit/__init__.py +0 -0
  336. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s17_emit/artifact/__init__.py +0 -0
  337. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s17_emit/artifact/default/__init__.py +0 -0
  338. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s17_emit/artifact/default/emitters.py +0 -0
  339. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s17_emit/artifact/default/stage.py +0 -0
  340. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s17_emit/emitters.py +0 -0
  341. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s17_emit/interface.py +0 -0
  342. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s17_emit/stage.py +0 -0
  343. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s17_emit/types.py +0 -0
  344. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s18_memory/__init__.py +0 -0
  345. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s18_memory/_dehydrate.py +0 -0
  346. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s18_memory/artifact/__init__.py +0 -0
  347. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s18_memory/artifact/default/__init__.py +0 -0
  348. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s18_memory/artifact/default/persistence.py +0 -0
  349. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s18_memory/artifact/default/stage.py +0 -0
  350. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s18_memory/artifact/default/strategies.py +0 -0
  351. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s18_memory/insight.py +0 -0
  352. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s18_memory/interface.py +0 -0
  353. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s18_memory/persistence.py +0 -0
  354. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s18_memory/stage.py +0 -0
  355. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s18_memory/strategies.py +0 -0
  356. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s19_summarize/__init__.py +0 -0
  357. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s19_summarize/artifact/__init__.py +0 -0
  358. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s19_summarize/artifact/default/__init__.py +0 -0
  359. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s19_summarize/artifact/default/importance.py +0 -0
  360. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s19_summarize/artifact/default/stage.py +0 -0
  361. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s19_summarize/artifact/default/summarizers.py +0 -0
  362. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s19_summarize/frequency_policy.py +0 -0
  363. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s19_summarize/interface.py +0 -0
  364. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s19_summarize/types.py +0 -0
  365. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s20_persist/__init__.py +0 -0
  366. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s20_persist/artifact/__init__.py +0 -0
  367. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s20_persist/artifact/default/__init__.py +0 -0
  368. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s20_persist/artifact/default/frequencies.py +0 -0
  369. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s20_persist/artifact/default/persisters.py +0 -0
  370. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s20_persist/artifact/default/stage.py +0 -0
  371. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s20_persist/interface.py +0 -0
  372. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s20_persist/restore.py +0 -0
  373. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s20_persist/types.py +0 -0
  374. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s21_yield/__init__.py +0 -0
  375. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s21_yield/artifact/__init__.py +0 -0
  376. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s21_yield/artifact/default/__init__.py +0 -0
  377. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s21_yield/artifact/default/formatters.py +0 -0
  378. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s21_yield/artifact/default/multi_format.py +0 -0
  379. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s21_yield/artifact/default/stage.py +0 -0
  380. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s21_yield/formatters.py +0 -0
  381. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s21_yield/interface.py +0 -0
  382. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/stages/s21_yield/stage.py +0 -0
  383. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/__init__.py +0 -0
  384. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/adhoc.py +0 -0
  385. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/base.py +0 -0
  386. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/__init__.py +0 -0
  387. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/_path_guard.py +0 -0
  388. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/agent_tool.py +0 -0
  389. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/ask_user_question_tool.py +0 -0
  390. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/bash_tool.py +0 -0
  391. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/cron_tools.py +0 -0
  392. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/dev_tools.py +0 -0
  393. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/edit_tool.py +0 -0
  394. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/glob_tool.py +0 -0
  395. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/grep_tool.py +0 -0
  396. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/mcp_wrapper_tools.py +0 -0
  397. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/notebook_edit_tool.py +0 -0
  398. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/operator_tools.py +0 -0
  399. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/plan_mode_tools.py +0 -0
  400. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/push_notification_tool.py +0 -0
  401. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/read_tool.py +0 -0
  402. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/send_message_tool.py +0 -0
  403. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/task_tools.py +0 -0
  404. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/todo_write_tool.py +0 -0
  405. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/tool_search_tool.py +0 -0
  406. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/web_fetch_tool.py +0 -0
  407. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/web_search_tool.py +0 -0
  408. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/worktree_tools.py +0 -0
  409. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/built_in/write_tool.py +0 -0
  410. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/composer.py +0 -0
  411. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/errors.py +0 -0
  412. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/mcp/__init__.py +0 -0
  413. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/mcp/adapter.py +0 -0
  414. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/mcp/credentials.py +0 -0
  415. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/mcp/errors.py +0 -0
  416. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/mcp/manager.py +0 -0
  417. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/mcp/oauth.py +0 -0
  418. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/mcp/state.py +0 -0
  419. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/mcp/uri.py +0 -0
  420. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/provider.py +0 -0
  421. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/providers.py +0 -0
  422. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/registry.py +0 -0
  423. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/sandbox.py +0 -0
  424. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/scope.py +0 -0
  425. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/tools/stage_binding.py +0 -0
  426. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/workspace/__init__.py +0 -0
  427. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/workspace/stack.py +0 -0
  428. {geny_executor-2.0.6 → geny_executor-2.1.0}/src/geny_executor/workspace/types.py +0 -0
  429. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/__init__.py +0 -0
  430. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/_fixtures/__init__.py +0 -0
  431. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/_fixtures/fake_claude.py +0 -0
  432. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/_fixtures/fake_echo_cli.py +0 -0
  433. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/__init__.py +0 -0
  434. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/conftest.py +0 -0
  435. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/fixtures/__init__.py +0 -0
  436. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/fixtures/adapter/__init__.py +0 -0
  437. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/fixtures/adapter/adapter.py +0 -0
  438. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/test_c1_six_layer_retrieval.py +0 -0
  439. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/test_c2_execution_recording.py +0 -0
  440. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/test_c3_reflection_and_promotion.py +0 -0
  441. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/test_c4_rest_coverage.py +0 -0
  442. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/test_c5_embedding_migration.py +0 -0
  443. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/test_c6_session_resume.py +0 -0
  444. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/test_c7_adapter_parity.py +0 -0
  445. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/completeness/test_spec_loads.py +0 -0
  446. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/__init__.py +0 -0
  447. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/memory_provider_contract.py +0 -0
  448. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_embedding_clients.py +0 -0
  449. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_auto_vector.py +0 -0
  450. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_composite.py +0 -0
  451. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_composite_routing.py +0 -0
  452. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_curated_global.py +0 -0
  453. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_ephemeral.py +0 -0
  454. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_factory.py +0 -0
  455. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_file.py +0 -0
  456. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_file_layout.py +0 -0
  457. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_file_vector.py +0 -0
  458. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_sql.py +0 -0
  459. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_sql_dialect.py +0 -0
  460. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_sql_schema.py +0 -0
  461. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_memory_provider_sql_vector.py +0 -0
  462. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/contract/test_stage_uniformity.py +0 -0
  463. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/integration/test_cycle_ab_cross_import.py +0 -0
  464. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/integration/test_integration.py +0 -0
  465. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/__init__.py +0 -0
  466. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/conformance/__init__.py +0 -0
  467. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/conformance/harness.py +0 -0
  468. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/conformance/test_anthropic.py +0 -0
  469. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/conformance/test_claude_code_cli.py +0 -0
  470. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/conformance/test_google.py +0 -0
  471. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/conformance/test_openai.py +0 -0
  472. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/conformance/test_vllm.py +0 -0
  473. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/unit/__init__.py +0 -0
  474. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/unit/test_claude_code.py +0 -0
  475. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/unit/test_cli_runtime.py +0 -0
  476. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/unit/test_credentials.py +0 -0
  477. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/llm_client/unit/test_translators_cli_claude_code.py +0 -0
  478. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/__init__.py +0 -0
  479. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_adaptive_model_router.py +0 -0
  480. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_adaptive_thinking_budget.py +0 -0
  481. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_adhoc_providers.py +0 -0
  482. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_agent_tool.py +0 -0
  483. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_artifact_metadata.py +0 -0
  484. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_ask_user_question_tool.py +0 -0
  485. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_binary_classify_manifest.py +0 -0
  486. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_built_in_autoregister.py +0 -0
  487. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_builtin_capabilities.py +0 -0
  488. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_builtin_features.py +0 -0
  489. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_composite_set_hooks.py +0 -0
  490. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_cron_runner.py +0 -0
  491. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_cron_store.py +0 -0
  492. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_cron_tools.py +0 -0
  493. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_dev_tools.py +0 -0
  494. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_dynamic_persona_builder.py +0 -0
  495. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_errors_categories.py +0 -0
  496. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_evaluation_chain.py +0 -0
  497. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_fork_multi_provider.py +0 -0
  498. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_hierarchical_sidecars.py +0 -0
  499. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_hook_in_process.py +0 -0
  500. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_hook_runner.py +0 -0
  501. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_hooks_and_shared_keys.py +0 -0
  502. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_index_list_categories.py +0 -0
  503. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_index_render_vault_map.py +0 -0
  504. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_interaction_fields.py +0 -0
  505. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_introspection.py +0 -0
  506. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_llm_client_base.py +0 -0
  507. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_llm_client_capabilities.py +0 -0
  508. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_llm_client_registry.py +0 -0
  509. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_llm_client_request_types.py +0 -0
  510. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_llm_client_state.py +0 -0
  511. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_llm_summary_compactor.py +0 -0
  512. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_loop_agnostic_lock.py +0 -0
  513. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_manifest_provider_validation.py +0 -0
  514. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_manifest_v2.py +0 -0
  515. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_manifest_v3_migration.py +0 -0
  516. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_mcp_annotations_attach.py +0 -0
  517. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_mcp_credential_store.py +0 -0
  518. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_mcp_fsm.py +0 -0
  519. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_mcp_lifecycle.py +0 -0
  520. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_mcp_namespace.py +0 -0
  521. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_mcp_oauth.py +0 -0
  522. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_mcp_prompts_skills_bridge.py +0 -0
  523. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_mcp_resource_retriever.py +0 -0
  524. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_mcp_uri.py +0 -0
  525. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_mcp_wrapper_tools.py +0 -0
  526. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_memory_aware_retriever.py +0 -0
  527. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_memory_hooks_after_callbacks.py +0 -0
  528. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_memory_metadata_extension.py +0 -0
  529. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_multi_dim_budget_controller.py +0 -0
  530. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_multi_format_yield.py +0 -0
  531. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_multi_provider.py +0 -0
  532. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_multimodal.py +0 -0
  533. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_note_graph_queries.py +0 -0
  534. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_notebook_edit_tool.py +0 -0
  535. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_notes_load_pinned.py +0 -0
  536. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_operator_tools.py +0 -0
  537. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_ordered_emitter_chain.py +0 -0
  538. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_permission_matrix.py +0 -0
  539. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_permission_mode_promotions.py +0 -0
  540. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase1_foundation.py +0 -0
  541. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase1_pipeline.py +0 -0
  542. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase2_agent_loop.py +0 -0
  543. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase2_tools.py +0 -0
  544. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase3_context_memory.py +0 -0
  545. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase4_think_agent_evaluate.py +0 -0
  546. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase5_emit_presets_mcp.py +0 -0
  547. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase5_environment.py +0 -0
  548. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase6_history.py +0 -0
  549. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase6_integration.py +0 -0
  550. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase7_security.py +0 -0
  551. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase9a_preset_regen.py +0 -0
  552. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_phase9a_scaffolding.py +0 -0
  553. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_pipeline_attach_runtime.py +0 -0
  554. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_pipeline_from_manifest.py +0 -0
  555. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_pipeline_session_runtime.py +0 -0
  556. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_plan_mode_tools.py +0 -0
  557. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_progressive_disclosure.py +0 -0
  558. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_provider_driven_strategy.py +0 -0
  559. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_push_notification_tool.py +0 -0
  560. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_refresh_backlinks_extension.py +0 -0
  561. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_resolve_model_config.py +0 -0
  562. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_runtime_task_runner.py +0 -0
  563. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_s06_provider_selection.py +0 -0
  564. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_s13_file_backed_registry.py +0 -0
  565. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_s13_task_registry_output.py +0 -0
  566. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_s19_frequency_policy.py +0 -0
  567. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_s9b1_tool_review.py +0 -0
  568. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_s9b2_task_registry.py +0 -0
  569. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_s9b3_hitl.py +0 -0
  570. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_s9b4_summarize.py +0 -0
  571. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_s9b5_persist.py +0 -0
  572. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_s9c1_pipeline_resume.py +0 -0
  573. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_s9c2_restore_state.py +0 -0
  574. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_send_message_tool.py +0 -0
  575. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_settings_loader.py +0 -0
  576. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_skill_phase_10_1.py +0 -0
  577. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_skill_phase_10_2.py +0 -0
  578. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_skill_phase_10_3.py +0 -0
  579. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_skill_phase_10_4_bundled.py +0 -0
  580. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_skill_phase_10_5_fork.py +0 -0
  581. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_skill_phase_10_6_killer.py +0 -0
  582. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_skill_phase_10_7_watcher.py +0 -0
  583. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_skill_richer_schema.py +0 -0
  584. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_skill_tool.py +0 -0
  585. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_skills_foundation.py +0 -0
  586. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_slash_built_in_control.py +0 -0
  587. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_slash_built_in_introspection.py +0 -0
  588. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_slash_commands.py +0 -0
  589. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_slash_md_template.py +0 -0
  590. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_stage10_hook_wiring.py +0 -0
  591. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_stage10_partition_executor.py +0 -0
  592. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_stage10_permission_matrix.py +0 -0
  593. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_stage19_session_summary.py +0 -0
  594. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_state_mutation_wiring.py +0 -0
  595. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_state_shared_and_local.py +0 -0
  596. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_stm_append_event.py +0 -0
  597. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_streaming_tool_executor.py +0 -0
  598. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_structured_output_parser.py +0 -0
  599. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_structured_reflection.py +0 -0
  600. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_subagent_credential_propagation.py +0 -0
  601. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_subagent_descriptor.py +0 -0
  602. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_subagent_orchestrator_zero_arg.py +0 -0
  603. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_subagent_parallel.py +0 -0
  604. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_subagent_type_orchestrator.py +0 -0
  605. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_task_tools.py +0 -0
  606. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_todo_write_tool.py +0 -0
  607. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_tool_abc_uplift.py +0 -0
  608. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_tool_call_events.py +0 -0
  609. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_tool_errors.py +0 -0
  610. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_tool_lifecycle_hooks.py +0 -0
  611. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_tool_provider.py +0 -0
  612. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_tool_result_persistence.py +0 -0
  613. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_tool_search_tool.py +0 -0
  614. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_tool_stage_max_concurrency.py +0 -0
  615. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_web_fetch_tool.py +0 -0
  616. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_web_search_tool.py +0 -0
  617. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_workspace.py +0 -0
  618. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_workspace_propagation.py +0 -0
  619. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_workspace_tools_integration.py +0 -0
  620. {geny_executor-2.0.6 → geny_executor-2.1.0}/tests/unit/test_worktree_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: geny-executor
3
- Version: 2.0.6
3
+ Version: 2.1.0
4
4
  Summary: Harness-engineered agent pipeline library with 21-stage dual-abstraction architecture, built on the Anthropic API
5
5
  Project-URL: Homepage, https://github.com/CocoRoF/geny-executor
6
6
  Project-URL: Repository, https://github.com/CocoRoF/geny-executor
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "geny-executor"
7
- version = "2.0.6"
7
+ version = "2.1.0"
8
8
  description = "Harness-engineered agent pipeline library with 21-stage dual-abstraction architecture, built on the Anthropic API"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -29,6 +29,7 @@ from geny_executor.core.errors import (
29
29
  APIError,
30
30
  ToolExecutionError,
31
31
  ErrorCategory,
32
+ ExecutorErrorCode,
32
33
  MutationError,
33
34
  MutationLocked,
34
35
  )
@@ -95,7 +96,7 @@ from geny_executor.memory import (
95
96
  ProviderDrivenStrategy,
96
97
  )
97
98
 
98
- __version__ = "2.0.6"
99
+ __version__ = "2.1.0"
99
100
 
100
101
  __all__ = [
101
102
  # Core
@@ -165,6 +166,7 @@ __all__ = [
165
166
  "APIError",
166
167
  "ToolExecutionError",
167
168
  "ErrorCategory",
169
+ "ExecutorErrorCode",
168
170
  "MutationError",
169
171
  "MutationLocked",
170
172
  # Schema & Mutation
@@ -0,0 +1,333 @@
1
+ """Error classification and exception hierarchy.
2
+
3
+ Two parallel classification dimensions
4
+ --------------------------------------
5
+
6
+ * :class:`ErrorCategory` (existing) — coarse, retry-aware buckets used by
7
+ the executor's own retry / backoff machinery. Stable since 2.0.x; one
8
+ value per *behavioural* class (recoverable vs fatal).
9
+
10
+ * :class:`ExecutorErrorCode` (new in 2.1.0) — fine-grained, stable string
11
+ identifier the host (Geny, CI runners, downstream consumers) uses for
12
+ logging, i18n, telemetry grouping, and alerting. Each code is a stable
13
+ string in the form ``exec.<component>.<reason>``. Once published, a
14
+ code's value MUST NOT change — see ``docs/error_codes.md``.
15
+
16
+ The two coexist on every :class:`GenyExecutorError`:
17
+
18
+ - ``e.code`` answers *what specifically went wrong* (``exec.cli.auth_failed``)
19
+ - ``e.category`` (on :class:`APIError`) answers *should we retry?*
20
+ (``ErrorCategory.CLI_AUTH_FAILED.is_fatal == True``)
21
+
22
+ Backward compatibility
23
+ ----------------------
24
+ Existing call sites of the form
25
+ ``raise APIError("...", category=ErrorCategory.CLI_AUTH_FAILED)``
26
+ keep working unchanged — the base class now derives a reasonable default
27
+ ``code`` from the ``category`` argument via :data:`_CATEGORY_TO_CODE_DEFAULT`.
28
+ Sites that want to be specific can pass ``code=ExecutorErrorCode.EXEC_CLI_AUTH_FAILED``
29
+ explicitly; the explicit code wins. The ``code`` attribute is always set
30
+ (no ``None`` checks needed downstream).
31
+ """
32
+
33
+ from enum import Enum
34
+ from typing import Optional
35
+
36
+
37
+ # ─────────────────────────────────────────────────────── ExecutorErrorCode ─
38
+
39
+
40
+ class ExecutorErrorCode(str, Enum):
41
+ """Stable, fine-grained error identifiers (2.1.0+).
42
+
43
+ Format: ``exec.<component>.<reason>``. Lowercase, dot-separated, ≤4
44
+ segments deep. Designed for:
45
+
46
+ - Host logging / Sentry grouping
47
+ - Frontend i18n key lookup (Geny maps ``exec.cli.auth_failed`` →
48
+ ``t("executor.exec.cli.auth_failed")``)
49
+ - Telemetry alerting (route ``exec.api.*`` rate to a different
50
+ channel than ``exec.cli.*``)
51
+ - Operator dashboards
52
+
53
+ Stability contract:
54
+ - **NEVER renumber** — once shipped, a code's string value is API surface.
55
+ - **NEVER repurpose** — if the meaning of a code drifts, deprecate
56
+ and add a new code rather than mutating the old one.
57
+ - Adding new codes is non-breaking.
58
+
59
+ The full list with descriptions, recoverability, and example
60
+ scenarios lives in ``docs/error_codes.md`` — keep it in sync.
61
+ """
62
+
63
+ # ── exec.api.* — vendor API surface (Anthropic/OpenAI/Google/vLLM SDK) ──
64
+ EXEC_API_AUTH_INVALID_KEY = "exec.api.auth.invalid_key"
65
+ EXEC_API_AUTH_EXPIRED = "exec.api.auth.expired"
66
+ EXEC_API_RATE_LIMITED = "exec.api.rate_limited"
67
+ EXEC_API_TIMEOUT = "exec.api.timeout"
68
+ EXEC_API_NETWORK = "exec.api.network"
69
+ EXEC_API_TOKEN_LIMIT = "exec.api.token_limit"
70
+ EXEC_API_BAD_REQUEST = "exec.api.bad_request"
71
+ EXEC_API_SERVER_ERROR = "exec.api.server_error"
72
+ EXEC_API_TERMINAL = "exec.api.terminal"
73
+ EXEC_API_UNKNOWN = "exec.api.unknown"
74
+ EXEC_API_NO_CLIENT = "exec.api.no_client"
75
+ EXEC_API_STREAM_INCOMPLETE = "exec.api.stream_incomplete"
76
+ EXEC_API_RETRY_EXHAUSTED = "exec.api.retry_exhausted"
77
+
78
+ # ── exec.cli.* — CLI-driven backends (claude_code_cli) ──
79
+ EXEC_CLI_BINARY_NOT_FOUND = "exec.cli.binary_not_found"
80
+ EXEC_CLI_AUTH_FAILED = "exec.cli.auth_failed"
81
+ EXEC_CLI_TIMEOUT = "exec.cli.timeout"
82
+ EXEC_CLI_PROTOCOL_ERROR = "exec.cli.protocol_error"
83
+ EXEC_CLI_PERMISSION_DENIED = "exec.cli.permission_denied"
84
+ EXEC_CLI_EXITED = "exec.cli.exited"
85
+
86
+ # ── exec.pipeline.* / exec.stage.* — pipeline / stage orchestration ──
87
+ EXEC_PIPELINE_NOT_INITIALIZED = "exec.pipeline.not_initialized"
88
+ EXEC_PIPELINE_INVALID_MANIFEST = "exec.pipeline.invalid_manifest"
89
+ EXEC_STAGE_FAILED = "exec.stage.failed"
90
+ EXEC_STAGE_GUARD_REJECTED = "exec.stage.guard_rejected"
91
+
92
+ # ── exec.tool.* — Stage 10 tool dispatch ──
93
+ EXEC_TOOL_UNKNOWN = "exec.tool.unknown"
94
+ EXEC_TOOL_INVALID_INPUT = "exec.tool.invalid_input"
95
+ EXEC_TOOL_ACCESS_DENIED = "exec.tool.access_denied"
96
+ EXEC_TOOL_CRASHED = "exec.tool.crashed"
97
+ EXEC_TOOL_TRANSPORT = "exec.tool.transport"
98
+
99
+ # ── exec.mutation.* — runtime config mutation ──
100
+ EXEC_MUTATION_INVALID = "exec.mutation.invalid"
101
+ EXEC_MUTATION_LOCKED = "exec.mutation.locked"
102
+
103
+ # ── exec.mcp.* — MCP server lifecycle ──
104
+ EXEC_MCP_CONNECT_FAILED = "exec.mcp.connect_failed"
105
+ EXEC_MCP_INITIALIZE_FAILED = "exec.mcp.initialize_failed"
106
+ EXEC_MCP_LIST_TOOLS_FAILED = "exec.mcp.list_tools_failed"
107
+ EXEC_MCP_SDK_MISSING = "exec.mcp.sdk_missing"
108
+
109
+ # ── exec.unknown — fallback when no code is attached ──
110
+ EXEC_UNKNOWN = "exec.unknown"
111
+
112
+ @classmethod
113
+ def from_category(cls, category: "ErrorCategory") -> "ExecutorErrorCode":
114
+ """Map a legacy ``ErrorCategory`` to a default code.
115
+
116
+ Used by :class:`APIError` to keep existing call sites
117
+ (``raise APIError("...", category=ErrorCategory.CLI_AUTH_FAILED)``)
118
+ working unchanged — the resulting exception still gets a
119
+ meaningful ``code`` attribute without the caller having to
120
+ thread it explicitly.
121
+ """
122
+ return _CATEGORY_TO_CODE_DEFAULT.get(category, cls.EXEC_UNKNOWN)
123
+
124
+
125
+ # ─────────────────────────────────────────────────────── ErrorCategory ─
126
+
127
+
128
+ class ErrorCategory(str, Enum):
129
+ """API error classification for retry decisions."""
130
+
131
+ RATE_LIMITED = "rate_limited"
132
+ TIMEOUT = "timeout"
133
+ NETWORK = "network"
134
+ TOKEN_LIMIT = "token_limit"
135
+ AUTH = "auth"
136
+ BAD_REQUEST = "bad_request"
137
+ SERVER_ERROR = "server_error"
138
+ TERMINAL = "terminal"
139
+ UNKNOWN = "unknown"
140
+
141
+ # --- CLI-backend specific categories ---
142
+ CLI_NOT_FOUND = "cli_not_found"
143
+ CLI_AUTH_FAILED = "cli_auth_failed"
144
+ CLI_TIMEOUT = "cli_timeout"
145
+ CLI_PROTOCOL_ERROR = "cli_protocol_error"
146
+ CLI_PERMISSION_DENIED = "cli_permission_denied"
147
+
148
+ @property
149
+ def is_recoverable(self) -> bool:
150
+ return self in {
151
+ ErrorCategory.RATE_LIMITED,
152
+ ErrorCategory.TIMEOUT,
153
+ ErrorCategory.NETWORK,
154
+ ErrorCategory.SERVER_ERROR,
155
+ ErrorCategory.CLI_TIMEOUT,
156
+ ErrorCategory.CLI_PROTOCOL_ERROR,
157
+ }
158
+
159
+ @property
160
+ def is_fatal(self) -> bool:
161
+ """Categories where retry has no chance of recovery."""
162
+ return self in {
163
+ ErrorCategory.AUTH,
164
+ ErrorCategory.BAD_REQUEST,
165
+ ErrorCategory.CLI_NOT_FOUND,
166
+ ErrorCategory.CLI_AUTH_FAILED,
167
+ ErrorCategory.CLI_PERMISSION_DENIED,
168
+ }
169
+
170
+
171
+ # ─────────────────────────────────────────────────────── default mapping ─
172
+
173
+
174
+ # Category → default error code. Kept private — call sites should rely on
175
+ # the public ``ExecutorErrorCode.from_category(...)`` accessor so the
176
+ # mapping can evolve without churn on consumers.
177
+ _CATEGORY_TO_CODE_DEFAULT: dict = {
178
+ ErrorCategory.RATE_LIMITED: ExecutorErrorCode.EXEC_API_RATE_LIMITED,
179
+ ErrorCategory.TIMEOUT: ExecutorErrorCode.EXEC_API_TIMEOUT,
180
+ ErrorCategory.NETWORK: ExecutorErrorCode.EXEC_API_NETWORK,
181
+ ErrorCategory.TOKEN_LIMIT: ExecutorErrorCode.EXEC_API_TOKEN_LIMIT,
182
+ ErrorCategory.AUTH: ExecutorErrorCode.EXEC_API_AUTH_INVALID_KEY,
183
+ ErrorCategory.BAD_REQUEST: ExecutorErrorCode.EXEC_API_BAD_REQUEST,
184
+ ErrorCategory.SERVER_ERROR: ExecutorErrorCode.EXEC_API_SERVER_ERROR,
185
+ ErrorCategory.TERMINAL: ExecutorErrorCode.EXEC_API_TERMINAL,
186
+ ErrorCategory.UNKNOWN: ExecutorErrorCode.EXEC_API_UNKNOWN,
187
+ ErrorCategory.CLI_NOT_FOUND: ExecutorErrorCode.EXEC_CLI_BINARY_NOT_FOUND,
188
+ ErrorCategory.CLI_AUTH_FAILED: ExecutorErrorCode.EXEC_CLI_AUTH_FAILED,
189
+ ErrorCategory.CLI_TIMEOUT: ExecutorErrorCode.EXEC_CLI_TIMEOUT,
190
+ ErrorCategory.CLI_PROTOCOL_ERROR: ExecutorErrorCode.EXEC_CLI_PROTOCOL_ERROR,
191
+ ErrorCategory.CLI_PERMISSION_DENIED: ExecutorErrorCode.EXEC_CLI_PERMISSION_DENIED,
192
+ }
193
+
194
+
195
+ # ─────────────────────────────────────────────────────── exceptions ─
196
+
197
+
198
+ class GenyExecutorError(Exception):
199
+ """Base exception for geny-executor.
200
+
201
+ Every executor exception carries a stable :class:`ExecutorErrorCode`
202
+ accessible as ``e.code``. Subclasses set a class-level default in
203
+ :attr:`_DEFAULT_CODE` so call sites that pre-date the 2.1.0 code
204
+ field still get a meaningful code on the resulting exception.
205
+ """
206
+
207
+ _DEFAULT_CODE: ExecutorErrorCode = ExecutorErrorCode.EXEC_UNKNOWN
208
+
209
+ def __init__(
210
+ self,
211
+ message: str,
212
+ *,
213
+ code: Optional[ExecutorErrorCode] = None,
214
+ cause: Optional[Exception] = None,
215
+ ):
216
+ super().__init__(message)
217
+ self.code: ExecutorErrorCode = code or self._DEFAULT_CODE
218
+ self.cause = cause
219
+
220
+
221
+ class PipelineError(GenyExecutorError):
222
+ """Pipeline-level error."""
223
+
224
+ _DEFAULT_CODE = ExecutorErrorCode.EXEC_PIPELINE_NOT_INITIALIZED
225
+
226
+
227
+ class StageError(GenyExecutorError):
228
+ """Stage execution error."""
229
+
230
+ _DEFAULT_CODE = ExecutorErrorCode.EXEC_STAGE_FAILED
231
+
232
+ def __init__(
233
+ self,
234
+ message: str,
235
+ *,
236
+ stage_name: str = "",
237
+ stage_order: int = 0,
238
+ code: Optional[ExecutorErrorCode] = None,
239
+ cause: Optional[Exception] = None,
240
+ ):
241
+ super().__init__(message, code=code, cause=cause)
242
+ self.stage_name = stage_name
243
+ self.stage_order = stage_order
244
+
245
+
246
+ class GuardRejectError(StageError):
247
+ """Guard rejected execution."""
248
+
249
+ _DEFAULT_CODE = ExecutorErrorCode.EXEC_STAGE_GUARD_REJECTED
250
+
251
+ def __init__(self, message: str, *, guard_name: str = "", **kwargs):
252
+ super().__init__(message, stage_name="guard", stage_order=4, **kwargs)
253
+ self.guard_name = guard_name
254
+
255
+
256
+ class APIError(GenyExecutorError):
257
+ """API call error with classification.
258
+
259
+ Carries both a coarse :class:`ErrorCategory` (used by the executor's
260
+ retry machinery) and a fine-grained :class:`ExecutorErrorCode` (used
261
+ by hosts for logging / i18n / telemetry). When ``code`` is omitted,
262
+ it is derived from ``category`` via
263
+ :meth:`ExecutorErrorCode.from_category` so legacy call sites keep
264
+ their existing semantics.
265
+ """
266
+
267
+ def __init__(
268
+ self,
269
+ message: str,
270
+ *,
271
+ category: ErrorCategory = ErrorCategory.UNKNOWN,
272
+ status_code: Optional[int] = None,
273
+ code: Optional[ExecutorErrorCode] = None,
274
+ cause: Optional[Exception] = None,
275
+ ):
276
+ # Resolve code: explicit > derived-from-category > UNKNOWN.
277
+ resolved_code = code or ExecutorErrorCode.from_category(category)
278
+ super().__init__(message, code=resolved_code, cause=cause)
279
+ self.category = category
280
+ self.status_code = status_code
281
+
282
+
283
+ class ToolExecutionError(GenyExecutorError):
284
+ """Tool execution failed."""
285
+
286
+ _DEFAULT_CODE = ExecutorErrorCode.EXEC_TOOL_CRASHED
287
+
288
+ def __init__(
289
+ self,
290
+ message: str,
291
+ *,
292
+ tool_name: str = "",
293
+ code: Optional[ExecutorErrorCode] = None,
294
+ cause: Optional[Exception] = None,
295
+ ):
296
+ super().__init__(message, code=code, cause=cause)
297
+ self.tool_name = tool_name
298
+
299
+
300
+ class MutationError(GenyExecutorError):
301
+ """Invalid mutation request (bad stage/slot/impl)."""
302
+
303
+ _DEFAULT_CODE = ExecutorErrorCode.EXEC_MUTATION_INVALID
304
+
305
+ def __init__(
306
+ self,
307
+ message: str,
308
+ *,
309
+ stage_order: int = 0,
310
+ slot_name: str = "",
311
+ code: Optional[ExecutorErrorCode] = None,
312
+ cause: Optional[Exception] = None,
313
+ ):
314
+ super().__init__(message, code=code, cause=cause)
315
+ self.stage_order = stage_order
316
+ self.slot_name = slot_name
317
+
318
+
319
+ class MutationLocked(GenyExecutorError):
320
+ """Mutation blocked because the target stage is currently executing."""
321
+
322
+ _DEFAULT_CODE = ExecutorErrorCode.EXEC_MUTATION_LOCKED
323
+
324
+ def __init__(
325
+ self,
326
+ message: str,
327
+ *,
328
+ stage_order: int = 0,
329
+ code: Optional[ExecutorErrorCode] = None,
330
+ cause: Optional[Exception] = None,
331
+ ):
332
+ super().__init__(message, code=code, cause=cause)
333
+ self.stage_order = stage_order
@@ -8,7 +8,11 @@ import uuid
8
8
  from typing import TYPE_CHECKING, Any, AsyncIterator, Callable, Dict, List, Optional, Sequence
9
9
 
10
10
  from geny_executor.core.config import PipelineConfig
11
- from geny_executor.core.errors import StageError
11
+ from geny_executor.core.errors import (
12
+ ExecutorErrorCode,
13
+ GenyExecutorError,
14
+ StageError,
15
+ )
12
16
  from geny_executor.core.result import PipelineResult
13
17
  from geny_executor.core.stage import Stage, StageDescription
14
18
  from geny_executor.core.state import PipelineState
@@ -31,6 +35,33 @@ if TYPE_CHECKING:
31
35
  logger = logging.getLogger(__name__)
32
36
 
33
37
 
38
+ def _error_event_data(exc: Exception) -> Dict[str, Any]:
39
+ """Build a structured event payload for ``pipeline.error`` /
40
+ ``stage.error`` / similar terminal-failure events.
41
+
42
+ Carries:
43
+ - ``error``: stringified message (legacy field, preserved for
44
+ backward compat — every existing consumer reads this).
45
+ - ``code``: the stable :class:`ExecutorErrorCode` value when the
46
+ exception is a :class:`GenyExecutorError` subclass; otherwise
47
+ ``"exec.unknown"``. Hosts use this for i18n / telemetry
48
+ grouping without parsing the message text.
49
+ - ``exception_type``: fully qualified class name, useful for
50
+ ad-hoc filtering when no code is attached.
51
+
52
+ Stable since 2.1.0 — adding fields is non-breaking, removing
53
+ fields is a major-version change.
54
+ """
55
+ code_str = ExecutorErrorCode.EXEC_UNKNOWN.value
56
+ if isinstance(exc, GenyExecutorError) and exc.code is not None:
57
+ code_str = exc.code.value
58
+ return {
59
+ "error": str(exc),
60
+ "code": code_str,
61
+ "exception_type": f"{type(exc).__module__}.{type(exc).__name__}",
62
+ }
63
+
64
+
34
65
  def _pipeline_config_from_manifest(manifest: "EnvironmentManifest") -> PipelineConfig:
35
66
  """Build a :class:`PipelineConfig` from manifest pipeline+model blocks.
36
67
 
@@ -989,7 +1020,7 @@ class Pipeline:
989
1020
  return result
990
1021
 
991
1022
  except Exception as e:
992
- await self._emit("pipeline.error", data={"error": str(e)})
1023
+ await self._emit("pipeline.error", data=_error_event_data(e))
993
1024
  return PipelineResult.error_result(str(e), state)
994
1025
 
995
1026
  async def run_stream(
@@ -1048,7 +1079,7 @@ class Pipeline:
1048
1079
  PipelineEvent(
1049
1080
  type="pipeline.error",
1050
1081
  data={
1051
- "error": str(e),
1082
+ **_error_event_data(e),
1052
1083
  "total_cost_usd": state.total_cost_usd,
1053
1084
  },
1054
1085
  )
@@ -1073,7 +1104,7 @@ class Pipeline:
1073
1104
  await task # propagate any unexpected errors
1074
1105
 
1075
1106
  except Exception as e:
1076
- yield PipelineEvent(type="pipeline.error", data={"error": str(e)})
1107
+ yield PipelineEvent(type="pipeline.error", data=_error_event_data(e))
1077
1108
 
1078
1109
  finally:
1079
1110
  state._event_listener = None
@@ -1343,7 +1374,7 @@ class Pipeline:
1343
1374
  "stage.error",
1344
1375
  stage=stage.name,
1345
1376
  iteration=state.iteration,
1346
- data={"error": str(e)},
1377
+ data=_error_event_data(e),
1347
1378
  )
1348
1379
  recovery = await stage.on_error(e, state)
1349
1380
  if recovery is not None:
@@ -19,7 +19,7 @@ from __future__ import annotations
19
19
  import asyncio
20
20
  from typing import Any, AsyncIterator, Dict, List, Optional, Union
21
21
 
22
- from geny_executor.core.errors import APIError, ErrorCategory
22
+ from geny_executor.core.errors import APIError, ErrorCategory, ExecutorErrorCode
23
23
  from geny_executor.core.schema import ConfigField, ConfigSchema
24
24
  from geny_executor.core.slot import StrategySlot
25
25
  from geny_executor.core.stage import Stage
@@ -321,6 +321,7 @@ class APIStage(Stage[Any, APIResponse]):
321
321
  "Pipeline.from_manifest(credentials=...) or attach a client "
322
322
  "explicitly with Pipeline.attach_runtime(llm_client=...).",
323
323
  category=ErrorCategory.BAD_REQUEST,
324
+ code=ExecutorErrorCode.EXEC_API_NO_CLIENT,
324
325
  )
325
326
 
326
327
  async def execute(self, input: Any, state: PipelineState) -> APIResponse:
@@ -429,6 +430,7 @@ class APIStage(Stage[Any, APIResponse]):
429
430
  {
430
431
  "attempt": attempt + 1,
431
432
  "category": e.category.value,
433
+ "code": e.code.value,
432
434
  "delay": delay,
433
435
  },
434
436
  )
@@ -444,12 +446,17 @@ class APIStage(Stage[Any, APIResponse]):
444
446
  {
445
447
  "attempt": attempt + 1,
446
448
  "category": category.value,
449
+ "code": ExecutorErrorCode.from_category(category).value,
447
450
  "delay": delay,
448
451
  },
449
452
  )
450
453
  await asyncio.sleep(delay)
451
454
 
452
- raise last_error or APIError("Max retries exceeded", category=ErrorCategory.UNKNOWN)
455
+ raise last_error or APIError(
456
+ "Max retries exceeded",
457
+ category=ErrorCategory.UNKNOWN,
458
+ code=ExecutorErrorCode.EXEC_API_RETRY_EXHAUSTED,
459
+ )
453
460
 
454
461
  async def _call_streaming_with_retry(
455
462
  self, client: BaseClient, cfg: Any, state: PipelineState
@@ -491,7 +498,11 @@ class APIStage(Stage[Any, APIResponse]):
491
498
  )
492
499
  await asyncio.sleep(delay)
493
500
 
494
- raise last_error or APIError("Max retries exceeded", category=ErrorCategory.UNKNOWN)
501
+ raise last_error or APIError(
502
+ "Max retries exceeded",
503
+ category=ErrorCategory.UNKNOWN,
504
+ code=ExecutorErrorCode.EXEC_API_RETRY_EXHAUSTED,
505
+ )
495
506
 
496
507
  async def _call_streaming(
497
508
  self, client: BaseClient, cfg: Any, state: PipelineState
@@ -511,6 +522,7 @@ class APIStage(Stage[Any, APIResponse]):
511
522
  raise APIError(
512
523
  "Stream ended without message_complete",
513
524
  category=ErrorCategory.UNKNOWN,
525
+ code=ExecutorErrorCode.EXEC_API_STREAM_INCOMPLETE,
514
526
  )
515
527
  return response
516
528