geny-executor 2.69.0__tar.gz → 2.70.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {geny_executor-2.69.0 → geny_executor-2.70.0}/PKG-INFO +1 -1
- {geny_executor-2.69.0 → geny_executor-2.70.0}/pyproject.toml +1 -1
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/_failover.py +23 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/router.py +46 -1
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/translators/_canonical.py +14 -0
- geny_executor-2.70.0/tests/unit/test_account_load_balancing.py +153 -0
- geny_executor-2.70.0/tests/unit/test_conversation_is_portable.py +162 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/.gitignore +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/LICENSE +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/NOTICE +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/README.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/README_ko.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/audio/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/audio/stt/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/audio/stt/openai_compatible.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/audio/stt/provider.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/audio/stt/registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/channels/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/channels/built_in.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/channels/factory.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/channels/send_message_channel.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/channels/user_file_channel.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/artifact.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/builder.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/compaction.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/config.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/context_prune.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/diff.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/environment.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/environment_control.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/errors.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/introspection.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/manifest_factory.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/message_repair.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/mutation.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/pipeline.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/presets.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/result.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/schema.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/shared_keys.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/slot.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/snapshot.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/state.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/core/token_estimate.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/cron/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/cron/runner.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/cron/store_abc.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/cron/store_impl/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/cron/store_impl/file_backed.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/cron/store_impl/in_memory.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/cron/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/events/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/events/bus.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/events/catalog.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/events/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/gateway/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/gateway/adapter.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/gateway/discord.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/gateway/factory.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/gateway/runner.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/gateway/slack.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/gateway/telegram.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/gateway/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/gateway/ws_base.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/history/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/history/ab_test.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/history/cost.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/history/models.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/history/monitor.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/history/replay.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/history/service.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/hooks/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/hooks/config.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/hooks/events.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/hooks/runner.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/_sandbox_handle.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/anthropic.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/base.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/claude_code_tokens.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/codex.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/credentials.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/google.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/local_probe.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/model_discovery.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/openai.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/openai_compatible.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/profiles.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/responses_wire.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/text_tool_protocol.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/translators/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/vllm.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/_locks.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/_offload.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/_progressive.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/composite/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/composite/handles.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/composite/provider.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/composite/routing.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/composite/snapshot.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/embedding/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/embedding/client.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/embedding/google.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/embedding/local.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/embedding/openai.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/embedding/openai_compatible.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/embedding/registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/embedding/voyage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/factory.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/facts.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/graph_rank.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/presets.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/provider.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/ephemeral.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/config.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/frontmatter.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/graph_edges.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/index_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/layout.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/ltm_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/notes_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/provider.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/snapshot.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/stm_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/timezone.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/file/vector_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/sql/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/sql/config.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/sql/connection.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/sql/index_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/sql/ltm_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/sql/notes_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/sql/provider.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/sql/schema.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/sql/snapshot.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/sql/stm_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/providers/sql/vector_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/retriever.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/rollup.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/strategy.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/vector/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/memory/vector/qdrant_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/notifications/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/notifications/registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/permission/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/permission/loader.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/permission/matrix.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/permission/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/py.typed +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/runtime/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/runtime/task_executors.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/runtime/task_runner.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/security/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/security/import_validator.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/security/script_sandbox.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/session/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/session/freshness.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/session/manager.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/session/persistence.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/session/session.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/settings/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/settings/loader.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/settings/section_registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled/batch/SKILL.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled/debug/SKILL.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled/environment/REFERENCE.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled/environment/SKILL.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled/loop/SKILL.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled/lorem-ipsum/SKILL.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled/simplify/SKILL.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled/skillify/SKILL.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled/stuck/SKILL.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled/tool-builder/REFERENCE.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled/tool-builder/SKILL.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled/verify/SKILL.md +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/bundled_skills.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/fork.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/frontmatter.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/loader.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/mcp_bridge.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/path_match.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/shell_blocks.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/skill_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/skills/watcher.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/_helpers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/cancel.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/clear.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/compact.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/config.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/context.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/cost.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/help.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/memory.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/model.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/preset_info.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/status.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/built_in/tasks.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/md_template.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/parser.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/slash_commands/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s01_input/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s01_input/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s01_input/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s01_input/artifact/default/normalizers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s01_input/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s01_input/artifact/default/validators.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s01_input/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s01_input/normalizers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s01_input/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s01_input/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s01_input/validators.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/artifact/default/compactors.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/artifact/default/retrievers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/artifact/default/strategies.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/compactors.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/retrievers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/strategies.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s02_context/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s03_system/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s03_system/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s03_system/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s03_system/artifact/default/builders.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s03_system/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s03_system/builders.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s03_system/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s03_system/persona/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s03_system/persona/builder.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s03_system/persona/provider.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s03_system/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s04_guard/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s04_guard/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s04_guard/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s04_guard/artifact/default/guards.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s04_guard/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s04_guard/guards.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s04_guard/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s04_guard/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s04_guard/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s05_cache/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s05_cache/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s05_cache/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s05_cache/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s05_cache/artifact/default/strategies.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s05_cache/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s05_cache/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s05_cache/strategies.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/_translate.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/artifact/default/providers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/artifact/default/retry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/artifact/default/router.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/artifact/default/tool_loop.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/artifact/google/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/artifact/google/providers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/artifact/openai/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/artifact/openai/providers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/providers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/retry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s06_api/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s07_token/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s07_token/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s07_token/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s07_token/artifact/default/pricing.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s07_token/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s07_token/artifact/default/trackers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s07_token/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s07_token/pricing.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s07_token/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s07_token/trackers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s08_think/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s08_think/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s08_think/artifact/default/budget.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s08_think/artifact/default/processors.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s08_think/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s08_think/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s08_think/processors.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s08_think/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s08_think/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s09_parse/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s09_parse/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s09_parse/artifact/default/parsers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s09_parse/artifact/default/signals.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s09_parse/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s09_parse/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s09_parse/parsers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s09_parse/signals.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s09_parse/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s09_parse/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/artifact/default/executors.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/artifact/default/routers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/dispatcher.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/executors.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/persistence.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/routers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/state_mutation.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s10_tool/streaming.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s11_tool_review/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s11_tool_review/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s11_tool_review/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s11_tool_review/artifact/default/reviewers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s11_tool_review/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s11_tool_review/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s12_agent/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s12_agent/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s12_agent/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s12_agent/artifact/default/orchestrators.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s12_agent/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s12_agent/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s12_agent/orchestrators.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s12_agent/persistent_subagent.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s12_agent/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s12_agent/subagent_catalog.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s12_agent/subagent_type.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s12_agent/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s13_task_registry/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s13_task_registry/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s13_task_registry/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s13_task_registry/artifact/default/file_backed_registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s13_task_registry/artifact/default/policies.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s13_task_registry/artifact/default/registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s13_task_registry/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s13_task_registry/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s13_task_registry/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s14_evaluate/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s14_evaluate/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/strategy.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s14_evaluate/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s14_evaluate/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s14_evaluate/artifact/default/strategies.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s14_evaluate/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s14_evaluate/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s14_evaluate/strategies.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s14_evaluate/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s15_hitl/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s15_hitl/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s15_hitl/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s15_hitl/artifact/default/requesters.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s15_hitl/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s15_hitl/artifact/default/timeouts.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s15_hitl/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s15_hitl/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s16_loop/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s16_loop/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s16_loop/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s16_loop/artifact/default/controllers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s16_loop/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s16_loop/controllers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s16_loop/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s16_loop/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s17_emit/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s17_emit/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s17_emit/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s17_emit/artifact/default/emitters.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s17_emit/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s17_emit/emitters.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s17_emit/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s17_emit/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s17_emit/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s18_memory/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s18_memory/_dehydrate.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s18_memory/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s18_memory/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s18_memory/artifact/default/persistence.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s18_memory/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s18_memory/artifact/default/strategies.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s18_memory/insight.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s18_memory/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s18_memory/persistence.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s18_memory/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s18_memory/strategies.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s19_summarize/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s19_summarize/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s19_summarize/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s19_summarize/artifact/default/importance.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s19_summarize/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s19_summarize/artifact/default/summarizers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s19_summarize/frequency_policy.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s19_summarize/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s19_summarize/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s20_persist/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s20_persist/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s20_persist/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s20_persist/artifact/default/frequencies.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s20_persist/artifact/default/persisters.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s20_persist/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s20_persist/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s20_persist/restore.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s20_persist/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s21_yield/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s21_yield/artifact/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s21_yield/artifact/default/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s21_yield/artifact/default/formatters.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s21_yield/artifact/default/multi_format.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s21_yield/artifact/default/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s21_yield/formatters.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s21_yield/interface.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/stages/s21_yield/stage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/_sandbox.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/_ssh.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/adhoc.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/base.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/_path_guard.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/_ssh_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/_web_search_backends.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/agent_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/ask_user_question_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/atlassian_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/audio_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/bash_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/browser_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/cron_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/dev_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/doc_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/edit_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/env_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/glob_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/google_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/grep_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/mcp_wrapper_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/notebook_edit_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/operator_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/plan_mode_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/push_notification_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/read_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/sandbox_exec_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/send_message_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/ssh_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/subagent_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/task_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/todo_write_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/tool_search_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/web_fetch_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/web_search_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/workspace_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/worktree_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/built_in/write_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/composer.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/errors.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/mcp/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/mcp/adapter.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/mcp/credentials.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/mcp/errors.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/mcp/manager.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/mcp/oauth.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/mcp/state.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/mcp/uri.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/plugin.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/provider.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/providers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/sandbox.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/scope.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/tools/stage_binding.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/workspace/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/workspace/stack.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/workspace/types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/_fixtures/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/_fixtures/fake_echo_cli.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/_fixtures/geny_manifest_layout.json +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/_fixtures/manifest_entries.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/conftest.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/fixtures/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/fixtures/adapter/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/fixtures/adapter/adapter.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/test_c1_six_layer_retrieval.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/test_c2_execution_recording.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/test_c3_reflection_and_promotion.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/test_c4_rest_coverage.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/test_c5_embedding_migration.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/test_c6_session_resume.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/test_c7_adapter_parity.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/completeness/test_spec_loads.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/memory_provider_contract.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_embedding_clients.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_error_codes_stability.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_embedding_credentials.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_auto_vector.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_composite.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_composite_routing.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_curated_global.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_ephemeral.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_factory.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_file.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_file_layout.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_file_vector.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_sql.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_sql_dialect.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_sql_schema.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_provider_sql_vector.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_memory_vector_breaker.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/contract/test_stage_uniformity.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/integration/test_cycle_ab_cross_import.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/integration/test_integration.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/conformance/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/conformance/harness.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/conformance/test_anthropic.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/conformance/test_google.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/conformance/test_local_providers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/conformance/test_openai.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/conformance/test_vllm.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/live/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/live/test_live_canaries.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/unit/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/unit/test_anthropic_build_kwargs.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/unit/test_anthropic_classify.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/unit/test_base_client.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/unit/test_credentials.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/unit/test_google_classify.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/unit/test_local_probe.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/unit/test_local_tool_repair.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/unit/test_openai_client.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/llm_client/unit/test_profiles.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/memory/test_note_delete_propagation.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/__init__.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_account_router.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_adaptive_model_router.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_adaptive_router_configure.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_adaptive_thinking_budget.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_adhoc_providers.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_agent_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_api_timeout_kwarg.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_artifact_metadata.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_ask_user_question_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_atlassian_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_attach_llm_client_guard.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_audio_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_binary_classify_manifest.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_browser_doc_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_budget_compaction_recovery.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_built_in_autoregister.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_builtin_capabilities.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_builtin_channels.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_builtin_features.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_cache_prefix_key.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_cancellation.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_claude_code_token_client.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_cli_stream_limit.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_codex_responses_client.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_compaction_stm_watermark.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_composite_set_hooks.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_concurrent_runs.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_config_liveness.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_core_deferred_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_cron_runner.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_cron_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_cron_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_deterministic_prune_pass.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_dev_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_diff_order_keyed.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_dispatch_context_carries_the_sandbox.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_dynamic_persona_builder.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_embedding_error_classification.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_embedding_loop_safety.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_embedding_openai_compatible.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_errors_categories.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_evaluation_chain.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_evaluation_chain_configure.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_event_catalog.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_event_channel_unification.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_event_correlation.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_external_tool_resolution.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_failover_classification.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_forge_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_fork_multi_provider.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_from_manifest_strict_validation.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_gateway.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_gateway_ws.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_geny_prod_manifest_repro.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_graph_edges.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_graph_rank.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_guard_fail_fast.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_hierarchical_sidecars.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_hook_gate_split.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_hook_in_process.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_hook_runner.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_hook_taxonomy.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_hooks_and_shared_keys.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_host_selections_resolve.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_identity_card_and_pinned.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_index_list_categories.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_index_render_vault_map.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_index_sidecar_coalescing.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_interaction_fields.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_internal_agentic_loop.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_introspection.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_llm_client_base.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_llm_client_capabilities.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_llm_client_registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_llm_client_request_types.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_llm_client_state.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_llm_compactor_selfwire.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_llm_summary_compactor.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_lock_cancel_leak.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_loop_agnostic_lock.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_manifest_factory.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_manifest_from_dict_hygiene.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_manifest_memory_wiring.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_manifest_provider_validation.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_manifest_subagents_memory_sections.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_manifest_v2.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_manifest_v3_migration.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_mcp_annotations_attach.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_mcp_credential_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_mcp_fsm.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_mcp_lifecycle.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_mcp_namespace.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_mcp_oauth.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_mcp_prompts_skills_bridge.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_mcp_resource_retriever.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_mcp_uri.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_mcp_wrapper_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_memory_aware_retriever.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_memory_facts.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_memory_hooks_after_callbacks.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_memory_metadata_extension.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_memory_rollup.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_model_discovery.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_model_overrides.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_multi_dim_budget_configure.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_multi_dim_budget_controller.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_multi_format_yield.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_multi_provider.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_multimodal.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_note_graph_queries.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_notebook_edit_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_notes_load_pinned.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_notes_store_offloop_scan.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_one_path_vocabulary.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_openai_responses_routing.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_operator_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_ordered_emitter_chain.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_permission_matrix.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_permission_mode_promotions.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_permission_posture.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_persistent_subagent.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase1_foundation.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase1_pipeline.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase2_agent_loop.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase2_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase3_context_memory.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase4_think_agent_evaluate.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase5_emit_presets_mcp.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase5_environment.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase6_history.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase6_integration.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase7_security.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase9a_preset_regen.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_phase9a_scaffolding.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_pipeline_aclose.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_pipeline_attach_runtime.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_pipeline_events_tap.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_pipeline_from_manifest.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_pipeline_hook_lifecycle.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_pipeline_session_runtime.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_plan_mode_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_primary_provider_and_build_reports.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_progressive_disclosure.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_provider_driven_strategy.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_push_notification_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_qdrant_vector_store.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_refresh_backlinks_extension.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_refresh_runtime_and_run_lock.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_resolve_model_config.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_restore_bad_strategy_config.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_reviewer_policy_configure.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_runtime_task_runner.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_s06_chunk_forwarding.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_s06_provider_selection.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_s13_file_backed_registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_s13_task_registry_output.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_s19_frequency_policy.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_s9b1_tool_review.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_s9b2_task_registry.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_s9b3_hitl.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_s9b4_summarize.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_s9b5_persist.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_s9c1_pipeline_resume.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_s9c2_restore_state.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_sandbox_exec_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_sandbox_path_mapping.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_sandbox_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_security_hardening.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_self_modifying_env.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_send_message_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_settings_loader.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_skill_level3_resources.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_skill_phase_10_1.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_skill_phase_10_2.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_skill_phase_10_3.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_skill_phase_10_4_bundled.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_skill_phase_10_5_fork.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_skill_phase_10_6_killer.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_skill_phase_10_7_watcher.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_skill_richer_schema.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_skill_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_skills_foundation.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_slash_built_in_control.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_slash_built_in_introspection.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_slash_commands.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_slash_md_template.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_sql_stm_session_scope.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_ssh_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_stage10_ask_hitl.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_stage10_hook_wiring.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_stage10_partition_executor.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_stage10_permission_matrix.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_stage19_session_summary.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_state_mutation_wiring.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_state_shared_and_local.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_stm_append_event.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_storage_growth_caps.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_strategy_config_roundtrip.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_streaming_tool_executor.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_structured_output_parser.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_structured_reflection.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_subagent_catalog.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_subagent_credential_propagation.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_subagent_descriptor.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_subagent_manifest_compile.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_subagent_orchestrator_zero_arg.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_subagent_parallel.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_subagent_pipeline_lifecycle.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_subagent_type_orchestrator.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_task_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_text_tool_protocol.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_todo_write_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_tool_abc_uplift.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_tool_call_events.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_tool_errors.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_tool_lifecycle_hooks.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_tool_pair_repair.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_tool_plugins.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_tool_provider.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_tool_result_persistence.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_tool_results_end_the_turn.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_tool_search_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_tool_stage_max_concurrency.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_ttft_cache_overhaul.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_ttft_critical_path.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_ttft_warmup_streaming.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_turn_boundary_state.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_validate_manifest.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_vault_map_drill.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_web_fetch_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_web_search_backends.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_web_search_tool.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_workspace.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_workspace_propagation.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_workspace_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_workspace_tools_integration.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_worktree_tools.py +0 -0
- {geny_executor-2.69.0 → geny_executor-2.70.0}/tests/unit/test_write_hook_carries_the_note.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: geny-executor
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.70.0
|
|
4
4
|
Summary: Harness-engineered agent pipeline library — one 21-stage architecture, many model accounts behind one conversation
|
|
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.
|
|
7
|
+
version = "2.70.0"
|
|
8
8
|
description = "Harness-engineered agent pipeline library — one 21-stage architecture, many model accounts behind one conversation"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -46,6 +46,29 @@ def clear_cooldown(account_id: str) -> None:
|
|
|
46
46
|
_COOLDOWN.pop(account_id, None)
|
|
47
47
|
|
|
48
48
|
|
|
49
|
+
# ── load (process-wide, keyed by account) ─────────────────────────────
|
|
50
|
+
# Cooldowns answer "who is broken". This answers "whose turn is it".
|
|
51
|
+
# A route of several healthy accounts used to send EVERY turn to the
|
|
52
|
+
# first one until it hit its cap — failover, which only reacts once an
|
|
53
|
+
# account is already exhausted. For subscription plans that is backwards:
|
|
54
|
+
# the point of holding two logins is that neither reaches its limit.
|
|
55
|
+
#
|
|
56
|
+
# Process-wide for the same reason cooldowns are: sibling agents share
|
|
57
|
+
# the accounts, so a per-client counter would let three agents each
|
|
58
|
+
# "balance" onto the same first account.
|
|
59
|
+
_LAST_USED: dict[str, float] = {}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
def mark_used(account_id: str) -> None:
|
|
63
|
+
if account_id:
|
|
64
|
+
_LAST_USED[account_id] = time.time()
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def last_used(account_id: str) -> float:
|
|
68
|
+
"""When this account last answered; 0.0 if never (so it goes first)."""
|
|
69
|
+
return _LAST_USED.get(account_id, 0.0)
|
|
70
|
+
|
|
71
|
+
|
|
49
72
|
def snapshot() -> dict[str, dict[str, Any]]:
|
|
50
73
|
now = time.time()
|
|
51
74
|
return {
|
|
@@ -59,6 +59,7 @@ class RouterClient(BaseClient):
|
|
|
59
59
|
timeout_s: Optional[float] = None,
|
|
60
60
|
event_sink: Any = None,
|
|
61
61
|
client_factory: Any = None,
|
|
62
|
+
balance: bool = False,
|
|
62
63
|
**_ignored: Any,
|
|
63
64
|
) -> None:
|
|
64
65
|
super().__init__(
|
|
@@ -78,6 +79,12 @@ class RouterClient(BaseClient):
|
|
|
78
79
|
self._timeout_s = timeout_s
|
|
79
80
|
self._children: dict[int, BaseClient] = {}
|
|
80
81
|
self._factory = client_factory
|
|
82
|
+
# Spread turns across healthy hops instead of always asking the
|
|
83
|
+
# first one. Off by default: a route's order is a choice the user
|
|
84
|
+
# made, and silently round-robining it would be a different
|
|
85
|
+
# product. Geny turns it on for a route of interchangeable
|
|
86
|
+
# subscription accounts.
|
|
87
|
+
self._balance = bool(balance)
|
|
81
88
|
self.last_target: Optional[dict[str, Any]] = None
|
|
82
89
|
|
|
83
90
|
@property
|
|
@@ -138,10 +145,44 @@ class RouterClient(BaseClient):
|
|
|
138
145
|
return client
|
|
139
146
|
|
|
140
147
|
def _order(self) -> list[int]:
|
|
148
|
+
"""Who to ask, in order: healthy hops first, cooling ones last.
|
|
149
|
+
|
|
150
|
+
With ``balance`` on, hops that are INTERCHANGEABLE — same provider
|
|
151
|
+
and same model, i.e. two logins to the same thing — take turns
|
|
152
|
+
least-recently-used instead of the first one answering until it
|
|
153
|
+
hits its cap. That is the difference between failover and load
|
|
154
|
+
balancing: failover only reacts once an account is already
|
|
155
|
+
exhausted, which for subscription plans is backwards, since the
|
|
156
|
+
reason to hold two logins is that neither should reach its limit.
|
|
157
|
+
|
|
158
|
+
Balancing deliberately does NOT reach across different providers
|
|
159
|
+
or models. A route is a preference — a primary and its fallbacks —
|
|
160
|
+
so spreading turns over it would make one conversation answer as
|
|
161
|
+
Claude, then as GPT, then as Claude again. Equivalent hops are a
|
|
162
|
+
pool; the route between pools is still an order.
|
|
163
|
+
"""
|
|
141
164
|
ready: list[int] = []
|
|
142
165
|
cooling: list[int] = []
|
|
143
166
|
for i, target in enumerate(self._targets):
|
|
144
167
|
(cooling if failover.cooling(str(target.get("accountId") or "")) else ready).append(i)
|
|
168
|
+
if self._balance:
|
|
169
|
+
|
|
170
|
+
def group(i: int) -> tuple[str, str]:
|
|
171
|
+
t = self._targets[i]
|
|
172
|
+
return (str(t.get("engineProvider") or ""), str(t.get("model") or ""))
|
|
173
|
+
|
|
174
|
+
# the pool's place in the route is its best member's place, so
|
|
175
|
+
# a primary pool stays ahead of a fallback pool
|
|
176
|
+
rank = {}
|
|
177
|
+
for i in ready:
|
|
178
|
+
rank.setdefault(group(i), i)
|
|
179
|
+
ready.sort(
|
|
180
|
+
key=lambda i: (
|
|
181
|
+
rank[group(i)],
|
|
182
|
+
failover.last_used(str(self._targets[i].get("accountId") or "")),
|
|
183
|
+
i,
|
|
184
|
+
)
|
|
185
|
+
)
|
|
145
186
|
# everything cooling: still try, earliest recovery first — refusing
|
|
146
187
|
# outright would turn a stale cooldown into an outage
|
|
147
188
|
cooling.sort(
|
|
@@ -189,7 +230,11 @@ class RouterClient(BaseClient):
|
|
|
189
230
|
def _chosen(self, index: int) -> None:
|
|
190
231
|
target = self._targets[index]
|
|
191
232
|
self.last_target = target
|
|
192
|
-
|
|
233
|
+
account = str(target.get("accountId") or "")
|
|
234
|
+
failover.clear_cooldown(account)
|
|
235
|
+
# Only the hop that actually answered counts as used — a hop that
|
|
236
|
+
# was tried and failed over is not "its turn taken".
|
|
237
|
+
failover.mark_used(account)
|
|
193
238
|
self._notify_host(
|
|
194
239
|
{
|
|
195
240
|
"kind": "route",
|
{geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/llm_client/translators/_canonical.py
RENAMED
|
@@ -295,6 +295,20 @@ _ANTHROPIC_INTERNAL_KEYS = ("_meta",)
|
|
|
295
295
|
def _sanitize_anthropic_block(block: Dict[str, Any]) -> Optional[Dict[str, Any]]:
|
|
296
296
|
"""Strip executor-internal keys and lower unsupported block types."""
|
|
297
297
|
btype = block.get("type")
|
|
298
|
+
if btype in ("thinking", "redacted_thinking"):
|
|
299
|
+
# A thinking block belongs to the model that produced it: its
|
|
300
|
+
# signature is bound to that model, and replaying it to a
|
|
301
|
+
# different one is at best ignored and at worst a 400. In THIS
|
|
302
|
+
# library the model can change between any two turns — a route
|
|
303
|
+
# failing over to another account, a user swapping the model
|
|
304
|
+
# mid-conversation, a sub-agent on a cheaper model reading its
|
|
305
|
+
# parent's history — so a thinking block is never portable and
|
|
306
|
+
# is dropped, exactly as every other translator here drops it.
|
|
307
|
+
#
|
|
308
|
+
# The cost is thinking continuity within one model; the cost of
|
|
309
|
+
# keeping it is a session that dies the moment its model changes.
|
|
310
|
+
return None
|
|
311
|
+
|
|
298
312
|
if btype == "file":
|
|
299
313
|
# TODO: Anthropic ``document`` block 으로 매핑 (PDF/text 직접 지원).
|
|
300
314
|
# 지금은 metadata 텍스트로 fallback.
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"""Two accounts should share the work, not take turns being exhausted.
|
|
2
|
+
|
|
3
|
+
Failover is a reaction: it moves off an account once that account has
|
|
4
|
+
already hit its wall. For subscription plans that is backwards — the whole
|
|
5
|
+
reason to hold two Claude logins is that neither should reach its cap. A
|
|
6
|
+
route of healthy accounts sent EVERY turn to the first one until it 429'd,
|
|
7
|
+
and the second sat idle until then.
|
|
8
|
+
|
|
9
|
+
``balance`` orders the healthy hops least-recently-used. It is opt-in: a
|
|
10
|
+
route's order is a choice someone made, and silently round-robining it
|
|
11
|
+
would be a different product.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import pytest
|
|
17
|
+
|
|
18
|
+
from geny_executor.llm_client import _failover as failover
|
|
19
|
+
from geny_executor.llm_client.router import RouterClient
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _targets(*ids: str) -> list[dict]:
|
|
23
|
+
return [
|
|
24
|
+
{"accountId": i, "engineProvider": "anthropic", "model": "claude-sonnet-5", "label": i}
|
|
25
|
+
for i in ids
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@pytest.fixture(autouse=True)
|
|
30
|
+
def _clean():
|
|
31
|
+
for acct in ("a", "b", "c"):
|
|
32
|
+
failover.clear_cooldown(acct)
|
|
33
|
+
failover._LAST_USED.pop(acct, None)
|
|
34
|
+
yield
|
|
35
|
+
for acct in ("a", "b", "c"):
|
|
36
|
+
failover.clear_cooldown(acct)
|
|
37
|
+
failover._LAST_USED.pop(acct, None)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def _order(client: RouterClient) -> list[str]:
|
|
41
|
+
return [client.targets[i]["accountId"] for i in client._order()]
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class TestWithoutBalancing:
|
|
45
|
+
def test_the_route_order_is_kept(self) -> None:
|
|
46
|
+
"""The default is unchanged: hop 0 answers until it cannot."""
|
|
47
|
+
client = RouterClient(targets=_targets("a", "b", "c"))
|
|
48
|
+
assert _order(client) == ["a", "b", "c"]
|
|
49
|
+
client._chosen(0)
|
|
50
|
+
assert _order(client) == ["a", "b", "c"], "a used account must not move"
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class TestWithBalancing:
|
|
54
|
+
def test_a_never_used_account_goes_first(self) -> None:
|
|
55
|
+
client = RouterClient(targets=_targets("a", "b"), balance=True)
|
|
56
|
+
client._chosen(0)
|
|
57
|
+
assert _order(client)[0] == "b", "the idle account should take the next turn"
|
|
58
|
+
|
|
59
|
+
def test_turns_alternate_instead_of_piling_onto_one_account(self) -> None:
|
|
60
|
+
client = RouterClient(targets=_targets("a", "b"), balance=True)
|
|
61
|
+
answered = []
|
|
62
|
+
for _ in range(6):
|
|
63
|
+
first = client._order()[0]
|
|
64
|
+
client._chosen(first)
|
|
65
|
+
answered.append(client.targets[first]["accountId"])
|
|
66
|
+
assert answered.count("a") == 3 and answered.count("b") == 3, answered
|
|
67
|
+
|
|
68
|
+
def test_route_position_breaks_ties(self) -> None:
|
|
69
|
+
"""Equal load is not a reason to shuffle: a deliberate ordering
|
|
70
|
+
still holds among accounts that have done the same amount."""
|
|
71
|
+
client = RouterClient(targets=_targets("a", "b", "c"), balance=True)
|
|
72
|
+
assert _order(client) == ["a", "b", "c"]
|
|
73
|
+
|
|
74
|
+
def test_a_cooling_account_is_still_last(self) -> None:
|
|
75
|
+
"""Balancing changes who is asked first among the healthy; it does
|
|
76
|
+
not promote an account that is rate-limited."""
|
|
77
|
+
client = RouterClient(targets=_targets("a", "b"), balance=True)
|
|
78
|
+
failover.cool_down("b", 300, "usage limit")
|
|
79
|
+
client._chosen(0) # a is now the most recently used
|
|
80
|
+
assert _order(client) == ["a", "b"], "a cooling hop must not be preferred"
|
|
81
|
+
|
|
82
|
+
def test_a_failed_hop_does_not_count_as_its_turn(self) -> None:
|
|
83
|
+
"""Only the account that actually answered has taken a turn — a hop
|
|
84
|
+
that was tried and failed over has not."""
|
|
85
|
+
client = RouterClient(targets=_targets("a", "b"), balance=True)
|
|
86
|
+
client._failed(0, RuntimeError("429 usage limit"), remaining=1)
|
|
87
|
+
client._chosen(1)
|
|
88
|
+
failover.clear_cooldown("a")
|
|
89
|
+
assert _order(client)[0] == "a", "the hop that never answered should be next"
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
class TestTheLoadRecordIsShared:
|
|
93
|
+
def test_two_agents_on_the_same_accounts_do_not_both_pick_first(self) -> None:
|
|
94
|
+
"""Sibling agents share the accounts, so the record has to be
|
|
95
|
+
process-wide — a per-client counter would let every agent
|
|
96
|
+
'balance' onto the same account."""
|
|
97
|
+
one = RouterClient(targets=_targets("a", "b"), balance=True)
|
|
98
|
+
two = RouterClient(targets=_targets("a", "b"), balance=True)
|
|
99
|
+
one._chosen(one._order()[0])
|
|
100
|
+
assert _order(two)[0] == "b", "the second agent repeated the first one's choice"
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class TestPoolsNotTheWholeRoute:
|
|
104
|
+
"""A route is a preference; only interchangeable hops are a pool."""
|
|
105
|
+
|
|
106
|
+
def _mixed(self) -> list[dict]:
|
|
107
|
+
return [
|
|
108
|
+
{"accountId": "claude1", "engineProvider": "geny_claude_code",
|
|
109
|
+
"model": "sonnet", "label": "Claude 1"},
|
|
110
|
+
{"accountId": "claude2", "engineProvider": "geny_claude_code",
|
|
111
|
+
"model": "sonnet", "label": "Claude 2"},
|
|
112
|
+
{"accountId": "codex1", "engineProvider": "geny_codex",
|
|
113
|
+
"model": "gpt-5.6-terra", "label": "Codex"},
|
|
114
|
+
]
|
|
115
|
+
|
|
116
|
+
def test_a_conversation_does_not_ping_pong_between_providers(self) -> None:
|
|
117
|
+
"""The failure this guards: blind round-robin over a route would
|
|
118
|
+
answer as Claude, then as GPT, then as Claude — one agent visibly
|
|
119
|
+
changing who it is every turn."""
|
|
120
|
+
client = RouterClient(targets=self._mixed(), balance=True)
|
|
121
|
+
answered = []
|
|
122
|
+
try:
|
|
123
|
+
for _ in range(6):
|
|
124
|
+
first = client._order()[0]
|
|
125
|
+
client._chosen(first)
|
|
126
|
+
answered.append(client.targets[first]["engineProvider"])
|
|
127
|
+
finally:
|
|
128
|
+
for acct in ("claude1", "claude2", "codex1"):
|
|
129
|
+
failover._LAST_USED.pop(acct, None)
|
|
130
|
+
assert set(answered) == {"geny_claude_code"}, answered
|
|
131
|
+
|
|
132
|
+
def test_the_two_equivalent_logins_still_share(self) -> None:
|
|
133
|
+
client = RouterClient(targets=self._mixed(), balance=True)
|
|
134
|
+
answered = []
|
|
135
|
+
try:
|
|
136
|
+
for _ in range(4):
|
|
137
|
+
first = client._order()[0]
|
|
138
|
+
client._chosen(first)
|
|
139
|
+
answered.append(client.targets[first]["accountId"])
|
|
140
|
+
finally:
|
|
141
|
+
for acct in ("claude1", "claude2", "codex1"):
|
|
142
|
+
failover._LAST_USED.pop(acct, None)
|
|
143
|
+
assert answered.count("claude1") == 2 and answered.count("claude2") == 2, answered
|
|
144
|
+
|
|
145
|
+
def test_the_fallback_pool_is_reached_when_the_primary_pool_is_cooling(self) -> None:
|
|
146
|
+
client = RouterClient(targets=self._mixed(), balance=True)
|
|
147
|
+
try:
|
|
148
|
+
failover.cool_down("claude1", 300, "usage limit")
|
|
149
|
+
failover.cool_down("claude2", 300, "usage limit")
|
|
150
|
+
assert client.targets[client._order()[0]]["engineProvider"] == "geny_codex"
|
|
151
|
+
finally:
|
|
152
|
+
failover.clear_cooldown("claude1")
|
|
153
|
+
failover.clear_cooldown("claude2")
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"""One conversation, any provider, at any point — the invariant behind
|
|
2
|
+
mid-conversation model switching.
|
|
3
|
+
|
|
4
|
+
An agent session outlives the model answering it. A user swaps Opus for a
|
|
5
|
+
ChatGPT plan mid-thread; a route fails over from a rate-limited Claude
|
|
6
|
+
account to a second one; a sub-agent runs on a cheaper model than its
|
|
7
|
+
parent. In every case the SAME canonical history is handed to a DIFFERENT
|
|
8
|
+
translator, and it has to survive the trip.
|
|
9
|
+
|
|
10
|
+
Three properties make that work, and each has broken in some harness
|
|
11
|
+
somewhere:
|
|
12
|
+
|
|
13
|
+
1. No vendor session handle. Nothing carries ``previous_response_id`` or
|
|
14
|
+
a thread id, so history is rebuilt from our own record every call and
|
|
15
|
+
no provider owns the conversation.
|
|
16
|
+
2. No cross-model thinking. Reasoning blocks are bound to the model that
|
|
17
|
+
produced them; replaying one to another model is at best ignored and
|
|
18
|
+
at worst a 400. Every translator drops them.
|
|
19
|
+
3. Our tool ids, round-tripped. A ``tool_use`` emitted on one provider
|
|
20
|
+
and its ``tool_result`` executed here must still pair when the NEXT
|
|
21
|
+
turn runs somewhere else.
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
from __future__ import annotations
|
|
25
|
+
|
|
26
|
+
import json
|
|
27
|
+
|
|
28
|
+
import pytest
|
|
29
|
+
|
|
30
|
+
# A history with every shape that has to survive: text, an image, a tool
|
|
31
|
+
# call made by one provider, its result from our Stage 10, and a thinking
|
|
32
|
+
# block from whichever model produced it.
|
|
33
|
+
HISTORY = [
|
|
34
|
+
{"role": "user", "content": "look at this and list /tmp"},
|
|
35
|
+
{
|
|
36
|
+
"role": "assistant",
|
|
37
|
+
"content": [
|
|
38
|
+
{"type": "thinking", "thinking": "I should list it.", "signature": "sig-from-opus"},
|
|
39
|
+
{"type": "text", "text": "Listing."},
|
|
40
|
+
{
|
|
41
|
+
"type": "tool_use",
|
|
42
|
+
"id": "toolu_geny_abc123",
|
|
43
|
+
"name": "ListDir",
|
|
44
|
+
"input": {"path": "/tmp"},
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"role": "user",
|
|
50
|
+
"content": [
|
|
51
|
+
{"type": "tool_result", "tool_use_id": "toolu_geny_abc123", "content": "a.txt"}
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
{"role": "user", "content": "thanks"},
|
|
55
|
+
]
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def _dumped(obj) -> str:
|
|
59
|
+
return json.dumps(obj, ensure_ascii=False, default=str)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class TestNoVendorSessionHandle:
|
|
63
|
+
def test_the_responses_wire_sends_no_previous_response_id(self) -> None:
|
|
64
|
+
"""Codex rebuilds the thread from OUR history every call. A vendor
|
|
65
|
+
session handle would mean a conversation could not leave Codex and
|
|
66
|
+
come back — and could not be replayed on a second account."""
|
|
67
|
+
from geny_executor.llm_client.responses_wire import to_input
|
|
68
|
+
|
|
69
|
+
blob = _dumped(to_input(HISTORY))
|
|
70
|
+
assert "previous_response_id" not in blob
|
|
71
|
+
assert "thread_id" not in blob
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class TestNoCrossModelThinking:
|
|
75
|
+
def test_the_responses_wire_drops_thinking(self) -> None:
|
|
76
|
+
from geny_executor.llm_client.responses_wire import to_input
|
|
77
|
+
|
|
78
|
+
blob = _dumped(to_input(HISTORY))
|
|
79
|
+
assert "sig-from-opus" not in blob, "a signature from another model was replayed"
|
|
80
|
+
assert "I should list it." not in blob
|
|
81
|
+
|
|
82
|
+
def test_the_anthropic_translator_drops_thinking(self) -> None:
|
|
83
|
+
from geny_executor.llm_client.translators import canonical_messages_to_anthropic
|
|
84
|
+
|
|
85
|
+
blob = _dumped(canonical_messages_to_anthropic(HISTORY))
|
|
86
|
+
assert "sig-from-opus" not in blob, "a signature from another model was replayed"
|
|
87
|
+
|
|
88
|
+
def test_the_openai_translator_drops_thinking(self) -> None:
|
|
89
|
+
from geny_executor.llm_client.translators import canonical_messages_to_openai
|
|
90
|
+
|
|
91
|
+
blob = _dumped(canonical_messages_to_openai(HISTORY))
|
|
92
|
+
assert "sig-from-opus" not in blob
|
|
93
|
+
|
|
94
|
+
def test_the_google_translator_drops_thinking(self) -> None:
|
|
95
|
+
from geny_executor.llm_client.translators import canonical_messages_to_google
|
|
96
|
+
|
|
97
|
+
blob = _dumped(canonical_messages_to_google(HISTORY))
|
|
98
|
+
assert "sig-from-opus" not in blob
|
|
99
|
+
|
|
100
|
+
def test_the_claude_code_protocol_drops_thinking(self) -> None:
|
|
101
|
+
from geny_executor.llm_client import text_tool_protocol as tp
|
|
102
|
+
|
|
103
|
+
blob = _dumped(tp.render_transcript(HISTORY))
|
|
104
|
+
assert "sig-from-opus" not in blob
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
class TestOurToolIdsRoundTrip:
|
|
108
|
+
"""The call and its result must still refer to each other after the
|
|
109
|
+
conversation moves to a provider that never issued the id."""
|
|
110
|
+
|
|
111
|
+
def test_the_responses_wire_pairs_them(self) -> None:
|
|
112
|
+
from geny_executor.llm_client.responses_wire import to_input
|
|
113
|
+
|
|
114
|
+
items = to_input(HISTORY)
|
|
115
|
+
calls = [i for i in items if i.get("type") == "function_call"]
|
|
116
|
+
outs = [i for i in items if i.get("type") == "function_call_output"]
|
|
117
|
+
assert [c["call_id"] for c in calls] == ["toolu_geny_abc123"]
|
|
118
|
+
assert [o["call_id"] for o in outs] == ["toolu_geny_abc123"]
|
|
119
|
+
|
|
120
|
+
def test_the_anthropic_translator_pairs_them(self) -> None:
|
|
121
|
+
from geny_executor.llm_client.translators import canonical_messages_to_anthropic
|
|
122
|
+
|
|
123
|
+
blob = _dumped(canonical_messages_to_anthropic(HISTORY))
|
|
124
|
+
assert blob.count("toolu_geny_abc123") >= 2, "the call and its result came apart"
|
|
125
|
+
|
|
126
|
+
def test_the_openai_translator_pairs_them(self) -> None:
|
|
127
|
+
from geny_executor.llm_client.translators import canonical_messages_to_openai
|
|
128
|
+
|
|
129
|
+
blob = _dumped(canonical_messages_to_openai(HISTORY))
|
|
130
|
+
assert blob.count("toolu_geny_abc123") >= 2
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class TestEveryProviderAcceptsTheSameHistory:
|
|
134
|
+
@pytest.mark.parametrize(
|
|
135
|
+
"translate",
|
|
136
|
+
[
|
|
137
|
+
pytest.param("responses", id="geny_codex / openai-responses"),
|
|
138
|
+
pytest.param("anthropic", id="anthropic / geny_claude_code family"),
|
|
139
|
+
pytest.param("openai", id="openai / vllm / ollama / lmstudio"),
|
|
140
|
+
pytest.param("google", id="google"),
|
|
141
|
+
pytest.param("claude_code", id="geny_claude_code text protocol"),
|
|
142
|
+
],
|
|
143
|
+
)
|
|
144
|
+
def test_it_renders_without_raising_and_keeps_the_user_text(self, translate: str) -> None:
|
|
145
|
+
"""A translator that raises on a history another provider produced
|
|
146
|
+
is a session that dies the moment its model changes."""
|
|
147
|
+
if translate == "responses":
|
|
148
|
+
from geny_executor.llm_client.responses_wire import to_input as fn
|
|
149
|
+
elif translate == "anthropic":
|
|
150
|
+
from geny_executor.llm_client.translators import canonical_messages_to_anthropic as fn
|
|
151
|
+
elif translate == "openai":
|
|
152
|
+
from geny_executor.llm_client.translators import canonical_messages_to_openai as fn
|
|
153
|
+
elif translate == "google":
|
|
154
|
+
from geny_executor.llm_client.translators import canonical_messages_to_google as fn
|
|
155
|
+
else:
|
|
156
|
+
from geny_executor.llm_client import text_tool_protocol as tp
|
|
157
|
+
|
|
158
|
+
fn = tp.render_transcript
|
|
159
|
+
|
|
160
|
+
blob = _dumped(fn(HISTORY))
|
|
161
|
+
assert "look at this and list /tmp" in blob
|
|
162
|
+
assert "a.txt" in blob
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/audio/stt/openai_compatible.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/channels/send_message_channel.py
RENAMED
|
File without changes
|
{geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/channels/user_file_channel.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/cron/store_impl/file_backed.py
RENAMED
|
File without changes
|
{geny_executor-2.69.0 → geny_executor-2.70.0}/src/geny_executor/cron/store_impl/in_memory.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|