geny-executor 2.1.2__tar.gz → 2.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (620) hide show
  1. {geny_executor-2.1.2 → geny_executor-2.1.4}/PKG-INFO +1 -1
  2. {geny_executor-2.1.2 → geny_executor-2.1.4}/pyproject.toml +1 -1
  3. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/__init__.py +1 -1
  4. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/anthropic.py +103 -9
  5. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/translators/_cli.py +164 -6
  6. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/unit/test_anthropic_build_kwargs.py +142 -3
  7. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/unit/test_translators_cli_claude_code.py +143 -0
  8. {geny_executor-2.1.2 → geny_executor-2.1.4}/.gitignore +0 -0
  9. {geny_executor-2.1.2 → geny_executor-2.1.4}/LICENSE +0 -0
  10. {geny_executor-2.1.2 → geny_executor-2.1.4}/README.md +0 -0
  11. {geny_executor-2.1.2 → geny_executor-2.1.4}/README_ko.md +0 -0
  12. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/channels/__init__.py +0 -0
  13. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/channels/send_message_channel.py +0 -0
  14. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/channels/user_file_channel.py +0 -0
  15. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/__init__.py +0 -0
  16. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/artifact.py +0 -0
  17. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/builder.py +0 -0
  18. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/config.py +0 -0
  19. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/diff.py +0 -0
  20. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/environment.py +0 -0
  21. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/errors.py +0 -0
  22. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/introspection.py +0 -0
  23. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/mutation.py +0 -0
  24. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/pipeline.py +0 -0
  25. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/presets.py +0 -0
  26. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/result.py +0 -0
  27. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/schema.py +0 -0
  28. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/shared_keys.py +0 -0
  29. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/slot.py +0 -0
  30. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/snapshot.py +0 -0
  31. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/stage.py +0 -0
  32. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/core/state.py +0 -0
  33. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/cron/__init__.py +0 -0
  34. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/cron/runner.py +0 -0
  35. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/cron/store_abc.py +0 -0
  36. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/cron/store_impl/__init__.py +0 -0
  37. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/cron/store_impl/file_backed.py +0 -0
  38. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/cron/store_impl/in_memory.py +0 -0
  39. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/cron/types.py +0 -0
  40. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/events/__init__.py +0 -0
  41. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/events/bus.py +0 -0
  42. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/events/types.py +0 -0
  43. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/history/__init__.py +0 -0
  44. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/history/ab_test.py +0 -0
  45. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/history/cost.py +0 -0
  46. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/history/models.py +0 -0
  47. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/history/monitor.py +0 -0
  48. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/history/replay.py +0 -0
  49. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/history/service.py +0 -0
  50. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/hooks/__init__.py +0 -0
  51. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/hooks/config.py +0 -0
  52. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/hooks/events.py +0 -0
  53. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/hooks/runner.py +0 -0
  54. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/__init__.py +0 -0
  55. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/_cli_runtime.py +0 -0
  56. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/base.py +0 -0
  57. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/claude_code.py +0 -0
  58. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/credentials.py +0 -0
  59. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/google.py +0 -0
  60. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/openai.py +0 -0
  61. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/registry.py +0 -0
  62. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/translators/__init__.py +0 -0
  63. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/translators/_canonical.py +0 -0
  64. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/types.py +0 -0
  65. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/llm_client/vllm.py +0 -0
  66. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/__init__.py +0 -0
  67. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/_locks.py +0 -0
  68. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/_progressive.py +0 -0
  69. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/composite/__init__.py +0 -0
  70. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/composite/handles.py +0 -0
  71. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/composite/provider.py +0 -0
  72. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/composite/routing.py +0 -0
  73. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/composite/snapshot.py +0 -0
  74. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/embedding/__init__.py +0 -0
  75. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/embedding/client.py +0 -0
  76. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/embedding/google.py +0 -0
  77. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/embedding/local.py +0 -0
  78. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/embedding/openai.py +0 -0
  79. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/embedding/registry.py +0 -0
  80. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/embedding/voyage.py +0 -0
  81. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/factory.py +0 -0
  82. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/presets.py +0 -0
  83. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/provider.py +0 -0
  84. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/__init__.py +0 -0
  85. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/ephemeral.py +0 -0
  86. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/file/__init__.py +0 -0
  87. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/file/config.py +0 -0
  88. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/file/frontmatter.py +0 -0
  89. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/file/index_store.py +0 -0
  90. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/file/layout.py +0 -0
  91. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/file/ltm_store.py +0 -0
  92. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/file/notes_store.py +0 -0
  93. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/file/provider.py +0 -0
  94. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/file/snapshot.py +0 -0
  95. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/file/stm_store.py +0 -0
  96. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/file/timezone.py +0 -0
  97. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/file/vector_store.py +0 -0
  98. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/sql/__init__.py +0 -0
  99. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/sql/config.py +0 -0
  100. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/sql/connection.py +0 -0
  101. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/sql/index_store.py +0 -0
  102. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/sql/ltm_store.py +0 -0
  103. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/sql/notes_store.py +0 -0
  104. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/sql/provider.py +0 -0
  105. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/sql/schema.py +0 -0
  106. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/sql/snapshot.py +0 -0
  107. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/sql/stm_store.py +0 -0
  108. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/providers/sql/vector_store.py +0 -0
  109. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/retriever.py +0 -0
  110. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/memory/strategy.py +0 -0
  111. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/notifications/__init__.py +0 -0
  112. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/notifications/registry.py +0 -0
  113. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/permission/__init__.py +0 -0
  114. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/permission/loader.py +0 -0
  115. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/permission/matrix.py +0 -0
  116. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/permission/types.py +0 -0
  117. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/py.typed +0 -0
  118. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/runtime/__init__.py +0 -0
  119. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/runtime/task_executors.py +0 -0
  120. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/runtime/task_runner.py +0 -0
  121. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/security/__init__.py +0 -0
  122. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/security/import_validator.py +0 -0
  123. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/security/script_sandbox.py +0 -0
  124. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/session/__init__.py +0 -0
  125. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/session/freshness.py +0 -0
  126. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/session/manager.py +0 -0
  127. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/session/persistence.py +0 -0
  128. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/session/session.py +0 -0
  129. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/settings/__init__.py +0 -0
  130. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/settings/loader.py +0 -0
  131. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/settings/section_registry.py +0 -0
  132. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/__init__.py +0 -0
  133. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/bundled/batch/SKILL.md +0 -0
  134. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/bundled/debug/SKILL.md +0 -0
  135. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/bundled/loop/SKILL.md +0 -0
  136. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/bundled/lorem-ipsum/SKILL.md +0 -0
  137. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/bundled/simplify/SKILL.md +0 -0
  138. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/bundled/skillify/SKILL.md +0 -0
  139. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/bundled/stuck/SKILL.md +0 -0
  140. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/bundled/verify/SKILL.md +0 -0
  141. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/bundled_skills.py +0 -0
  142. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/fork.py +0 -0
  143. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/frontmatter.py +0 -0
  144. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/loader.py +0 -0
  145. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/mcp_bridge.py +0 -0
  146. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/path_match.py +0 -0
  147. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/registry.py +0 -0
  148. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/shell_blocks.py +0 -0
  149. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/skill_tool.py +0 -0
  150. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/types.py +0 -0
  151. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/skills/watcher.py +0 -0
  152. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/__init__.py +0 -0
  153. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/__init__.py +0 -0
  154. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/_helpers.py +0 -0
  155. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/cancel.py +0 -0
  156. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/clear.py +0 -0
  157. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/compact.py +0 -0
  158. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/config.py +0 -0
  159. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/context.py +0 -0
  160. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/cost.py +0 -0
  161. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/help.py +0 -0
  162. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/memory.py +0 -0
  163. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/model.py +0 -0
  164. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/preset_info.py +0 -0
  165. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/status.py +0 -0
  166. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/built_in/tasks.py +0 -0
  167. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/md_template.py +0 -0
  168. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/parser.py +0 -0
  169. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/registry.py +0 -0
  170. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/slash_commands/types.py +0 -0
  171. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/__init__.py +0 -0
  172. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s01_input/__init__.py +0 -0
  173. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s01_input/artifact/__init__.py +0 -0
  174. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s01_input/artifact/default/__init__.py +0 -0
  175. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s01_input/artifact/default/normalizers.py +0 -0
  176. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s01_input/artifact/default/stage.py +0 -0
  177. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s01_input/artifact/default/validators.py +0 -0
  178. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s01_input/interface.py +0 -0
  179. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s01_input/normalizers.py +0 -0
  180. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s01_input/stage.py +0 -0
  181. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s01_input/types.py +0 -0
  182. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s01_input/validators.py +0 -0
  183. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/__init__.py +0 -0
  184. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/artifact/__init__.py +0 -0
  185. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/artifact/default/__init__.py +0 -0
  186. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/artifact/default/compactors.py +0 -0
  187. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/artifact/default/retrievers.py +0 -0
  188. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/artifact/default/stage.py +0 -0
  189. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/artifact/default/strategies.py +0 -0
  190. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/compactors.py +0 -0
  191. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/interface.py +0 -0
  192. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/retrievers.py +0 -0
  193. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/stage.py +0 -0
  194. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/strategies.py +0 -0
  195. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s02_context/types.py +0 -0
  196. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s03_system/__init__.py +0 -0
  197. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s03_system/artifact/__init__.py +0 -0
  198. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s03_system/artifact/default/__init__.py +0 -0
  199. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s03_system/artifact/default/builders.py +0 -0
  200. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s03_system/artifact/default/stage.py +0 -0
  201. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s03_system/builders.py +0 -0
  202. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s03_system/interface.py +0 -0
  203. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s03_system/persona/__init__.py +0 -0
  204. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s03_system/persona/builder.py +0 -0
  205. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s03_system/persona/provider.py +0 -0
  206. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s03_system/stage.py +0 -0
  207. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s04_guard/__init__.py +0 -0
  208. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s04_guard/artifact/__init__.py +0 -0
  209. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s04_guard/artifact/default/__init__.py +0 -0
  210. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s04_guard/artifact/default/guards.py +0 -0
  211. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s04_guard/artifact/default/stage.py +0 -0
  212. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s04_guard/guards.py +0 -0
  213. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s04_guard/interface.py +0 -0
  214. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s04_guard/stage.py +0 -0
  215. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s04_guard/types.py +0 -0
  216. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s05_cache/__init__.py +0 -0
  217. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s05_cache/artifact/__init__.py +0 -0
  218. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s05_cache/artifact/default/__init__.py +0 -0
  219. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s05_cache/artifact/default/stage.py +0 -0
  220. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s05_cache/artifact/default/strategies.py +0 -0
  221. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s05_cache/interface.py +0 -0
  222. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s05_cache/stage.py +0 -0
  223. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s05_cache/strategies.py +0 -0
  224. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/__init__.py +0 -0
  225. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/_translate.py +0 -0
  226. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/artifact/__init__.py +0 -0
  227. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/artifact/default/__init__.py +0 -0
  228. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/artifact/default/providers.py +0 -0
  229. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/artifact/default/retry.py +0 -0
  230. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/artifact/default/router.py +0 -0
  231. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/artifact/default/stage.py +0 -0
  232. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/artifact/google/__init__.py +0 -0
  233. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/artifact/google/providers.py +0 -0
  234. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/artifact/openai/__init__.py +0 -0
  235. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/artifact/openai/providers.py +0 -0
  236. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/interface.py +0 -0
  237. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/providers.py +0 -0
  238. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/retry.py +0 -0
  239. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/stage.py +0 -0
  240. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s06_api/types.py +0 -0
  241. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s07_token/__init__.py +0 -0
  242. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s07_token/artifact/__init__.py +0 -0
  243. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s07_token/artifact/default/__init__.py +0 -0
  244. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s07_token/artifact/default/pricing.py +0 -0
  245. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s07_token/artifact/default/stage.py +0 -0
  246. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s07_token/artifact/default/trackers.py +0 -0
  247. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s07_token/interface.py +0 -0
  248. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s07_token/pricing.py +0 -0
  249. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s07_token/stage.py +0 -0
  250. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s07_token/trackers.py +0 -0
  251. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s08_think/__init__.py +0 -0
  252. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s08_think/artifact/default/__init__.py +0 -0
  253. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s08_think/artifact/default/budget.py +0 -0
  254. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s08_think/artifact/default/processors.py +0 -0
  255. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s08_think/artifact/default/stage.py +0 -0
  256. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s08_think/interface.py +0 -0
  257. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s08_think/processors.py +0 -0
  258. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s08_think/stage.py +0 -0
  259. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s08_think/types.py +0 -0
  260. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s09_parse/__init__.py +0 -0
  261. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s09_parse/artifact/default/__init__.py +0 -0
  262. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s09_parse/artifact/default/parsers.py +0 -0
  263. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s09_parse/artifact/default/signals.py +0 -0
  264. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s09_parse/artifact/default/stage.py +0 -0
  265. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s09_parse/interface.py +0 -0
  266. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s09_parse/parsers.py +0 -0
  267. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s09_parse/signals.py +0 -0
  268. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s09_parse/stage.py +0 -0
  269. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s09_parse/types.py +0 -0
  270. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/__init__.py +0 -0
  271. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/artifact/__init__.py +0 -0
  272. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/artifact/default/__init__.py +0 -0
  273. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/artifact/default/executors.py +0 -0
  274. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/artifact/default/routers.py +0 -0
  275. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/artifact/default/stage.py +0 -0
  276. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/executors.py +0 -0
  277. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/interface.py +0 -0
  278. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/persistence.py +0 -0
  279. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/routers.py +0 -0
  280. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/stage.py +0 -0
  281. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/state_mutation.py +0 -0
  282. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s10_tool/streaming.py +0 -0
  283. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s11_tool_review/__init__.py +0 -0
  284. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s11_tool_review/artifact/__init__.py +0 -0
  285. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s11_tool_review/artifact/default/__init__.py +0 -0
  286. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s11_tool_review/artifact/default/reviewers.py +0 -0
  287. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s11_tool_review/artifact/default/stage.py +0 -0
  288. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s11_tool_review/interface.py +0 -0
  289. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s12_agent/__init__.py +0 -0
  290. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s12_agent/artifact/__init__.py +0 -0
  291. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s12_agent/artifact/default/__init__.py +0 -0
  292. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s12_agent/artifact/default/orchestrators.py +0 -0
  293. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s12_agent/artifact/default/stage.py +0 -0
  294. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s12_agent/interface.py +0 -0
  295. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s12_agent/orchestrators.py +0 -0
  296. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s12_agent/stage.py +0 -0
  297. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s12_agent/subagent_type.py +0 -0
  298. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s12_agent/types.py +0 -0
  299. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s13_task_registry/__init__.py +0 -0
  300. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s13_task_registry/artifact/__init__.py +0 -0
  301. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s13_task_registry/artifact/default/__init__.py +0 -0
  302. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s13_task_registry/artifact/default/file_backed_registry.py +0 -0
  303. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s13_task_registry/artifact/default/policies.py +0 -0
  304. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s13_task_registry/artifact/default/registry.py +0 -0
  305. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s13_task_registry/artifact/default/stage.py +0 -0
  306. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s13_task_registry/interface.py +0 -0
  307. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s13_task_registry/types.py +0 -0
  308. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s14_evaluate/__init__.py +0 -0
  309. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s14_evaluate/artifact/__init__.py +0 -0
  310. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/__init__.py +0 -0
  311. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/strategy.py +0 -0
  312. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s14_evaluate/artifact/default/__init__.py +0 -0
  313. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s14_evaluate/artifact/default/stage.py +0 -0
  314. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s14_evaluate/artifact/default/strategies.py +0 -0
  315. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s14_evaluate/interface.py +0 -0
  316. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s14_evaluate/stage.py +0 -0
  317. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s14_evaluate/strategies.py +0 -0
  318. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s14_evaluate/types.py +0 -0
  319. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s15_hitl/__init__.py +0 -0
  320. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s15_hitl/artifact/__init__.py +0 -0
  321. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s15_hitl/artifact/default/__init__.py +0 -0
  322. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s15_hitl/artifact/default/requesters.py +0 -0
  323. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s15_hitl/artifact/default/stage.py +0 -0
  324. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s15_hitl/artifact/default/timeouts.py +0 -0
  325. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s15_hitl/interface.py +0 -0
  326. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s15_hitl/types.py +0 -0
  327. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s16_loop/__init__.py +0 -0
  328. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s16_loop/artifact/__init__.py +0 -0
  329. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s16_loop/artifact/default/__init__.py +0 -0
  330. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s16_loop/artifact/default/controllers.py +0 -0
  331. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s16_loop/artifact/default/stage.py +0 -0
  332. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s16_loop/controllers.py +0 -0
  333. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s16_loop/interface.py +0 -0
  334. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s16_loop/stage.py +0 -0
  335. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s17_emit/__init__.py +0 -0
  336. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s17_emit/artifact/__init__.py +0 -0
  337. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s17_emit/artifact/default/__init__.py +0 -0
  338. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s17_emit/artifact/default/emitters.py +0 -0
  339. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s17_emit/artifact/default/stage.py +0 -0
  340. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s17_emit/emitters.py +0 -0
  341. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s17_emit/interface.py +0 -0
  342. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s17_emit/stage.py +0 -0
  343. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s17_emit/types.py +0 -0
  344. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s18_memory/__init__.py +0 -0
  345. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s18_memory/_dehydrate.py +0 -0
  346. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s18_memory/artifact/__init__.py +0 -0
  347. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s18_memory/artifact/default/__init__.py +0 -0
  348. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s18_memory/artifact/default/persistence.py +0 -0
  349. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s18_memory/artifact/default/stage.py +0 -0
  350. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s18_memory/artifact/default/strategies.py +0 -0
  351. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s18_memory/insight.py +0 -0
  352. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s18_memory/interface.py +0 -0
  353. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s18_memory/persistence.py +0 -0
  354. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s18_memory/stage.py +0 -0
  355. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s18_memory/strategies.py +0 -0
  356. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s19_summarize/__init__.py +0 -0
  357. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s19_summarize/artifact/__init__.py +0 -0
  358. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s19_summarize/artifact/default/__init__.py +0 -0
  359. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s19_summarize/artifact/default/importance.py +0 -0
  360. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s19_summarize/artifact/default/stage.py +0 -0
  361. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s19_summarize/artifact/default/summarizers.py +0 -0
  362. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s19_summarize/frequency_policy.py +0 -0
  363. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s19_summarize/interface.py +0 -0
  364. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s19_summarize/types.py +0 -0
  365. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s20_persist/__init__.py +0 -0
  366. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s20_persist/artifact/__init__.py +0 -0
  367. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s20_persist/artifact/default/__init__.py +0 -0
  368. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s20_persist/artifact/default/frequencies.py +0 -0
  369. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s20_persist/artifact/default/persisters.py +0 -0
  370. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s20_persist/artifact/default/stage.py +0 -0
  371. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s20_persist/interface.py +0 -0
  372. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s20_persist/restore.py +0 -0
  373. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s20_persist/types.py +0 -0
  374. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s21_yield/__init__.py +0 -0
  375. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s21_yield/artifact/__init__.py +0 -0
  376. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s21_yield/artifact/default/__init__.py +0 -0
  377. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s21_yield/artifact/default/formatters.py +0 -0
  378. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s21_yield/artifact/default/multi_format.py +0 -0
  379. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s21_yield/artifact/default/stage.py +0 -0
  380. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s21_yield/formatters.py +0 -0
  381. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s21_yield/interface.py +0 -0
  382. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/stages/s21_yield/stage.py +0 -0
  383. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/__init__.py +0 -0
  384. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/adhoc.py +0 -0
  385. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/base.py +0 -0
  386. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/__init__.py +0 -0
  387. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/_path_guard.py +0 -0
  388. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/agent_tool.py +0 -0
  389. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/ask_user_question_tool.py +0 -0
  390. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/bash_tool.py +0 -0
  391. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/cron_tools.py +0 -0
  392. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/dev_tools.py +0 -0
  393. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/edit_tool.py +0 -0
  394. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/glob_tool.py +0 -0
  395. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/grep_tool.py +0 -0
  396. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/mcp_wrapper_tools.py +0 -0
  397. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/notebook_edit_tool.py +0 -0
  398. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/operator_tools.py +0 -0
  399. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/plan_mode_tools.py +0 -0
  400. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/push_notification_tool.py +0 -0
  401. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/read_tool.py +0 -0
  402. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/send_message_tool.py +0 -0
  403. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/task_tools.py +0 -0
  404. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/todo_write_tool.py +0 -0
  405. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/tool_search_tool.py +0 -0
  406. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/web_fetch_tool.py +0 -0
  407. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/web_search_tool.py +0 -0
  408. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/worktree_tools.py +0 -0
  409. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/built_in/write_tool.py +0 -0
  410. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/composer.py +0 -0
  411. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/errors.py +0 -0
  412. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/mcp/__init__.py +0 -0
  413. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/mcp/adapter.py +0 -0
  414. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/mcp/credentials.py +0 -0
  415. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/mcp/errors.py +0 -0
  416. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/mcp/manager.py +0 -0
  417. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/mcp/oauth.py +0 -0
  418. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/mcp/state.py +0 -0
  419. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/mcp/uri.py +0 -0
  420. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/provider.py +0 -0
  421. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/providers.py +0 -0
  422. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/registry.py +0 -0
  423. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/sandbox.py +0 -0
  424. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/scope.py +0 -0
  425. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/tools/stage_binding.py +0 -0
  426. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/workspace/__init__.py +0 -0
  427. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/workspace/stack.py +0 -0
  428. {geny_executor-2.1.2 → geny_executor-2.1.4}/src/geny_executor/workspace/types.py +0 -0
  429. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/__init__.py +0 -0
  430. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/_fixtures/__init__.py +0 -0
  431. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/_fixtures/fake_claude.py +0 -0
  432. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/_fixtures/fake_echo_cli.py +0 -0
  433. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/__init__.py +0 -0
  434. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/conftest.py +0 -0
  435. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/fixtures/__init__.py +0 -0
  436. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/fixtures/adapter/__init__.py +0 -0
  437. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/fixtures/adapter/adapter.py +0 -0
  438. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/test_c1_six_layer_retrieval.py +0 -0
  439. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/test_c2_execution_recording.py +0 -0
  440. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/test_c3_reflection_and_promotion.py +0 -0
  441. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/test_c4_rest_coverage.py +0 -0
  442. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/test_c5_embedding_migration.py +0 -0
  443. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/test_c6_session_resume.py +0 -0
  444. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/test_c7_adapter_parity.py +0 -0
  445. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/completeness/test_spec_loads.py +0 -0
  446. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/__init__.py +0 -0
  447. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/memory_provider_contract.py +0 -0
  448. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_embedding_clients.py +0 -0
  449. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_error_codes_stability.py +0 -0
  450. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_auto_vector.py +0 -0
  451. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_composite.py +0 -0
  452. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_composite_routing.py +0 -0
  453. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_curated_global.py +0 -0
  454. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_ephemeral.py +0 -0
  455. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_factory.py +0 -0
  456. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_file.py +0 -0
  457. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_file_layout.py +0 -0
  458. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_file_vector.py +0 -0
  459. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_sql.py +0 -0
  460. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_sql_dialect.py +0 -0
  461. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_sql_schema.py +0 -0
  462. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_memory_provider_sql_vector.py +0 -0
  463. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/contract/test_stage_uniformity.py +0 -0
  464. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/integration/test_cycle_ab_cross_import.py +0 -0
  465. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/integration/test_integration.py +0 -0
  466. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/__init__.py +0 -0
  467. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/conformance/__init__.py +0 -0
  468. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/conformance/harness.py +0 -0
  469. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/conformance/test_anthropic.py +0 -0
  470. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/conformance/test_claude_code_cli.py +0 -0
  471. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/conformance/test_google.py +0 -0
  472. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/conformance/test_openai.py +0 -0
  473. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/conformance/test_vllm.py +0 -0
  474. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/unit/__init__.py +0 -0
  475. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/unit/test_claude_code.py +0 -0
  476. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/unit/test_cli_runtime.py +0 -0
  477. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/llm_client/unit/test_credentials.py +0 -0
  478. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/__init__.py +0 -0
  479. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_adaptive_model_router.py +0 -0
  480. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_adaptive_thinking_budget.py +0 -0
  481. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_adhoc_providers.py +0 -0
  482. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_agent_tool.py +0 -0
  483. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_artifact_metadata.py +0 -0
  484. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_ask_user_question_tool.py +0 -0
  485. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_binary_classify_manifest.py +0 -0
  486. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_built_in_autoregister.py +0 -0
  487. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_builtin_capabilities.py +0 -0
  488. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_builtin_features.py +0 -0
  489. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_composite_set_hooks.py +0 -0
  490. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_cron_runner.py +0 -0
  491. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_cron_store.py +0 -0
  492. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_cron_tools.py +0 -0
  493. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_dev_tools.py +0 -0
  494. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_dynamic_persona_builder.py +0 -0
  495. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_errors_categories.py +0 -0
  496. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_evaluation_chain.py +0 -0
  497. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_fork_multi_provider.py +0 -0
  498. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_hierarchical_sidecars.py +0 -0
  499. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_hook_in_process.py +0 -0
  500. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_hook_runner.py +0 -0
  501. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_hooks_and_shared_keys.py +0 -0
  502. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_index_list_categories.py +0 -0
  503. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_index_render_vault_map.py +0 -0
  504. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_interaction_fields.py +0 -0
  505. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_introspection.py +0 -0
  506. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_llm_client_base.py +0 -0
  507. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_llm_client_capabilities.py +0 -0
  508. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_llm_client_registry.py +0 -0
  509. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_llm_client_request_types.py +0 -0
  510. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_llm_client_state.py +0 -0
  511. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_llm_summary_compactor.py +0 -0
  512. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_loop_agnostic_lock.py +0 -0
  513. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_manifest_provider_validation.py +0 -0
  514. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_manifest_v2.py +0 -0
  515. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_manifest_v3_migration.py +0 -0
  516. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_mcp_annotations_attach.py +0 -0
  517. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_mcp_credential_store.py +0 -0
  518. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_mcp_fsm.py +0 -0
  519. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_mcp_lifecycle.py +0 -0
  520. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_mcp_namespace.py +0 -0
  521. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_mcp_oauth.py +0 -0
  522. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_mcp_prompts_skills_bridge.py +0 -0
  523. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_mcp_resource_retriever.py +0 -0
  524. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_mcp_uri.py +0 -0
  525. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_mcp_wrapper_tools.py +0 -0
  526. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_memory_aware_retriever.py +0 -0
  527. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_memory_hooks_after_callbacks.py +0 -0
  528. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_memory_metadata_extension.py +0 -0
  529. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_multi_dim_budget_controller.py +0 -0
  530. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_multi_format_yield.py +0 -0
  531. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_multi_provider.py +0 -0
  532. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_multimodal.py +0 -0
  533. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_note_graph_queries.py +0 -0
  534. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_notebook_edit_tool.py +0 -0
  535. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_notes_load_pinned.py +0 -0
  536. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_operator_tools.py +0 -0
  537. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_ordered_emitter_chain.py +0 -0
  538. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_permission_matrix.py +0 -0
  539. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_permission_mode_promotions.py +0 -0
  540. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase1_foundation.py +0 -0
  541. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase1_pipeline.py +0 -0
  542. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase2_agent_loop.py +0 -0
  543. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase2_tools.py +0 -0
  544. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase3_context_memory.py +0 -0
  545. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase4_think_agent_evaluate.py +0 -0
  546. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase5_emit_presets_mcp.py +0 -0
  547. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase5_environment.py +0 -0
  548. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase6_history.py +0 -0
  549. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase6_integration.py +0 -0
  550. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase7_security.py +0 -0
  551. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase9a_preset_regen.py +0 -0
  552. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_phase9a_scaffolding.py +0 -0
  553. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_pipeline_attach_runtime.py +0 -0
  554. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_pipeline_from_manifest.py +0 -0
  555. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_pipeline_session_runtime.py +0 -0
  556. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_plan_mode_tools.py +0 -0
  557. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_progressive_disclosure.py +0 -0
  558. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_provider_driven_strategy.py +0 -0
  559. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_push_notification_tool.py +0 -0
  560. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_refresh_backlinks_extension.py +0 -0
  561. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_resolve_model_config.py +0 -0
  562. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_runtime_task_runner.py +0 -0
  563. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_s06_provider_selection.py +0 -0
  564. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_s13_file_backed_registry.py +0 -0
  565. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_s13_task_registry_output.py +0 -0
  566. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_s19_frequency_policy.py +0 -0
  567. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_s9b1_tool_review.py +0 -0
  568. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_s9b2_task_registry.py +0 -0
  569. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_s9b3_hitl.py +0 -0
  570. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_s9b4_summarize.py +0 -0
  571. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_s9b5_persist.py +0 -0
  572. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_s9c1_pipeline_resume.py +0 -0
  573. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_s9c2_restore_state.py +0 -0
  574. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_send_message_tool.py +0 -0
  575. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_settings_loader.py +0 -0
  576. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_skill_phase_10_1.py +0 -0
  577. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_skill_phase_10_2.py +0 -0
  578. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_skill_phase_10_3.py +0 -0
  579. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_skill_phase_10_4_bundled.py +0 -0
  580. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_skill_phase_10_5_fork.py +0 -0
  581. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_skill_phase_10_6_killer.py +0 -0
  582. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_skill_phase_10_7_watcher.py +0 -0
  583. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_skill_richer_schema.py +0 -0
  584. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_skill_tool.py +0 -0
  585. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_skills_foundation.py +0 -0
  586. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_slash_built_in_control.py +0 -0
  587. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_slash_built_in_introspection.py +0 -0
  588. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_slash_commands.py +0 -0
  589. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_slash_md_template.py +0 -0
  590. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_stage10_hook_wiring.py +0 -0
  591. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_stage10_partition_executor.py +0 -0
  592. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_stage10_permission_matrix.py +0 -0
  593. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_stage19_session_summary.py +0 -0
  594. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_state_mutation_wiring.py +0 -0
  595. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_state_shared_and_local.py +0 -0
  596. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_stm_append_event.py +0 -0
  597. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_streaming_tool_executor.py +0 -0
  598. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_structured_output_parser.py +0 -0
  599. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_structured_reflection.py +0 -0
  600. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_subagent_credential_propagation.py +0 -0
  601. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_subagent_descriptor.py +0 -0
  602. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_subagent_orchestrator_zero_arg.py +0 -0
  603. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_subagent_parallel.py +0 -0
  604. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_subagent_type_orchestrator.py +0 -0
  605. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_task_tools.py +0 -0
  606. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_todo_write_tool.py +0 -0
  607. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_tool_abc_uplift.py +0 -0
  608. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_tool_call_events.py +0 -0
  609. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_tool_errors.py +0 -0
  610. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_tool_lifecycle_hooks.py +0 -0
  611. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_tool_provider.py +0 -0
  612. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_tool_result_persistence.py +0 -0
  613. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_tool_search_tool.py +0 -0
  614. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_tool_stage_max_concurrency.py +0 -0
  615. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_web_fetch_tool.py +0 -0
  616. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_web_search_tool.py +0 -0
  617. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_workspace.py +0 -0
  618. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_workspace_propagation.py +0 -0
  619. {geny_executor-2.1.2 → geny_executor-2.1.4}/tests/unit/test_workspace_tools_integration.py +0 -0
  620. {geny_executor-2.1.2 → geny_executor-2.1.4}/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.1.2
3
+ Version: 2.1.4
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.1.2"
7
+ version = "2.1.4"
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"
@@ -96,7 +96,7 @@ from geny_executor.memory import (
96
96
  ProviderDrivenStrategy,
97
97
  )
98
98
 
99
- __version__ = "2.1.2"
99
+ __version__ = "2.1.4"
100
100
 
101
101
  __all__ = [
102
102
  # Core
@@ -111,6 +111,56 @@ def _model_rejects_sampling_params(model: str) -> bool:
111
111
  )
112
112
 
113
113
 
114
+ # ── ``thinking.type=enabled`` → ``adaptive`` migration ──────────────
115
+ #
116
+ # Opus 4.7 (verified 2026-06-04) rejects ``thinking.type=enabled``
117
+ # and requires ``thinking.type=adaptive`` instead — the old
118
+ # enabled-with-fixed-budget shape isn't valid for the new generation
119
+ # of thinking-native models. The API error reads:
120
+ #
121
+ # ``"thinking.type.enabled" is not supported for this model.
122
+ # Use "thinking.type.adaptive" and "output_config.effort"``.
123
+ #
124
+ # Under ``adaptive``, the model picks its own budget; the legacy
125
+ # ``budget_tokens`` field is rejected as an extra input
126
+ # (``thinking.adaptive.budget_tokens: Extra inputs are not permitted``).
127
+ # Effort is *optional* — calls with bare ``{"type":"adaptive"}`` work.
128
+ # Translate at the boundary so callers that ship the v1 thinking
129
+ # shape continue to work against v2 models.
130
+ _THINKING_ADAPTIVE_ONLY_PREFIXES: tuple[str, ...] = (
131
+ "claude-opus-4-7",
132
+ )
133
+
134
+
135
+ def _model_requires_adaptive_thinking(model: str) -> bool:
136
+ """True iff ``model`` only accepts ``thinking.type=adaptive``."""
137
+ return any(
138
+ model.startswith(prefix) for prefix in _THINKING_ADAPTIVE_ONLY_PREFIXES
139
+ )
140
+
141
+
142
+ def _translate_thinking_to_adaptive(thinking: Dict[str, Any]) -> Dict[str, Any]:
143
+ """Migrate a v1 (``type=enabled``) thinking dict to the v2
144
+ (``type=adaptive``) shape Opus 4.7 demands.
145
+
146
+ * ``type`` flips to ``"adaptive"``.
147
+ * ``budget_tokens`` is dropped — the API rejects it under
148
+ adaptive (``thinking.adaptive.budget_tokens: Extra inputs are
149
+ not permitted``).
150
+ * Any other unrelated keys (``display`` etc.) pass through.
151
+
152
+ The kwarg ``output_config.effort`` is *not* added — bare
153
+ ``{"type":"adaptive"}`` works against the live API; the API
154
+ picks a default effort. Hosts that want to pin effort can do so
155
+ explicitly by setting it on ``model_config`` and threading it
156
+ through future plumbing.
157
+ """
158
+ out = dict(thinking)
159
+ out["type"] = "adaptive"
160
+ out.pop("budget_tokens", None)
161
+ return out
162
+
163
+
114
164
  # ── Last-line retry on a deprecation 400 ────────────────────────────
115
165
  #
116
166
  # Future Anthropic releases will deprecate more sampling params for
@@ -131,18 +181,42 @@ _DEPRECATION_MSG_TO_KWARG_KEY: Dict[str, str] = {
131
181
  def _retry_kwargs_after_deprecation(
132
182
  kwargs: Dict[str, Any], exc: BaseException,
133
183
  ) -> Optional[Dict[str, Any]]:
134
- """If ``exc`` is the Anthropic deprecation 400 for a sampling
135
- field we recognise, return a copy of ``kwargs`` with that field
136
- removed. ``None`` means *don't retry* — let the caller re-raise.
137
-
138
- Defends against future model deprecations the static prefix list
139
- in ``_TEMPERATURE_DEPRECATED_PREFIXES`` doesn't know about yet.
140
- Only retries once per send (the caller guarantees this by not
141
- calling us recursively); if the retry also 400s the outer
142
- handler classifies and raises.
184
+ """If ``exc`` is an Anthropic 400 we can self-heal, return a
185
+ rebuilt kwargs. ``None`` means *don't retry* let the caller
186
+ re-raise.
187
+
188
+ Two recognised classes today:
189
+
190
+ 1. **Sampling-param deprecation** the API message names a
191
+ specific field (``temperature``, ``top_p``, ``top_k``) as
192
+ deprecated. Strip the field and retry.
193
+ 2. **Thinking v1 → v2 migration** — the API rejects
194
+ ``thinking.type=enabled`` and asks for
195
+ ``thinking.type.adaptive``. Translate via
196
+ :func:`_translate_thinking_to_adaptive` and retry.
197
+
198
+ Defends against future model rollouts our static prefix lists
199
+ don't know about yet. Caller guarantees one retry per send (we
200
+ never recurse); a retry that also 400s gets classified + raised
201
+ by the outer handler.
143
202
  """
144
203
  msg = str(getattr(exc, "message", "") or exc)
145
204
  msg_lower = msg.lower()
205
+
206
+ # Class 2 — thinking v1→v2 migration. Run first because the
207
+ # diagnostic is structural (the request shape, not just one
208
+ # missing field).
209
+ if (
210
+ "thinking.type.enabled" in msg_lower
211
+ or "thinking.type.adaptive" in msg_lower
212
+ ) and isinstance(kwargs.get("thinking"), dict):
213
+ thinking = kwargs["thinking"]
214
+ if thinking.get("type") == "enabled":
215
+ retry = dict(kwargs)
216
+ retry["thinking"] = _translate_thinking_to_adaptive(thinking)
217
+ return retry
218
+
219
+ # Class 1 — sampling-param deprecation.
146
220
  for needle, key in _DEPRECATION_MSG_TO_KWARG_KEY.items():
147
221
  if needle in msg_lower and key in kwargs:
148
222
  retry = dict(kwargs)
@@ -367,6 +441,26 @@ class AnthropicClient(BaseClient):
367
441
  key, dropped, resolved_model,
368
442
  )
369
443
 
444
+ # Thinking-shape migration — see
445
+ # ``_THINKING_ADAPTIVE_ONLY_PREFIXES`` at module top. Opus 4.7
446
+ # rejects ``thinking.type=enabled``; flip to ``adaptive`` (and
447
+ # drop the now-invalid ``budget_tokens``) at the boundary so
448
+ # ``ModelConfig`` callers that still emit the v1 shape
449
+ # continue to work against v2 models.
450
+ if (
451
+ "thinking" in kwargs
452
+ and isinstance(kwargs["thinking"], dict)
453
+ and kwargs["thinking"].get("type") == "enabled"
454
+ and _model_requires_adaptive_thinking(resolved_model)
455
+ ):
456
+ before = kwargs["thinking"]
457
+ kwargs["thinking"] = _translate_thinking_to_adaptive(before)
458
+ logger.info(
459
+ "anthropic: translated thinking.type=enabled → adaptive "
460
+ "(model=%r, dropped legacy budget_tokens=%r)",
461
+ resolved_model, before.get("budget_tokens"),
462
+ )
463
+
370
464
  return kwargs
371
465
 
372
466
  def _parse_response(self, raw: Any) -> APIResponse:
@@ -438,6 +438,48 @@ def stream_json_line_to_canonical_event(line_obj: Dict[str, Any]) -> Optional[Di
438
438
  return {"type": "text_delta", "text": "".join(parts)}
439
439
  return None
440
440
 
441
+ if ltype == "stream_event":
442
+ # Claude Code CLI 2.1.x wrapper around the Anthropic Messages SSE
443
+ # event shape. Each ``stream_event`` line carries a single
444
+ # ``event`` dict whose ``type`` is one of message_start /
445
+ # content_block_start / content_block_delta / content_block_stop
446
+ # / message_delta / message_stop. This is the *only* form that
447
+ # actually streams token-by-token under
448
+ # ``--include-partial-messages``; without handling it, the
449
+ # parser falls through to the terminal ``assistant`` envelope
450
+ # (full-message form) which collapses everything into a single
451
+ # delta — exactly the "no streaming visible in the UI" bug.
452
+ ev = line_obj.get("event") or {}
453
+ if not isinstance(ev, dict):
454
+ return None
455
+ etype = str(ev.get("type", ""))
456
+ if etype == "content_block_delta":
457
+ delta = ev.get("delta") or {}
458
+ dtype = str(delta.get("type", ""))
459
+ if dtype == "text_delta":
460
+ return {"type": "text_delta", "text": delta.get("text", "")}
461
+ if dtype == "thinking_delta":
462
+ return {"type": "thinking_delta", "text": delta.get("text", "")}
463
+ if dtype == "input_json_delta":
464
+ return {"type": "input_json_delta", "delta": delta.get("partial_json", "")}
465
+ return None
466
+ if etype == "content_block_start":
467
+ cb = ev.get("content_block") or {}
468
+ if isinstance(cb, dict) and cb.get("type") == "tool_use":
469
+ return {
470
+ "type": "tool_use",
471
+ "id": cb.get("id"),
472
+ "name": cb.get("name"),
473
+ "input": cb.get("input") or {},
474
+ }
475
+ return None
476
+ if etype == "content_block_stop":
477
+ return {"type": "content_block_stop"}
478
+ # message_start / message_delta / message_stop carry usage +
479
+ # stop_reason metadata. Not text-bearing; let the accumulator
480
+ # record them silently.
481
+ return None
482
+
441
483
  if ltype == "content_block_stop":
442
484
  return {"type": "content_block_stop"}
443
485
  if ltype == "message_stop":
@@ -579,6 +621,9 @@ class StreamJsonAccumulator:
579
621
  if ltype == "assistant":
580
622
  return self._feed_assistant(line)
581
623
 
624
+ if ltype == "stream_event":
625
+ return self._feed_stream_event(line)
626
+
582
627
  if ltype == "content_block_stop":
583
628
  self._close_current_tool()
584
629
  return [{"type": "content_block_stop"}]
@@ -709,12 +754,125 @@ class StreamJsonAccumulator:
709
754
 
710
755
  return []
711
756
 
757
+ def _feed_stream_event(self, line: Dict[str, Any]) -> List[Dict[str, Any]]:
758
+ """Process a single Claude Code CLI ``stream_event`` line.
759
+
760
+ Claude Code CLI 2.1.x wraps the Anthropic Messages SSE event
761
+ shape inside a ``{"type":"stream_event","event":{...}}`` envelope
762
+ when ``--include-partial-messages`` is on. The accumulator turns
763
+ each one into the same canonical UI event the legacy ``assistant``
764
+ delta form produced, so downstream consumers (Geny's session
765
+ logger streaming pipe, Stage 10's tool dispatch, anything else
766
+ that reads ``feed()`` output) get token-level deltas without
767
+ having to learn the new wire format.
768
+
769
+ Mappings:
770
+ - ``message_start`` → record id + usage; no UI event
771
+ - ``content_block_start`` → tool_use carries the tool record
772
+ - ``content_block_delta`` → text_delta / thinking_delta /
773
+ input_json_delta
774
+ - ``content_block_stop`` → close current tool; emit stop
775
+ - ``message_delta`` → record stop_reason; no UI event
776
+ - ``message_stop`` → no UI event (caller emits the
777
+ final ``message_complete`` after
778
+ ``finalize()``)
779
+ """
780
+ ev = line.get("event") or {}
781
+ if not isinstance(ev, dict):
782
+ return []
783
+ etype = str(ev.get("type", ""))
784
+
785
+ if etype == "message_start":
786
+ msg = ev.get("message") or {}
787
+ if isinstance(msg, dict):
788
+ self._message_id = str(msg.get("id") or self._message_id)
789
+ self._resolved_model = str(msg.get("model") or self._resolved_model)
790
+ usage = msg.get("usage")
791
+ if isinstance(usage, dict) and self._final_obj is None:
792
+ self._final_obj = {"usage": usage}
793
+ return []
794
+
795
+ if etype == "content_block_start":
796
+ cb = ev.get("content_block") or {}
797
+ if isinstance(cb, dict) and cb.get("type") == "tool_use":
798
+ self._current_tool = {
799
+ "id": cb.get("id"),
800
+ "name": cb.get("name"),
801
+ "input": cb.get("input") or {},
802
+ }
803
+ return [
804
+ {
805
+ "type": "tool_use",
806
+ "id": cb.get("id"),
807
+ "name": cb.get("name"),
808
+ "input": cb.get("input") or {},
809
+ }
810
+ ]
811
+ return []
812
+
813
+ if etype == "content_block_delta":
814
+ delta = ev.get("delta") or {}
815
+ dtype = str(delta.get("type", ""))
816
+ if dtype == "text_delta":
817
+ text = str(delta.get("text", ""))
818
+ if text:
819
+ self._text_buf.append(text)
820
+ return [{"type": "text_delta", "text": text}]
821
+ return []
822
+ if dtype == "thinking_delta":
823
+ text = str(delta.get("text", ""))
824
+ if text:
825
+ self._thinking_buf.append(text)
826
+ return [{"type": "thinking_delta", "text": text}]
827
+ return []
828
+ if dtype == "input_json_delta":
829
+ partial = str(delta.get("partial_json", ""))
830
+ if self._current_tool is not None:
831
+ self._current_tool.setdefault("_partial_json", "")
832
+ self._current_tool["_partial_json"] += partial
833
+ return [{"type": "input_json_delta", "delta": partial}]
834
+ return []
835
+
836
+ if etype == "content_block_stop":
837
+ self._close_current_tool()
838
+ return [{"type": "content_block_stop"}]
839
+
840
+ if etype == "message_delta":
841
+ delta = ev.get("delta") or {}
842
+ if isinstance(delta, dict):
843
+ sr = delta.get("stop_reason")
844
+ if sr:
845
+ self._stop_reason = str(sr)
846
+ # Some emitters tag usage on the message_delta event too.
847
+ usage = ev.get("usage")
848
+ if isinstance(usage, dict):
849
+ if self._final_obj is None:
850
+ self._final_obj = {"usage": usage}
851
+ else:
852
+ self._final_obj.setdefault("usage", usage)
853
+ return []
854
+
855
+ if etype == "message_stop":
856
+ return []
857
+
858
+ return []
859
+
712
860
  def _feed_message(self, message: Dict[str, Any]) -> List[Dict[str, Any]]:
713
861
  """Process a full assistant message envelope's content array.
714
862
 
715
863
  Emits synthetic per-block delta events so UI consumers see the
716
864
  same canonical shape they would with true streaming, then
717
865
  records the blocks for the eventual :class:`APIResponse`.
866
+
867
+ ``stream_event``-form coexistence — Claude Code CLI 2.1.x with
868
+ ``--include-partial-messages`` emits BOTH per-token
869
+ ``stream_event`` lines AND a terminal ``assistant`` envelope
870
+ containing the same text in full. If we've already accumulated
871
+ text/thinking via the ``stream_event`` deltas, the envelope is
872
+ a duplicate and re-recording it would double every assistant
873
+ message. ``tool_use`` blocks are kept either way — tool calls
874
+ arrive via ``content_block_start``, not via deltas, so the
875
+ envelope is the canonical record for them.
718
876
  """
719
877
  # Capture stop_reason / usage off the envelope if present —
720
878
  # the ``message`` form lets the assistant frame carry these
@@ -725,12 +883,8 @@ class StreamJsonAccumulator:
725
883
  usage = message.get("usage")
726
884
  if isinstance(usage, dict) and self._final_obj is None:
727
885
  self._final_obj = {"usage": usage}
728
- # Skip synthetic "Not logged in" messages — Claude Code emits
729
- # them with ``error=authentication_failed`` and a placeholder
730
- # text block. Surface as an APIError-friendly error event so
731
- # callers raise instead of returning empty output.
732
- # (Detected on the outer ``line``, but ``message`` is the
733
- # carrier so we pass it through unchanged here.)
886
+
887
+ already_streamed = bool(self._text_buf) or bool(self._thinking_buf)
734
888
 
735
889
  events: List[Dict[str, Any]] = []
736
890
  content = message.get("content") or []
@@ -741,11 +895,15 @@ class StreamJsonAccumulator:
741
895
  continue
742
896
  btype = str(block.get("type", ""))
743
897
  if btype == "text":
898
+ if already_streamed:
899
+ continue
744
900
  text = str(block.get("text", ""))
745
901
  if text:
746
902
  self._text_buf.append(text)
747
903
  events.append({"type": "text_delta", "text": text})
748
904
  elif btype == "thinking":
905
+ if already_streamed:
906
+ continue
749
907
  # Anthropic uses ``thinking`` field; some shims use ``text``.
750
908
  text = str(block.get("thinking") or block.get("text") or "")
751
909
  if text:
@@ -165,8 +165,11 @@ def test_build_kwargs_keeps_sampling_params_when_thinking_absent() -> None:
165
165
 
166
166
 
167
167
  def test_build_kwargs_alias_resolution_and_thinking_drop_together() -> None:
168
- """The two fixes are independent combining them shouldn't trip
169
- either path. This is the configuration Geny's VTuber env hits."""
168
+ """All three fixes layered: alias canonical (2.1.1),
169
+ unconditional temperature drop (2.1.2), thinking shape migration
170
+ (2.1.3). This is the exact configuration Geny's VTuber env hits —
171
+ pinning ``opus`` with thinking enabled, the legacy v1
172
+ budget_tokens shape, and an explicit ``temperature``."""
170
173
  client = AnthropicClient(api_key="sk-mock")
171
174
  kwargs = client._build_kwargs(_req(
172
175
  model="opus",
@@ -175,7 +178,11 @@ def test_build_kwargs_alias_resolution_and_thinking_drop_together() -> None:
175
178
  ))
176
179
  assert kwargs["model"] == "claude-opus-4-7"
177
180
  assert "temperature" not in kwargs
178
- assert kwargs["thinking"]["budget_tokens"] == 12000
181
+ # Opus 4.7 demands ``adaptive``; the migration drops the now-
182
+ # invalid ``budget_tokens`` (the API rejects it under adaptive
183
+ # as ``thinking.adaptive.budget_tokens: Extra inputs are not
184
+ # permitted``).
185
+ assert kwargs["thinking"] == {"type": "adaptive"}
179
186
 
180
187
 
181
188
  # ── 2.1.2 — Opus 4.7 unconditional sampling-param rejection ───────
@@ -319,3 +326,135 @@ def test_retry_kwargs_returns_none_when_field_already_absent() -> None:
319
326
 
320
327
  kwargs = {"model": "claude-x", "max_tokens": 100}
321
328
  assert _retry_kwargs_after_deprecation(kwargs, _Fake400()) is None
329
+
330
+
331
+ # ── 2.1.3 — Opus 4.7 thinking.type=enabled → adaptive migration ───
332
+
333
+
334
+ from geny_executor.llm_client.anthropic import (
335
+ _model_requires_adaptive_thinking,
336
+ _translate_thinking_to_adaptive,
337
+ )
338
+
339
+
340
+ def test_model_requires_adaptive_thinking_for_opus_4_7():
341
+ assert _model_requires_adaptive_thinking("claude-opus-4-7") is True
342
+ assert _model_requires_adaptive_thinking("claude-opus-4-7-20260101") is True
343
+
344
+
345
+ @pytest.mark.parametrize(
346
+ "model",
347
+ ["claude-sonnet-4-6", "claude-haiku-4-5-20251001", "claude-opus-4-6"],
348
+ )
349
+ def test_model_requires_adaptive_thinking_false_for_v1_models(model: str) -> None:
350
+ assert _model_requires_adaptive_thinking(model) is False
351
+
352
+
353
+ def test_translate_thinking_to_adaptive_flips_type_and_drops_budget():
354
+ out = _translate_thinking_to_adaptive(
355
+ {"type": "enabled", "budget_tokens": 4096},
356
+ )
357
+ assert out == {"type": "adaptive"}
358
+
359
+
360
+ def test_translate_thinking_to_adaptive_preserves_unrelated_keys():
361
+ out = _translate_thinking_to_adaptive(
362
+ {"type": "enabled", "budget_tokens": 4096, "display": "summarized"},
363
+ )
364
+ assert out == {"type": "adaptive", "display": "summarized"}
365
+
366
+
367
+ def test_build_kwargs_translates_thinking_for_opus_4_7() -> None:
368
+ """The exact failure we hit on 2026-06-04: VTuber's memory stage
369
+ pinned Opus 4.7 via the router with the legacy enabled-shape
370
+ thinking dict, and Anthropic returned
371
+ ``thinking.type.enabled is not supported for this model``."""
372
+ client = AnthropicClient(api_key="sk-mock")
373
+ kwargs = client._build_kwargs(_req(
374
+ model="claude-opus-4-7",
375
+ thinking={"type": "enabled", "budget_tokens": 8192},
376
+ ))
377
+ assert kwargs["thinking"] == {"type": "adaptive"}
378
+
379
+
380
+ def test_build_kwargs_translates_thinking_after_alias_resolution() -> None:
381
+ """An env pinning the ``opus`` alias should also hit the
382
+ translation after the alias resolves to ``claude-opus-4-7``."""
383
+ client = AnthropicClient(api_key="sk-mock")
384
+ kwargs = client._build_kwargs(_req(
385
+ model="opus",
386
+ thinking={"type": "enabled", "budget_tokens": 4096},
387
+ ))
388
+ assert kwargs["model"] == "claude-opus-4-7"
389
+ assert kwargs["thinking"] == {"type": "adaptive"}
390
+
391
+
392
+ def test_build_kwargs_does_not_translate_for_sonnet_4_6() -> None:
393
+ """Regression — only Opus 4.7 (and prefix variants) demand
394
+ ``adaptive``. Sonnet / Haiku still accept ``enabled``."""
395
+ client = AnthropicClient(api_key="sk-mock")
396
+ kwargs = client._build_kwargs(_req(
397
+ model="claude-sonnet-4-6",
398
+ thinking={"type": "enabled", "budget_tokens": 4096},
399
+ ))
400
+ assert kwargs["thinking"] == {"type": "enabled", "budget_tokens": 4096}
401
+
402
+
403
+ def test_build_kwargs_leaves_adaptive_thinking_alone() -> None:
404
+ """If the caller already shipped ``adaptive``, don't reshape it."""
405
+ client = AnthropicClient(api_key="sk-mock")
406
+ kwargs = client._build_kwargs(_req(
407
+ model="claude-opus-4-7",
408
+ thinking={"type": "adaptive"},
409
+ ))
410
+ assert kwargs["thinking"] == {"type": "adaptive"}
411
+
412
+
413
+ def test_build_kwargs_full_opus_combo() -> None:
414
+ """The full failure path the VTuber session hit: Opus 4.7 +
415
+ temperature + thinking.type=enabled + budget_tokens. All three
416
+ fixes (alias, sampling-param drop, thinking migration) layer
417
+ cleanly on the same call."""
418
+ client = AnthropicClient(api_key="sk-mock")
419
+ kwargs = client._build_kwargs(_req(
420
+ model="opus",
421
+ temperature=0.0,
422
+ thinking={"type": "enabled", "budget_tokens": 4096},
423
+ ))
424
+ assert kwargs["model"] == "claude-opus-4-7"
425
+ assert "temperature" not in kwargs
426
+ assert kwargs["thinking"] == {"type": "adaptive"}
427
+
428
+
429
+ # ── 2.1.3 — Retry self-heals the thinking migration too ───────────
430
+
431
+
432
+ def test_retry_kwargs_self_heals_thinking_enabled_400() -> None:
433
+ """An env shipping ``thinking.type=enabled`` against a future
434
+ adaptive-only model the prefix list doesn't know yet — the API
435
+ will tell us via the 400, and the retry path self-heals."""
436
+ class _Fake400:
437
+ message = (
438
+ '"thinking.type.enabled" is not supported for this model. '
439
+ 'Use "thinking.type.adaptive" and "output_config.effort"'
440
+ )
441
+
442
+ kwargs = {
443
+ "model": "claude-future-thinking-v2",
444
+ "messages": [{"role": "user", "content": "x"}],
445
+ "max_tokens": 1024,
446
+ "thinking": {"type": "enabled", "budget_tokens": 2048},
447
+ }
448
+ retry = _retry_kwargs_after_deprecation(kwargs, _Fake400())
449
+ assert retry is not None
450
+ assert retry["thinking"] == {"type": "adaptive"}
451
+
452
+
453
+ def test_retry_kwargs_returns_none_when_thinking_already_adaptive() -> None:
454
+ """If the request was already adaptive, the 400 message about
455
+ enabled must not trigger a useless retry."""
456
+ class _Fake400:
457
+ message = '"thinking.type.enabled" is not supported for this model.'
458
+
459
+ kwargs = {"model": "claude-x", "thinking": {"type": "adaptive"}, "max_tokens": 100}
460
+ assert _retry_kwargs_after_deprecation(kwargs, _Fake400()) is None