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.
- {geny_executor-2.0.5 → geny_executor-2.0.6}/PKG-INFO +1 -1
- {geny_executor-2.0.5 → geny_executor-2.0.6}/pyproject.toml +1 -1
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/__init__.py +1 -1
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/pipeline.py +0 -10
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/__init__.py +0 -2
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/_cli_runtime.py +4 -2
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/registry.py +0 -7
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/translators/__init__.py +0 -6
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/translators/_cli.py +85 -138
- geny_executor-2.0.6/tests/_fixtures/__init__.py +2 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/test_claude_code_cli.py +10 -5
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/unit/test_claude_code.py +12 -6
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/unit/test_translators_cli_claude_code.py +61 -32
- geny_executor-2.0.5/src/geny_executor/llm_client/copilot.py +0 -185
- geny_executor-2.0.5/tests/_fixtures/__init__.py +0 -2
- geny_executor-2.0.5/tests/_fixtures/fake_gh.py +0 -86
- geny_executor-2.0.5/tests/llm_client/conformance/test_copilot_cli.py +0 -111
- geny_executor-2.0.5/tests/llm_client/unit/test_copilot.py +0 -286
- {geny_executor-2.0.5 → geny_executor-2.0.6}/.gitignore +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/LICENSE +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/README.md +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/README_ko.md +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/channels/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/channels/send_message_channel.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/channels/user_file_channel.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/artifact.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/builder.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/config.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/diff.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/environment.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/errors.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/introspection.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/mutation.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/presets.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/result.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/schema.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/shared_keys.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/slot.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/snapshot.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/core/state.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/runner.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/store_abc.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/store_impl/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/store_impl/file_backed.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/store_impl/in_memory.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/cron/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/events/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/events/bus.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/events/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/ab_test.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/cost.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/models.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/monitor.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/replay.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/history/service.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/hooks/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/hooks/config.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/hooks/events.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/hooks/runner.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/anthropic.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/base.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/claude_code.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/credentials.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/google.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/openai.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/translators/_canonical.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/vllm.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/_locks.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/_progressive.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/composite/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/composite/handles.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/composite/provider.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/composite/routing.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/composite/snapshot.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/client.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/google.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/local.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/openai.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/registry.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/embedding/voyage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/factory.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/presets.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/provider.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/ephemeral.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/config.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/frontmatter.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/index_store.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/layout.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/ltm_store.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/notes_store.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/provider.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/snapshot.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/stm_store.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/timezone.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/file/vector_store.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/config.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/connection.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/index_store.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/ltm_store.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/notes_store.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/provider.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/schema.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/snapshot.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/stm_store.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/providers/sql/vector_store.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/retriever.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/memory/strategy.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/notifications/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/notifications/registry.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/permission/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/permission/loader.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/permission/matrix.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/permission/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/py.typed +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/runtime/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/runtime/task_executors.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/runtime/task_runner.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/security/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/security/import_validator.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/security/script_sandbox.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/session/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/session/freshness.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/session/manager.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/session/persistence.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/session/session.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/settings/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/settings/loader.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/settings/section_registry.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/batch/SKILL.md +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/debug/SKILL.md +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/loop/SKILL.md +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/lorem-ipsum/SKILL.md +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/simplify/SKILL.md +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/skillify/SKILL.md +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/stuck/SKILL.md +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled/verify/SKILL.md +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/bundled_skills.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/fork.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/frontmatter.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/loader.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/mcp_bridge.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/path_match.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/registry.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/shell_blocks.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/skill_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/skills/watcher.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/_helpers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/cancel.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/clear.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/compact.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/config.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/context.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/cost.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/help.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/memory.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/model.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/preset_info.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/status.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/built_in/tasks.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/md_template.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/parser.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/registry.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/slash_commands/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/default/normalizers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/artifact/default/validators.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/normalizers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s01_input/validators.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/compactors.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/retrievers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/artifact/default/strategies.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/compactors.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/retrievers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/strategies.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s02_context/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/artifact/default/builders.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/builders.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/persona/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/persona/builder.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/persona/provider.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s03_system/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/artifact/default/guards.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/guards.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s04_guard/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/artifact/default/strategies.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s05_cache/strategies.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/_translate.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/providers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/retry.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/router.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/google/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/google/providers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/openai/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/artifact/openai/providers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/providers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/retry.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s06_api/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/default/pricing.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/artifact/default/trackers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/pricing.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s07_token/trackers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/artifact/default/budget.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/artifact/default/processors.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/processors.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s08_think/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/artifact/default/parsers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/artifact/default/signals.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/parsers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/signals.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s09_parse/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/default/executors.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/default/routers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/executors.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/persistence.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/routers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/state_mutation.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s10_tool/streaming.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/artifact/default/reviewers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s11_tool_review/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/artifact/default/orchestrators.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/orchestrators.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/subagent_type.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s12_agent/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/__init__.py +0 -0
- {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
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/policies.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/registry.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s13_task_registry/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/strategy.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/artifact/default/strategies.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/strategies.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s14_evaluate/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/default/requesters.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/artifact/default/timeouts.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s15_hitl/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/artifact/default/controllers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/controllers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s16_loop/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/artifact/default/emitters.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/emitters.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s17_emit/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/_dehydrate.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/default/persistence.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/artifact/default/strategies.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/insight.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/persistence.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s18_memory/strategies.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/default/importance.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/artifact/default/summarizers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/frequency_policy.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s19_summarize/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/default/frequencies.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/default/persisters.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/restore.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s20_persist/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/default/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/default/formatters.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/default/multi_format.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/artifact/default/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/formatters.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/interface.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/stages/s21_yield/stage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/adhoc.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/base.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/_path_guard.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/agent_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/ask_user_question_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/bash_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/cron_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/dev_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/edit_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/glob_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/grep_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/mcp_wrapper_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/notebook_edit_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/operator_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/plan_mode_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/push_notification_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/read_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/send_message_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/task_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/todo_write_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/tool_search_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/web_fetch_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/web_search_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/worktree_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/built_in/write_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/composer.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/errors.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/adapter.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/credentials.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/errors.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/manager.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/oauth.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/state.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/mcp/uri.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/provider.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/providers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/registry.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/sandbox.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/scope.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/tools/stage_binding.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/workspace/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/workspace/stack.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/workspace/types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/_fixtures/fake_claude.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/_fixtures/fake_echo_cli.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/conftest.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/fixtures/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/fixtures/adapter/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/fixtures/adapter/adapter.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c1_six_layer_retrieval.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c2_execution_recording.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c3_reflection_and_promotion.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c4_rest_coverage.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c5_embedding_migration.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c6_session_resume.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_c7_adapter_parity.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/completeness/test_spec_loads.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/memory_provider_contract.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_embedding_clients.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_auto_vector.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_composite.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_composite_routing.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_curated_global.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_ephemeral.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_factory.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_file.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_file_layout.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_file_vector.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_sql.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_sql_dialect.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_sql_schema.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_memory_provider_sql_vector.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/contract/test_stage_uniformity.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/integration/test_cycle_ab_cross_import.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/integration/test_integration.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/harness.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/test_anthropic.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/test_google.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/test_openai.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/test_vllm.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/unit/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/unit/test_cli_runtime.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/unit/test_credentials.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/__init__.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_adaptive_model_router.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_adaptive_thinking_budget.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_adhoc_providers.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_agent_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_artifact_metadata.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_ask_user_question_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_binary_classify_manifest.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_built_in_autoregister.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_builtin_capabilities.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_builtin_features.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_composite_set_hooks.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_cron_runner.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_cron_store.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_cron_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_dev_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_dynamic_persona_builder.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_errors_categories.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_evaluation_chain.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_fork_multi_provider.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_hierarchical_sidecars.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_hook_in_process.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_hook_runner.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_hooks_and_shared_keys.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_index_list_categories.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_index_render_vault_map.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_interaction_fields.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_introspection.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_llm_client_base.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_llm_client_capabilities.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_llm_client_registry.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_llm_client_request_types.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_llm_client_state.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_llm_summary_compactor.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_loop_agnostic_lock.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_manifest_provider_validation.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_manifest_v2.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_manifest_v3_migration.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_annotations_attach.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_credential_store.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_fsm.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_lifecycle.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_namespace.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_oauth.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_prompts_skills_bridge.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_resource_retriever.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_uri.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_mcp_wrapper_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_memory_aware_retriever.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_memory_hooks_after_callbacks.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_memory_metadata_extension.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_multi_dim_budget_controller.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_multi_format_yield.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_multi_provider.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_multimodal.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_note_graph_queries.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_notebook_edit_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_notes_load_pinned.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_operator_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_ordered_emitter_chain.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_permission_matrix.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_permission_mode_promotions.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase1_foundation.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase1_pipeline.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase2_agent_loop.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase2_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase3_context_memory.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase4_think_agent_evaluate.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase5_emit_presets_mcp.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase5_environment.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase6_history.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase6_integration.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase7_security.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase9a_preset_regen.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_phase9a_scaffolding.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_pipeline_attach_runtime.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_pipeline_from_manifest.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_pipeline_session_runtime.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_plan_mode_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_progressive_disclosure.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_provider_driven_strategy.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_push_notification_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_refresh_backlinks_extension.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_resolve_model_config.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_runtime_task_runner.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s06_provider_selection.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s13_file_backed_registry.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s13_task_registry_output.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s19_frequency_policy.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9b1_tool_review.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9b2_task_registry.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9b3_hitl.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9b4_summarize.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9b5_persist.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9c1_pipeline_resume.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_s9c2_restore_state.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_send_message_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_settings_loader.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_1.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_2.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_3.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_4_bundled.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_5_fork.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_6_killer.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_phase_10_7_watcher.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_richer_schema.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skill_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_skills_foundation.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_slash_built_in_control.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_slash_built_in_introspection.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_slash_commands.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_slash_md_template.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_stage10_hook_wiring.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_stage10_partition_executor.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_stage10_permission_matrix.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_stage19_session_summary.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_state_mutation_wiring.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_state_shared_and_local.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_stm_append_event.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_streaming_tool_executor.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_structured_output_parser.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_structured_reflection.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_subagent_credential_propagation.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_subagent_descriptor.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_subagent_orchestrator_zero_arg.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_subagent_parallel.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_subagent_type_orchestrator.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_task_tools.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_todo_write_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_abc_uplift.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_call_events.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_errors.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_lifecycle_hooks.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_provider.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_result_persistence.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_search_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_tool_stage_max_concurrency.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_web_fetch_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_web_search_tool.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_workspace.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_workspace_propagation.py +0 -0
- {geny_executor-2.0.5 → geny_executor-2.0.6}/tests/unit/test_workspace_tools_integration.py +0 -0
- {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.
|
|
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.
|
|
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"
|
|
@@ -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/``.
|
|
5
|
-
|
|
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)
|
{geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/translators/__init__.py
RENAMED
|
@@ -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",
|
{geny_executor-2.0.5 → geny_executor-2.0.6}/src/geny_executor/llm_client/translators/_cli.py
RENAMED
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
"""Canonical ↔ CLI translation helpers.
|
|
2
2
|
|
|
3
|
-
Used by ``ClaudeCodeCLIClient`` (Phase B)
|
|
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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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
|
-
|
|
174
|
-
|
|
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
|
-
#
|
|
778
|
-
#
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
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.
|
{geny_executor-2.0.5 → geny_executor-2.0.6}/tests/llm_client/conformance/test_claude_code_cli.py
RENAMED
|
@@ -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
|
|
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.
|
|
120
|
-
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
153
|
-
"""When the host registers MCP servers
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
|
|
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
|
|
170
|
-
"""``--allowedTools`` is the
|
|
171
|
-
|
|
172
|
-
|
|
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
|
|
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.
|
|
445
|
-
|
|
446
|
-
assert
|
|
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
|
|
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.
|
|
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
|
|