geny-executor 2.2.0__tar.gz → 2.2.1__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 (685) hide show
  1. {geny_executor-2.2.0 → geny_executor-2.2.1}/PKG-INFO +1 -1
  2. {geny_executor-2.2.0 → geny_executor-2.2.1}/pyproject.toml +1 -1
  3. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/__init__.py +1 -1
  4. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/pipeline.py +218 -13
  5. geny_executor-2.2.1/tests/unit/test_cli_mcp_passthrough.py +302 -0
  6. {geny_executor-2.2.0 → geny_executor-2.2.1}/.gitignore +0 -0
  7. {geny_executor-2.2.0 → geny_executor-2.2.1}/LICENSE +0 -0
  8. {geny_executor-2.2.0 → geny_executor-2.2.1}/README.md +0 -0
  9. {geny_executor-2.2.0 → geny_executor-2.2.1}/README_ko.md +0 -0
  10. {geny_executor-2.2.0 → geny_executor-2.2.1}/docs/ci/README.md +0 -0
  11. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/channels/__init__.py +0 -0
  12. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/channels/send_message_channel.py +0 -0
  13. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/channels/user_file_channel.py +0 -0
  14. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/__init__.py +0 -0
  15. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/artifact.py +0 -0
  16. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/builder.py +0 -0
  17. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/config.py +0 -0
  18. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/diff.py +0 -0
  19. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/environment.py +0 -0
  20. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/errors.py +0 -0
  21. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/introspection.py +0 -0
  22. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/manifest_factory.py +0 -0
  23. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/mutation.py +0 -0
  24. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/presets.py +0 -0
  25. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/result.py +0 -0
  26. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/schema.py +0 -0
  27. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/shared_keys.py +0 -0
  28. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/slot.py +0 -0
  29. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/snapshot.py +0 -0
  30. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/stage.py +0 -0
  31. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/core/state.py +0 -0
  32. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/cron/__init__.py +0 -0
  33. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/cron/runner.py +0 -0
  34. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/cron/store_abc.py +0 -0
  35. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/cron/store_impl/__init__.py +0 -0
  36. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/cron/store_impl/file_backed.py +0 -0
  37. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/cron/store_impl/in_memory.py +0 -0
  38. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/cron/types.py +0 -0
  39. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/events/__init__.py +0 -0
  40. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/events/bus.py +0 -0
  41. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/events/catalog.py +0 -0
  42. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/events/types.py +0 -0
  43. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/history/__init__.py +0 -0
  44. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/history/ab_test.py +0 -0
  45. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/history/cost.py +0 -0
  46. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/history/models.py +0 -0
  47. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/history/monitor.py +0 -0
  48. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/history/replay.py +0 -0
  49. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/history/service.py +0 -0
  50. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/hooks/__init__.py +0 -0
  51. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/hooks/config.py +0 -0
  52. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/hooks/events.py +0 -0
  53. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/hooks/runner.py +0 -0
  54. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/__init__.py +0 -0
  55. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/_cli_runtime.py +0 -0
  56. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/anthropic.py +0 -0
  57. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/base.py +0 -0
  58. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/claude_code.py +0 -0
  59. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/credentials.py +0 -0
  60. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/google.py +0 -0
  61. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/openai.py +0 -0
  62. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/registry.py +0 -0
  63. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/translators/__init__.py +0 -0
  64. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/translators/_canonical.py +0 -0
  65. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/translators/_cli.py +0 -0
  66. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/types.py +0 -0
  67. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/llm_client/vllm.py +0 -0
  68. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/__init__.py +0 -0
  69. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/_locks.py +0 -0
  70. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/_progressive.py +0 -0
  71. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/composite/__init__.py +0 -0
  72. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/composite/handles.py +0 -0
  73. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/composite/provider.py +0 -0
  74. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/composite/routing.py +0 -0
  75. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/composite/snapshot.py +0 -0
  76. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/embedding/__init__.py +0 -0
  77. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/embedding/client.py +0 -0
  78. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/embedding/google.py +0 -0
  79. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/embedding/local.py +0 -0
  80. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/embedding/openai.py +0 -0
  81. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/embedding/registry.py +0 -0
  82. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/embedding/voyage.py +0 -0
  83. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/factory.py +0 -0
  84. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/presets.py +0 -0
  85. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/provider.py +0 -0
  86. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/__init__.py +0 -0
  87. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/ephemeral.py +0 -0
  88. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/file/__init__.py +0 -0
  89. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/file/config.py +0 -0
  90. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/file/frontmatter.py +0 -0
  91. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/file/index_store.py +0 -0
  92. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/file/layout.py +0 -0
  93. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/file/ltm_store.py +0 -0
  94. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/file/notes_store.py +0 -0
  95. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/file/provider.py +0 -0
  96. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/file/snapshot.py +0 -0
  97. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/file/stm_store.py +0 -0
  98. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/file/timezone.py +0 -0
  99. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/file/vector_store.py +0 -0
  100. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/sql/__init__.py +0 -0
  101. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/sql/config.py +0 -0
  102. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/sql/connection.py +0 -0
  103. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/sql/index_store.py +0 -0
  104. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/sql/ltm_store.py +0 -0
  105. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/sql/notes_store.py +0 -0
  106. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/sql/provider.py +0 -0
  107. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/sql/schema.py +0 -0
  108. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/sql/snapshot.py +0 -0
  109. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/sql/stm_store.py +0 -0
  110. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/providers/sql/vector_store.py +0 -0
  111. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/retriever.py +0 -0
  112. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/memory/strategy.py +0 -0
  113. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/notifications/__init__.py +0 -0
  114. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/notifications/registry.py +0 -0
  115. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/permission/__init__.py +0 -0
  116. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/permission/loader.py +0 -0
  117. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/permission/matrix.py +0 -0
  118. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/permission/types.py +0 -0
  119. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/py.typed +0 -0
  120. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/runtime/__init__.py +0 -0
  121. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/runtime/task_executors.py +0 -0
  122. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/runtime/task_runner.py +0 -0
  123. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/security/__init__.py +0 -0
  124. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/security/import_validator.py +0 -0
  125. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/security/script_sandbox.py +0 -0
  126. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/session/__init__.py +0 -0
  127. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/session/freshness.py +0 -0
  128. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/session/manager.py +0 -0
  129. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/session/persistence.py +0 -0
  130. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/session/session.py +0 -0
  131. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/settings/__init__.py +0 -0
  132. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/settings/loader.py +0 -0
  133. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/settings/section_registry.py +0 -0
  134. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/__init__.py +0 -0
  135. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/bundled/batch/SKILL.md +0 -0
  136. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/bundled/debug/SKILL.md +0 -0
  137. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/bundled/loop/SKILL.md +0 -0
  138. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/bundled/lorem-ipsum/SKILL.md +0 -0
  139. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/bundled/simplify/SKILL.md +0 -0
  140. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/bundled/skillify/SKILL.md +0 -0
  141. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/bundled/stuck/SKILL.md +0 -0
  142. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/bundled/verify/SKILL.md +0 -0
  143. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/bundled_skills.py +0 -0
  144. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/fork.py +0 -0
  145. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/frontmatter.py +0 -0
  146. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/loader.py +0 -0
  147. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/mcp_bridge.py +0 -0
  148. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/path_match.py +0 -0
  149. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/registry.py +0 -0
  150. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/shell_blocks.py +0 -0
  151. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/skill_tool.py +0 -0
  152. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/types.py +0 -0
  153. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/skills/watcher.py +0 -0
  154. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/__init__.py +0 -0
  155. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/__init__.py +0 -0
  156. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/_helpers.py +0 -0
  157. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/cancel.py +0 -0
  158. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/clear.py +0 -0
  159. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/compact.py +0 -0
  160. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/config.py +0 -0
  161. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/context.py +0 -0
  162. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/cost.py +0 -0
  163. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/help.py +0 -0
  164. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/memory.py +0 -0
  165. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/model.py +0 -0
  166. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/preset_info.py +0 -0
  167. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/status.py +0 -0
  168. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/built_in/tasks.py +0 -0
  169. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/md_template.py +0 -0
  170. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/parser.py +0 -0
  171. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/registry.py +0 -0
  172. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/slash_commands/types.py +0 -0
  173. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/__init__.py +0 -0
  174. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s01_input/__init__.py +0 -0
  175. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s01_input/artifact/__init__.py +0 -0
  176. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s01_input/artifact/default/__init__.py +0 -0
  177. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s01_input/artifact/default/normalizers.py +0 -0
  178. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s01_input/artifact/default/stage.py +0 -0
  179. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s01_input/artifact/default/validators.py +0 -0
  180. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s01_input/interface.py +0 -0
  181. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s01_input/normalizers.py +0 -0
  182. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s01_input/stage.py +0 -0
  183. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s01_input/types.py +0 -0
  184. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s01_input/validators.py +0 -0
  185. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/__init__.py +0 -0
  186. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/artifact/__init__.py +0 -0
  187. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/artifact/default/__init__.py +0 -0
  188. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/artifact/default/compactors.py +0 -0
  189. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/artifact/default/retrievers.py +0 -0
  190. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/artifact/default/stage.py +0 -0
  191. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/artifact/default/strategies.py +0 -0
  192. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/compactors.py +0 -0
  193. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/interface.py +0 -0
  194. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/retrievers.py +0 -0
  195. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/stage.py +0 -0
  196. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/strategies.py +0 -0
  197. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s02_context/types.py +0 -0
  198. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s03_system/__init__.py +0 -0
  199. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s03_system/artifact/__init__.py +0 -0
  200. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s03_system/artifact/default/__init__.py +0 -0
  201. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s03_system/artifact/default/builders.py +0 -0
  202. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s03_system/artifact/default/stage.py +0 -0
  203. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s03_system/builders.py +0 -0
  204. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s03_system/interface.py +0 -0
  205. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s03_system/persona/__init__.py +0 -0
  206. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s03_system/persona/builder.py +0 -0
  207. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s03_system/persona/provider.py +0 -0
  208. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s03_system/stage.py +0 -0
  209. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s04_guard/__init__.py +0 -0
  210. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s04_guard/artifact/__init__.py +0 -0
  211. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s04_guard/artifact/default/__init__.py +0 -0
  212. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s04_guard/artifact/default/guards.py +0 -0
  213. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s04_guard/artifact/default/stage.py +0 -0
  214. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s04_guard/guards.py +0 -0
  215. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s04_guard/interface.py +0 -0
  216. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s04_guard/stage.py +0 -0
  217. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s04_guard/types.py +0 -0
  218. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s05_cache/__init__.py +0 -0
  219. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s05_cache/artifact/__init__.py +0 -0
  220. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s05_cache/artifact/default/__init__.py +0 -0
  221. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s05_cache/artifact/default/stage.py +0 -0
  222. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s05_cache/artifact/default/strategies.py +0 -0
  223. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s05_cache/interface.py +0 -0
  224. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s05_cache/stage.py +0 -0
  225. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s05_cache/strategies.py +0 -0
  226. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/__init__.py +0 -0
  227. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/_translate.py +0 -0
  228. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/artifact/__init__.py +0 -0
  229. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/artifact/default/__init__.py +0 -0
  230. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/artifact/default/providers.py +0 -0
  231. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/artifact/default/retry.py +0 -0
  232. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/artifact/default/router.py +0 -0
  233. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/artifact/default/stage.py +0 -0
  234. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/artifact/google/__init__.py +0 -0
  235. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/artifact/google/providers.py +0 -0
  236. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/artifact/openai/__init__.py +0 -0
  237. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/artifact/openai/providers.py +0 -0
  238. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/interface.py +0 -0
  239. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/providers.py +0 -0
  240. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/retry.py +0 -0
  241. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/stage.py +0 -0
  242. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s06_api/types.py +0 -0
  243. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s07_token/__init__.py +0 -0
  244. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s07_token/artifact/__init__.py +0 -0
  245. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s07_token/artifact/default/__init__.py +0 -0
  246. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s07_token/artifact/default/pricing.py +0 -0
  247. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s07_token/artifact/default/stage.py +0 -0
  248. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s07_token/artifact/default/trackers.py +0 -0
  249. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s07_token/interface.py +0 -0
  250. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s07_token/pricing.py +0 -0
  251. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s07_token/stage.py +0 -0
  252. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s07_token/trackers.py +0 -0
  253. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s08_think/__init__.py +0 -0
  254. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s08_think/artifact/default/__init__.py +0 -0
  255. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s08_think/artifact/default/budget.py +0 -0
  256. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s08_think/artifact/default/processors.py +0 -0
  257. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s08_think/artifact/default/stage.py +0 -0
  258. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s08_think/interface.py +0 -0
  259. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s08_think/processors.py +0 -0
  260. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s08_think/stage.py +0 -0
  261. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s08_think/types.py +0 -0
  262. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s09_parse/__init__.py +0 -0
  263. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s09_parse/artifact/default/__init__.py +0 -0
  264. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s09_parse/artifact/default/parsers.py +0 -0
  265. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s09_parse/artifact/default/signals.py +0 -0
  266. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s09_parse/artifact/default/stage.py +0 -0
  267. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s09_parse/interface.py +0 -0
  268. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s09_parse/parsers.py +0 -0
  269. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s09_parse/signals.py +0 -0
  270. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s09_parse/stage.py +0 -0
  271. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s09_parse/types.py +0 -0
  272. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/__init__.py +0 -0
  273. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/artifact/__init__.py +0 -0
  274. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/artifact/default/__init__.py +0 -0
  275. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/artifact/default/executors.py +0 -0
  276. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/artifact/default/routers.py +0 -0
  277. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/artifact/default/stage.py +0 -0
  278. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/executors.py +0 -0
  279. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/interface.py +0 -0
  280. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/persistence.py +0 -0
  281. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/routers.py +0 -0
  282. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/stage.py +0 -0
  283. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/state_mutation.py +0 -0
  284. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s10_tool/streaming.py +0 -0
  285. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s11_tool_review/__init__.py +0 -0
  286. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s11_tool_review/artifact/__init__.py +0 -0
  287. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s11_tool_review/artifact/default/__init__.py +0 -0
  288. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s11_tool_review/artifact/default/reviewers.py +0 -0
  289. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s11_tool_review/artifact/default/stage.py +0 -0
  290. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s11_tool_review/interface.py +0 -0
  291. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s12_agent/__init__.py +0 -0
  292. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s12_agent/artifact/__init__.py +0 -0
  293. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s12_agent/artifact/default/__init__.py +0 -0
  294. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s12_agent/artifact/default/orchestrators.py +0 -0
  295. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s12_agent/artifact/default/stage.py +0 -0
  296. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s12_agent/interface.py +0 -0
  297. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s12_agent/orchestrators.py +0 -0
  298. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s12_agent/stage.py +0 -0
  299. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s12_agent/subagent_type.py +0 -0
  300. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s12_agent/types.py +0 -0
  301. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s13_task_registry/__init__.py +0 -0
  302. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s13_task_registry/artifact/__init__.py +0 -0
  303. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s13_task_registry/artifact/default/__init__.py +0 -0
  304. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s13_task_registry/artifact/default/file_backed_registry.py +0 -0
  305. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s13_task_registry/artifact/default/policies.py +0 -0
  306. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s13_task_registry/artifact/default/registry.py +0 -0
  307. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s13_task_registry/artifact/default/stage.py +0 -0
  308. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s13_task_registry/interface.py +0 -0
  309. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s13_task_registry/types.py +0 -0
  310. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s14_evaluate/__init__.py +0 -0
  311. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s14_evaluate/artifact/__init__.py +0 -0
  312. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/__init__.py +0 -0
  313. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/strategy.py +0 -0
  314. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s14_evaluate/artifact/default/__init__.py +0 -0
  315. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s14_evaluate/artifact/default/stage.py +0 -0
  316. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s14_evaluate/artifact/default/strategies.py +0 -0
  317. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s14_evaluate/interface.py +0 -0
  318. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s14_evaluate/stage.py +0 -0
  319. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s14_evaluate/strategies.py +0 -0
  320. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s14_evaluate/types.py +0 -0
  321. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s15_hitl/__init__.py +0 -0
  322. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s15_hitl/artifact/__init__.py +0 -0
  323. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s15_hitl/artifact/default/__init__.py +0 -0
  324. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s15_hitl/artifact/default/requesters.py +0 -0
  325. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s15_hitl/artifact/default/stage.py +0 -0
  326. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s15_hitl/artifact/default/timeouts.py +0 -0
  327. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s15_hitl/interface.py +0 -0
  328. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s15_hitl/types.py +0 -0
  329. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s16_loop/__init__.py +0 -0
  330. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s16_loop/artifact/__init__.py +0 -0
  331. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s16_loop/artifact/default/__init__.py +0 -0
  332. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s16_loop/artifact/default/controllers.py +0 -0
  333. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s16_loop/artifact/default/stage.py +0 -0
  334. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s16_loop/controllers.py +0 -0
  335. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s16_loop/interface.py +0 -0
  336. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s16_loop/stage.py +0 -0
  337. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s17_emit/__init__.py +0 -0
  338. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s17_emit/artifact/__init__.py +0 -0
  339. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s17_emit/artifact/default/__init__.py +0 -0
  340. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s17_emit/artifact/default/emitters.py +0 -0
  341. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s17_emit/artifact/default/stage.py +0 -0
  342. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s17_emit/emitters.py +0 -0
  343. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s17_emit/interface.py +0 -0
  344. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s17_emit/stage.py +0 -0
  345. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s17_emit/types.py +0 -0
  346. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s18_memory/__init__.py +0 -0
  347. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s18_memory/_dehydrate.py +0 -0
  348. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s18_memory/artifact/__init__.py +0 -0
  349. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s18_memory/artifact/default/__init__.py +0 -0
  350. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s18_memory/artifact/default/persistence.py +0 -0
  351. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s18_memory/artifact/default/stage.py +0 -0
  352. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s18_memory/artifact/default/strategies.py +0 -0
  353. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s18_memory/insight.py +0 -0
  354. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s18_memory/interface.py +0 -0
  355. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s18_memory/persistence.py +0 -0
  356. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s18_memory/stage.py +0 -0
  357. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s18_memory/strategies.py +0 -0
  358. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s19_summarize/__init__.py +0 -0
  359. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s19_summarize/artifact/__init__.py +0 -0
  360. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s19_summarize/artifact/default/__init__.py +0 -0
  361. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s19_summarize/artifact/default/importance.py +0 -0
  362. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s19_summarize/artifact/default/stage.py +0 -0
  363. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s19_summarize/artifact/default/summarizers.py +0 -0
  364. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s19_summarize/frequency_policy.py +0 -0
  365. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s19_summarize/interface.py +0 -0
  366. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s19_summarize/types.py +0 -0
  367. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s20_persist/__init__.py +0 -0
  368. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s20_persist/artifact/__init__.py +0 -0
  369. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s20_persist/artifact/default/__init__.py +0 -0
  370. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s20_persist/artifact/default/frequencies.py +0 -0
  371. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s20_persist/artifact/default/persisters.py +0 -0
  372. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s20_persist/artifact/default/stage.py +0 -0
  373. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s20_persist/interface.py +0 -0
  374. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s20_persist/restore.py +0 -0
  375. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s20_persist/types.py +0 -0
  376. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s21_yield/__init__.py +0 -0
  377. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s21_yield/artifact/__init__.py +0 -0
  378. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s21_yield/artifact/default/__init__.py +0 -0
  379. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s21_yield/artifact/default/formatters.py +0 -0
  380. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s21_yield/artifact/default/multi_format.py +0 -0
  381. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s21_yield/artifact/default/stage.py +0 -0
  382. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s21_yield/formatters.py +0 -0
  383. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s21_yield/interface.py +0 -0
  384. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/stages/s21_yield/stage.py +0 -0
  385. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/__init__.py +0 -0
  386. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/adhoc.py +0 -0
  387. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/base.py +0 -0
  388. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/__init__.py +0 -0
  389. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/_path_guard.py +0 -0
  390. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/agent_tool.py +0 -0
  391. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/ask_user_question_tool.py +0 -0
  392. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/bash_tool.py +0 -0
  393. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/cron_tools.py +0 -0
  394. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/dev_tools.py +0 -0
  395. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/edit_tool.py +0 -0
  396. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/glob_tool.py +0 -0
  397. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/grep_tool.py +0 -0
  398. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/mcp_wrapper_tools.py +0 -0
  399. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/notebook_edit_tool.py +0 -0
  400. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/operator_tools.py +0 -0
  401. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/plan_mode_tools.py +0 -0
  402. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/push_notification_tool.py +0 -0
  403. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/read_tool.py +0 -0
  404. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/send_message_tool.py +0 -0
  405. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/task_tools.py +0 -0
  406. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/todo_write_tool.py +0 -0
  407. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/tool_search_tool.py +0 -0
  408. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/web_fetch_tool.py +0 -0
  409. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/web_search_tool.py +0 -0
  410. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/worktree_tools.py +0 -0
  411. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/built_in/write_tool.py +0 -0
  412. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/composer.py +0 -0
  413. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/errors.py +0 -0
  414. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/mcp/__init__.py +0 -0
  415. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/mcp/adapter.py +0 -0
  416. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/mcp/credentials.py +0 -0
  417. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/mcp/errors.py +0 -0
  418. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/mcp/manager.py +0 -0
  419. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/mcp/oauth.py +0 -0
  420. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/mcp/state.py +0 -0
  421. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/mcp/uri.py +0 -0
  422. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/provider.py +0 -0
  423. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/providers.py +0 -0
  424. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/registry.py +0 -0
  425. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/sandbox.py +0 -0
  426. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/scope.py +0 -0
  427. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/tools/stage_binding.py +0 -0
  428. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/workspace/__init__.py +0 -0
  429. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/workspace/stack.py +0 -0
  430. {geny_executor-2.2.0 → geny_executor-2.2.1}/src/geny_executor/workspace/types.py +0 -0
  431. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/__init__.py +0 -0
  432. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/_fixtures/__init__.py +0 -0
  433. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/_fixtures/fake_claude.py +0 -0
  434. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/_fixtures/fake_echo_cli.py +0 -0
  435. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/_fixtures/geny_manifest_layout.json +0 -0
  436. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/_fixtures/manifest_entries.py +0 -0
  437. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/__init__.py +0 -0
  438. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/conftest.py +0 -0
  439. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/fixtures/__init__.py +0 -0
  440. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/fixtures/adapter/__init__.py +0 -0
  441. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/fixtures/adapter/adapter.py +0 -0
  442. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/test_c1_six_layer_retrieval.py +0 -0
  443. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/test_c2_execution_recording.py +0 -0
  444. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/test_c3_reflection_and_promotion.py +0 -0
  445. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/test_c4_rest_coverage.py +0 -0
  446. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/test_c5_embedding_migration.py +0 -0
  447. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/test_c6_session_resume.py +0 -0
  448. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/test_c7_adapter_parity.py +0 -0
  449. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/completeness/test_spec_loads.py +0 -0
  450. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/__init__.py +0 -0
  451. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/memory_provider_contract.py +0 -0
  452. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_embedding_clients.py +0 -0
  453. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_error_codes_stability.py +0 -0
  454. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_embedding_credentials.py +0 -0
  455. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_auto_vector.py +0 -0
  456. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_composite.py +0 -0
  457. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_composite_routing.py +0 -0
  458. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_curated_global.py +0 -0
  459. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_ephemeral.py +0 -0
  460. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_factory.py +0 -0
  461. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_file.py +0 -0
  462. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_file_layout.py +0 -0
  463. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_file_vector.py +0 -0
  464. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_sql.py +0 -0
  465. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_sql_dialect.py +0 -0
  466. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_sql_schema.py +0 -0
  467. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_provider_sql_vector.py +0 -0
  468. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_memory_vector_breaker.py +0 -0
  469. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/contract/test_stage_uniformity.py +0 -0
  470. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/integration/test_cycle_ab_cross_import.py +0 -0
  471. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/integration/test_integration.py +0 -0
  472. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/__init__.py +0 -0
  473. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/conformance/__init__.py +0 -0
  474. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/conformance/harness.py +0 -0
  475. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/conformance/test_anthropic.py +0 -0
  476. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/conformance/test_claude_code_cli.py +0 -0
  477. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/conformance/test_google.py +0 -0
  478. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/conformance/test_openai.py +0 -0
  479. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/conformance/test_vllm.py +0 -0
  480. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/golden/__init__.py +0 -0
  481. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/golden/cli-2.1.149-json.json +0 -0
  482. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/golden/cli-2.1.149-json.meta +0 -0
  483. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/golden/cli-2.1.149-stream.jsonl +0 -0
  484. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/golden/cli-2.1.149-stream.meta +0 -0
  485. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/golden/cli-2.1.162-stream.jsonl +0 -0
  486. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/golden/cli-2.1.162-stream.meta +0 -0
  487. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/golden/test_golden_replay.py +0 -0
  488. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/live/__init__.py +0 -0
  489. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/live/test_live_canaries.py +0 -0
  490. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/unit/__init__.py +0 -0
  491. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/unit/test_anthropic_build_kwargs.py +0 -0
  492. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/unit/test_anthropic_classify.py +0 -0
  493. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/unit/test_base_client.py +0 -0
  494. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/unit/test_claude_code.py +0 -0
  495. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/unit/test_cli_cancellation.py +0 -0
  496. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/unit/test_cli_event_forwarding.py +0 -0
  497. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/unit/test_cli_runtime.py +0 -0
  498. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/unit/test_credentials.py +0 -0
  499. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/unit/test_google_classify.py +0 -0
  500. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/unit/test_openai_client.py +0 -0
  501. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/llm_client/unit/test_translators_cli_claude_code.py +0 -0
  502. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/__init__.py +0 -0
  503. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_adaptive_model_router.py +0 -0
  504. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_adaptive_router_configure.py +0 -0
  505. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_adaptive_thinking_budget.py +0 -0
  506. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_adhoc_providers.py +0 -0
  507. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_agent_tool.py +0 -0
  508. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_api_timeout_kwarg.py +0 -0
  509. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_artifact_metadata.py +0 -0
  510. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_ask_user_question_tool.py +0 -0
  511. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_attach_llm_client_guard.py +0 -0
  512. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_binary_classify_manifest.py +0 -0
  513. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_built_in_autoregister.py +0 -0
  514. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_builtin_capabilities.py +0 -0
  515. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_builtin_features.py +0 -0
  516. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_cache_prefix_key.py +0 -0
  517. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_cancellation.py +0 -0
  518. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_composite_set_hooks.py +0 -0
  519. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_concurrent_runs.py +0 -0
  520. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_config_liveness.py +0 -0
  521. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_cron_runner.py +0 -0
  522. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_cron_store.py +0 -0
  523. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_cron_tools.py +0 -0
  524. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_dev_tools.py +0 -0
  525. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_diff_order_keyed.py +0 -0
  526. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_dynamic_persona_builder.py +0 -0
  527. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_embedding_error_classification.py +0 -0
  528. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_errors_categories.py +0 -0
  529. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_evaluation_chain.py +0 -0
  530. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_evaluation_chain_configure.py +0 -0
  531. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_event_catalog.py +0 -0
  532. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_event_channel_unification.py +0 -0
  533. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_event_correlation.py +0 -0
  534. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_external_tool_resolution.py +0 -0
  535. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_fork_multi_provider.py +0 -0
  536. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_from_manifest_strict_validation.py +0 -0
  537. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_geny_prod_manifest_repro.py +0 -0
  538. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_guard_fail_fast.py +0 -0
  539. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_hierarchical_sidecars.py +0 -0
  540. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_hook_gate_split.py +0 -0
  541. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_hook_in_process.py +0 -0
  542. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_hook_runner.py +0 -0
  543. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_hook_taxonomy.py +0 -0
  544. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_hooks_and_shared_keys.py +0 -0
  545. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_host_selections_resolve.py +0 -0
  546. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_index_list_categories.py +0 -0
  547. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_index_render_vault_map.py +0 -0
  548. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_interaction_fields.py +0 -0
  549. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_introspection.py +0 -0
  550. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_llm_client_base.py +0 -0
  551. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_llm_client_capabilities.py +0 -0
  552. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_llm_client_registry.py +0 -0
  553. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_llm_client_request_types.py +0 -0
  554. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_llm_client_state.py +0 -0
  555. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_llm_summary_compactor.py +0 -0
  556. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_loop_agnostic_lock.py +0 -0
  557. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_manifest_factory.py +0 -0
  558. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_manifest_from_dict_hygiene.py +0 -0
  559. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_manifest_memory_wiring.py +0 -0
  560. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_manifest_provider_validation.py +0 -0
  561. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_manifest_subagents_memory_sections.py +0 -0
  562. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_manifest_v2.py +0 -0
  563. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_manifest_v3_migration.py +0 -0
  564. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_mcp_annotations_attach.py +0 -0
  565. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_mcp_credential_store.py +0 -0
  566. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_mcp_fsm.py +0 -0
  567. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_mcp_lifecycle.py +0 -0
  568. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_mcp_namespace.py +0 -0
  569. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_mcp_oauth.py +0 -0
  570. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_mcp_prompts_skills_bridge.py +0 -0
  571. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_mcp_resource_retriever.py +0 -0
  572. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_mcp_uri.py +0 -0
  573. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_mcp_wrapper_tools.py +0 -0
  574. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_memory_aware_retriever.py +0 -0
  575. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_memory_hooks_after_callbacks.py +0 -0
  576. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_memory_metadata_extension.py +0 -0
  577. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_model_overrides.py +0 -0
  578. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_multi_dim_budget_configure.py +0 -0
  579. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_multi_dim_budget_controller.py +0 -0
  580. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_multi_format_yield.py +0 -0
  581. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_multi_provider.py +0 -0
  582. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_multimodal.py +0 -0
  583. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_note_graph_queries.py +0 -0
  584. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_notebook_edit_tool.py +0 -0
  585. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_notes_load_pinned.py +0 -0
  586. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_operator_tools.py +0 -0
  587. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_ordered_emitter_chain.py +0 -0
  588. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_permission_matrix.py +0 -0
  589. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_permission_mode_promotions.py +0 -0
  590. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_permission_posture.py +0 -0
  591. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase1_foundation.py +0 -0
  592. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase1_pipeline.py +0 -0
  593. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase2_agent_loop.py +0 -0
  594. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase2_tools.py +0 -0
  595. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase3_context_memory.py +0 -0
  596. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase4_think_agent_evaluate.py +0 -0
  597. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase5_emit_presets_mcp.py +0 -0
  598. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase5_environment.py +0 -0
  599. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase6_history.py +0 -0
  600. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase6_integration.py +0 -0
  601. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase7_security.py +0 -0
  602. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase9a_preset_regen.py +0 -0
  603. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_phase9a_scaffolding.py +0 -0
  604. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_pipeline_aclose.py +0 -0
  605. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_pipeline_attach_runtime.py +0 -0
  606. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_pipeline_events_tap.py +0 -0
  607. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_pipeline_from_manifest.py +0 -0
  608. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_pipeline_hook_lifecycle.py +0 -0
  609. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_pipeline_session_runtime.py +0 -0
  610. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_plan_mode_tools.py +0 -0
  611. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_primary_provider_and_build_reports.py +0 -0
  612. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_progressive_disclosure.py +0 -0
  613. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_provider_driven_strategy.py +0 -0
  614. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_push_notification_tool.py +0 -0
  615. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_refresh_backlinks_extension.py +0 -0
  616. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_refresh_runtime_and_run_lock.py +0 -0
  617. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_resolve_model_config.py +0 -0
  618. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_restore_bad_strategy_config.py +0 -0
  619. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_reviewer_policy_configure.py +0 -0
  620. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_runtime_task_runner.py +0 -0
  621. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_s06_chunk_forwarding.py +0 -0
  622. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_s06_provider_selection.py +0 -0
  623. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_s13_file_backed_registry.py +0 -0
  624. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_s13_task_registry_output.py +0 -0
  625. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_s19_frequency_policy.py +0 -0
  626. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_s9b1_tool_review.py +0 -0
  627. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_s9b2_task_registry.py +0 -0
  628. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_s9b3_hitl.py +0 -0
  629. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_s9b4_summarize.py +0 -0
  630. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_s9b5_persist.py +0 -0
  631. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_s9c1_pipeline_resume.py +0 -0
  632. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_s9c2_restore_state.py +0 -0
  633. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_send_message_tool.py +0 -0
  634. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_settings_loader.py +0 -0
  635. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_skill_phase_10_1.py +0 -0
  636. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_skill_phase_10_2.py +0 -0
  637. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_skill_phase_10_3.py +0 -0
  638. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_skill_phase_10_4_bundled.py +0 -0
  639. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_skill_phase_10_5_fork.py +0 -0
  640. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_skill_phase_10_6_killer.py +0 -0
  641. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_skill_phase_10_7_watcher.py +0 -0
  642. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_skill_richer_schema.py +0 -0
  643. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_skill_tool.py +0 -0
  644. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_skills_foundation.py +0 -0
  645. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_slash_built_in_control.py +0 -0
  646. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_slash_built_in_introspection.py +0 -0
  647. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_slash_commands.py +0 -0
  648. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_slash_md_template.py +0 -0
  649. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_stage10_ask_hitl.py +0 -0
  650. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_stage10_hook_wiring.py +0 -0
  651. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_stage10_partition_executor.py +0 -0
  652. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_stage10_permission_matrix.py +0 -0
  653. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_stage19_session_summary.py +0 -0
  654. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_state_mutation_wiring.py +0 -0
  655. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_state_shared_and_local.py +0 -0
  656. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_stm_append_event.py +0 -0
  657. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_strategy_config_roundtrip.py +0 -0
  658. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_streaming_tool_executor.py +0 -0
  659. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_structured_output_parser.py +0 -0
  660. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_structured_reflection.py +0 -0
  661. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_subagent_credential_propagation.py +0 -0
  662. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_subagent_descriptor.py +0 -0
  663. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_subagent_manifest_compile.py +0 -0
  664. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_subagent_orchestrator_zero_arg.py +0 -0
  665. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_subagent_parallel.py +0 -0
  666. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_subagent_pipeline_lifecycle.py +0 -0
  667. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_subagent_type_orchestrator.py +0 -0
  668. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_task_tools.py +0 -0
  669. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_todo_write_tool.py +0 -0
  670. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_tool_abc_uplift.py +0 -0
  671. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_tool_call_events.py +0 -0
  672. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_tool_errors.py +0 -0
  673. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_tool_lifecycle_hooks.py +0 -0
  674. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_tool_provider.py +0 -0
  675. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_tool_result_persistence.py +0 -0
  676. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_tool_search_tool.py +0 -0
  677. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_tool_stage_max_concurrency.py +0 -0
  678. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_turn_boundary_state.py +0 -0
  679. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_validate_manifest.py +0 -0
  680. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_web_fetch_tool.py +0 -0
  681. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_web_search_tool.py +0 -0
  682. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_workspace.py +0 -0
  683. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_workspace_propagation.py +0 -0
  684. {geny_executor-2.2.0 → geny_executor-2.2.1}/tests/unit/test_workspace_tools_integration.py +0 -0
  685. {geny_executor-2.2.0 → geny_executor-2.2.1}/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.2.1
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.2.1"
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.2.1"
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
@@ -2592,6 +2777,26 @@ class Pipeline:
2592
2777
  creds = self._credentials.require(provider)
2593
2778
  client_cls = ClientRegistry.get(provider)
2594
2779
  kwargs = _creds_to_client_kwargs(provider, creds)
2780
+ # CLI MCP passthrough (2.2.1): hand manifest-declared MCP servers
2781
+ # to the subprocess client. Host-supplied mcp_config (e.g. Geny's
2782
+ # per-session bridge) wins on name collision. Manifest-declared
2783
+ # servers are also auto-allowed (``mcp__<server>``) — the
2784
+ # operator attached them in the environment editor, and the CLI's
2785
+ # --print mode has no human to answer a permission prompt, so
2786
+ # without the allow entry the passthrough would be dead on
2787
+ # arrival.
2788
+ if provider == self._cli_mcp_passthrough_provider and self._cli_mcp_passthrough.get(
2789
+ "mcpServers"
2790
+ ):
2791
+ kwargs["mcp_config"] = _merge_cli_mcp_config(
2792
+ kwargs.get("mcp_config"), self._cli_mcp_passthrough
2793
+ )
2794
+ allow = list(kwargs.get("allow_tools", ()) or ())
2795
+ for server_name in self._cli_mcp_passthrough["mcpServers"]:
2796
+ entry = f"mcp__{server_name}"
2797
+ if entry not in allow:
2798
+ allow.append(entry)
2799
+ kwargs["allow_tools"] = tuple(allow)
2595
2800
  return client_cls(**kwargs)
2596
2801
 
2597
2802
  async def _try_run_stage(self, order: int, current: Any, state: PipelineState) -> Any:
@@ -0,0 +1,302 @@
1
+ """CLI MCP passthrough (2.2.1) — manifest ``tools.mcp_servers`` must reach
2
+ subprocess backends through their own ``--mcp-config`` channel.
3
+
4
+ The incident this pins: a user attached an MCP server (``gapt-service``,
5
+ stdio, ``npx gapt-mcp``) to a ``claude_code_cli`` environment through the
6
+ host UI. The manifest carried it correctly, the pipeline built cleanly —
7
+ and the agent had no idea the tools existed. Root cause: the pipeline
8
+ connected the server HOST-side (MCPManager) and registered its tools into
9
+ the pipeline ToolRegistry, but Stage 10 never dispatches for subprocess
10
+ backends (the CLI runs its own agentic loop) and the CLI subprocess only
11
+ sees servers passed via ``--mcp-config`` (which carried only the host's
12
+ session bridge). The host even spawned the MCP child process for nothing.
13
+
14
+ The fix routes manifest MCP servers to the client instead:
15
+ ``from_manifest_async`` skips the host-side connect for passthrough-capable
16
+ providers and ``_build_client_for`` merges the servers into the client's
17
+ ``mcp_config`` (host config wins on name collision) plus auto-allows
18
+ ``mcp__<server>`` so ``--print`` mode (no human to answer permission
19
+ prompts) can actually call them.
20
+ """
21
+
22
+ from __future__ import annotations
23
+
24
+ import json
25
+
26
+ import pytest
27
+
28
+ from geny_executor import CredentialBundle, ProviderCredentials
29
+ from geny_executor.core.environment import EnvironmentManifest
30
+ from geny_executor.core.pipeline import (
31
+ Pipeline,
32
+ _mcp_servers_to_cli_config,
33
+ _merge_cli_mcp_config,
34
+ _provider_wants_mcp_passthrough,
35
+ )
36
+ from geny_executor.llm_client.types import APIRequest
37
+ from geny_executor.llm_client.translators._cli import claude_code_argv
38
+ from geny_executor.tools.mcp.manager import MCPServerConfig
39
+
40
+
41
+ # ─────────────────────────────────── provider detection ─
42
+
43
+
44
+ def test_claude_code_cli_wants_passthrough() -> None:
45
+ assert _provider_wants_mcp_passthrough("claude_code_cli") is True
46
+
47
+
48
+ @pytest.mark.parametrize("provider", ["anthropic", "openai", "google", "vllm"])
49
+ def test_sdk_providers_do_not_want_passthrough(provider: str) -> None:
50
+ assert _provider_wants_mcp_passthrough(provider) is False
51
+
52
+
53
+ def test_unknown_or_empty_provider_is_safe_default() -> None:
54
+ assert _provider_wants_mcp_passthrough("") is False
55
+ assert _provider_wants_mcp_passthrough("no-such-provider") is False
56
+
57
+
58
+ # ─────────────────────────────────── shape translation ─
59
+
60
+
61
+ def test_stdio_server_translates_with_env() -> None:
62
+ cfg, skipped = _mcp_servers_to_cli_config(
63
+ {
64
+ "gapt-service": MCPServerConfig(
65
+ name="gapt-service",
66
+ command="npx",
67
+ args=["gapt-mcp"],
68
+ env={"GAPT_BASE_URL": "https://gapt.example/"},
69
+ transport="stdio",
70
+ )
71
+ }
72
+ )
73
+ assert skipped == []
74
+ entry = cfg["mcpServers"]["gapt-service"]
75
+ assert entry == {
76
+ "type": "stdio",
77
+ "command": "npx",
78
+ "args": ["gapt-mcp"],
79
+ "env": {"GAPT_BASE_URL": "https://gapt.example/"},
80
+ }
81
+
82
+
83
+ def test_sse_and_http_servers_translate_with_headers() -> None:
84
+ cfg, skipped = _mcp_servers_to_cli_config(
85
+ {
86
+ "a": MCPServerConfig(
87
+ name="a", transport="sse", url="https://x/sse",
88
+ headers={"Authorization": "Bearer t"},
89
+ ),
90
+ "b": MCPServerConfig(name="b", transport="http", url="https://x/mcp"),
91
+ }
92
+ )
93
+ assert skipped == []
94
+ assert cfg["mcpServers"]["a"] == {
95
+ "type": "sse", "url": "https://x/sse",
96
+ "headers": {"Authorization": "Bearer t"},
97
+ }
98
+ assert cfg["mcpServers"]["b"] == {"type": "http", "url": "https://x/mcp"}
99
+
100
+
101
+ def test_unknown_transport_is_skipped_and_reported() -> None:
102
+ cfg, skipped = _mcp_servers_to_cli_config(
103
+ {"weird": MCPServerConfig(name="weird", transport="carrier-pigeon")}
104
+ )
105
+ assert skipped == ["weird"]
106
+ assert cfg["mcpServers"] == {}
107
+
108
+
109
+ # ─────────────────────────────────── merge semantics ─
110
+
111
+
112
+ _MANIFEST_CFG = {"mcpServers": {"gapt-service": {"type": "stdio", "command": "npx"}}}
113
+
114
+
115
+ def test_merge_into_empty_host_config() -> None:
116
+ assert _merge_cli_mcp_config(None, _MANIFEST_CFG) == _MANIFEST_CFG
117
+ assert _merge_cli_mcp_config({}, _MANIFEST_CFG) == _MANIFEST_CFG
118
+
119
+
120
+ def test_merge_host_dict_keeps_both_and_host_wins_collisions() -> None:
121
+ host = {
122
+ "mcpServers": {
123
+ "geny": {"type": "stdio", "command": "python"},
124
+ "gapt-service": {"type": "stdio", "command": "host-pinned"},
125
+ }
126
+ }
127
+ merged = _merge_cli_mcp_config(host, _MANIFEST_CFG)
128
+ assert set(merged["mcpServers"]) == {"geny", "gapt-service"}
129
+ # Host definition survives the collision — session bridges and host
130
+ # overrides must not be silently replaced by manifest entries.
131
+ assert merged["mcpServers"]["gapt-service"]["command"] == "host-pinned"
132
+
133
+
134
+ def test_merge_host_path_readable(tmp_path) -> None:
135
+ p = tmp_path / "host-mcp.json"
136
+ p.write_text(json.dumps({"mcpServers": {"geny": {"type": "stdio", "command": "python"}}}))
137
+ merged = _merge_cli_mcp_config(str(p), _MANIFEST_CFG)
138
+ assert set(merged["mcpServers"]) == {"geny", "gapt-service"}
139
+
140
+
141
+ def test_merge_host_path_unreadable_keeps_host_path(tmp_path, caplog) -> None:
142
+ bogus = str(tmp_path / "missing.json")
143
+ with caplog.at_level("WARNING"):
144
+ out = _merge_cli_mcp_config(bogus, _MANIFEST_CFG)
145
+ assert out == bogus # the single --mcp-config slot stays with the host
146
+ assert any("could not be read" in r.message for r in caplog.records)
147
+
148
+
149
+ # ─────────────────────────────────── end-to-end pipeline ─
150
+
151
+
152
+ def _cli_manifest_with_mcp() -> EnvironmentManifest:
153
+ return EnvironmentManifest.from_dict(
154
+ {
155
+ "metadata": {"id": "t-cli-mcp", "name": "t"},
156
+ "pipeline": {"max_iterations": 1},
157
+ "model": {},
158
+ "stages": [
159
+ {"order": 1, "name": "input", "active": True},
160
+ {
161
+ "order": 6,
162
+ "name": "api",
163
+ "active": True,
164
+ "config": {"provider": "claude_code_cli"},
165
+ "strategies": {"retry": "no_retry", "router": "passthrough"},
166
+ },
167
+ {"order": 9, "name": "parse", "active": True},
168
+ {"order": 21, "name": "yield", "active": True},
169
+ ],
170
+ "tools": {
171
+ "built_in": [],
172
+ "external": [],
173
+ "mcp_servers": [
174
+ {
175
+ # A command that CANNOT spawn — if the pipeline
176
+ # tried the host-side connect, build would raise.
177
+ "name": "gapt-service",
178
+ "transport": "stdio",
179
+ "command": "/nonexistent-mcp-binary",
180
+ "args": ["gapt-mcp"],
181
+ "env": {"GAPT_BASE_URL": "https://gapt.example/"},
182
+ }
183
+ ],
184
+ },
185
+ }
186
+ )
187
+
188
+
189
+ def _cli_bundle(extras: dict | None = None) -> CredentialBundle:
190
+ # binary_path points at a real executable so the credentials are
191
+ # non-empty (require() gate) — the client never spawns it in these
192
+ # tests.
193
+ return CredentialBundle(
194
+ by_provider={
195
+ "claude_code_cli": ProviderCredentials(
196
+ api_key="", binary_path="/bin/sh", extras=dict(extras or {})
197
+ )
198
+ }
199
+ )
200
+
201
+
202
+ @pytest.mark.asyncio
203
+ async def test_cli_provider_skips_host_connect_and_stashes_passthrough() -> None:
204
+ pipeline = await Pipeline.from_manifest_async(
205
+ _cli_manifest_with_mcp(), credentials=_cli_bundle(), strict=False
206
+ )
207
+ try:
208
+ # Host-side connect was skipped: a /nonexistent binary would have
209
+ # raised MCPConnectionError during build.
210
+ assert pipeline._cli_mcp_passthrough["mcpServers"]["gapt-service"]["command"] == (
211
+ "/nonexistent-mcp-binary"
212
+ )
213
+ assert pipeline._cli_mcp_passthrough_provider == "claude_code_cli"
214
+
215
+ client = pipeline._build_client_for("claude_code_cli")
216
+ assert "gapt-service" in client._mcp_config["mcpServers"]
217
+ assert "mcp__gapt-service" in client._allow_tools
218
+ finally:
219
+ await pipeline.aclose()
220
+
221
+
222
+ @pytest.mark.asyncio
223
+ async def test_cli_passthrough_merges_with_host_bridge_config() -> None:
224
+ """Geny's per-session bridge (extras['mcp_config']) and the manifest
225
+ server must BOTH reach the CLI in one --mcp-config."""
226
+ bridge = {"mcpServers": {"geny": {"type": "stdio", "command": "python", "args": ["bridge.py"]}}}
227
+ pipeline = await Pipeline.from_manifest_async(
228
+ _cli_manifest_with_mcp(),
229
+ credentials=_cli_bundle(extras={"mcp_config": bridge, "allow_tools": ("mcp__geny",)}),
230
+ strict=False,
231
+ )
232
+ try:
233
+ client = pipeline._build_client_for("claude_code_cli")
234
+ servers = client._mcp_config["mcpServers"]
235
+ assert set(servers) == {"geny", "gapt-service"}
236
+ assert "mcp__geny" in client._allow_tools
237
+ assert "mcp__gapt-service" in client._allow_tools
238
+
239
+ # And the argv the subprocess actually receives carries both.
240
+ argv = claude_code_argv(
241
+ APIRequest(model="m", messages=[], system="", stream=False),
242
+ mcp_config=client._mcp_config,
243
+ allow_tools=client._allow_tools,
244
+ )
245
+ blob = argv[argv.index("--mcp-config") + 1]
246
+ assert set(json.loads(blob)["mcpServers"]) == {"geny", "gapt-service"}
247
+ assert "--strict-mcp-config" in argv
248
+ allowed = argv[argv.index("--allowedTools") + 1]
249
+ assert "mcp__gapt-service" in allowed
250
+ finally:
251
+ await pipeline.aclose()
252
+
253
+
254
+ @pytest.mark.asyncio
255
+ async def test_sdk_provider_still_host_connects(monkeypatch) -> None:
256
+ """Regression: SDK providers keep the host-side MCPManager path."""
257
+ from geny_executor.tools.mcp import manager as mcp_manager_mod
258
+
259
+ calls = {}
260
+
261
+ async def fake_connect_all(self, configs):
262
+ calls["configs"] = dict(configs)
263
+
264
+ async def fake_discover_all(self):
265
+ return []
266
+
267
+ monkeypatch.setattr(mcp_manager_mod.MCPManager, "connect_all", fake_connect_all)
268
+ monkeypatch.setattr(mcp_manager_mod.MCPManager, "discover_all", fake_discover_all)
269
+
270
+ manifest_dict = _cli_manifest_with_mcp().to_dict()
271
+ manifest_dict["stages"][1]["config"]["provider"] = "anthropic"
272
+ manifest = EnvironmentManifest.from_dict(manifest_dict)
273
+
274
+ pipeline = await Pipeline.from_manifest_async(
275
+ manifest,
276
+ credentials=CredentialBundle(
277
+ by_provider={"anthropic": ProviderCredentials(api_key="sk-test")}
278
+ ),
279
+ strict=False,
280
+ )
281
+ try:
282
+ assert "gapt-service" in calls["configs"]
283
+ assert pipeline._cli_mcp_passthrough == {}
284
+ finally:
285
+ await pipeline.aclose()
286
+
287
+
288
+ @pytest.mark.asyncio
289
+ async def test_cli_manifest_without_mcp_servers_untouched() -> None:
290
+ manifest_dict = _cli_manifest_with_mcp().to_dict()
291
+ manifest_dict["tools"]["mcp_servers"] = []
292
+ pipeline = await Pipeline.from_manifest_async(
293
+ EnvironmentManifest.from_dict(manifest_dict),
294
+ credentials=_cli_bundle(),
295
+ strict=False,
296
+ )
297
+ try:
298
+ assert pipeline._cli_mcp_passthrough == {}
299
+ client = pipeline._build_client_for("claude_code_cli")
300
+ assert client._mcp_config is None
301
+ finally:
302
+ await pipeline.aclose()
File without changes
File without changes
File without changes