geny-executor 2.0.5__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.5 → geny_executor-2.0.6}/PKG-INFO +1 -1
  2. {geny_executor-2.0.5 → geny_executor-2.0.6}/pyproject.toml +1 -1
  3. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/__init__.py +1 -1
  4. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/pipeline.py +0 -10
  5. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/__init__.py +0 -2
  6. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/_cli_runtime.py +4 -2
  7. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/registry.py +0 -7
  8. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/translators/__init__.py +0 -6
  9. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/translators/_cli.py +85 -138
  10. geny_executor-2.0.6/tests/_fixtures/__init__.py +2 -0
  11. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/test_claude_code_cli.py +10 -5
  12. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/unit/test_claude_code.py +12 -6
  13. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/unit/test_translators_cli_claude_code.py +61 -32
  14. geny_executor-2.0.5/src/geny_executor/llm_client/copilot.py +0 -185
  15. geny_executor-2.0.5/tests/_fixtures/__init__.py +0 -2
  16. geny_executor-2.0.5/tests/_fixtures/fake_gh.py +0 -86
  17. geny_executor-2.0.5/tests/llm_client/conformance/test_copilot_cli.py +0 -111
  18. geny_executor-2.0.5/tests/llm_client/unit/test_copilot.py +0 -286
  19. {geny_executor-2.0.5 → geny_executor-2.0.6}/.gitignore +0 -0
  20. {geny_executor-2.0.5 → geny_executor-2.0.6}/LICENSE +0 -0
  21. {geny_executor-2.0.5 → geny_executor-2.0.6}/README.md +0 -0
  22. {geny_executor-2.0.5 → geny_executor-2.0.6}/README_ko.md +0 -0
  23. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/channels/__init__.py +0 -0
  24. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/channels/send_message_channel.py +0 -0
  25. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/channels/user_file_channel.py +0 -0
  26. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/__init__.py +0 -0
  27. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/artifact.py +0 -0
  28. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/builder.py +0 -0
  29. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/config.py +0 -0
  30. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/diff.py +0 -0
  31. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/environment.py +0 -0
  32. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/errors.py +0 -0
  33. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/introspection.py +0 -0
  34. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/mutation.py +0 -0
  35. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/presets.py +0 -0
  36. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/result.py +0 -0
  37. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/schema.py +0 -0
  38. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/shared_keys.py +0 -0
  39. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/slot.py +0 -0
  40. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/snapshot.py +0 -0
  41. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/stage.py +0 -0
  42. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/state.py +0 -0
  43. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/__init__.py +0 -0
  44. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/runner.py +0 -0
  45. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/store_abc.py +0 -0
  46. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/store_impl/__init__.py +0 -0
  47. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/store_impl/file_backed.py +0 -0
  48. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/store_impl/in_memory.py +0 -0
  49. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/types.py +0 -0
  50. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/events/__init__.py +0 -0
  51. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/events/bus.py +0 -0
  52. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/events/types.py +0 -0
  53. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/__init__.py +0 -0
  54. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/ab_test.py +0 -0
  55. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/cost.py +0 -0
  56. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/models.py +0 -0
  57. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/monitor.py +0 -0
  58. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/replay.py +0 -0
  59. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/service.py +0 -0
  60. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/hooks/__init__.py +0 -0
  61. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/hooks/config.py +0 -0
  62. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/hooks/events.py +0 -0
  63. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/hooks/runner.py +0 -0
  64. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/anthropic.py +0 -0
  65. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/base.py +0 -0
  66. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/claude_code.py +0 -0
  67. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/credentials.py +0 -0
  68. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/google.py +0 -0
  69. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/openai.py +0 -0
  70. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/translators/_canonical.py +0 -0
  71. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/types.py +0 -0
  72. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/vllm.py +0 -0
  73. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/__init__.py +0 -0
  74. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/_locks.py +0 -0
  75. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/_progressive.py +0 -0
  76. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/composite/__init__.py +0 -0
  77. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/composite/handles.py +0 -0
  78. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/composite/provider.py +0 -0
  79. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/composite/routing.py +0 -0
  80. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/composite/snapshot.py +0 -0
  81. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/__init__.py +0 -0
  82. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/client.py +0 -0
  83. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/google.py +0 -0
  84. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/local.py +0 -0
  85. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/openai.py +0 -0
  86. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/registry.py +0 -0
  87. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/voyage.py +0 -0
  88. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/factory.py +0 -0
  89. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/presets.py +0 -0
  90. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/provider.py +0 -0
  91. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/__init__.py +0 -0
  92. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/ephemeral.py +0 -0
  93. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/__init__.py +0 -0
  94. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/config.py +0 -0
  95. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/frontmatter.py +0 -0
  96. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/index_store.py +0 -0
  97. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/layout.py +0 -0
  98. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/ltm_store.py +0 -0
  99. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/notes_store.py +0 -0
  100. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/provider.py +0 -0
  101. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/snapshot.py +0 -0
  102. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/stm_store.py +0 -0
  103. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/timezone.py +0 -0
  104. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/vector_store.py +0 -0
  105. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/__init__.py +0 -0
  106. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/config.py +0 -0
  107. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/connection.py +0 -0
  108. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/index_store.py +0 -0
  109. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/ltm_store.py +0 -0
  110. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/notes_store.py +0 -0
  111. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/provider.py +0 -0
  112. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/schema.py +0 -0
  113. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/snapshot.py +0 -0
  114. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/stm_store.py +0 -0
  115. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/vector_store.py +0 -0
  116. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/retriever.py +0 -0
  117. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/strategy.py +0 -0
  118. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/notifications/__init__.py +0 -0
  119. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/notifications/registry.py +0 -0
  120. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/permission/__init__.py +0 -0
  121. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/permission/loader.py +0 -0
  122. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/permission/matrix.py +0 -0
  123. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/permission/types.py +0 -0
  124. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/py.typed +0 -0
  125. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/runtime/__init__.py +0 -0
  126. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/runtime/task_executors.py +0 -0
  127. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/runtime/task_runner.py +0 -0
  128. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/security/__init__.py +0 -0
  129. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/security/import_validator.py +0 -0
  130. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/security/script_sandbox.py +0 -0
  131. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/session/__init__.py +0 -0
  132. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/session/freshness.py +0 -0
  133. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/session/manager.py +0 -0
  134. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/session/persistence.py +0 -0
  135. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/session/session.py +0 -0
  136. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/settings/__init__.py +0 -0
  137. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/settings/loader.py +0 -0
  138. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/settings/section_registry.py +0 -0
  139. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/__init__.py +0 -0
  140. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/batch/SKILL.md +0 -0
  141. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/debug/SKILL.md +0 -0
  142. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/loop/SKILL.md +0 -0
  143. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/lorem-ipsum/SKILL.md +0 -0
  144. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/simplify/SKILL.md +0 -0
  145. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/skillify/SKILL.md +0 -0
  146. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/stuck/SKILL.md +0 -0
  147. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/verify/SKILL.md +0 -0
  148. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled_skills.py +0 -0
  149. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/fork.py +0 -0
  150. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/frontmatter.py +0 -0
  151. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/loader.py +0 -0
  152. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/mcp_bridge.py +0 -0
  153. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/path_match.py +0 -0
  154. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/registry.py +0 -0
  155. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/shell_blocks.py +0 -0
  156. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/skill_tool.py +0 -0
  157. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/types.py +0 -0
  158. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/watcher.py +0 -0
  159. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/__init__.py +0 -0
  160. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/__init__.py +0 -0
  161. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/_helpers.py +0 -0
  162. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/cancel.py +0 -0
  163. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/clear.py +0 -0
  164. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/compact.py +0 -0
  165. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/config.py +0 -0
  166. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/context.py +0 -0
  167. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/cost.py +0 -0
  168. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/help.py +0 -0
  169. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/memory.py +0 -0
  170. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/model.py +0 -0
  171. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/preset_info.py +0 -0
  172. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/status.py +0 -0
  173. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/tasks.py +0 -0
  174. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/md_template.py +0 -0
  175. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/parser.py +0 -0
  176. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/registry.py +0 -0
  177. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/types.py +0 -0
  178. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/__init__.py +0 -0
  179. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/__init__.py +0 -0
  180. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/__init__.py +0 -0
  181. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/default/__init__.py +0 -0
  182. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/default/normalizers.py +0 -0
  183. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/default/stage.py +0 -0
  184. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/default/validators.py +0 -0
  185. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/interface.py +0 -0
  186. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/normalizers.py +0 -0
  187. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/stage.py +0 -0
  188. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/types.py +0 -0
  189. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/validators.py +0 -0
  190. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/__init__.py +0 -0
  191. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/__init__.py +0 -0
  192. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/__init__.py +0 -0
  193. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/compactors.py +0 -0
  194. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/retrievers.py +0 -0
  195. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/stage.py +0 -0
  196. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/strategies.py +0 -0
  197. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/compactors.py +0 -0
  198. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/interface.py +0 -0
  199. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/retrievers.py +0 -0
  200. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/stage.py +0 -0
  201. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/strategies.py +0 -0
  202. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/types.py +0 -0
  203. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/__init__.py +0 -0
  204. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/artifact/__init__.py +0 -0
  205. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/artifact/default/__init__.py +0 -0
  206. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/artifact/default/builders.py +0 -0
  207. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/artifact/default/stage.py +0 -0
  208. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/builders.py +0 -0
  209. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/interface.py +0 -0
  210. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/persona/__init__.py +0 -0
  211. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/persona/builder.py +0 -0
  212. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/persona/provider.py +0 -0
  213. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/stage.py +0 -0
  214. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/__init__.py +0 -0
  215. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/artifact/__init__.py +0 -0
  216. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/artifact/default/__init__.py +0 -0
  217. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/artifact/default/guards.py +0 -0
  218. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/artifact/default/stage.py +0 -0
  219. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/guards.py +0 -0
  220. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/interface.py +0 -0
  221. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/stage.py +0 -0
  222. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/types.py +0 -0
  223. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/__init__.py +0 -0
  224. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/artifact/__init__.py +0 -0
  225. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/artifact/default/__init__.py +0 -0
  226. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/artifact/default/stage.py +0 -0
  227. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/artifact/default/strategies.py +0 -0
  228. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/interface.py +0 -0
  229. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/stage.py +0 -0
  230. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/strategies.py +0 -0
  231. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/__init__.py +0 -0
  232. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/_translate.py +0 -0
  233. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/__init__.py +0 -0
  234. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/__init__.py +0 -0
  235. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/providers.py +0 -0
  236. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/retry.py +0 -0
  237. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/router.py +0 -0
  238. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/stage.py +0 -0
  239. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/google/__init__.py +0 -0
  240. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/google/providers.py +0 -0
  241. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/openai/__init__.py +0 -0
  242. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/openai/providers.py +0 -0
  243. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/interface.py +0 -0
  244. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/providers.py +0 -0
  245. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/retry.py +0 -0
  246. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/stage.py +0 -0
  247. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/types.py +0 -0
  248. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/__init__.py +0 -0
  249. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/__init__.py +0 -0
  250. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/default/__init__.py +0 -0
  251. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/default/pricing.py +0 -0
  252. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/default/stage.py +0 -0
  253. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/default/trackers.py +0 -0
  254. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/interface.py +0 -0
  255. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/pricing.py +0 -0
  256. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/stage.py +0 -0
  257. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/trackers.py +0 -0
  258. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/__init__.py +0 -0
  259. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/artifact/default/__init__.py +0 -0
  260. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/artifact/default/budget.py +0 -0
  261. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/artifact/default/processors.py +0 -0
  262. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/artifact/default/stage.py +0 -0
  263. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/interface.py +0 -0
  264. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/processors.py +0 -0
  265. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/stage.py +0 -0
  266. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/types.py +0 -0
  267. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/__init__.py +0 -0
  268. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/artifact/default/__init__.py +0 -0
  269. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/artifact/default/parsers.py +0 -0
  270. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/artifact/default/signals.py +0 -0
  271. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/artifact/default/stage.py +0 -0
  272. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/interface.py +0 -0
  273. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/parsers.py +0 -0
  274. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/signals.py +0 -0
  275. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/stage.py +0 -0
  276. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/types.py +0 -0
  277. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/__init__.py +0 -0
  278. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/__init__.py +0 -0
  279. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/default/__init__.py +0 -0
  280. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/default/executors.py +0 -0
  281. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/default/routers.py +0 -0
  282. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/default/stage.py +0 -0
  283. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/executors.py +0 -0
  284. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/interface.py +0 -0
  285. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/persistence.py +0 -0
  286. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/routers.py +0 -0
  287. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/stage.py +0 -0
  288. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/state_mutation.py +0 -0
  289. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/streaming.py +0 -0
  290. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/__init__.py +0 -0
  291. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/artifact/__init__.py +0 -0
  292. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/artifact/default/__init__.py +0 -0
  293. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/artifact/default/reviewers.py +0 -0
  294. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/artifact/default/stage.py +0 -0
  295. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/interface.py +0 -0
  296. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/__init__.py +0 -0
  297. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/artifact/__init__.py +0 -0
  298. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/artifact/default/__init__.py +0 -0
  299. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/artifact/default/orchestrators.py +0 -0
  300. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/artifact/default/stage.py +0 -0
  301. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/interface.py +0 -0
  302. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/orchestrators.py +0 -0
  303. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/stage.py +0 -0
  304. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/subagent_type.py +0 -0
  305. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/types.py +0 -0
  306. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/__init__.py +0 -0
  307. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/__init__.py +0 -0
  308. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/__init__.py +0 -0
  309. {geny_executor-2.0.5 → 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.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/policies.py +0 -0
  311. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/registry.py +0 -0
  312. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/stage.py +0 -0
  313. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/interface.py +0 -0
  314. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/types.py +0 -0
  315. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/__init__.py +0 -0
  316. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/__init__.py +0 -0
  317. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/__init__.py +0 -0
  318. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/strategy.py +0 -0
  319. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/default/__init__.py +0 -0
  320. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/default/stage.py +0 -0
  321. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/default/strategies.py +0 -0
  322. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/interface.py +0 -0
  323. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/stage.py +0 -0
  324. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/strategies.py +0 -0
  325. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/types.py +0 -0
  326. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/__init__.py +0 -0
  327. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/__init__.py +0 -0
  328. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/default/__init__.py +0 -0
  329. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/default/requesters.py +0 -0
  330. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/default/stage.py +0 -0
  331. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/default/timeouts.py +0 -0
  332. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/interface.py +0 -0
  333. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/types.py +0 -0
  334. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/__init__.py +0 -0
  335. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/artifact/__init__.py +0 -0
  336. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/artifact/default/__init__.py +0 -0
  337. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/artifact/default/controllers.py +0 -0
  338. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/artifact/default/stage.py +0 -0
  339. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/controllers.py +0 -0
  340. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/interface.py +0 -0
  341. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/stage.py +0 -0
  342. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/__init__.py +0 -0
  343. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/artifact/__init__.py +0 -0
  344. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/artifact/default/__init__.py +0 -0
  345. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/artifact/default/emitters.py +0 -0
  346. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/artifact/default/stage.py +0 -0
  347. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/emitters.py +0 -0
  348. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/interface.py +0 -0
  349. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/stage.py +0 -0
  350. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/types.py +0 -0
  351. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/__init__.py +0 -0
  352. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/_dehydrate.py +0 -0
  353. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/__init__.py +0 -0
  354. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/default/__init__.py +0 -0
  355. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/default/persistence.py +0 -0
  356. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/default/stage.py +0 -0
  357. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/default/strategies.py +0 -0
  358. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/insight.py +0 -0
  359. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/interface.py +0 -0
  360. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/persistence.py +0 -0
  361. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/stage.py +0 -0
  362. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/strategies.py +0 -0
  363. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/__init__.py +0 -0
  364. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/__init__.py +0 -0
  365. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/default/__init__.py +0 -0
  366. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/default/importance.py +0 -0
  367. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/default/stage.py +0 -0
  368. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/default/summarizers.py +0 -0
  369. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/frequency_policy.py +0 -0
  370. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/interface.py +0 -0
  371. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/types.py +0 -0
  372. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/__init__.py +0 -0
  373. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/__init__.py +0 -0
  374. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/default/__init__.py +0 -0
  375. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/default/frequencies.py +0 -0
  376. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/default/persisters.py +0 -0
  377. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/default/stage.py +0 -0
  378. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/interface.py +0 -0
  379. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/restore.py +0 -0
  380. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/types.py +0 -0
  381. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/__init__.py +0 -0
  382. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/__init__.py +0 -0
  383. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/default/__init__.py +0 -0
  384. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/default/formatters.py +0 -0
  385. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/default/multi_format.py +0 -0
  386. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/default/stage.py +0 -0
  387. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/formatters.py +0 -0
  388. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/interface.py +0 -0
  389. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/stage.py +0 -0
  390. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/__init__.py +0 -0
  391. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/adhoc.py +0 -0
  392. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/base.py +0 -0
  393. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/__init__.py +0 -0
  394. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/_path_guard.py +0 -0
  395. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/agent_tool.py +0 -0
  396. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/ask_user_question_tool.py +0 -0
  397. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/bash_tool.py +0 -0
  398. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/cron_tools.py +0 -0
  399. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/dev_tools.py +0 -0
  400. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/edit_tool.py +0 -0
  401. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/glob_tool.py +0 -0
  402. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/grep_tool.py +0 -0
  403. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/mcp_wrapper_tools.py +0 -0
  404. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/notebook_edit_tool.py +0 -0
  405. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/operator_tools.py +0 -0
  406. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/plan_mode_tools.py +0 -0
  407. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/push_notification_tool.py +0 -0
  408. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/read_tool.py +0 -0
  409. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/send_message_tool.py +0 -0
  410. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/task_tools.py +0 -0
  411. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/todo_write_tool.py +0 -0
  412. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/tool_search_tool.py +0 -0
  413. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/web_fetch_tool.py +0 -0
  414. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/web_search_tool.py +0 -0
  415. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/worktree_tools.py +0 -0
  416. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/write_tool.py +0 -0
  417. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/composer.py +0 -0
  418. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/errors.py +0 -0
  419. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/__init__.py +0 -0
  420. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/adapter.py +0 -0
  421. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/credentials.py +0 -0
  422. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/errors.py +0 -0
  423. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/manager.py +0 -0
  424. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/oauth.py +0 -0
  425. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/state.py +0 -0
  426. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/uri.py +0 -0
  427. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/provider.py +0 -0
  428. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/providers.py +0 -0
  429. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/registry.py +0 -0
  430. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/sandbox.py +0 -0
  431. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/scope.py +0 -0
  432. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/stage_binding.py +0 -0
  433. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/workspace/__init__.py +0 -0
  434. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/workspace/stack.py +0 -0
  435. {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/workspace/types.py +0 -0
  436. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/__init__.py +0 -0
  437. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/_fixtures/fake_claude.py +0 -0
  438. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/_fixtures/fake_echo_cli.py +0 -0
  439. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/__init__.py +0 -0
  440. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/conftest.py +0 -0
  441. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/fixtures/__init__.py +0 -0
  442. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/fixtures/adapter/__init__.py +0 -0
  443. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/fixtures/adapter/adapter.py +0 -0
  444. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c1_six_layer_retrieval.py +0 -0
  445. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c2_execution_recording.py +0 -0
  446. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c3_reflection_and_promotion.py +0 -0
  447. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c4_rest_coverage.py +0 -0
  448. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c5_embedding_migration.py +0 -0
  449. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c6_session_resume.py +0 -0
  450. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c7_adapter_parity.py +0 -0
  451. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_spec_loads.py +0 -0
  452. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/__init__.py +0 -0
  453. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/memory_provider_contract.py +0 -0
  454. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_embedding_clients.py +0 -0
  455. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_auto_vector.py +0 -0
  456. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_composite.py +0 -0
  457. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_composite_routing.py +0 -0
  458. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_curated_global.py +0 -0
  459. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_ephemeral.py +0 -0
  460. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_factory.py +0 -0
  461. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_file.py +0 -0
  462. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_file_layout.py +0 -0
  463. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_file_vector.py +0 -0
  464. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_sql.py +0 -0
  465. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_sql_dialect.py +0 -0
  466. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_sql_schema.py +0 -0
  467. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_sql_vector.py +0 -0
  468. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_stage_uniformity.py +0 -0
  469. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/integration/test_cycle_ab_cross_import.py +0 -0
  470. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/integration/test_integration.py +0 -0
  471. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/__init__.py +0 -0
  472. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/__init__.py +0 -0
  473. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/harness.py +0 -0
  474. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/test_anthropic.py +0 -0
  475. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/test_google.py +0 -0
  476. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/test_openai.py +0 -0
  477. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/test_vllm.py +0 -0
  478. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/unit/__init__.py +0 -0
  479. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/unit/test_cli_runtime.py +0 -0
  480. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/unit/test_credentials.py +0 -0
  481. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/__init__.py +0 -0
  482. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_adaptive_model_router.py +0 -0
  483. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_adaptive_thinking_budget.py +0 -0
  484. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_adhoc_providers.py +0 -0
  485. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_agent_tool.py +0 -0
  486. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_artifact_metadata.py +0 -0
  487. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_ask_user_question_tool.py +0 -0
  488. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_binary_classify_manifest.py +0 -0
  489. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_built_in_autoregister.py +0 -0
  490. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_builtin_capabilities.py +0 -0
  491. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_builtin_features.py +0 -0
  492. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_composite_set_hooks.py +0 -0
  493. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_cron_runner.py +0 -0
  494. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_cron_store.py +0 -0
  495. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_cron_tools.py +0 -0
  496. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_dev_tools.py +0 -0
  497. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_dynamic_persona_builder.py +0 -0
  498. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_errors_categories.py +0 -0
  499. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_evaluation_chain.py +0 -0
  500. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_fork_multi_provider.py +0 -0
  501. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_hierarchical_sidecars.py +0 -0
  502. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_hook_in_process.py +0 -0
  503. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_hook_runner.py +0 -0
  504. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_hooks_and_shared_keys.py +0 -0
  505. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_index_list_categories.py +0 -0
  506. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_index_render_vault_map.py +0 -0
  507. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_interaction_fields.py +0 -0
  508. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_introspection.py +0 -0
  509. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_llm_client_base.py +0 -0
  510. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_llm_client_capabilities.py +0 -0
  511. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_llm_client_registry.py +0 -0
  512. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_llm_client_request_types.py +0 -0
  513. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_llm_client_state.py +0 -0
  514. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_llm_summary_compactor.py +0 -0
  515. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_loop_agnostic_lock.py +0 -0
  516. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_manifest_provider_validation.py +0 -0
  517. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_manifest_v2.py +0 -0
  518. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_manifest_v3_migration.py +0 -0
  519. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_annotations_attach.py +0 -0
  520. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_credential_store.py +0 -0
  521. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_fsm.py +0 -0
  522. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_lifecycle.py +0 -0
  523. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_namespace.py +0 -0
  524. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_oauth.py +0 -0
  525. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_prompts_skills_bridge.py +0 -0
  526. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_resource_retriever.py +0 -0
  527. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_uri.py +0 -0
  528. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_wrapper_tools.py +0 -0
  529. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_memory_aware_retriever.py +0 -0
  530. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_memory_hooks_after_callbacks.py +0 -0
  531. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_memory_metadata_extension.py +0 -0
  532. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_multi_dim_budget_controller.py +0 -0
  533. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_multi_format_yield.py +0 -0
  534. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_multi_provider.py +0 -0
  535. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_multimodal.py +0 -0
  536. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_note_graph_queries.py +0 -0
  537. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_notebook_edit_tool.py +0 -0
  538. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_notes_load_pinned.py +0 -0
  539. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_operator_tools.py +0 -0
  540. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_ordered_emitter_chain.py +0 -0
  541. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_permission_matrix.py +0 -0
  542. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_permission_mode_promotions.py +0 -0
  543. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase1_foundation.py +0 -0
  544. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase1_pipeline.py +0 -0
  545. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase2_agent_loop.py +0 -0
  546. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase2_tools.py +0 -0
  547. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase3_context_memory.py +0 -0
  548. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase4_think_agent_evaluate.py +0 -0
  549. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase5_emit_presets_mcp.py +0 -0
  550. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase5_environment.py +0 -0
  551. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase6_history.py +0 -0
  552. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase6_integration.py +0 -0
  553. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase7_security.py +0 -0
  554. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase9a_preset_regen.py +0 -0
  555. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase9a_scaffolding.py +0 -0
  556. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_pipeline_attach_runtime.py +0 -0
  557. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_pipeline_from_manifest.py +0 -0
  558. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_pipeline_session_runtime.py +0 -0
  559. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_plan_mode_tools.py +0 -0
  560. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_progressive_disclosure.py +0 -0
  561. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_provider_driven_strategy.py +0 -0
  562. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_push_notification_tool.py +0 -0
  563. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_refresh_backlinks_extension.py +0 -0
  564. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_resolve_model_config.py +0 -0
  565. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_runtime_task_runner.py +0 -0
  566. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s06_provider_selection.py +0 -0
  567. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s13_file_backed_registry.py +0 -0
  568. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s13_task_registry_output.py +0 -0
  569. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s19_frequency_policy.py +0 -0
  570. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9b1_tool_review.py +0 -0
  571. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9b2_task_registry.py +0 -0
  572. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9b3_hitl.py +0 -0
  573. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9b4_summarize.py +0 -0
  574. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9b5_persist.py +0 -0
  575. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9c1_pipeline_resume.py +0 -0
  576. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9c2_restore_state.py +0 -0
  577. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_send_message_tool.py +0 -0
  578. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_settings_loader.py +0 -0
  579. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_1.py +0 -0
  580. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_2.py +0 -0
  581. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_3.py +0 -0
  582. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_4_bundled.py +0 -0
  583. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_5_fork.py +0 -0
  584. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_6_killer.py +0 -0
  585. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_7_watcher.py +0 -0
  586. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_richer_schema.py +0 -0
  587. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_tool.py +0 -0
  588. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skills_foundation.py +0 -0
  589. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_slash_built_in_control.py +0 -0
  590. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_slash_built_in_introspection.py +0 -0
  591. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_slash_commands.py +0 -0
  592. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_slash_md_template.py +0 -0
  593. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_stage10_hook_wiring.py +0 -0
  594. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_stage10_partition_executor.py +0 -0
  595. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_stage10_permission_matrix.py +0 -0
  596. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_stage19_session_summary.py +0 -0
  597. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_state_mutation_wiring.py +0 -0
  598. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_state_shared_and_local.py +0 -0
  599. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_stm_append_event.py +0 -0
  600. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_streaming_tool_executor.py +0 -0
  601. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_structured_output_parser.py +0 -0
  602. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_structured_reflection.py +0 -0
  603. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_subagent_credential_propagation.py +0 -0
  604. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_subagent_descriptor.py +0 -0
  605. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_subagent_orchestrator_zero_arg.py +0 -0
  606. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_subagent_parallel.py +0 -0
  607. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_subagent_type_orchestrator.py +0 -0
  608. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_task_tools.py +0 -0
  609. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_todo_write_tool.py +0 -0
  610. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_abc_uplift.py +0 -0
  611. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_call_events.py +0 -0
  612. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_errors.py +0 -0
  613. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_lifecycle_hooks.py +0 -0
  614. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_provider.py +0 -0
  615. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_result_persistence.py +0 -0
  616. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_search_tool.py +0 -0
  617. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_stage_max_concurrency.py +0 -0
  618. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_web_fetch_tool.py +0 -0
  619. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_web_search_tool.py +0 -0
  620. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_workspace.py +0 -0
  621. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_workspace_propagation.py +0 -0
  622. {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_workspace_tools_integration.py +0 -0
  623. {geny_executor-2.0.5 → 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.5
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.5"
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.5"
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:
@@ -159,19 +185,18 @@ def claude_code_argv(
159
185
  "--mcp-config",
160
186
  json.dumps(effective_mcp_config, ensure_ascii=False),
161
187
  ]
162
- # When the host exposes its own tool surface via MCP, disable
163
- # the CLI's built-in tool palette so the LLM cannot hallucinate
164
- # against ``Bash`` / ``Read`` / ``ToolSearch`` / etc. The CLI's
165
- # ``--tools ""`` literal disables the entire built-in set per
166
- # ``claude --help``. Caller-supplied ``allow_tools`` /
167
- # ``disallow_tools`` (legacy CLI-built-in filters) are also
168
- # forwarded earlier so a host that wants a mixed surface — MCP
169
- # tools + a curated subset of CLI built-ins — can opt back in.
170
188
  # ``--strict-mcp-config`` ignores any other MCP config sources
171
189
  # (user-level / project-level) so the per-session bridge is
172
- # the sole MCP surface the CLI sees.
173
- if not allow_tools:
174
- argv += ["--tools", ""]
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.
175
200
  argv += ["--strict-mcp-config"]
176
201
 
177
202
  # JSON schema (structured output).
@@ -454,6 +479,11 @@ def parse_json_output_to_response(stdout: bytes, *, model: str) -> APIResponse:
454
479
  if not isinstance(obj, dict):
455
480
  raise ValueError("Claude Code json output is not an object")
456
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.
457
487
  blocks: List[ContentBlock] = []
458
488
  for block in obj.get("content", []) or []:
459
489
  if not isinstance(block, dict):
@@ -465,15 +495,6 @@ def parse_json_output_to_response(stdout: bytes, *, model: str) -> APIResponse:
465
495
  blocks.append(
466
496
  ContentBlock(type="thinking", thinking_text=block.get("text", ""))
467
497
  )
468
- elif btype == "tool_use":
469
- blocks.append(
470
- ContentBlock(
471
- type="tool_use",
472
- tool_use_id=block.get("id"),
473
- tool_name=block.get("name"),
474
- tool_input=block.get("input") or {},
475
- )
476
- )
477
498
 
478
499
  usage_in = obj.get("usage", {}) or {}
479
500
  usage = TokenUsage(
@@ -580,9 +601,39 @@ class StreamJsonAccumulator:
580
601
  return [{"type": "cli_unknown", "raw": line}]
581
602
 
582
603
  def finalize(self) -> APIResponse:
583
- """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
+ """
584
632
  # Flush any unclosed tool — the message form often skips
585
- # ``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.
586
637
  self._close_current_tool()
587
638
 
588
639
  blocks: List[ContentBlock] = []
@@ -592,15 +643,6 @@ class StreamJsonAccumulator:
592
643
  )
593
644
  if self._text_buf:
594
645
  blocks.append(ContentBlock(type="text", text="".join(self._text_buf)))
595
- for tu in self._tool_uses:
596
- blocks.append(
597
- ContentBlock(
598
- type="tool_use",
599
- tool_use_id=tu.get("id"),
600
- tool_name=tu.get("name"),
601
- tool_input=tu.get("input") or {},
602
- )
603
- )
604
646
 
605
647
  usage_in: Dict[str, Any] = (self._final_obj or {}).get("usage", {}) or {}
606
648
  usage = TokenUsage(
@@ -773,104 +815,9 @@ async def assemble_response_from_stream_json(
773
815
  return accum.finalize()
774
816
 
775
817
 
776
- # ---------------------------------------------------------------------------
777
- # Copilot CLI: prompt composition
778
- # ---------------------------------------------------------------------------
779
-
780
-
781
- def compose_copilot_prompt(system: Any, messages: List[Dict[str, Any]]) -> str:
782
- """Flatten a canonical (system + messages) into one ``-p`` argument.
783
-
784
- The Copilot CLI accepts a single prompt string. Conversation history
785
- is encoded as Markdown-style turns so the model can still see prior
786
- turns. The system prompt is prepended as a ``## System`` section
787
- when present.
788
- """
789
- parts: List[str] = []
790
- if system:
791
- if isinstance(system, str):
792
- sys_text = system
793
- elif isinstance(system, list):
794
- sys_text = "\n".join(
795
- str(b.get("text", "")) for b in system if isinstance(b, dict) and b.get("type") == "text"
796
- )
797
- else:
798
- sys_text = str(system)
799
- if sys_text:
800
- parts.append(f"## System\n{sys_text}")
801
-
802
- for m in messages:
803
- role = str(m.get("role", "user")).capitalize()
804
- content = m.get("content", "")
805
- if isinstance(content, list):
806
- chunks: List[str] = []
807
- for block in content:
808
- if not isinstance(block, dict):
809
- continue
810
- btype = block.get("type", "")
811
- if btype == "text":
812
- chunks.append(str(block.get("text", "")))
813
- elif btype == "tool_result":
814
- chunks.append(f"[tool_result]\n{block.get('content', '')}")
815
- content_text = "\n".join(chunks)
816
- else:
817
- content_text = str(content)
818
- if content_text:
819
- parts.append(f"## {role}\n{content_text}")
820
-
821
- return "\n\n".join(parts)
822
-
823
-
824
- # ---------------------------------------------------------------------------
825
- # Copilot CLI: argv builder
826
- # ---------------------------------------------------------------------------
827
-
828
-
829
- def copilot_argv(
830
- *,
831
- allow_tools: Sequence[str] = (),
832
- extra_args: Sequence[str] = (),
833
- ) -> List[str]:
834
- """Build the argv list for ``gh copilot`` (excluding the binary).
835
-
836
- The caller is expected to invoke the result as ``gh copilot ...`` —
837
- i.e. ``argv[0]`` is *not* prepended here. ``-p <prompt>`` is appended
838
- by the client after computing the prompt via
839
- :func:`compose_copilot_prompt`.
840
-
841
- Only the flags the CLI actually accepts are emitted:
842
- - ``-p``: single prompt (added by the client, not here)
843
- - ``--allow-tool '<scope>'``: repeated, one flag per scope
844
- - any ``extra_args`` for escape-hatch use.
845
- """
846
- argv: List[str] = ["copilot"]
847
- for scope in allow_tools:
848
- if scope:
849
- argv += ["--allow-tool", str(scope)]
850
- if extra_args:
851
- argv += list(extra_args)
852
- return argv
853
-
854
-
855
- # ---------------------------------------------------------------------------
856
- # Copilot CLI: stdout → APIResponse
857
- # ---------------------------------------------------------------------------
858
-
859
-
860
- def parse_plain_text_to_response(text: str, *, model: str = "default") -> APIResponse:
861
- """Wrap plain stdout text into a canonical :class:`APIResponse`.
862
-
863
- Copilot CLI does not return JSON in print mode, so we cannot recover
864
- structured usage / cost. The response carries the text in a single
865
- block, ``stop_reason="end_turn"``, and an empty TokenUsage with
866
- ``supports_token_usage=False`` advertised at the client level.
867
- """
868
- content_text = text.strip("\n")
869
- return APIResponse(
870
- content=[ContentBlock(type="text", text=content_text)],
871
- stop_reason="end_turn",
872
- usage=TokenUsage(),
873
- model=model,
874
- message_id="",
875
- raw=text,
876
- )
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.
@@ -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
@@ -55,7 +55,11 @@ def _req(**kwargs) -> APIRequest:
55
55
  return APIRequest(**base)
56
56
 
57
57
 
58
- def test_argv_non_stream_uses_json_output() -> None:
58
+ def test_argv_non_stream_uses_json_output(monkeypatch) -> None:
59
+ # ``--bare`` is auto-stripped on the OAuth path (no ANTHROPIC_API_KEY
60
+ # in env). Pin the env so the test exercises the API-key path
61
+ # where ``--bare`` is expected.
62
+ monkeypatch.setenv("ANTHROPIC_API_KEY", "sk-test")
59
63
  argv = claude_code_argv(_req())
60
64
  assert "--print" in argv
61
65
  assert "--output-format" in argv
@@ -64,12 +68,27 @@ def test_argv_non_stream_uses_json_output() -> None:
64
68
  assert "--bare" in argv
65
69
 
66
70
 
67
- def test_argv_stream_uses_stream_json_io() -> None:
71
+ def test_argv_stream_uses_stream_json_io_with_verbose() -> None:
72
+ # ``--verbose`` is required by Claude Code CLI ≥ 2.1.x whenever
73
+ # ``--print`` is combined with ``--output-format=stream-json``;
74
+ # the argv builder emits it automatically alongside the stream-json
75
+ # switch so hosts don't have to thread an opt-in flag.
68
76
  argv = claude_code_argv(_req(stream=True))
69
77
  assert "--input-format" in argv
70
78
  assert "--output-format" in argv
71
79
  assert "stream-json" in argv
72
80
  assert "--include-partial-messages" in argv
81
+ assert "--verbose" in argv
82
+
83
+
84
+ def test_argv_bare_stripped_on_oauth_path(monkeypatch) -> None:
85
+ """When no ``ANTHROPIC_API_KEY`` is in the spawning process's env,
86
+ ``--bare`` is auto-stripped because the CLI's bare mode explicitly
87
+ disables OAuth ('OAuth and keychain are never read'), which crashes
88
+ every subscription user with 'Not logged in · Please run /login'."""
89
+ monkeypatch.delenv("ANTHROPIC_API_KEY", raising=False)
90
+ argv = claude_code_argv(_req(), bare_mode=True)
91
+ assert "--bare" not in argv
73
92
 
74
93
 
75
94
  def test_argv_includes_model_and_system_prompt() -> None:
@@ -149,33 +168,33 @@ def test_argv_request_mcp_config_overrides_kwarg() -> None:
149
168
  assert json.loads(blob) == per_request # per-request wins
150
169
 
151
170
 
152
- def test_argv_host_mcp_disables_cli_builtins_and_strict() -> None:
153
- """When the host registers MCP servers, the CLI's built-in tool
154
- palette is disabled (``--tools ""``) so the LLM only ever sees
155
- MCP-advertised tools. ``--strict-mcp-config`` ignores any other
156
- MCP configuration sources so the per-session bridge is the sole
157
- surface. Together these eliminate the hallucination path where
158
- the LLM tries to use ``Bash``/``ToolSearch``/etc. that the host
159
- has no executor for."""
171
+ def test_argv_host_mcp_emits_strict_and_keeps_builtins() -> None:
172
+ """When the host registers MCP servers we emit
173
+ ``--strict-mcp-config`` so the per-session bridge is the only MCP
174
+ surface (no user-level or project-level MCP servers leak in). The
175
+ CLI's *built-in* tool palette (``Bash`` / ``Read`` / ``Write`` /
176
+ ``Edit`` / …) stays available alongside the MCP surface — most
177
+ hosts (e.g. Geny's Sub-Worker) want both: file/shell built-ins for
178
+ real work, MCP for host-delegated tools.
179
+
180
+ Earlier executor versions auto-emitted ``--tools ""`` here to
181
+ disable the built-in palette; 2.0.6 dropped that default. Hosts
182
+ that want the old MCP-only behaviour can pass
183
+ ``extra_args=("--tools", "")`` explicitly."""
160
184
  cfg = {"mcpServers": {"geny": {"type": "stdio", "command": "py"}}}
161
185
  argv = claude_code_argv(_req(mcp_config=cfg))
162
- # Disable built-ins.
163
- idx = argv.index("--tools")
164
- assert argv[idx + 1] == ""
165
- # Strict mode.
186
+ assert "--tools" not in argv
166
187
  assert "--strict-mcp-config" in argv
167
188
 
168
189
 
169
- def test_argv_host_mcp_with_explicit_allow_tools_keeps_builtins() -> None:
170
- """``--allowedTools`` is the legacy whitelist of CLI built-ins.
171
- If a caller explicitly supplies one alongside an MCP config they
172
- want a mixed surface (custom MCP tools + a curated subset of CLI
173
- built-ins). Don't override their choice."""
190
+ def test_argv_host_mcp_with_explicit_allow_tools_emits_allowedtools() -> None:
191
+ """``--allowedTools`` is the permission-pattern allowlist for CLI
192
+ built-ins (e.g. ``Bash(git *)``). Pass it through verbatim when
193
+ the caller supplies one."""
174
194
  cfg = {"mcpServers": {"geny": {"type": "stdio", "command": "py"}}}
175
195
  argv = claude_code_argv(_req(mcp_config=cfg), allow_tools=["Read"])
176
- # No --tools "" disabler — caller picked allowedTools explicitly.
177
- assert "--tools" not in argv
178
196
  assert "--allowedTools" in argv
197
+ assert "--tools" not in argv
179
198
 
180
199
 
181
200
  def test_argv_no_mcp_no_tools_flag() -> None:
@@ -430,7 +449,16 @@ def test_parse_json_output_text_only() -> None:
430
449
  assert resp.usage.duration_ms == 800
431
450
 
432
451
 
433
- def test_parse_json_output_tool_use_round_trip() -> None:
452
+ def test_parse_json_output_drops_tool_use_blocks() -> None:
453
+ """``tool_use`` blocks in the CLI's json output are intentionally
454
+ dropped from the assembled :class:`APIResponse` because the CLI
455
+ already dispatched them internally. Host pipelines should see
456
+ only the final assistant text — see ``finalize``'s docstring for
457
+ the full rationale. The stop_reason is preserved verbatim so
458
+ callers can still distinguish ``end_turn`` from ``tool_use`` for
459
+ telemetry / retry decisions; ``response.tool_calls`` (the actual
460
+ block list, which is what Stage 9 reads to populate
461
+ ``state.pending_tool_calls``) is empty so Stage 10 no-ops."""
434
462
  blob = json.dumps({
435
463
  "type": "result",
436
464
  "content": [
@@ -441,11 +469,9 @@ def test_parse_json_output_tool_use_round_trip() -> None:
441
469
  "usage": {"input_tokens": 5, "output_tokens": 0},
442
470
  }).encode("utf-8")
443
471
  resp = parse_json_output_to_response(blob, model="m")
444
- assert resp.has_tool_calls is True
445
- tools = resp.tool_calls
446
- assert len(tools) == 1
447
- assert tools[0].tool_name == "Read"
448
- assert tools[0].tool_input == {"path": "/x"}
472
+ assert resp.tool_calls == []
473
+ assert resp.text == "checking..."
474
+ assert resp.stop_reason == "tool_use"
449
475
 
450
476
 
451
477
  def test_parse_json_output_malformed_raises() -> None:
@@ -483,7 +509,13 @@ async def test_assemble_simple_text_stream() -> None:
483
509
 
484
510
 
485
511
  @pytest.mark.asyncio
486
- async def test_assemble_tool_use_with_partial_json() -> None:
512
+ async def test_assemble_drops_tool_use_blocks() -> None:
513
+ """Tool calls observed in the CLI's stream-json output are
514
+ intentionally dropped from the assembled :class:`APIResponse` —
515
+ the CLI dispatched them internally and host pipelines (e.g.
516
+ Geny's Stage 10) must NOT re-dispatch. See ``finalize``'s
517
+ docstring for the full rationale. The stop_reason is preserved
518
+ so callers can still see the CLI ended in a tool turn."""
487
519
  lines = [
488
520
  b'{"type": "system", "model": "claude-sonnet-4-6"}\n',
489
521
  b'{"type": "assistant", "content_block": {"type": "tool_use", "id": "t1", "name": "Read"}}\n',
@@ -498,10 +530,7 @@ async def test_assemble_tool_use_with_partial_json() -> None:
498
530
  yield l
499
531
 
500
532
  resp = await assemble_response_from_stream_json(gen(), model="default")
501
- assert resp.has_tool_calls is True
502
- tu = resp.tool_calls[0]
503
- assert tu.tool_name == "Read"
504
- assert tu.tool_input == {"path": "/x"}
533
+ assert resp.tool_calls == []
505
534
  assert resp.stop_reason == "tool_use"
506
535
 
507
536