geny-executor 2.2.0__tar.gz → 2.3.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 (689) hide show
  1. {geny_executor-2.2.0 → geny_executor-2.3.0}/PKG-INFO +1 -1
  2. {geny_executor-2.2.0 → geny_executor-2.3.0}/pyproject.toml +1 -1
  3. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/__init__.py +1 -1
  4. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/pipeline.py +236 -13
  5. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/state.py +10 -0
  6. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/events/catalog.py +38 -3
  7. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/__init__.py +11 -1
  8. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/artifact/default/__init__.py +6 -0
  9. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/artifact/default/stage.py +143 -77
  10. geny_executor-2.3.0/src/geny_executor/stages/s06_api/artifact/default/tool_loop.py +435 -0
  11. geny_executor-2.3.0/src/geny_executor/stages/s06_api/interface.py +126 -0
  12. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/artifact/default/stage.py +36 -20
  13. geny_executor-2.3.0/src/geny_executor/stages/s10_tool/dispatcher.py +85 -0
  14. geny_executor-2.3.0/tests/unit/test_cli_mcp_passthrough.py +302 -0
  15. geny_executor-2.3.0/tests/unit/test_internal_agentic_loop.py +475 -0
  16. geny_executor-2.2.0/src/geny_executor/stages/s06_api/interface.py +0 -66
  17. {geny_executor-2.2.0 → geny_executor-2.3.0}/.gitignore +0 -0
  18. {geny_executor-2.2.0 → geny_executor-2.3.0}/LICENSE +0 -0
  19. {geny_executor-2.2.0 → geny_executor-2.3.0}/README.md +0 -0
  20. {geny_executor-2.2.0 → geny_executor-2.3.0}/README_ko.md +0 -0
  21. {geny_executor-2.2.0 → geny_executor-2.3.0}/docs/ci/README.md +0 -0
  22. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/channels/__init__.py +0 -0
  23. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/channels/send_message_channel.py +0 -0
  24. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/channels/user_file_channel.py +0 -0
  25. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/__init__.py +0 -0
  26. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/artifact.py +0 -0
  27. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/builder.py +0 -0
  28. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/config.py +0 -0
  29. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/diff.py +0 -0
  30. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/environment.py +0 -0
  31. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/errors.py +0 -0
  32. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/introspection.py +0 -0
  33. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/manifest_factory.py +0 -0
  34. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/mutation.py +0 -0
  35. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/presets.py +0 -0
  36. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/result.py +0 -0
  37. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/schema.py +0 -0
  38. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/shared_keys.py +0 -0
  39. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/slot.py +0 -0
  40. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/snapshot.py +0 -0
  41. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/core/stage.py +0 -0
  42. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/cron/__init__.py +0 -0
  43. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/cron/runner.py +0 -0
  44. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/cron/store_abc.py +0 -0
  45. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/cron/store_impl/__init__.py +0 -0
  46. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/cron/store_impl/file_backed.py +0 -0
  47. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/cron/store_impl/in_memory.py +0 -0
  48. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/cron/types.py +0 -0
  49. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/events/__init__.py +0 -0
  50. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/events/bus.py +0 -0
  51. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/events/types.py +0 -0
  52. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/history/__init__.py +0 -0
  53. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/history/ab_test.py +0 -0
  54. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/history/cost.py +0 -0
  55. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/history/models.py +0 -0
  56. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/history/monitor.py +0 -0
  57. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/history/replay.py +0 -0
  58. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/history/service.py +0 -0
  59. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/hooks/__init__.py +0 -0
  60. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/hooks/config.py +0 -0
  61. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/hooks/events.py +0 -0
  62. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/hooks/runner.py +0 -0
  63. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/__init__.py +0 -0
  64. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/_cli_runtime.py +0 -0
  65. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/anthropic.py +0 -0
  66. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/base.py +0 -0
  67. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/claude_code.py +0 -0
  68. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/credentials.py +0 -0
  69. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/google.py +0 -0
  70. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/openai.py +0 -0
  71. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/registry.py +0 -0
  72. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/translators/__init__.py +0 -0
  73. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/translators/_canonical.py +0 -0
  74. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/translators/_cli.py +0 -0
  75. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/types.py +0 -0
  76. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/llm_client/vllm.py +0 -0
  77. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/__init__.py +0 -0
  78. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/_locks.py +0 -0
  79. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/_progressive.py +0 -0
  80. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/composite/__init__.py +0 -0
  81. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/composite/handles.py +0 -0
  82. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/composite/provider.py +0 -0
  83. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/composite/routing.py +0 -0
  84. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/composite/snapshot.py +0 -0
  85. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/embedding/__init__.py +0 -0
  86. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/embedding/client.py +0 -0
  87. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/embedding/google.py +0 -0
  88. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/embedding/local.py +0 -0
  89. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/embedding/openai.py +0 -0
  90. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/embedding/registry.py +0 -0
  91. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/embedding/voyage.py +0 -0
  92. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/factory.py +0 -0
  93. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/presets.py +0 -0
  94. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/provider.py +0 -0
  95. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/__init__.py +0 -0
  96. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/ephemeral.py +0 -0
  97. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/file/__init__.py +0 -0
  98. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/file/config.py +0 -0
  99. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/file/frontmatter.py +0 -0
  100. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/file/index_store.py +0 -0
  101. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/file/layout.py +0 -0
  102. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/file/ltm_store.py +0 -0
  103. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/file/notes_store.py +0 -0
  104. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/file/provider.py +0 -0
  105. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/file/snapshot.py +0 -0
  106. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/file/stm_store.py +0 -0
  107. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/file/timezone.py +0 -0
  108. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/file/vector_store.py +0 -0
  109. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/sql/__init__.py +0 -0
  110. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/sql/config.py +0 -0
  111. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/sql/connection.py +0 -0
  112. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/sql/index_store.py +0 -0
  113. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/sql/ltm_store.py +0 -0
  114. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/sql/notes_store.py +0 -0
  115. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/sql/provider.py +0 -0
  116. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/sql/schema.py +0 -0
  117. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/sql/snapshot.py +0 -0
  118. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/sql/stm_store.py +0 -0
  119. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/providers/sql/vector_store.py +0 -0
  120. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/retriever.py +0 -0
  121. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/memory/strategy.py +0 -0
  122. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/notifications/__init__.py +0 -0
  123. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/notifications/registry.py +0 -0
  124. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/permission/__init__.py +0 -0
  125. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/permission/loader.py +0 -0
  126. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/permission/matrix.py +0 -0
  127. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/permission/types.py +0 -0
  128. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/py.typed +0 -0
  129. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/runtime/__init__.py +0 -0
  130. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/runtime/task_executors.py +0 -0
  131. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/runtime/task_runner.py +0 -0
  132. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/security/__init__.py +0 -0
  133. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/security/import_validator.py +0 -0
  134. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/security/script_sandbox.py +0 -0
  135. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/session/__init__.py +0 -0
  136. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/session/freshness.py +0 -0
  137. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/session/manager.py +0 -0
  138. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/session/persistence.py +0 -0
  139. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/session/session.py +0 -0
  140. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/settings/__init__.py +0 -0
  141. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/settings/loader.py +0 -0
  142. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/settings/section_registry.py +0 -0
  143. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/__init__.py +0 -0
  144. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/bundled/batch/SKILL.md +0 -0
  145. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/bundled/debug/SKILL.md +0 -0
  146. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/bundled/loop/SKILL.md +0 -0
  147. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/bundled/lorem-ipsum/SKILL.md +0 -0
  148. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/bundled/simplify/SKILL.md +0 -0
  149. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/bundled/skillify/SKILL.md +0 -0
  150. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/bundled/stuck/SKILL.md +0 -0
  151. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/bundled/verify/SKILL.md +0 -0
  152. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/bundled_skills.py +0 -0
  153. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/fork.py +0 -0
  154. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/frontmatter.py +0 -0
  155. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/loader.py +0 -0
  156. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/mcp_bridge.py +0 -0
  157. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/path_match.py +0 -0
  158. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/registry.py +0 -0
  159. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/shell_blocks.py +0 -0
  160. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/skill_tool.py +0 -0
  161. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/types.py +0 -0
  162. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/skills/watcher.py +0 -0
  163. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/__init__.py +0 -0
  164. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/__init__.py +0 -0
  165. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/_helpers.py +0 -0
  166. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/cancel.py +0 -0
  167. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/clear.py +0 -0
  168. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/compact.py +0 -0
  169. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/config.py +0 -0
  170. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/context.py +0 -0
  171. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/cost.py +0 -0
  172. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/help.py +0 -0
  173. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/memory.py +0 -0
  174. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/model.py +0 -0
  175. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/preset_info.py +0 -0
  176. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/status.py +0 -0
  177. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/built_in/tasks.py +0 -0
  178. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/md_template.py +0 -0
  179. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/parser.py +0 -0
  180. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/registry.py +0 -0
  181. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/slash_commands/types.py +0 -0
  182. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/__init__.py +0 -0
  183. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s01_input/__init__.py +0 -0
  184. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s01_input/artifact/__init__.py +0 -0
  185. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s01_input/artifact/default/__init__.py +0 -0
  186. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s01_input/artifact/default/normalizers.py +0 -0
  187. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s01_input/artifact/default/stage.py +0 -0
  188. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s01_input/artifact/default/validators.py +0 -0
  189. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s01_input/interface.py +0 -0
  190. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s01_input/normalizers.py +0 -0
  191. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s01_input/stage.py +0 -0
  192. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s01_input/types.py +0 -0
  193. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s01_input/validators.py +0 -0
  194. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/__init__.py +0 -0
  195. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/artifact/__init__.py +0 -0
  196. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/artifact/default/__init__.py +0 -0
  197. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/artifact/default/compactors.py +0 -0
  198. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/artifact/default/retrievers.py +0 -0
  199. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/artifact/default/stage.py +0 -0
  200. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/artifact/default/strategies.py +0 -0
  201. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/compactors.py +0 -0
  202. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/interface.py +0 -0
  203. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/retrievers.py +0 -0
  204. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/stage.py +0 -0
  205. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/strategies.py +0 -0
  206. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s02_context/types.py +0 -0
  207. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s03_system/__init__.py +0 -0
  208. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s03_system/artifact/__init__.py +0 -0
  209. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s03_system/artifact/default/__init__.py +0 -0
  210. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s03_system/artifact/default/builders.py +0 -0
  211. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s03_system/artifact/default/stage.py +0 -0
  212. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s03_system/builders.py +0 -0
  213. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s03_system/interface.py +0 -0
  214. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s03_system/persona/__init__.py +0 -0
  215. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s03_system/persona/builder.py +0 -0
  216. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s03_system/persona/provider.py +0 -0
  217. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s03_system/stage.py +0 -0
  218. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s04_guard/__init__.py +0 -0
  219. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s04_guard/artifact/__init__.py +0 -0
  220. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s04_guard/artifact/default/__init__.py +0 -0
  221. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s04_guard/artifact/default/guards.py +0 -0
  222. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s04_guard/artifact/default/stage.py +0 -0
  223. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s04_guard/guards.py +0 -0
  224. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s04_guard/interface.py +0 -0
  225. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s04_guard/stage.py +0 -0
  226. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s04_guard/types.py +0 -0
  227. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s05_cache/__init__.py +0 -0
  228. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s05_cache/artifact/__init__.py +0 -0
  229. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s05_cache/artifact/default/__init__.py +0 -0
  230. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s05_cache/artifact/default/stage.py +0 -0
  231. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s05_cache/artifact/default/strategies.py +0 -0
  232. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s05_cache/interface.py +0 -0
  233. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s05_cache/stage.py +0 -0
  234. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s05_cache/strategies.py +0 -0
  235. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/_translate.py +0 -0
  236. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/artifact/__init__.py +0 -0
  237. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/artifact/default/providers.py +0 -0
  238. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/artifact/default/retry.py +0 -0
  239. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/artifact/default/router.py +0 -0
  240. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/artifact/google/__init__.py +0 -0
  241. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/artifact/google/providers.py +0 -0
  242. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/artifact/openai/__init__.py +0 -0
  243. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/artifact/openai/providers.py +0 -0
  244. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/providers.py +0 -0
  245. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/retry.py +0 -0
  246. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/stage.py +0 -0
  247. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s06_api/types.py +0 -0
  248. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s07_token/__init__.py +0 -0
  249. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s07_token/artifact/__init__.py +0 -0
  250. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s07_token/artifact/default/__init__.py +0 -0
  251. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s07_token/artifact/default/pricing.py +0 -0
  252. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s07_token/artifact/default/stage.py +0 -0
  253. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s07_token/artifact/default/trackers.py +0 -0
  254. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s07_token/interface.py +0 -0
  255. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s07_token/pricing.py +0 -0
  256. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s07_token/stage.py +0 -0
  257. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s07_token/trackers.py +0 -0
  258. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s08_think/__init__.py +0 -0
  259. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s08_think/artifact/default/__init__.py +0 -0
  260. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s08_think/artifact/default/budget.py +0 -0
  261. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s08_think/artifact/default/processors.py +0 -0
  262. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s08_think/artifact/default/stage.py +0 -0
  263. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s08_think/interface.py +0 -0
  264. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s08_think/processors.py +0 -0
  265. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s08_think/stage.py +0 -0
  266. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s08_think/types.py +0 -0
  267. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s09_parse/__init__.py +0 -0
  268. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s09_parse/artifact/default/__init__.py +0 -0
  269. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s09_parse/artifact/default/parsers.py +0 -0
  270. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s09_parse/artifact/default/signals.py +0 -0
  271. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s09_parse/artifact/default/stage.py +0 -0
  272. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s09_parse/interface.py +0 -0
  273. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s09_parse/parsers.py +0 -0
  274. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s09_parse/signals.py +0 -0
  275. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s09_parse/stage.py +0 -0
  276. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s09_parse/types.py +0 -0
  277. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/__init__.py +0 -0
  278. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/artifact/__init__.py +0 -0
  279. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/artifact/default/__init__.py +0 -0
  280. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/artifact/default/executors.py +0 -0
  281. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/artifact/default/routers.py +0 -0
  282. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/executors.py +0 -0
  283. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/interface.py +0 -0
  284. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/persistence.py +0 -0
  285. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/routers.py +0 -0
  286. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/stage.py +0 -0
  287. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/state_mutation.py +0 -0
  288. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s10_tool/streaming.py +0 -0
  289. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s11_tool_review/__init__.py +0 -0
  290. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s11_tool_review/artifact/__init__.py +0 -0
  291. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s11_tool_review/artifact/default/__init__.py +0 -0
  292. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s11_tool_review/artifact/default/reviewers.py +0 -0
  293. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s11_tool_review/artifact/default/stage.py +0 -0
  294. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s11_tool_review/interface.py +0 -0
  295. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s12_agent/__init__.py +0 -0
  296. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s12_agent/artifact/__init__.py +0 -0
  297. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s12_agent/artifact/default/__init__.py +0 -0
  298. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s12_agent/artifact/default/orchestrators.py +0 -0
  299. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s12_agent/artifact/default/stage.py +0 -0
  300. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s12_agent/interface.py +0 -0
  301. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s12_agent/orchestrators.py +0 -0
  302. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s12_agent/stage.py +0 -0
  303. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s12_agent/subagent_type.py +0 -0
  304. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s12_agent/types.py +0 -0
  305. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s13_task_registry/__init__.py +0 -0
  306. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s13_task_registry/artifact/__init__.py +0 -0
  307. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s13_task_registry/artifact/default/__init__.py +0 -0
  308. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s13_task_registry/artifact/default/file_backed_registry.py +0 -0
  309. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s13_task_registry/artifact/default/policies.py +0 -0
  310. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s13_task_registry/artifact/default/registry.py +0 -0
  311. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s13_task_registry/artifact/default/stage.py +0 -0
  312. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s13_task_registry/interface.py +0 -0
  313. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s13_task_registry/types.py +0 -0
  314. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s14_evaluate/__init__.py +0 -0
  315. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s14_evaluate/artifact/__init__.py +0 -0
  316. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/__init__.py +0 -0
  317. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/strategy.py +0 -0
  318. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s14_evaluate/artifact/default/__init__.py +0 -0
  319. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s14_evaluate/artifact/default/stage.py +0 -0
  320. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s14_evaluate/artifact/default/strategies.py +0 -0
  321. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s14_evaluate/interface.py +0 -0
  322. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s14_evaluate/stage.py +0 -0
  323. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s14_evaluate/strategies.py +0 -0
  324. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s14_evaluate/types.py +0 -0
  325. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s15_hitl/__init__.py +0 -0
  326. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s15_hitl/artifact/__init__.py +0 -0
  327. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s15_hitl/artifact/default/__init__.py +0 -0
  328. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s15_hitl/artifact/default/requesters.py +0 -0
  329. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s15_hitl/artifact/default/stage.py +0 -0
  330. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s15_hitl/artifact/default/timeouts.py +0 -0
  331. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s15_hitl/interface.py +0 -0
  332. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s15_hitl/types.py +0 -0
  333. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s16_loop/__init__.py +0 -0
  334. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s16_loop/artifact/__init__.py +0 -0
  335. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s16_loop/artifact/default/__init__.py +0 -0
  336. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s16_loop/artifact/default/controllers.py +0 -0
  337. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s16_loop/artifact/default/stage.py +0 -0
  338. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s16_loop/controllers.py +0 -0
  339. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s16_loop/interface.py +0 -0
  340. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s16_loop/stage.py +0 -0
  341. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s17_emit/__init__.py +0 -0
  342. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s17_emit/artifact/__init__.py +0 -0
  343. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s17_emit/artifact/default/__init__.py +0 -0
  344. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s17_emit/artifact/default/emitters.py +0 -0
  345. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s17_emit/artifact/default/stage.py +0 -0
  346. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s17_emit/emitters.py +0 -0
  347. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s17_emit/interface.py +0 -0
  348. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s17_emit/stage.py +0 -0
  349. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s17_emit/types.py +0 -0
  350. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s18_memory/__init__.py +0 -0
  351. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s18_memory/_dehydrate.py +0 -0
  352. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s18_memory/artifact/__init__.py +0 -0
  353. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s18_memory/artifact/default/__init__.py +0 -0
  354. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s18_memory/artifact/default/persistence.py +0 -0
  355. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s18_memory/artifact/default/stage.py +0 -0
  356. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s18_memory/artifact/default/strategies.py +0 -0
  357. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s18_memory/insight.py +0 -0
  358. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s18_memory/interface.py +0 -0
  359. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s18_memory/persistence.py +0 -0
  360. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s18_memory/stage.py +0 -0
  361. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s18_memory/strategies.py +0 -0
  362. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s19_summarize/__init__.py +0 -0
  363. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s19_summarize/artifact/__init__.py +0 -0
  364. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s19_summarize/artifact/default/__init__.py +0 -0
  365. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s19_summarize/artifact/default/importance.py +0 -0
  366. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s19_summarize/artifact/default/stage.py +0 -0
  367. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s19_summarize/artifact/default/summarizers.py +0 -0
  368. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s19_summarize/frequency_policy.py +0 -0
  369. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s19_summarize/interface.py +0 -0
  370. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s19_summarize/types.py +0 -0
  371. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s20_persist/__init__.py +0 -0
  372. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s20_persist/artifact/__init__.py +0 -0
  373. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s20_persist/artifact/default/__init__.py +0 -0
  374. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s20_persist/artifact/default/frequencies.py +0 -0
  375. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s20_persist/artifact/default/persisters.py +0 -0
  376. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s20_persist/artifact/default/stage.py +0 -0
  377. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s20_persist/interface.py +0 -0
  378. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s20_persist/restore.py +0 -0
  379. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s20_persist/types.py +0 -0
  380. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s21_yield/__init__.py +0 -0
  381. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s21_yield/artifact/__init__.py +0 -0
  382. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s21_yield/artifact/default/__init__.py +0 -0
  383. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s21_yield/artifact/default/formatters.py +0 -0
  384. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s21_yield/artifact/default/multi_format.py +0 -0
  385. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s21_yield/artifact/default/stage.py +0 -0
  386. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s21_yield/formatters.py +0 -0
  387. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s21_yield/interface.py +0 -0
  388. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/stages/s21_yield/stage.py +0 -0
  389. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/__init__.py +0 -0
  390. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/adhoc.py +0 -0
  391. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/base.py +0 -0
  392. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/__init__.py +0 -0
  393. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/_path_guard.py +0 -0
  394. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/agent_tool.py +0 -0
  395. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/ask_user_question_tool.py +0 -0
  396. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/bash_tool.py +0 -0
  397. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/cron_tools.py +0 -0
  398. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/dev_tools.py +0 -0
  399. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/edit_tool.py +0 -0
  400. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/glob_tool.py +0 -0
  401. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/grep_tool.py +0 -0
  402. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/mcp_wrapper_tools.py +0 -0
  403. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/notebook_edit_tool.py +0 -0
  404. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/operator_tools.py +0 -0
  405. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/plan_mode_tools.py +0 -0
  406. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/push_notification_tool.py +0 -0
  407. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/read_tool.py +0 -0
  408. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/send_message_tool.py +0 -0
  409. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/task_tools.py +0 -0
  410. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/todo_write_tool.py +0 -0
  411. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/tool_search_tool.py +0 -0
  412. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/web_fetch_tool.py +0 -0
  413. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/web_search_tool.py +0 -0
  414. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/worktree_tools.py +0 -0
  415. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/built_in/write_tool.py +0 -0
  416. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/composer.py +0 -0
  417. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/errors.py +0 -0
  418. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/mcp/__init__.py +0 -0
  419. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/mcp/adapter.py +0 -0
  420. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/mcp/credentials.py +0 -0
  421. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/mcp/errors.py +0 -0
  422. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/mcp/manager.py +0 -0
  423. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/mcp/oauth.py +0 -0
  424. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/mcp/state.py +0 -0
  425. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/mcp/uri.py +0 -0
  426. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/provider.py +0 -0
  427. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/providers.py +0 -0
  428. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/registry.py +0 -0
  429. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/sandbox.py +0 -0
  430. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/scope.py +0 -0
  431. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/tools/stage_binding.py +0 -0
  432. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/workspace/__init__.py +0 -0
  433. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/workspace/stack.py +0 -0
  434. {geny_executor-2.2.0 → geny_executor-2.3.0}/src/geny_executor/workspace/types.py +0 -0
  435. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/__init__.py +0 -0
  436. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/_fixtures/__init__.py +0 -0
  437. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/_fixtures/fake_claude.py +0 -0
  438. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/_fixtures/fake_echo_cli.py +0 -0
  439. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/_fixtures/geny_manifest_layout.json +0 -0
  440. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/_fixtures/manifest_entries.py +0 -0
  441. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/__init__.py +0 -0
  442. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/conftest.py +0 -0
  443. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/fixtures/__init__.py +0 -0
  444. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/fixtures/adapter/__init__.py +0 -0
  445. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/fixtures/adapter/adapter.py +0 -0
  446. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/test_c1_six_layer_retrieval.py +0 -0
  447. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/test_c2_execution_recording.py +0 -0
  448. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/test_c3_reflection_and_promotion.py +0 -0
  449. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/test_c4_rest_coverage.py +0 -0
  450. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/test_c5_embedding_migration.py +0 -0
  451. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/test_c6_session_resume.py +0 -0
  452. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/test_c7_adapter_parity.py +0 -0
  453. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/completeness/test_spec_loads.py +0 -0
  454. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/__init__.py +0 -0
  455. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/memory_provider_contract.py +0 -0
  456. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_embedding_clients.py +0 -0
  457. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_error_codes_stability.py +0 -0
  458. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_embedding_credentials.py +0 -0
  459. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_auto_vector.py +0 -0
  460. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_composite.py +0 -0
  461. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_composite_routing.py +0 -0
  462. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_curated_global.py +0 -0
  463. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_ephemeral.py +0 -0
  464. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_factory.py +0 -0
  465. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_file.py +0 -0
  466. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_file_layout.py +0 -0
  467. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_file_vector.py +0 -0
  468. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_sql.py +0 -0
  469. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_sql_dialect.py +0 -0
  470. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_sql_schema.py +0 -0
  471. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_provider_sql_vector.py +0 -0
  472. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_memory_vector_breaker.py +0 -0
  473. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/contract/test_stage_uniformity.py +0 -0
  474. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/integration/test_cycle_ab_cross_import.py +0 -0
  475. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/integration/test_integration.py +0 -0
  476. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/__init__.py +0 -0
  477. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/conformance/__init__.py +0 -0
  478. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/conformance/harness.py +0 -0
  479. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/conformance/test_anthropic.py +0 -0
  480. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/conformance/test_claude_code_cli.py +0 -0
  481. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/conformance/test_google.py +0 -0
  482. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/conformance/test_openai.py +0 -0
  483. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/conformance/test_vllm.py +0 -0
  484. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/golden/__init__.py +0 -0
  485. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/golden/cli-2.1.149-json.json +0 -0
  486. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/golden/cli-2.1.149-json.meta +0 -0
  487. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/golden/cli-2.1.149-stream.jsonl +0 -0
  488. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/golden/cli-2.1.149-stream.meta +0 -0
  489. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/golden/cli-2.1.162-stream.jsonl +0 -0
  490. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/golden/cli-2.1.162-stream.meta +0 -0
  491. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/golden/test_golden_replay.py +0 -0
  492. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/live/__init__.py +0 -0
  493. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/live/test_live_canaries.py +0 -0
  494. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/unit/__init__.py +0 -0
  495. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/unit/test_anthropic_build_kwargs.py +0 -0
  496. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/unit/test_anthropic_classify.py +0 -0
  497. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/unit/test_base_client.py +0 -0
  498. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/unit/test_claude_code.py +0 -0
  499. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/unit/test_cli_cancellation.py +0 -0
  500. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/unit/test_cli_event_forwarding.py +0 -0
  501. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/unit/test_cli_runtime.py +0 -0
  502. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/unit/test_credentials.py +0 -0
  503. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/unit/test_google_classify.py +0 -0
  504. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/unit/test_openai_client.py +0 -0
  505. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/llm_client/unit/test_translators_cli_claude_code.py +0 -0
  506. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/__init__.py +0 -0
  507. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_adaptive_model_router.py +0 -0
  508. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_adaptive_router_configure.py +0 -0
  509. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_adaptive_thinking_budget.py +0 -0
  510. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_adhoc_providers.py +0 -0
  511. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_agent_tool.py +0 -0
  512. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_api_timeout_kwarg.py +0 -0
  513. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_artifact_metadata.py +0 -0
  514. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_ask_user_question_tool.py +0 -0
  515. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_attach_llm_client_guard.py +0 -0
  516. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_binary_classify_manifest.py +0 -0
  517. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_built_in_autoregister.py +0 -0
  518. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_builtin_capabilities.py +0 -0
  519. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_builtin_features.py +0 -0
  520. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_cache_prefix_key.py +0 -0
  521. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_cancellation.py +0 -0
  522. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_composite_set_hooks.py +0 -0
  523. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_concurrent_runs.py +0 -0
  524. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_config_liveness.py +0 -0
  525. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_cron_runner.py +0 -0
  526. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_cron_store.py +0 -0
  527. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_cron_tools.py +0 -0
  528. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_dev_tools.py +0 -0
  529. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_diff_order_keyed.py +0 -0
  530. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_dynamic_persona_builder.py +0 -0
  531. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_embedding_error_classification.py +0 -0
  532. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_errors_categories.py +0 -0
  533. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_evaluation_chain.py +0 -0
  534. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_evaluation_chain_configure.py +0 -0
  535. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_event_catalog.py +0 -0
  536. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_event_channel_unification.py +0 -0
  537. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_event_correlation.py +0 -0
  538. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_external_tool_resolution.py +0 -0
  539. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_fork_multi_provider.py +0 -0
  540. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_from_manifest_strict_validation.py +0 -0
  541. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_geny_prod_manifest_repro.py +0 -0
  542. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_guard_fail_fast.py +0 -0
  543. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_hierarchical_sidecars.py +0 -0
  544. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_hook_gate_split.py +0 -0
  545. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_hook_in_process.py +0 -0
  546. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_hook_runner.py +0 -0
  547. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_hook_taxonomy.py +0 -0
  548. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_hooks_and_shared_keys.py +0 -0
  549. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_host_selections_resolve.py +0 -0
  550. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_index_list_categories.py +0 -0
  551. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_index_render_vault_map.py +0 -0
  552. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_interaction_fields.py +0 -0
  553. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_introspection.py +0 -0
  554. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_llm_client_base.py +0 -0
  555. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_llm_client_capabilities.py +0 -0
  556. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_llm_client_registry.py +0 -0
  557. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_llm_client_request_types.py +0 -0
  558. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_llm_client_state.py +0 -0
  559. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_llm_summary_compactor.py +0 -0
  560. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_loop_agnostic_lock.py +0 -0
  561. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_manifest_factory.py +0 -0
  562. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_manifest_from_dict_hygiene.py +0 -0
  563. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_manifest_memory_wiring.py +0 -0
  564. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_manifest_provider_validation.py +0 -0
  565. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_manifest_subagents_memory_sections.py +0 -0
  566. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_manifest_v2.py +0 -0
  567. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_manifest_v3_migration.py +0 -0
  568. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_mcp_annotations_attach.py +0 -0
  569. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_mcp_credential_store.py +0 -0
  570. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_mcp_fsm.py +0 -0
  571. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_mcp_lifecycle.py +0 -0
  572. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_mcp_namespace.py +0 -0
  573. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_mcp_oauth.py +0 -0
  574. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_mcp_prompts_skills_bridge.py +0 -0
  575. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_mcp_resource_retriever.py +0 -0
  576. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_mcp_uri.py +0 -0
  577. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_mcp_wrapper_tools.py +0 -0
  578. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_memory_aware_retriever.py +0 -0
  579. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_memory_hooks_after_callbacks.py +0 -0
  580. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_memory_metadata_extension.py +0 -0
  581. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_model_overrides.py +0 -0
  582. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_multi_dim_budget_configure.py +0 -0
  583. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_multi_dim_budget_controller.py +0 -0
  584. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_multi_format_yield.py +0 -0
  585. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_multi_provider.py +0 -0
  586. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_multimodal.py +0 -0
  587. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_note_graph_queries.py +0 -0
  588. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_notebook_edit_tool.py +0 -0
  589. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_notes_load_pinned.py +0 -0
  590. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_operator_tools.py +0 -0
  591. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_ordered_emitter_chain.py +0 -0
  592. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_permission_matrix.py +0 -0
  593. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_permission_mode_promotions.py +0 -0
  594. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_permission_posture.py +0 -0
  595. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase1_foundation.py +0 -0
  596. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase1_pipeline.py +0 -0
  597. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase2_agent_loop.py +0 -0
  598. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase2_tools.py +0 -0
  599. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase3_context_memory.py +0 -0
  600. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase4_think_agent_evaluate.py +0 -0
  601. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase5_emit_presets_mcp.py +0 -0
  602. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase5_environment.py +0 -0
  603. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase6_history.py +0 -0
  604. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase6_integration.py +0 -0
  605. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase7_security.py +0 -0
  606. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase9a_preset_regen.py +0 -0
  607. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_phase9a_scaffolding.py +0 -0
  608. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_pipeline_aclose.py +0 -0
  609. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_pipeline_attach_runtime.py +0 -0
  610. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_pipeline_events_tap.py +0 -0
  611. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_pipeline_from_manifest.py +0 -0
  612. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_pipeline_hook_lifecycle.py +0 -0
  613. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_pipeline_session_runtime.py +0 -0
  614. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_plan_mode_tools.py +0 -0
  615. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_primary_provider_and_build_reports.py +0 -0
  616. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_progressive_disclosure.py +0 -0
  617. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_provider_driven_strategy.py +0 -0
  618. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_push_notification_tool.py +0 -0
  619. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_refresh_backlinks_extension.py +0 -0
  620. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_refresh_runtime_and_run_lock.py +0 -0
  621. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_resolve_model_config.py +0 -0
  622. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_restore_bad_strategy_config.py +0 -0
  623. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_reviewer_policy_configure.py +0 -0
  624. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_runtime_task_runner.py +0 -0
  625. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_s06_chunk_forwarding.py +0 -0
  626. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_s06_provider_selection.py +0 -0
  627. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_s13_file_backed_registry.py +0 -0
  628. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_s13_task_registry_output.py +0 -0
  629. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_s19_frequency_policy.py +0 -0
  630. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_s9b1_tool_review.py +0 -0
  631. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_s9b2_task_registry.py +0 -0
  632. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_s9b3_hitl.py +0 -0
  633. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_s9b4_summarize.py +0 -0
  634. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_s9b5_persist.py +0 -0
  635. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_s9c1_pipeline_resume.py +0 -0
  636. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_s9c2_restore_state.py +0 -0
  637. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_send_message_tool.py +0 -0
  638. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_settings_loader.py +0 -0
  639. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_skill_phase_10_1.py +0 -0
  640. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_skill_phase_10_2.py +0 -0
  641. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_skill_phase_10_3.py +0 -0
  642. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_skill_phase_10_4_bundled.py +0 -0
  643. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_skill_phase_10_5_fork.py +0 -0
  644. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_skill_phase_10_6_killer.py +0 -0
  645. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_skill_phase_10_7_watcher.py +0 -0
  646. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_skill_richer_schema.py +0 -0
  647. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_skill_tool.py +0 -0
  648. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_skills_foundation.py +0 -0
  649. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_slash_built_in_control.py +0 -0
  650. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_slash_built_in_introspection.py +0 -0
  651. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_slash_commands.py +0 -0
  652. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_slash_md_template.py +0 -0
  653. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_stage10_ask_hitl.py +0 -0
  654. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_stage10_hook_wiring.py +0 -0
  655. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_stage10_partition_executor.py +0 -0
  656. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_stage10_permission_matrix.py +0 -0
  657. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_stage19_session_summary.py +0 -0
  658. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_state_mutation_wiring.py +0 -0
  659. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_state_shared_and_local.py +0 -0
  660. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_stm_append_event.py +0 -0
  661. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_strategy_config_roundtrip.py +0 -0
  662. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_streaming_tool_executor.py +0 -0
  663. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_structured_output_parser.py +0 -0
  664. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_structured_reflection.py +0 -0
  665. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_subagent_credential_propagation.py +0 -0
  666. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_subagent_descriptor.py +0 -0
  667. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_subagent_manifest_compile.py +0 -0
  668. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_subagent_orchestrator_zero_arg.py +0 -0
  669. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_subagent_parallel.py +0 -0
  670. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_subagent_pipeline_lifecycle.py +0 -0
  671. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_subagent_type_orchestrator.py +0 -0
  672. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_task_tools.py +0 -0
  673. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_todo_write_tool.py +0 -0
  674. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_tool_abc_uplift.py +0 -0
  675. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_tool_call_events.py +0 -0
  676. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_tool_errors.py +0 -0
  677. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_tool_lifecycle_hooks.py +0 -0
  678. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_tool_provider.py +0 -0
  679. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_tool_result_persistence.py +0 -0
  680. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_tool_search_tool.py +0 -0
  681. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_tool_stage_max_concurrency.py +0 -0
  682. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_turn_boundary_state.py +0 -0
  683. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_validate_manifest.py +0 -0
  684. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_web_fetch_tool.py +0 -0
  685. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_web_search_tool.py +0 -0
  686. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_workspace.py +0 -0
  687. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_workspace_propagation.py +0 -0
  688. {geny_executor-2.2.0 → geny_executor-2.3.0}/tests/unit/test_workspace_tools_integration.py +0 -0
  689. {geny_executor-2.2.0 → geny_executor-2.3.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.2.0
3
+ Version: 2.3.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.2.0"
7
+ version = "2.3.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"
@@ -116,7 +116,7 @@ from geny_executor.stages.s12_agent.subagent_type import (
116
116
  resolve_subagent_provider,
117
117
  )
118
118
 
119
- __version__ = "2.2.0"
119
+ __version__ = "2.3.0"
120
120
 
121
121
  __all__ = [
122
122
  # Core
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import asyncio
6
+ import json
6
7
  import logging
7
8
  import uuid
8
9
  from collections import deque
@@ -223,6 +224,144 @@ def _mcp_configs_from_manifest(manifest: "EnvironmentManifest") -> Dict[str, Any
223
224
  return configs
224
225
 
225
226
 
227
+ def _provider_wants_mcp_passthrough(provider_name: str) -> bool:
228
+ """True when *provider_name*'s client class executes tools inside its
229
+ own subprocess AND can receive MCP servers via its own config channel.
230
+
231
+ The 2.2.1 incident this gates on: a manifest declared
232
+ ``tools.mcp_servers`` on a ``claude_code_cli`` environment. The
233
+ pipeline dutifully connected the server HOST-side (spawning the MCP
234
+ child inside the host process) and registered its tools into the
235
+ pipeline ToolRegistry — but Stage 10 never dispatches for subprocess
236
+ backends (the CLI runs its own agentic loop), and the CLI subprocess
237
+ only sees servers passed through ``--mcp-config``. Net effect: the
238
+ user attached an MCP server in the environment editor, the session
239
+ built cleanly, and the LLM had no idea the tools existed.
240
+
241
+ For such providers the manifest's MCP servers must be PASSED THROUGH
242
+ to the client instead of host-connected. Detection is class-level
243
+ (no client construction, no credentials needed): ``is_subprocess``
244
+ AND ``supports_mcp_passthrough`` on the registered capabilities.
245
+ Unknown/unregistered providers return False — the host-side path is
246
+ the safe default.
247
+ """
248
+ if not provider_name or provider_name not in ClientRegistry.available():
249
+ return False
250
+ try:
251
+ caps = ClientRegistry.get(provider_name).capabilities
252
+ except Exception: # noqa: BLE001 — registry factories may raise on missing extras
253
+ return False
254
+ return bool(
255
+ getattr(caps, "is_subprocess", False) and getattr(caps, "supports_mcp_passthrough", False)
256
+ )
257
+
258
+
259
+ def _mcp_servers_to_cli_config(
260
+ configs: Dict[str, Any],
261
+ ) -> tuple[Dict[str, Any], List[str]]:
262
+ """Translate manifest ``MCPServerConfig`` entries into the Claude Code
263
+ CLI's ``--mcp-config`` JSON shape.
264
+
265
+ Returns ``(cli_config, skipped_names)`` where ``cli_config`` is
266
+ ``{"mcpServers": {name: entry}}`` and ``skipped_names`` lists servers
267
+ whose transport could not be expressed (logged by the caller).
268
+
269
+ Shape mapping (per the CLI's documented mcp-config schema):
270
+ stdio → {"type": "stdio", "command", "args", "env"}
271
+ sse → {"type": "sse", "url", "headers"}
272
+ http → {"type": "http", "url", "headers"}
273
+ """
274
+ servers: Dict[str, Any] = {}
275
+ skipped: List[str] = []
276
+ for name, cfg in configs.items():
277
+ transport = (getattr(cfg, "transport", "") or "stdio").lower()
278
+ if transport == "stdio":
279
+ entry: Dict[str, Any] = {
280
+ "type": "stdio",
281
+ "command": cfg.command,
282
+ "args": list(cfg.args or []),
283
+ }
284
+ if cfg.env:
285
+ entry["env"] = dict(cfg.env)
286
+ elif transport in ("sse", "http"):
287
+ entry = {"type": transport, "url": cfg.url}
288
+ if cfg.headers:
289
+ entry["headers"] = dict(cfg.headers)
290
+ else:
291
+ skipped.append(name)
292
+ continue
293
+ servers[name] = entry
294
+ return {"mcpServers": servers}, skipped
295
+
296
+
297
+ def _merge_cli_mcp_config(
298
+ host_config: Any,
299
+ manifest_config: Dict[str, Any],
300
+ ) -> Any:
301
+ """Merge manifest-declared MCP servers into a host-supplied CLI
302
+ mcp-config.
303
+
304
+ Precedence: the HOST config wins on server-name collision — a host
305
+ that wires a session-scoped bridge (Geny's ``geny`` server) or
306
+ deliberately overrides a server keeps control. ``host_config`` may
307
+ be:
308
+
309
+ - ``None`` / empty → the manifest config is used as-is.
310
+ - a dict ``{"mcpServers": {...}}`` → key-merged.
311
+ - a file path (str) → the file is read and key-merged; on any read/
312
+ parse failure the host path is returned unchanged and the manifest
313
+ servers are dropped with a warning (the CLI accepts exactly one
314
+ ``--mcp-config``, so an unreadable host file cannot be merged
315
+ without guessing).
316
+ """
317
+ manifest_servers = dict(manifest_config.get("mcpServers", {}))
318
+ if not manifest_servers:
319
+ return host_config
320
+ if not host_config:
321
+ return {"mcpServers": manifest_servers}
322
+
323
+ if isinstance(host_config, str):
324
+ try:
325
+ with open(host_config, "r", encoding="utf-8") as fh:
326
+ loaded = json.load(fh)
327
+ if not isinstance(loaded, dict):
328
+ raise ValueError("mcp-config file is not a JSON object")
329
+ host_config = loaded
330
+ except Exception: # noqa: BLE001
331
+ logger.warning(
332
+ "CLI MCP passthrough: host mcp_config path %r could not be "
333
+ "read/parsed — manifest-declared MCP servers %s will NOT "
334
+ "reach the CLI subprocess (the CLI accepts a single "
335
+ "--mcp-config).",
336
+ host_config,
337
+ sorted(manifest_servers),
338
+ )
339
+ return host_config
340
+
341
+ if not isinstance(host_config, dict):
342
+ logger.warning(
343
+ "CLI MCP passthrough: host mcp_config has unsupported type %s — "
344
+ "manifest MCP servers %s dropped.",
345
+ type(host_config).__name__,
346
+ sorted(manifest_servers),
347
+ )
348
+ return host_config
349
+
350
+ merged = dict(host_config)
351
+ host_servers = dict(merged.get("mcpServers", {}))
352
+ for name, entry in manifest_servers.items():
353
+ if name in host_servers:
354
+ logger.info(
355
+ "CLI MCP passthrough: server %r declared in both the host "
356
+ "mcp_config and the manifest — host definition wins.",
357
+ name,
358
+ )
359
+ continue
360
+ host_servers[name] = entry
361
+ merged["mcpServers"] = host_servers
362
+ return merged
363
+
364
+
226
365
  @dataclass
227
366
  class ToolResolutionReport:
228
367
  """What happened to every tool name the manifest asked for.
@@ -559,6 +698,12 @@ class Pipeline:
559
698
  self._event_taps: List[asyncio.Queue] = []
560
699
  self._mcp_manager: Any = None # MCPManager | None — set by from_manifest_async
561
700
  self._tool_registry: Any = None # ToolRegistry | None — set by from_manifest_async
701
+ # CLI MCP passthrough (2.2.1): manifest mcp_servers translated to
702
+ # the CLI's mcp-config shape, merged into the client's mcp_config
703
+ # at _build_client_for time. Empty for SDK providers (host-side
704
+ # MCPManager path) and for manifests without MCP servers.
705
+ self._cli_mcp_passthrough: Dict[str, Any] = {}
706
+ self._cli_mcp_passthrough_provider: str = ""
562
707
  # MemoryProvider built from the manifest's ``memory`` block
563
708
  # (2.2.0 Wave 3); None for hosts that wire memory themselves.
564
709
  self._memory_provider: Any = None
@@ -1202,19 +1347,59 @@ class Pipeline:
1202
1347
 
1203
1348
  configs = _mcp_configs_from_manifest(manifest)
1204
1349
  if configs:
1205
- try:
1206
- await manager.connect_all(configs)
1207
- adapters = await manager.discover_all()
1208
- for adapter in adapters:
1209
- registry.register(adapter)
1210
- except BaseException:
1211
- # Unwind providers if MCP bring-up fails mid-flight so no
1212
- # half-started resources leak out.
1213
- from geny_executor.tools.provider import shutdown_providers
1214
-
1215
- await shutdown_providers(started_providers)
1216
- await manager.disconnect_all()
1217
- raise
1350
+ # ── CLI MCP passthrough (2.2.1) ───────────────────────────
1351
+ # Subprocess backends (claude_code_cli) run their own agentic
1352
+ # loop: Stage 10 never dispatches for them, so HOST-side MCP
1353
+ # connections are invisible to the actual LLM — the only MCP
1354
+ # channel that reaches it is the client's own --mcp-config.
1355
+ # Connecting host-side here therefore spawned the MCP child
1356
+ # for nothing while the user-attached server's tools never
1357
+ # surfaced in the conversation (the 2.2.1 incident). When the
1358
+ # manifest's Stage-6 provider is such a backend, hand the
1359
+ # servers to the client instead of the manager; the merge
1360
+ # into the client's mcp_config happens in _build_client_for
1361
+ # (host-supplied config wins on name collisions, e.g. Geny's
1362
+ # per-session bridge server).
1363
+ primary_provider = ""
1364
+ for entry in manifest.stage_entries():
1365
+ if entry.name == "api" and entry.active:
1366
+ primary_provider = str((entry.config or {}).get("provider") or "")
1367
+ break
1368
+ if _provider_wants_mcp_passthrough(primary_provider):
1369
+ cli_config, skipped = _mcp_servers_to_cli_config(configs)
1370
+ if skipped:
1371
+ logger.warning(
1372
+ "CLI MCP passthrough: server(s) %s have transports the "
1373
+ "CLI mcp-config cannot express — they will not reach "
1374
+ "the %s subprocess.",
1375
+ sorted(skipped),
1376
+ primary_provider,
1377
+ )
1378
+ if cli_config.get("mcpServers"):
1379
+ pipeline._cli_mcp_passthrough = cli_config
1380
+ pipeline._cli_mcp_passthrough_provider = primary_provider
1381
+ logger.info(
1382
+ "CLI MCP passthrough: %d manifest MCP server(s) %s "
1383
+ "routed to the %s subprocess via --mcp-config "
1384
+ "(host-side connection skipped).",
1385
+ len(cli_config["mcpServers"]),
1386
+ sorted(cli_config["mcpServers"]),
1387
+ primary_provider,
1388
+ )
1389
+ else:
1390
+ try:
1391
+ await manager.connect_all(configs)
1392
+ adapters = await manager.discover_all()
1393
+ for adapter in adapters:
1394
+ registry.register(adapter)
1395
+ except BaseException:
1396
+ # Unwind providers if MCP bring-up fails mid-flight so no
1397
+ # half-started resources leak out.
1398
+ from geny_executor.tools.provider import shutdown_providers
1399
+
1400
+ await shutdown_providers(started_providers)
1401
+ await manager.disconnect_all()
1402
+ raise
1218
1403
 
1219
1404
  pipeline._mcp_manager = manager
1220
1405
  pipeline._tool_registry = registry
@@ -2469,6 +2654,24 @@ class Pipeline:
2469
2654
  if provider_name:
2470
2655
  state.shared[SharedKeys.PRIMARY_PROVIDER] = provider_name
2471
2656
 
2657
+ # Tool dispatch handle (2.3.0): Stage 6's tool_loop="internal"
2658
+ # strategy dispatches through Stage 10's exact machinery via
2659
+ # this state-carried handle. Rebuilt every run (two attribute
2660
+ # writes) so a PipelineMutator stage replacement is picked up
2661
+ # at the next turn boundary; None when no Tool stage exists —
2662
+ # the strategy then degrades to pipeline behaviour with a
2663
+ # one-time warning.
2664
+ tool_stage = next(
2665
+ (s for s in self._stages.values() if getattr(s, "name", "") == "tool"),
2666
+ None,
2667
+ )
2668
+ if tool_stage is not None and hasattr(tool_stage, "build_dispatch_context"):
2669
+ from geny_executor.stages.s10_tool.dispatcher import ToolDispatcher
2670
+
2671
+ state.tool_dispatcher = ToolDispatcher(tool_stage)
2672
+ else:
2673
+ state.tool_dispatcher = None
2674
+
2472
2675
  self._has_started = True
2473
2676
  return state
2474
2677
 
@@ -2592,6 +2795,26 @@ class Pipeline:
2592
2795
  creds = self._credentials.require(provider)
2593
2796
  client_cls = ClientRegistry.get(provider)
2594
2797
  kwargs = _creds_to_client_kwargs(provider, creds)
2798
+ # CLI MCP passthrough (2.2.1): hand manifest-declared MCP servers
2799
+ # to the subprocess client. Host-supplied mcp_config (e.g. Geny's
2800
+ # per-session bridge) wins on name collision. Manifest-declared
2801
+ # servers are also auto-allowed (``mcp__<server>``) — the
2802
+ # operator attached them in the environment editor, and the CLI's
2803
+ # --print mode has no human to answer a permission prompt, so
2804
+ # without the allow entry the passthrough would be dead on
2805
+ # arrival.
2806
+ if provider == self._cli_mcp_passthrough_provider and self._cli_mcp_passthrough.get(
2807
+ "mcpServers"
2808
+ ):
2809
+ kwargs["mcp_config"] = _merge_cli_mcp_config(
2810
+ kwargs.get("mcp_config"), self._cli_mcp_passthrough
2811
+ )
2812
+ allow = list(kwargs.get("allow_tools", ()) or ())
2813
+ for server_name in self._cli_mcp_passthrough["mcpServers"]:
2814
+ entry = f"mcp__{server_name}"
2815
+ if entry not in allow:
2816
+ allow.append(entry)
2817
+ kwargs["allow_tools"] = tuple(allow)
2595
2818
  return client_cls(**kwargs)
2596
2819
 
2597
2820
  async def _try_run_stage(self, order: int, current: Any, state: PipelineState) -> Any:
@@ -196,6 +196,16 @@ class PipelineState:
196
196
  pending_tool_calls: List[Dict[str, Any]] = field(default_factory=list)
197
197
  tool_results: List[Dict[str, Any]] = field(default_factory=list)
198
198
 
199
+ # ── Tool dispatch handle (2.3.0) ──
200
+ # Installed by ``Pipeline._init_state`` whenever a Tool stage is
201
+ # registered: a :class:`~geny_executor.stages.s10_tool.dispatcher.
202
+ # ToolDispatcher` wrapping that stage's registry + permission
203
+ # machinery. Consumed by Stage 6's ``tool_loop="internal"`` strategy
204
+ # so internally-resolved tool calls take the EXACT dispatch path
205
+ # Stage 10 would. Lifetime: refreshed every run (sticky across the
206
+ # run only); never serialized.
207
+ tool_dispatcher: Optional[Any] = field(default=None, repr=False, compare=False)
208
+
199
209
  # ── Agent orchestration ──
200
210
  delegate_requests: List[Dict[str, Any]] = field(default_factory=list)
201
211
  agent_results: List[Dict[str, Any]] = field(default_factory=list)
@@ -47,7 +47,9 @@ from typing import Any, Dict, List
47
47
  #: Bumped when the catalogue gains members (append-only). Hosts can pin
48
48
  #: a minimum version to assert the names they consume exist.
49
49
  #: v2: + ``agent.delegations_capped`` (Stage 12 max_delegations wiring).
50
- EVENT_CATALOG_VERSION = 2
50
+ #: v3: + ``api.internal_loop_capped`` (2.3.0 Stage 6 internal agentic
51
+ #: loop hit its turn/budget cap and degraded to the pipeline path).
52
+ EVENT_CATALOG_VERSION = 3
51
53
 
52
54
 
53
55
  class EventTypes(str, Enum):
@@ -122,6 +124,12 @@ class EventTypes(str, Enum):
122
124
  API_INPUT_JSON_DELTA = "api.input_json_delta"
123
125
  API_CONTENT_BLOCK_STOP = "api.content_block_stop"
124
126
  API_TOOL_RESULT = "api.tool_result"
127
+ # 2.3.0: the Stage 6 internal agentic loop (tool_loop="internal")
128
+ # stopped resolving tool calls because it hit its turn or budget
129
+ # cap; the last response is returned with its tool_use blocks
130
+ # intact so Stage 9/10 pick them up — graceful degradation to the
131
+ # pipeline path, announced rather than silent.
132
+ API_INTERNAL_LOOP_CAPPED = "api.internal_loop_capped"
125
133
 
126
134
  # ── Stage 7: Token ──
127
135
  TOKEN_TRACKED = "token.tracked"
@@ -136,6 +144,14 @@ class EventTypes(str, Enum):
136
144
  # ── Stage 10: Tool ──
137
145
  TOOL_EXECUTE_START = "tool.execute_start"
138
146
  TOOL_EXECUTE_COMPLETE = "tool.execute_complete"
147
+ # Per-call timing pair emitted by the executor strategies around each
148
+ # individual dispatch (Stage 10 batches AND Stage 6 internal-loop
149
+ # dispatches — both run through the same executors). Catalogued in
150
+ # 2.3.0: they had always been emitted through the on_event callback,
151
+ # which the AST completeness test cannot see — the indirect-emission
152
+ # blind spot the catalogue's own docstring warns about.
153
+ TOOL_CALL_START = "tool.call_start"
154
+ TOOL_CALL_COMPLETE = "tool.call_complete"
139
155
 
140
156
  # ── Stage 11: Tool review ──
141
157
  TOOL_REVIEW_FLAG = "tool_review.flag"
@@ -383,7 +399,11 @@ PAYLOADS: Dict[EventTypes, Dict[str, str]] = {
383
399
  "id": "str|None — tool_use block id",
384
400
  "name": "str|None — tool name",
385
401
  "input": "dict — tool input (may be partial until input_json_delta completes)",
386
- "source": "str — 'cli' (executed inside a CLI backend) | 'api' (Stage 10 will dispatch)",
402
+ "source": (
403
+ "str — 'cli' (executed inside a CLI backend) | 'api' (Stage 10 "
404
+ "will dispatch) | 'internal' (the Stage 6 internal loop is about "
405
+ "to dispatch it)"
406
+ ),
387
407
  },
388
408
  EventTypes.API_CLI_TOOL_CALL: {
389
409
  "id": "str|None",
@@ -399,7 +419,11 @@ PAYLOADS: Dict[EventTypes, Dict[str, str]] = {
399
419
  "tool_use_id": "str — id of the tool_use this result answers",
400
420
  "content": "Any — tool result content as the backend reported it",
401
421
  "is_error": "bool",
402
- "source": "str — 'cli' | 'api'",
422
+ "source": "str — 'cli' | 'api' | 'internal' (Stage 6 internal loop dispatched it)",
423
+ },
424
+ EventTypes.API_INTERNAL_LOOP_CAPPED: {
425
+ "turns": "int — inner tool turns the loop completed before stopping",
426
+ "reason": "str — 'max_inner_turns' | 'cost_budget'",
403
427
  },
404
428
  EventTypes.TOKEN_TRACKED: {
405
429
  "input_tokens": "int",
@@ -432,6 +456,17 @@ PAYLOADS: Dict[EventTypes, Dict[str, str]] = {
432
456
  "count": "int",
433
457
  "errors": "int — results flagged is_error",
434
458
  },
459
+ EventTypes.TOOL_CALL_START: {
460
+ "tool_use_id": "str",
461
+ "name": "str",
462
+ "input": "dict",
463
+ },
464
+ EventTypes.TOOL_CALL_COMPLETE: {
465
+ "tool_use_id": "str",
466
+ "name": "str",
467
+ "is_error": "bool",
468
+ "duration_ms": "int",
469
+ },
435
470
  EventTypes.TOOL_REVIEW_FLAG: {
436
471
  "reviewer": "str — ReviewFlag.to_dict()",
437
472
  "severity": "str",
@@ -1,12 +1,19 @@
1
1
  """Stage 6: API — Anthropic Messages API call."""
2
2
 
3
- from geny_executor.stages.s06_api.interface import APIProvider, ModelRouter, RetryStrategy
3
+ from geny_executor.stages.s06_api.interface import (
4
+ APIProvider,
5
+ ModelRouter,
6
+ RetryStrategy,
7
+ ToolLoopStrategy,
8
+ )
4
9
  from geny_executor.stages.s06_api.artifact.default import (
5
10
  APIStage,
6
11
  AdaptiveModelRouter,
7
12
  AnthropicProvider,
13
+ InternalAgenticLoop,
8
14
  MockProvider,
9
15
  PassthroughRouter,
16
+ PipelineToolLoop,
10
17
  RecordingProvider,
11
18
  ExponentialBackoffRetry,
12
19
  NoRetry,
@@ -27,6 +34,9 @@ __all__ = [
27
34
  "ModelRouter",
28
35
  "AdaptiveModelRouter",
29
36
  "PassthroughRouter",
37
+ "ToolLoopStrategy",
38
+ "PipelineToolLoop",
39
+ "InternalAgenticLoop",
30
40
  "APIRequest",
31
41
  "APIResponse",
32
42
  "ContentBlock",
@@ -15,6 +15,10 @@ from geny_executor.stages.s06_api.artifact.default.router import (
15
15
  AdaptiveModelRouter,
16
16
  PassthroughRouter,
17
17
  )
18
+ from geny_executor.stages.s06_api.artifact.default.tool_loop import (
19
+ InternalAgenticLoop,
20
+ PipelineToolLoop,
21
+ )
18
22
 
19
23
  # Canonical alias
20
24
  Stage = APIStage
@@ -30,4 +34,6 @@ __all__ = [
30
34
  "RateLimitAwareRetry",
31
35
  "AdaptiveModelRouter",
32
36
  "PassthroughRouter",
37
+ "InternalAgenticLoop",
38
+ "PipelineToolLoop",
33
39
  ]