geny-executor 2.0.4__tar.gz → 2.0.6__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 (623) hide show
  1. {geny_executor-2.0.4 → geny_executor-2.0.6}/PKG-INFO +1 -1
  2. {geny_executor-2.0.4 → geny_executor-2.0.6}/pyproject.toml +1 -1
  3. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/__init__.py +1 -1
  4. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/pipeline.py +0 -10
  5. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/__init__.py +0 -2
  6. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/_cli_runtime.py +4 -2
  7. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/registry.py +0 -7
  8. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/translators/__init__.py +0 -6
  9. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/translators/_cli.py +107 -132
  10. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/types.py +12 -0
  11. geny_executor-2.0.6/tests/_fixtures/__init__.py +2 -0
  12. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/conformance/test_claude_code_cli.py +10 -5
  13. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/unit/test_claude_code.py +12 -6
  14. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/unit/test_translators_cli_claude_code.py +93 -13
  15. geny_executor-2.0.4/src/geny_executor/llm_client/copilot.py +0 -185
  16. geny_executor-2.0.4/tests/_fixtures/__init__.py +0 -2
  17. geny_executor-2.0.4/tests/_fixtures/fake_gh.py +0 -86
  18. geny_executor-2.0.4/tests/llm_client/conformance/test_copilot_cli.py +0 -111
  19. geny_executor-2.0.4/tests/llm_client/unit/test_copilot.py +0 -286
  20. {geny_executor-2.0.4 → geny_executor-2.0.6}/.gitignore +0 -0
  21. {geny_executor-2.0.4 → geny_executor-2.0.6}/LICENSE +0 -0
  22. {geny_executor-2.0.4 → geny_executor-2.0.6}/README.md +0 -0
  23. {geny_executor-2.0.4 → geny_executor-2.0.6}/README_ko.md +0 -0
  24. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/channels/__init__.py +0 -0
  25. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/channels/send_message_channel.py +0 -0
  26. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/channels/user_file_channel.py +0 -0
  27. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/__init__.py +0 -0
  28. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/artifact.py +0 -0
  29. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/builder.py +0 -0
  30. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/config.py +0 -0
  31. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/diff.py +0 -0
  32. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/environment.py +0 -0
  33. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/errors.py +0 -0
  34. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/introspection.py +0 -0
  35. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/mutation.py +0 -0
  36. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/presets.py +0 -0
  37. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/result.py +0 -0
  38. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/schema.py +0 -0
  39. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/shared_keys.py +0 -0
  40. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/slot.py +0 -0
  41. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/snapshot.py +0 -0
  42. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/stage.py +0 -0
  43. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/core/state.py +0 -0
  44. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/cron/__init__.py +0 -0
  45. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/cron/runner.py +0 -0
  46. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/cron/store_abc.py +0 -0
  47. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/cron/store_impl/__init__.py +0 -0
  48. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/cron/store_impl/file_backed.py +0 -0
  49. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/cron/store_impl/in_memory.py +0 -0
  50. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/cron/types.py +0 -0
  51. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/events/__init__.py +0 -0
  52. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/events/bus.py +0 -0
  53. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/events/types.py +0 -0
  54. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/history/__init__.py +0 -0
  55. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/history/ab_test.py +0 -0
  56. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/history/cost.py +0 -0
  57. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/history/models.py +0 -0
  58. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/history/monitor.py +0 -0
  59. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/history/replay.py +0 -0
  60. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/history/service.py +0 -0
  61. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/hooks/__init__.py +0 -0
  62. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/hooks/config.py +0 -0
  63. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/hooks/events.py +0 -0
  64. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/hooks/runner.py +0 -0
  65. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/anthropic.py +0 -0
  66. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/base.py +0 -0
  67. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/claude_code.py +0 -0
  68. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/credentials.py +0 -0
  69. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/google.py +0 -0
  70. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/openai.py +0 -0
  71. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/translators/_canonical.py +0 -0
  72. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/llm_client/vllm.py +0 -0
  73. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/__init__.py +0 -0
  74. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/_locks.py +0 -0
  75. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/_progressive.py +0 -0
  76. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/composite/__init__.py +0 -0
  77. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/composite/handles.py +0 -0
  78. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/composite/provider.py +0 -0
  79. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/composite/routing.py +0 -0
  80. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/composite/snapshot.py +0 -0
  81. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/__init__.py +0 -0
  82. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/client.py +0 -0
  83. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/google.py +0 -0
  84. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/local.py +0 -0
  85. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/openai.py +0 -0
  86. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/registry.py +0 -0
  87. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/voyage.py +0 -0
  88. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/factory.py +0 -0
  89. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/presets.py +0 -0
  90. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/provider.py +0 -0
  91. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/__init__.py +0 -0
  92. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/ephemeral.py +0 -0
  93. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/__init__.py +0 -0
  94. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/config.py +0 -0
  95. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/frontmatter.py +0 -0
  96. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/index_store.py +0 -0
  97. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/layout.py +0 -0
  98. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/ltm_store.py +0 -0
  99. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/notes_store.py +0 -0
  100. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/provider.py +0 -0
  101. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/snapshot.py +0 -0
  102. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/stm_store.py +0 -0
  103. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/timezone.py +0 -0
  104. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/vector_store.py +0 -0
  105. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/__init__.py +0 -0
  106. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/config.py +0 -0
  107. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/connection.py +0 -0
  108. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/index_store.py +0 -0
  109. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/ltm_store.py +0 -0
  110. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/notes_store.py +0 -0
  111. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/provider.py +0 -0
  112. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/schema.py +0 -0
  113. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/snapshot.py +0 -0
  114. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/stm_store.py +0 -0
  115. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/vector_store.py +0 -0
  116. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/retriever.py +0 -0
  117. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/memory/strategy.py +0 -0
  118. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/notifications/__init__.py +0 -0
  119. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/notifications/registry.py +0 -0
  120. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/permission/__init__.py +0 -0
  121. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/permission/loader.py +0 -0
  122. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/permission/matrix.py +0 -0
  123. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/permission/types.py +0 -0
  124. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/py.typed +0 -0
  125. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/runtime/__init__.py +0 -0
  126. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/runtime/task_executors.py +0 -0
  127. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/runtime/task_runner.py +0 -0
  128. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/security/__init__.py +0 -0
  129. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/security/import_validator.py +0 -0
  130. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/security/script_sandbox.py +0 -0
  131. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/session/__init__.py +0 -0
  132. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/session/freshness.py +0 -0
  133. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/session/manager.py +0 -0
  134. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/session/persistence.py +0 -0
  135. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/session/session.py +0 -0
  136. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/settings/__init__.py +0 -0
  137. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/settings/loader.py +0 -0
  138. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/settings/section_registry.py +0 -0
  139. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/__init__.py +0 -0
  140. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/batch/SKILL.md +0 -0
  141. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/debug/SKILL.md +0 -0
  142. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/loop/SKILL.md +0 -0
  143. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/lorem-ipsum/SKILL.md +0 -0
  144. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/simplify/SKILL.md +0 -0
  145. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/skillify/SKILL.md +0 -0
  146. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/stuck/SKILL.md +0 -0
  147. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/verify/SKILL.md +0 -0
  148. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/bundled_skills.py +0 -0
  149. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/fork.py +0 -0
  150. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/frontmatter.py +0 -0
  151. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/loader.py +0 -0
  152. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/mcp_bridge.py +0 -0
  153. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/path_match.py +0 -0
  154. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/registry.py +0 -0
  155. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/shell_blocks.py +0 -0
  156. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/skill_tool.py +0 -0
  157. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/types.py +0 -0
  158. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/skills/watcher.py +0 -0
  159. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/__init__.py +0 -0
  160. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/__init__.py +0 -0
  161. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/_helpers.py +0 -0
  162. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/cancel.py +0 -0
  163. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/clear.py +0 -0
  164. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/compact.py +0 -0
  165. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/config.py +0 -0
  166. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/context.py +0 -0
  167. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/cost.py +0 -0
  168. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/help.py +0 -0
  169. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/memory.py +0 -0
  170. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/model.py +0 -0
  171. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/preset_info.py +0 -0
  172. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/status.py +0 -0
  173. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/tasks.py +0 -0
  174. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/md_template.py +0 -0
  175. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/parser.py +0 -0
  176. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/registry.py +0 -0
  177. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/slash_commands/types.py +0 -0
  178. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/__init__.py +0 -0
  179. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/__init__.py +0 -0
  180. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/__init__.py +0 -0
  181. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/default/__init__.py +0 -0
  182. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/default/normalizers.py +0 -0
  183. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/default/stage.py +0 -0
  184. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/default/validators.py +0 -0
  185. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/interface.py +0 -0
  186. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/normalizers.py +0 -0
  187. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/stage.py +0 -0
  188. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/types.py +0 -0
  189. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/validators.py +0 -0
  190. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/__init__.py +0 -0
  191. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/__init__.py +0 -0
  192. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/__init__.py +0 -0
  193. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/compactors.py +0 -0
  194. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/retrievers.py +0 -0
  195. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/stage.py +0 -0
  196. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/strategies.py +0 -0
  197. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/compactors.py +0 -0
  198. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/interface.py +0 -0
  199. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/retrievers.py +0 -0
  200. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/stage.py +0 -0
  201. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/strategies.py +0 -0
  202. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/types.py +0 -0
  203. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/__init__.py +0 -0
  204. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/artifact/__init__.py +0 -0
  205. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/artifact/default/__init__.py +0 -0
  206. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/artifact/default/builders.py +0 -0
  207. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/artifact/default/stage.py +0 -0
  208. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/builders.py +0 -0
  209. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/interface.py +0 -0
  210. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/persona/__init__.py +0 -0
  211. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/persona/builder.py +0 -0
  212. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/persona/provider.py +0 -0
  213. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/stage.py +0 -0
  214. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/__init__.py +0 -0
  215. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/artifact/__init__.py +0 -0
  216. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/artifact/default/__init__.py +0 -0
  217. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/artifact/default/guards.py +0 -0
  218. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/artifact/default/stage.py +0 -0
  219. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/guards.py +0 -0
  220. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/interface.py +0 -0
  221. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/stage.py +0 -0
  222. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/types.py +0 -0
  223. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/__init__.py +0 -0
  224. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/artifact/__init__.py +0 -0
  225. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/artifact/default/__init__.py +0 -0
  226. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/artifact/default/stage.py +0 -0
  227. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/artifact/default/strategies.py +0 -0
  228. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/interface.py +0 -0
  229. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/stage.py +0 -0
  230. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/strategies.py +0 -0
  231. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/__init__.py +0 -0
  232. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/_translate.py +0 -0
  233. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/__init__.py +0 -0
  234. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/__init__.py +0 -0
  235. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/providers.py +0 -0
  236. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/retry.py +0 -0
  237. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/router.py +0 -0
  238. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/stage.py +0 -0
  239. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/google/__init__.py +0 -0
  240. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/google/providers.py +0 -0
  241. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/openai/__init__.py +0 -0
  242. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/openai/providers.py +0 -0
  243. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/interface.py +0 -0
  244. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/providers.py +0 -0
  245. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/retry.py +0 -0
  246. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/stage.py +0 -0
  247. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/types.py +0 -0
  248. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/__init__.py +0 -0
  249. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/__init__.py +0 -0
  250. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/default/__init__.py +0 -0
  251. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/default/pricing.py +0 -0
  252. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/default/stage.py +0 -0
  253. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/default/trackers.py +0 -0
  254. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/interface.py +0 -0
  255. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/pricing.py +0 -0
  256. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/stage.py +0 -0
  257. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/trackers.py +0 -0
  258. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/__init__.py +0 -0
  259. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/artifact/default/__init__.py +0 -0
  260. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/artifact/default/budget.py +0 -0
  261. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/artifact/default/processors.py +0 -0
  262. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/artifact/default/stage.py +0 -0
  263. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/interface.py +0 -0
  264. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/processors.py +0 -0
  265. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/stage.py +0 -0
  266. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/types.py +0 -0
  267. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/__init__.py +0 -0
  268. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/artifact/default/__init__.py +0 -0
  269. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/artifact/default/parsers.py +0 -0
  270. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/artifact/default/signals.py +0 -0
  271. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/artifact/default/stage.py +0 -0
  272. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/interface.py +0 -0
  273. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/parsers.py +0 -0
  274. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/signals.py +0 -0
  275. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/stage.py +0 -0
  276. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/types.py +0 -0
  277. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/__init__.py +0 -0
  278. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/__init__.py +0 -0
  279. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/default/__init__.py +0 -0
  280. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/default/executors.py +0 -0
  281. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/default/routers.py +0 -0
  282. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/default/stage.py +0 -0
  283. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/executors.py +0 -0
  284. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/interface.py +0 -0
  285. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/persistence.py +0 -0
  286. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/routers.py +0 -0
  287. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/stage.py +0 -0
  288. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/state_mutation.py +0 -0
  289. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/streaming.py +0 -0
  290. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/__init__.py +0 -0
  291. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/artifact/__init__.py +0 -0
  292. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/artifact/default/__init__.py +0 -0
  293. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/artifact/default/reviewers.py +0 -0
  294. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/artifact/default/stage.py +0 -0
  295. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/interface.py +0 -0
  296. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/__init__.py +0 -0
  297. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/artifact/__init__.py +0 -0
  298. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/artifact/default/__init__.py +0 -0
  299. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/artifact/default/orchestrators.py +0 -0
  300. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/artifact/default/stage.py +0 -0
  301. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/interface.py +0 -0
  302. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/orchestrators.py +0 -0
  303. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/stage.py +0 -0
  304. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/subagent_type.py +0 -0
  305. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/types.py +0 -0
  306. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/__init__.py +0 -0
  307. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/__init__.py +0 -0
  308. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/__init__.py +0 -0
  309. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/file_backed_registry.py +0 -0
  310. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/policies.py +0 -0
  311. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/registry.py +0 -0
  312. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/stage.py +0 -0
  313. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/interface.py +0 -0
  314. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/types.py +0 -0
  315. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/__init__.py +0 -0
  316. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/__init__.py +0 -0
  317. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/__init__.py +0 -0
  318. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/strategy.py +0 -0
  319. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/default/__init__.py +0 -0
  320. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/default/stage.py +0 -0
  321. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/default/strategies.py +0 -0
  322. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/interface.py +0 -0
  323. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/stage.py +0 -0
  324. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/strategies.py +0 -0
  325. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/types.py +0 -0
  326. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/__init__.py +0 -0
  327. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/__init__.py +0 -0
  328. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/default/__init__.py +0 -0
  329. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/default/requesters.py +0 -0
  330. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/default/stage.py +0 -0
  331. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/default/timeouts.py +0 -0
  332. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/interface.py +0 -0
  333. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/types.py +0 -0
  334. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/__init__.py +0 -0
  335. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/artifact/__init__.py +0 -0
  336. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/artifact/default/__init__.py +0 -0
  337. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/artifact/default/controllers.py +0 -0
  338. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/artifact/default/stage.py +0 -0
  339. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/controllers.py +0 -0
  340. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/interface.py +0 -0
  341. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/stage.py +0 -0
  342. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/__init__.py +0 -0
  343. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/artifact/__init__.py +0 -0
  344. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/artifact/default/__init__.py +0 -0
  345. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/artifact/default/emitters.py +0 -0
  346. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/artifact/default/stage.py +0 -0
  347. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/emitters.py +0 -0
  348. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/interface.py +0 -0
  349. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/stage.py +0 -0
  350. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/types.py +0 -0
  351. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/__init__.py +0 -0
  352. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/_dehydrate.py +0 -0
  353. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/__init__.py +0 -0
  354. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/default/__init__.py +0 -0
  355. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/default/persistence.py +0 -0
  356. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/default/stage.py +0 -0
  357. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/default/strategies.py +0 -0
  358. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/insight.py +0 -0
  359. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/interface.py +0 -0
  360. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/persistence.py +0 -0
  361. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/stage.py +0 -0
  362. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/strategies.py +0 -0
  363. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/__init__.py +0 -0
  364. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/__init__.py +0 -0
  365. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/default/__init__.py +0 -0
  366. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/default/importance.py +0 -0
  367. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/default/stage.py +0 -0
  368. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/default/summarizers.py +0 -0
  369. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/frequency_policy.py +0 -0
  370. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/interface.py +0 -0
  371. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/types.py +0 -0
  372. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/__init__.py +0 -0
  373. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/__init__.py +0 -0
  374. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/default/__init__.py +0 -0
  375. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/default/frequencies.py +0 -0
  376. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/default/persisters.py +0 -0
  377. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/default/stage.py +0 -0
  378. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/interface.py +0 -0
  379. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/restore.py +0 -0
  380. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/types.py +0 -0
  381. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/__init__.py +0 -0
  382. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/__init__.py +0 -0
  383. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/default/__init__.py +0 -0
  384. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/default/formatters.py +0 -0
  385. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/default/multi_format.py +0 -0
  386. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/default/stage.py +0 -0
  387. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/formatters.py +0 -0
  388. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/interface.py +0 -0
  389. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/stage.py +0 -0
  390. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/__init__.py +0 -0
  391. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/adhoc.py +0 -0
  392. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/base.py +0 -0
  393. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/__init__.py +0 -0
  394. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/_path_guard.py +0 -0
  395. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/agent_tool.py +0 -0
  396. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/ask_user_question_tool.py +0 -0
  397. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/bash_tool.py +0 -0
  398. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/cron_tools.py +0 -0
  399. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/dev_tools.py +0 -0
  400. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/edit_tool.py +0 -0
  401. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/glob_tool.py +0 -0
  402. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/grep_tool.py +0 -0
  403. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/mcp_wrapper_tools.py +0 -0
  404. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/notebook_edit_tool.py +0 -0
  405. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/operator_tools.py +0 -0
  406. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/plan_mode_tools.py +0 -0
  407. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/push_notification_tool.py +0 -0
  408. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/read_tool.py +0 -0
  409. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/send_message_tool.py +0 -0
  410. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/task_tools.py +0 -0
  411. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/todo_write_tool.py +0 -0
  412. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/tool_search_tool.py +0 -0
  413. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/web_fetch_tool.py +0 -0
  414. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/web_search_tool.py +0 -0
  415. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/worktree_tools.py +0 -0
  416. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/write_tool.py +0 -0
  417. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/composer.py +0 -0
  418. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/errors.py +0 -0
  419. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/__init__.py +0 -0
  420. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/adapter.py +0 -0
  421. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/credentials.py +0 -0
  422. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/errors.py +0 -0
  423. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/manager.py +0 -0
  424. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/oauth.py +0 -0
  425. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/state.py +0 -0
  426. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/uri.py +0 -0
  427. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/provider.py +0 -0
  428. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/providers.py +0 -0
  429. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/registry.py +0 -0
  430. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/sandbox.py +0 -0
  431. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/scope.py +0 -0
  432. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/tools/stage_binding.py +0 -0
  433. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/workspace/__init__.py +0 -0
  434. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/workspace/stack.py +0 -0
  435. {geny_executor-2.0.4 → geny_executor-2.0.6}/src/geny_executor/workspace/types.py +0 -0
  436. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/__init__.py +0 -0
  437. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/_fixtures/fake_claude.py +0 -0
  438. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/_fixtures/fake_echo_cli.py +0 -0
  439. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/__init__.py +0 -0
  440. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/conftest.py +0 -0
  441. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/fixtures/__init__.py +0 -0
  442. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/fixtures/adapter/__init__.py +0 -0
  443. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/fixtures/adapter/adapter.py +0 -0
  444. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/test_c1_six_layer_retrieval.py +0 -0
  445. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/test_c2_execution_recording.py +0 -0
  446. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/test_c3_reflection_and_promotion.py +0 -0
  447. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/test_c4_rest_coverage.py +0 -0
  448. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/test_c5_embedding_migration.py +0 -0
  449. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/test_c6_session_resume.py +0 -0
  450. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/test_c7_adapter_parity.py +0 -0
  451. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/completeness/test_spec_loads.py +0 -0
  452. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/__init__.py +0 -0
  453. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/memory_provider_contract.py +0 -0
  454. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_embedding_clients.py +0 -0
  455. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_auto_vector.py +0 -0
  456. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_composite.py +0 -0
  457. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_composite_routing.py +0 -0
  458. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_curated_global.py +0 -0
  459. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_ephemeral.py +0 -0
  460. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_factory.py +0 -0
  461. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_file.py +0 -0
  462. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_file_layout.py +0 -0
  463. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_file_vector.py +0 -0
  464. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_sql.py +0 -0
  465. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_sql_dialect.py +0 -0
  466. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_sql_schema.py +0 -0
  467. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_memory_provider_sql_vector.py +0 -0
  468. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/contract/test_stage_uniformity.py +0 -0
  469. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/integration/test_cycle_ab_cross_import.py +0 -0
  470. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/integration/test_integration.py +0 -0
  471. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/__init__.py +0 -0
  472. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/conformance/__init__.py +0 -0
  473. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/conformance/harness.py +0 -0
  474. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/conformance/test_anthropic.py +0 -0
  475. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/conformance/test_google.py +0 -0
  476. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/conformance/test_openai.py +0 -0
  477. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/conformance/test_vllm.py +0 -0
  478. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/unit/__init__.py +0 -0
  479. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/unit/test_cli_runtime.py +0 -0
  480. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/llm_client/unit/test_credentials.py +0 -0
  481. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/__init__.py +0 -0
  482. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_adaptive_model_router.py +0 -0
  483. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_adaptive_thinking_budget.py +0 -0
  484. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_adhoc_providers.py +0 -0
  485. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_agent_tool.py +0 -0
  486. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_artifact_metadata.py +0 -0
  487. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_ask_user_question_tool.py +0 -0
  488. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_binary_classify_manifest.py +0 -0
  489. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_built_in_autoregister.py +0 -0
  490. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_builtin_capabilities.py +0 -0
  491. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_builtin_features.py +0 -0
  492. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_composite_set_hooks.py +0 -0
  493. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_cron_runner.py +0 -0
  494. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_cron_store.py +0 -0
  495. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_cron_tools.py +0 -0
  496. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_dev_tools.py +0 -0
  497. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_dynamic_persona_builder.py +0 -0
  498. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_errors_categories.py +0 -0
  499. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_evaluation_chain.py +0 -0
  500. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_fork_multi_provider.py +0 -0
  501. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_hierarchical_sidecars.py +0 -0
  502. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_hook_in_process.py +0 -0
  503. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_hook_runner.py +0 -0
  504. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_hooks_and_shared_keys.py +0 -0
  505. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_index_list_categories.py +0 -0
  506. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_index_render_vault_map.py +0 -0
  507. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_interaction_fields.py +0 -0
  508. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_introspection.py +0 -0
  509. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_llm_client_base.py +0 -0
  510. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_llm_client_capabilities.py +0 -0
  511. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_llm_client_registry.py +0 -0
  512. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_llm_client_request_types.py +0 -0
  513. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_llm_client_state.py +0 -0
  514. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_llm_summary_compactor.py +0 -0
  515. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_loop_agnostic_lock.py +0 -0
  516. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_manifest_provider_validation.py +0 -0
  517. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_manifest_v2.py +0 -0
  518. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_manifest_v3_migration.py +0 -0
  519. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_mcp_annotations_attach.py +0 -0
  520. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_mcp_credential_store.py +0 -0
  521. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_mcp_fsm.py +0 -0
  522. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_mcp_lifecycle.py +0 -0
  523. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_mcp_namespace.py +0 -0
  524. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_mcp_oauth.py +0 -0
  525. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_mcp_prompts_skills_bridge.py +0 -0
  526. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_mcp_resource_retriever.py +0 -0
  527. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_mcp_uri.py +0 -0
  528. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_mcp_wrapper_tools.py +0 -0
  529. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_memory_aware_retriever.py +0 -0
  530. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_memory_hooks_after_callbacks.py +0 -0
  531. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_memory_metadata_extension.py +0 -0
  532. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_multi_dim_budget_controller.py +0 -0
  533. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_multi_format_yield.py +0 -0
  534. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_multi_provider.py +0 -0
  535. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_multimodal.py +0 -0
  536. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_note_graph_queries.py +0 -0
  537. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_notebook_edit_tool.py +0 -0
  538. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_notes_load_pinned.py +0 -0
  539. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_operator_tools.py +0 -0
  540. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_ordered_emitter_chain.py +0 -0
  541. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_permission_matrix.py +0 -0
  542. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_permission_mode_promotions.py +0 -0
  543. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase1_foundation.py +0 -0
  544. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase1_pipeline.py +0 -0
  545. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase2_agent_loop.py +0 -0
  546. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase2_tools.py +0 -0
  547. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase3_context_memory.py +0 -0
  548. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase4_think_agent_evaluate.py +0 -0
  549. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase5_emit_presets_mcp.py +0 -0
  550. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase5_environment.py +0 -0
  551. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase6_history.py +0 -0
  552. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase6_integration.py +0 -0
  553. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase7_security.py +0 -0
  554. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase9a_preset_regen.py +0 -0
  555. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_phase9a_scaffolding.py +0 -0
  556. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_pipeline_attach_runtime.py +0 -0
  557. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_pipeline_from_manifest.py +0 -0
  558. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_pipeline_session_runtime.py +0 -0
  559. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_plan_mode_tools.py +0 -0
  560. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_progressive_disclosure.py +0 -0
  561. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_provider_driven_strategy.py +0 -0
  562. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_push_notification_tool.py +0 -0
  563. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_refresh_backlinks_extension.py +0 -0
  564. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_resolve_model_config.py +0 -0
  565. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_runtime_task_runner.py +0 -0
  566. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_s06_provider_selection.py +0 -0
  567. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_s13_file_backed_registry.py +0 -0
  568. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_s13_task_registry_output.py +0 -0
  569. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_s19_frequency_policy.py +0 -0
  570. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_s9b1_tool_review.py +0 -0
  571. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_s9b2_task_registry.py +0 -0
  572. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_s9b3_hitl.py +0 -0
  573. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_s9b4_summarize.py +0 -0
  574. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_s9b5_persist.py +0 -0
  575. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_s9c1_pipeline_resume.py +0 -0
  576. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_s9c2_restore_state.py +0 -0
  577. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_send_message_tool.py +0 -0
  578. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_settings_loader.py +0 -0
  579. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_1.py +0 -0
  580. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_2.py +0 -0
  581. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_3.py +0 -0
  582. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_4_bundled.py +0 -0
  583. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_5_fork.py +0 -0
  584. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_6_killer.py +0 -0
  585. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_7_watcher.py +0 -0
  586. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_skill_richer_schema.py +0 -0
  587. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_skill_tool.py +0 -0
  588. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_skills_foundation.py +0 -0
  589. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_slash_built_in_control.py +0 -0
  590. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_slash_built_in_introspection.py +0 -0
  591. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_slash_commands.py +0 -0
  592. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_slash_md_template.py +0 -0
  593. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_stage10_hook_wiring.py +0 -0
  594. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_stage10_partition_executor.py +0 -0
  595. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_stage10_permission_matrix.py +0 -0
  596. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_stage19_session_summary.py +0 -0
  597. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_state_mutation_wiring.py +0 -0
  598. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_state_shared_and_local.py +0 -0
  599. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_stm_append_event.py +0 -0
  600. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_streaming_tool_executor.py +0 -0
  601. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_structured_output_parser.py +0 -0
  602. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_structured_reflection.py +0 -0
  603. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_subagent_credential_propagation.py +0 -0
  604. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_subagent_descriptor.py +0 -0
  605. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_subagent_orchestrator_zero_arg.py +0 -0
  606. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_subagent_parallel.py +0 -0
  607. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_subagent_type_orchestrator.py +0 -0
  608. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_task_tools.py +0 -0
  609. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_todo_write_tool.py +0 -0
  610. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_tool_abc_uplift.py +0 -0
  611. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_tool_call_events.py +0 -0
  612. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_tool_errors.py +0 -0
  613. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_tool_lifecycle_hooks.py +0 -0
  614. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_tool_provider.py +0 -0
  615. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_tool_result_persistence.py +0 -0
  616. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_tool_search_tool.py +0 -0
  617. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_tool_stage_max_concurrency.py +0 -0
  618. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_web_fetch_tool.py +0 -0
  619. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_web_search_tool.py +0 -0
  620. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_workspace.py +0 -0
  621. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_workspace_propagation.py +0 -0
  622. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_workspace_tools_integration.py +0 -0
  623. {geny_executor-2.0.4 → geny_executor-2.0.6}/tests/unit/test_worktree_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: geny-executor
3
- Version: 2.0.4
3
+ Version: 2.0.6
4
4
  Summary: Harness-engineered agent pipeline library with 21-stage dual-abstraction architecture, built on the Anthropic API
5
5
  Project-URL: Homepage, https://github.com/CocoRoF/geny-executor
6
6
  Project-URL: Repository, https://github.com/CocoRoF/geny-executor
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "geny-executor"
7
- version = "2.0.4"
7
+ version = "2.0.6"
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"
@@ -95,7 +95,7 @@ from geny_executor.memory import (
95
95
  ProviderDrivenStrategy,
96
96
  )
97
97
 
98
- __version__ = "2.0.4"
98
+ __version__ = "2.0.6"
99
99
 
100
100
  __all__ = [
101
101
  # Core
@@ -97,16 +97,6 @@ def _creds_to_client_kwargs(provider: str, creds: ProviderCredentials) -> Dict[s
97
97
  kwargs[key] = extras[key]
98
98
  return kwargs
99
99
 
100
- if provider == "copilot_cli":
101
- extras = dict(creds.extras or {})
102
- kwargs = {}
103
- if creds.binary_path:
104
- kwargs["gh_binary_path"] = creds.binary_path
105
- for key in ("allow_tools", "cwd", "extra_args", "timeout_s"):
106
- if key in extras:
107
- kwargs[key] = extras[key]
108
- return kwargs
109
-
110
100
  # API providers (anthropic / openai / google)
111
101
  kwargs = {"api_key": creds.api_key}
112
102
  if creds.base_url is not None:
@@ -9,7 +9,6 @@ credentials via :class:`CredentialBundle` (built from
9
9
  from geny_executor.llm_client.anthropic import AnthropicClient
10
10
  from geny_executor.llm_client.base import BaseClient, ClientCapabilities
11
11
  from geny_executor.llm_client.claude_code import ClaudeCodeCLIClient
12
- from geny_executor.llm_client.copilot import CopilotCLIClient
13
12
  from geny_executor.llm_client.credentials import (
14
13
  ConfigError,
15
14
  CredentialBundle,
@@ -28,7 +27,6 @@ __all__ = [
28
27
  "ClientRegistry",
29
28
  "ConfigError",
30
29
  "ContentBlock",
31
- "CopilotCLIClient",
32
30
  "CredentialBundle",
33
31
  "ProviderCredentials",
34
32
  ]
@@ -1,8 +1,10 @@
1
1
  """Async subprocess primitives shared by CLI-backed LLM clients.
2
2
 
3
3
  This module is the *only* place where ``asyncio.create_subprocess_exec`` is
4
- called inside ``llm_client/``. Both ``ClaudeCodeCLIClient`` (Phase B) and
5
- ``CopilotCLIClient`` (Phase C) drive their work through these helpers.
4
+ called inside ``llm_client/``. ``ClaudeCodeCLIClient`` (Phase B) drives its
5
+ work through these helpers. (The Phase-C ``CopilotCLIClient`` was removed
6
+ in 2.0.6 — see the commit message for the structural-incompatibility
7
+ rationale.)
6
8
 
7
9
  Design rules
8
10
  ------------
@@ -74,15 +74,8 @@ def _claude_code_cli_factory() -> Type[BaseClient]:
74
74
  return ClaudeCodeCLIClient
75
75
 
76
76
 
77
- def _copilot_cli_factory() -> Type[BaseClient]:
78
- from geny_executor.llm_client.copilot import CopilotCLIClient
79
-
80
- return CopilotCLIClient
81
-
82
-
83
77
  ClientRegistry.register("anthropic", _anthropic_factory)
84
78
  ClientRegistry.register("openai", _openai_factory)
85
79
  ClientRegistry.register("google", _google_factory)
86
80
  ClientRegistry.register("vllm", _vllm_factory)
87
81
  ClientRegistry.register("claude_code_cli", _claude_code_cli_factory)
88
- ClientRegistry.register("copilot_cli", _copilot_cli_factory)
@@ -33,10 +33,7 @@ from geny_executor.llm_client.translators._cli import (
33
33
  assemble_response_from_stream_json,
34
34
  build_stream_json_stdin,
35
35
  claude_code_argv,
36
- compose_copilot_prompt,
37
- copilot_argv,
38
36
  parse_json_output_to_response,
39
- parse_plain_text_to_response,
40
37
  stream_json_line_to_canonical_event,
41
38
  thinking_to_effort,
42
39
  )
@@ -55,11 +52,8 @@ __all__ = [
55
52
  "canonical_tools_to_google",
56
53
  "canonical_tools_to_openai",
57
54
  "claude_code_argv",
58
- "compose_copilot_prompt",
59
- "copilot_argv",
60
55
  "normalize_stop_reason",
61
56
  "parse_json_output_to_response",
62
- "parse_plain_text_to_response",
63
57
  "split_tool_results",
64
58
  "split_tool_uses",
65
59
  "stream_json_line_to_canonical_event",
@@ -1,20 +1,22 @@
1
1
  """Canonical ↔ CLI translation helpers.
2
2
 
3
- Used by ``ClaudeCodeCLIClient`` (Phase B) and ``CopilotCLIClient`` (Phase C)
4
- to:
3
+ Used by ``ClaudeCodeCLIClient`` (Phase B) to:
5
4
 
6
5
  - Build vendor-specific argv lists from a canonical :class:`APIRequest`.
7
6
  - Assemble a canonical :class:`APIResponse` from CLI output.
8
7
  - Map streaming stream-json line types to canonical event dicts.
9
8
 
10
- Claude Code helpers landed in Phase B1; ``gh copilot`` helpers
11
- (``compose_copilot_prompt``, ``copilot_argv``, ``parse_plain_text_to_response``)
12
- land here in Phase C1.
9
+ The Phase-C ``gh copilot`` helpers (``compose_copilot_prompt``,
10
+ ``copilot_argv``, ``parse_plain_text_to_response``) were removed in
11
+ 2.0.6 along with the ``CopilotCLIClient`` itself — ``gh copilot``
12
+ does not support streaming, tools, or MCP, so it could not host the
13
+ pipeline's Stage-10 dispatch loop.
13
14
  """
14
15
 
15
16
  from __future__ import annotations
16
17
 
17
18
  import json
19
+ import os
18
20
  from typing import Any, AsyncIterator, Dict, List, Optional, Sequence
19
21
 
20
22
  from geny_executor.core.state import TokenUsage
@@ -83,8 +85,19 @@ def claude_code_argv(
83
85
 
84
86
  # Output / input formats: always stream-json for streaming requests,
85
87
  # else json so we can parse a single object.
88
+ #
89
+ # ``--verbose`` is required by Claude Code CLI ≥ 2.1.x whenever
90
+ # ``--print`` is combined with ``--output-format=stream-json``;
91
+ # without it the CLI exits 1 with:
92
+ #
93
+ # Error: When using --print, --output-format=stream-json
94
+ # requires --verbose
95
+ #
96
+ # 2.0.6 emits it automatically alongside the stream-json switch so
97
+ # hosts don't have to thread an opt-in flag through their settings.
86
98
  if request.stream:
87
99
  argv += [
100
+ "--verbose",
88
101
  "--input-format", "stream-json",
89
102
  "--output-format", "stream-json",
90
103
  "--include-partial-messages",
@@ -92,8 +105,21 @@ def claude_code_argv(
92
105
  else:
93
106
  argv += ["--output-format", "json"]
94
107
 
108
+ # ``--bare`` skips OAuth + keychain reads (per ``claude --help``:
109
+ # "Anthropic auth is strictly ANTHROPIC_API_KEY or apiKeyHelper via
110
+ # --settings (OAuth and keychain are never read)"). That's correct
111
+ # for the API-key auth path but **wrong** for the subscription
112
+ # OAuth path — passing ``--bare`` without an API key crashes every
113
+ # subscription user with "Not logged in · Please run /login". 2.0.6
114
+ # auto-strips ``--bare`` when no API key is reachable in the
115
+ # spawning process's environment, so the same ``bare_mode=True``
116
+ # default works for both auth paths transparently. Callers that
117
+ # explicitly want OAuth even with an API key present can still
118
+ # pass ``bare_mode=False``.
95
119
  if bare_mode:
96
- argv.append("--bare")
120
+ has_api_key = bool(os.environ.get("ANTHROPIC_API_KEY", "").strip())
121
+ if has_api_key:
122
+ argv.append("--bare")
97
123
 
98
124
  # Model: alias or pinned id.
99
125
  if request.model:
@@ -139,12 +165,39 @@ def claude_code_argv(
139
165
  if settings_path:
140
166
  argv += ["--settings", settings_path]
141
167
 
142
- # MCP config: accept dict (inline JSON), str path, or pre-serialized JSON.
143
- if mcp_config is not None:
144
- if isinstance(mcp_config, str):
145
- argv += ["--mcp-config", mcp_config]
168
+ # MCP config precedence:
169
+ # 1. ``request.mcp_config`` (per-request, set by host for
170
+ # session-scoped MCP wraps). Phase I: Geny synthesizes a
171
+ # per-session MCP config that bridges its tool registry to
172
+ # the CLI so the LLM can call host tools via MCP.
173
+ # 2. ``mcp_config`` constructor kwarg (legacy per-client static
174
+ # config from the LLM-backends settings card).
175
+ # Both flow to ``--mcp-config <json|path>``.
176
+ effective_mcp_config: Any = (
177
+ request.mcp_config if request.mcp_config is not None else mcp_config
178
+ )
179
+ has_host_mcp = bool(effective_mcp_config)
180
+ if has_host_mcp:
181
+ if isinstance(effective_mcp_config, str):
182
+ argv += ["--mcp-config", effective_mcp_config]
146
183
  else:
147
- argv += ["--mcp-config", json.dumps(mcp_config)]
184
+ argv += [
185
+ "--mcp-config",
186
+ json.dumps(effective_mcp_config, ensure_ascii=False),
187
+ ]
188
+ # ``--strict-mcp-config`` ignores any other MCP config sources
189
+ # (user-level / project-level) so the per-session bridge is
190
+ # the sole MCP surface the CLI sees. The CLI's *built-in* tool
191
+ # palette (``Bash`` / ``Read`` / ``Write`` / ``Edit`` / …)
192
+ # stays available alongside the MCP surface — earlier
193
+ # executor versions auto-emitted ``--tools ""`` here to
194
+ # disable it (a defensive measure against the LLM
195
+ # hallucinating against unknown built-ins), but in practice
196
+ # most hosts *want* both surfaces (e.g. a Sub-Worker writing
197
+ # files via ``Write`` while delegating to MCP-wrapped host
198
+ # tools). Hosts that prefer the old MCP-only behaviour can
199
+ # pass ``extra_args=("--tools", "")`` explicitly.
200
+ argv += ["--strict-mcp-config"]
148
201
 
149
202
  # JSON schema (structured output).
150
203
  if request.response_format:
@@ -426,6 +479,11 @@ def parse_json_output_to_response(stdout: bytes, *, model: str) -> APIResponse:
426
479
  if not isinstance(obj, dict):
427
480
  raise ValueError("Claude Code json output is not an object")
428
481
 
482
+ # ``tool_use`` blocks in the json output are intentionally dropped
483
+ # for the same reason as ``StreamJsonAccumulator.finalize`` — the
484
+ # CLI handles tool dispatch internally and host pipelines should
485
+ # see only the final assistant text. See ``finalize``'s docstring
486
+ # for the full rationale.
429
487
  blocks: List[ContentBlock] = []
430
488
  for block in obj.get("content", []) or []:
431
489
  if not isinstance(block, dict):
@@ -437,15 +495,6 @@ def parse_json_output_to_response(stdout: bytes, *, model: str) -> APIResponse:
437
495
  blocks.append(
438
496
  ContentBlock(type="thinking", thinking_text=block.get("text", ""))
439
497
  )
440
- elif btype == "tool_use":
441
- blocks.append(
442
- ContentBlock(
443
- type="tool_use",
444
- tool_use_id=block.get("id"),
445
- tool_name=block.get("name"),
446
- tool_input=block.get("input") or {},
447
- )
448
- )
449
498
 
450
499
  usage_in = obj.get("usage", {}) or {}
451
500
  usage = TokenUsage(
@@ -552,9 +601,39 @@ class StreamJsonAccumulator:
552
601
  return [{"type": "cli_unknown", "raw": line}]
553
602
 
554
603
  def finalize(self) -> APIResponse:
555
- """Build the canonical :class:`APIResponse` from accumulated state."""
604
+ """Build the canonical :class:`APIResponse` from accumulated state.
605
+
606
+ ``tool_use`` blocks observed during streaming are intentionally
607
+ **dropped** from the assembled response. Claude Code CLI 2.1.x
608
+ runs its agentic loop *internally* (LLM → tool → LLM → tool →
609
+ …); each intermediate turn arrives as its own ``"assistant"``
610
+ envelope and the accumulator collects every block from every
611
+ envelope into the shared buffers below. The CLI has already
612
+ dispatched those tool calls (via its own built-ins or via the
613
+ host's MCP bridge) and emitted the matching ``"user"``
614
+ ``tool_result`` envelopes in the same stream — so including the
615
+ ``tool_use`` blocks in the terminal :class:`APIResponse` would
616
+ push host pipelines (Geny's Stage 10, the canonical reference
617
+ consumer) into trying to re-dispatch tools they have no
618
+ registration for, producing instant ``ERROR (0 ms) — No
619
+ output`` ghost failures for every CLI tool call. Per the Phase
620
+ I design contract:
621
+
622
+ Stage 10 receives that assistant message, sees no
623
+ ``tool_use`` blocks (they were executed inside the CLI),
624
+ and naturally no-ops.
625
+
626
+ Hosts that *do* want the raw tool_use record can still recover
627
+ it from the per-line stream events the accumulator yields
628
+ through ``feed()`` (each ``tool_use`` block produces a
629
+ ``{"type": "tool_use", "id": ..., "name": ..., "input": ...}``
630
+ event).
631
+ """
556
632
  # Flush any unclosed tool — the message form often skips
557
- # ``content_block_stop`` entirely.
633
+ # ``content_block_stop`` entirely. We still call this so the
634
+ # accumulator's internal state is consistent for callers that
635
+ # rely on ``_tool_uses`` directly; only the *response* blocks
636
+ # below skip them.
558
637
  self._close_current_tool()
559
638
 
560
639
  blocks: List[ContentBlock] = []
@@ -564,15 +643,6 @@ class StreamJsonAccumulator:
564
643
  )
565
644
  if self._text_buf:
566
645
  blocks.append(ContentBlock(type="text", text="".join(self._text_buf)))
567
- for tu in self._tool_uses:
568
- blocks.append(
569
- ContentBlock(
570
- type="tool_use",
571
- tool_use_id=tu.get("id"),
572
- tool_name=tu.get("name"),
573
- tool_input=tu.get("input") or {},
574
- )
575
- )
576
646
 
577
647
  usage_in: Dict[str, Any] = (self._final_obj or {}).get("usage", {}) or {}
578
648
  usage = TokenUsage(
@@ -745,104 +815,9 @@ async def assemble_response_from_stream_json(
745
815
  return accum.finalize()
746
816
 
747
817
 
748
- # ---------------------------------------------------------------------------
749
- # Copilot CLI: prompt composition
750
- # ---------------------------------------------------------------------------
751
-
752
-
753
- def compose_copilot_prompt(system: Any, messages: List[Dict[str, Any]]) -> str:
754
- """Flatten a canonical (system + messages) into one ``-p`` argument.
755
-
756
- The Copilot CLI accepts a single prompt string. Conversation history
757
- is encoded as Markdown-style turns so the model can still see prior
758
- turns. The system prompt is prepended as a ``## System`` section
759
- when present.
760
- """
761
- parts: List[str] = []
762
- if system:
763
- if isinstance(system, str):
764
- sys_text = system
765
- elif isinstance(system, list):
766
- sys_text = "\n".join(
767
- str(b.get("text", "")) for b in system if isinstance(b, dict) and b.get("type") == "text"
768
- )
769
- else:
770
- sys_text = str(system)
771
- if sys_text:
772
- parts.append(f"## System\n{sys_text}")
773
-
774
- for m in messages:
775
- role = str(m.get("role", "user")).capitalize()
776
- content = m.get("content", "")
777
- if isinstance(content, list):
778
- chunks: List[str] = []
779
- for block in content:
780
- if not isinstance(block, dict):
781
- continue
782
- btype = block.get("type", "")
783
- if btype == "text":
784
- chunks.append(str(block.get("text", "")))
785
- elif btype == "tool_result":
786
- chunks.append(f"[tool_result]\n{block.get('content', '')}")
787
- content_text = "\n".join(chunks)
788
- else:
789
- content_text = str(content)
790
- if content_text:
791
- parts.append(f"## {role}\n{content_text}")
792
-
793
- return "\n\n".join(parts)
794
-
795
-
796
- # ---------------------------------------------------------------------------
797
- # Copilot CLI: argv builder
798
- # ---------------------------------------------------------------------------
799
-
800
-
801
- def copilot_argv(
802
- *,
803
- allow_tools: Sequence[str] = (),
804
- extra_args: Sequence[str] = (),
805
- ) -> List[str]:
806
- """Build the argv list for ``gh copilot`` (excluding the binary).
807
-
808
- The caller is expected to invoke the result as ``gh copilot ...`` —
809
- i.e. ``argv[0]`` is *not* prepended here. ``-p <prompt>`` is appended
810
- by the client after computing the prompt via
811
- :func:`compose_copilot_prompt`.
812
-
813
- Only the flags the CLI actually accepts are emitted:
814
- - ``-p``: single prompt (added by the client, not here)
815
- - ``--allow-tool '<scope>'``: repeated, one flag per scope
816
- - any ``extra_args`` for escape-hatch use.
817
- """
818
- argv: List[str] = ["copilot"]
819
- for scope in allow_tools:
820
- if scope:
821
- argv += ["--allow-tool", str(scope)]
822
- if extra_args:
823
- argv += list(extra_args)
824
- return argv
825
-
826
-
827
- # ---------------------------------------------------------------------------
828
- # Copilot CLI: stdout → APIResponse
829
- # ---------------------------------------------------------------------------
830
-
831
-
832
- def parse_plain_text_to_response(text: str, *, model: str = "default") -> APIResponse:
833
- """Wrap plain stdout text into a canonical :class:`APIResponse`.
834
-
835
- Copilot CLI does not return JSON in print mode, so we cannot recover
836
- structured usage / cost. The response carries the text in a single
837
- block, ``stop_reason="end_turn"``, and an empty TokenUsage with
838
- ``supports_token_usage=False`` advertised at the client level.
839
- """
840
- content_text = text.strip("\n")
841
- return APIResponse(
842
- content=[ContentBlock(type="text", text=content_text)],
843
- stop_reason="end_turn",
844
- usage=TokenUsage(),
845
- model=model,
846
- message_id="",
847
- raw=text,
848
- )
818
+ # Copilot CLI helpers (compose_copilot_prompt / copilot_argv /
819
+ # parse_plain_text_to_response) were removed in 2.0.6. ``gh copilot``
820
+ # is one-shot text-in / text-out with no streaming, no tool round-trip,
821
+ # and no MCP support, so it could not host the pipeline's Stage-10
822
+ # dispatch loop. The ``CopilotCLIClient`` and its registry entry are
823
+ # also gone see the matching commit message.
@@ -42,6 +42,18 @@ class APIRequest:
42
42
  #: {"session_id": "...", "resume": bool}
43
43
  session_hint: Optional[Dict[str, Any]] = None
44
44
 
45
+ #: Per-request MCP server configuration. CLI-based backends
46
+ #: (claude_code_cli) serialize this to ``--mcp-config <json>``;
47
+ #: SDK-based backends ignore it. Hosts use this to surface their
48
+ #: tool registry to the CLI's LLM without going through the
49
+ #: cumbersome per-client static ``mcp_config_path``. Shape::
50
+ #:
51
+ #: {"mcpServers": {"<name>": {"type": "stdio",
52
+ #: "command": "...",
53
+ #: "args": [...],
54
+ #: "env": {...}}}}
55
+ mcp_config: Optional[Dict[str, Any]] = None
56
+
45
57
  metadata: Optional[Dict[str, Any]] = None
46
58
 
47
59
 
@@ -0,0 +1,2 @@
1
+ """Test fixtures: fake CLI binaries used by _cli_runtime / claude_code
2
+ suites. Each binary is a standalone Python script with a shebang."""
@@ -110,16 +110,21 @@ class TestClaudeCodeCLIConformance(ConformanceTestSuite):
110
110
  assert resp.usage.duration_ms is not None
111
111
 
112
112
  @pytest.mark.asyncio
113
- async def test_tool_use_round_trip(self) -> None:
113
+ async def test_tool_use_blocks_dropped(self) -> None:
114
+ """The CLI handles tool dispatch internally — ``tool_use``
115
+ blocks observed in its output are intentionally dropped from
116
+ the assembled response so host pipelines (Geny's Stage 10,
117
+ the canonical reference consumer) don't try to re-dispatch
118
+ them and ghost-error. ``stop_reason`` is preserved so callers
119
+ can still see the CLI ended in a tool turn. See
120
+ ``StreamJsonAccumulator.finalize`` for the full rationale."""
114
121
  client = self.make_client(scenario="ok_tool_use")
115
122
  resp = await client.create_message(
116
123
  model_config=ModelConfig(model="sonnet"),
117
124
  messages=[{"role": "user", "content": "read /tmp/x"}],
118
125
  )
119
- assert resp.has_tool_calls is True
120
- tu = resp.tool_calls[0]
121
- assert tu.tool_name == "Read"
122
- assert tu.tool_input == {"path": "/tmp/x"}
126
+ assert resp.tool_calls == []
127
+ assert resp.stop_reason == "tool_use"
123
128
 
124
129
  @pytest.mark.asyncio
125
130
  async def test_thinking_blocks_returned(self) -> None:
@@ -151,13 +151,15 @@ async def test_send_oneshot_ok_text() -> None:
151
151
 
152
152
 
153
153
  @pytest.mark.asyncio
154
- async def test_send_oneshot_tool_use() -> None:
154
+ async def test_send_oneshot_tool_use_blocks_dropped() -> None:
155
+ """``tool_use`` blocks are dropped from the response — the CLI
156
+ dispatched them internally. ``stop_reason`` is preserved
157
+ verbatim so callers can still tell the CLI ended in a tool turn
158
+ (e.g. CLI hit max-iter mid-loop with pending tool calls). See
159
+ ``StreamJsonAccumulator.finalize`` for the full rationale."""
155
160
  c = _client(scenario="ok_tool_use")
156
161
  resp = await c._send(_make_request())
157
- assert resp.has_tool_calls is True
158
- tools = resp.tool_calls
159
- assert tools[0].tool_name == "Read"
160
- assert tools[0].tool_input == {"path": "/tmp/x"}
162
+ assert resp.tool_calls == []
161
163
  assert resp.stop_reason == "tool_use"
162
164
 
163
165
 
@@ -323,7 +325,11 @@ async def test_send_streaming_message_form_text() -> None:
323
325
 
324
326
 
325
327
  @pytest.mark.asyncio
326
- async def test_argv_carries_bare_and_workspace() -> None:
328
+ async def test_argv_carries_bare_and_workspace(monkeypatch) -> None:
329
+ # ``--bare`` is auto-stripped on the OAuth path (no
330
+ # ANTHROPIC_API_KEY in env). Pin the API-key env so this argv
331
+ # surface test exercises the API-key path.
332
+ monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test")
327
333
  c = _client(scenario="echo_argv")
328
334
  resp = await c._send(_make_request(model="opus", system="rule X"))
329
335
  import json