geny-executor 2.65.2__tar.gz → 2.65.4__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.65.2 → geny_executor-2.65.4}/PKG-INFO +2 -2
- {geny_executor-2.65.2 → geny_executor-2.65.4}/pyproject.toml +1 -1
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/_locks.py +50 -1
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/notes_store.py +50 -5
- geny_executor-2.65.4/tests/unit/test_lock_cancel_leak.py +153 -0
- geny_executor-2.65.4/tests/unit/test_write_hook_carries_the_note.py +123 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/.gitignore +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/LICENSE +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/NOTICE +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/README.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/README_ko.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/audio/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/audio/stt/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/audio/stt/openai_compatible.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/audio/stt/provider.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/audio/stt/registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/channels/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/channels/built_in.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/channels/factory.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/channels/send_message_channel.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/channels/user_file_channel.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/artifact.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/builder.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/compaction.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/config.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/context_prune.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/diff.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/environment.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/environment_control.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/errors.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/introspection.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/manifest_factory.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/message_repair.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/mutation.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/pipeline.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/presets.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/result.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/schema.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/shared_keys.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/slot.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/snapshot.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/state.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/core/token_estimate.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/cron/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/cron/runner.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/cron/store_abc.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/cron/store_impl/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/cron/store_impl/file_backed.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/cron/store_impl/in_memory.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/cron/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/events/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/events/bus.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/events/catalog.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/events/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/gateway/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/gateway/adapter.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/gateway/discord.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/gateway/factory.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/gateway/runner.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/gateway/slack.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/gateway/telegram.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/gateway/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/gateway/ws_base.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/history/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/history/ab_test.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/history/cost.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/history/models.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/history/monitor.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/history/replay.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/history/service.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/hooks/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/hooks/config.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/hooks/events.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/hooks/runner.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/_cli_runtime.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/anthropic.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/base.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/claude_code.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/credentials.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/google.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/local_probe.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/model_discovery.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/openai.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/openai_compatible.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/profiles.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/translators/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/translators/_canonical.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/translators/_cli.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/llm_client/vllm.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/_offload.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/_progressive.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/composite/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/composite/handles.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/composite/provider.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/composite/routing.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/composite/snapshot.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/embedding/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/embedding/client.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/embedding/google.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/embedding/local.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/embedding/openai.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/embedding/openai_compatible.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/embedding/registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/embedding/voyage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/factory.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/facts.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/graph_rank.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/presets.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/provider.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/ephemeral.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/config.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/frontmatter.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/graph_edges.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/index_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/layout.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/ltm_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/provider.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/snapshot.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/stm_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/timezone.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/vector_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/sql/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/sql/config.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/sql/connection.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/sql/index_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/sql/ltm_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/sql/notes_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/sql/provider.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/sql/schema.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/sql/snapshot.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/sql/stm_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/sql/vector_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/retriever.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/rollup.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/strategy.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/vector/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/vector/qdrant_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/notifications/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/notifications/registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/permission/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/permission/loader.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/permission/matrix.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/permission/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/py.typed +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/runtime/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/runtime/task_executors.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/runtime/task_runner.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/security/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/security/import_validator.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/security/script_sandbox.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/session/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/session/freshness.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/session/manager.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/session/persistence.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/session/session.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/settings/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/settings/loader.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/settings/section_registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled/batch/SKILL.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled/debug/SKILL.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled/environment/REFERENCE.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled/environment/SKILL.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled/loop/SKILL.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled/lorem-ipsum/SKILL.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled/simplify/SKILL.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled/skillify/SKILL.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled/stuck/SKILL.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled/tool-builder/REFERENCE.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled/tool-builder/SKILL.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled/verify/SKILL.md +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/bundled_skills.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/fork.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/frontmatter.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/loader.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/mcp_bridge.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/path_match.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/shell_blocks.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/skill_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/skills/watcher.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/_helpers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/cancel.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/clear.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/compact.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/config.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/context.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/cost.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/help.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/memory.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/model.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/preset_info.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/status.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/built_in/tasks.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/md_template.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/parser.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/slash_commands/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s01_input/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s01_input/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s01_input/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s01_input/artifact/default/normalizers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s01_input/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s01_input/artifact/default/validators.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s01_input/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s01_input/normalizers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s01_input/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s01_input/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s01_input/validators.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/artifact/default/compactors.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/artifact/default/retrievers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/artifact/default/strategies.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/compactors.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/retrievers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/strategies.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s02_context/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s03_system/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s03_system/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s03_system/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s03_system/artifact/default/builders.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s03_system/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s03_system/builders.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s03_system/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s03_system/persona/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s03_system/persona/builder.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s03_system/persona/provider.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s03_system/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s04_guard/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s04_guard/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s04_guard/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s04_guard/artifact/default/guards.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s04_guard/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s04_guard/guards.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s04_guard/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s04_guard/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s04_guard/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s05_cache/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s05_cache/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s05_cache/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s05_cache/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s05_cache/artifact/default/strategies.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s05_cache/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s05_cache/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s05_cache/strategies.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/_translate.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/artifact/default/providers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/artifact/default/retry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/artifact/default/router.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/artifact/default/tool_loop.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/artifact/google/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/artifact/google/providers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/artifact/openai/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/artifact/openai/providers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/providers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/retry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s06_api/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s07_token/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s07_token/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s07_token/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s07_token/artifact/default/pricing.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s07_token/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s07_token/artifact/default/trackers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s07_token/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s07_token/pricing.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s07_token/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s07_token/trackers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s08_think/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s08_think/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s08_think/artifact/default/budget.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s08_think/artifact/default/processors.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s08_think/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s08_think/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s08_think/processors.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s08_think/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s08_think/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s09_parse/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s09_parse/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s09_parse/artifact/default/parsers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s09_parse/artifact/default/signals.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s09_parse/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s09_parse/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s09_parse/parsers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s09_parse/signals.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s09_parse/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s09_parse/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/artifact/default/executors.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/artifact/default/routers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/dispatcher.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/executors.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/persistence.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/routers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/state_mutation.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s10_tool/streaming.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s11_tool_review/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s11_tool_review/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s11_tool_review/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s11_tool_review/artifact/default/reviewers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s11_tool_review/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s11_tool_review/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s12_agent/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s12_agent/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s12_agent/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s12_agent/artifact/default/orchestrators.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s12_agent/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s12_agent/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s12_agent/orchestrators.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s12_agent/persistent_subagent.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s12_agent/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s12_agent/subagent_catalog.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s12_agent/subagent_type.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s12_agent/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s13_task_registry/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s13_task_registry/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s13_task_registry/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s13_task_registry/artifact/default/file_backed_registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s13_task_registry/artifact/default/policies.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s13_task_registry/artifact/default/registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s13_task_registry/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s13_task_registry/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s13_task_registry/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s14_evaluate/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s14_evaluate/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/strategy.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s14_evaluate/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s14_evaluate/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s14_evaluate/artifact/default/strategies.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s14_evaluate/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s14_evaluate/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s14_evaluate/strategies.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s14_evaluate/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s15_hitl/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s15_hitl/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s15_hitl/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s15_hitl/artifact/default/requesters.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s15_hitl/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s15_hitl/artifact/default/timeouts.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s15_hitl/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s15_hitl/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s16_loop/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s16_loop/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s16_loop/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s16_loop/artifact/default/controllers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s16_loop/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s16_loop/controllers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s16_loop/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s16_loop/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s17_emit/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s17_emit/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s17_emit/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s17_emit/artifact/default/emitters.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s17_emit/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s17_emit/emitters.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s17_emit/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s17_emit/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s17_emit/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s18_memory/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s18_memory/_dehydrate.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s18_memory/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s18_memory/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s18_memory/artifact/default/persistence.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s18_memory/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s18_memory/artifact/default/strategies.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s18_memory/insight.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s18_memory/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s18_memory/persistence.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s18_memory/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s18_memory/strategies.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s19_summarize/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s19_summarize/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s19_summarize/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s19_summarize/artifact/default/importance.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s19_summarize/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s19_summarize/artifact/default/summarizers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s19_summarize/frequency_policy.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s19_summarize/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s19_summarize/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s20_persist/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s20_persist/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s20_persist/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s20_persist/artifact/default/frequencies.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s20_persist/artifact/default/persisters.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s20_persist/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s20_persist/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s20_persist/restore.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s20_persist/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s21_yield/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s21_yield/artifact/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s21_yield/artifact/default/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s21_yield/artifact/default/formatters.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s21_yield/artifact/default/multi_format.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s21_yield/artifact/default/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s21_yield/formatters.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s21_yield/interface.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/stages/s21_yield/stage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/_sandbox.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/_ssh.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/adhoc.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/base.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/_path_guard.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/_ssh_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/_web_search_backends.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/agent_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/ask_user_question_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/atlassian_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/audio_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/bash_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/browser_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/cron_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/dev_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/doc_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/edit_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/env_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/glob_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/google_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/grep_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/mcp_wrapper_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/notebook_edit_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/operator_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/plan_mode_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/push_notification_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/read_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/sandbox_exec_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/send_message_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/ssh_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/subagent_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/task_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/todo_write_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/tool_search_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/web_fetch_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/web_search_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/workspace_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/worktree_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/built_in/write_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/composer.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/errors.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/mcp/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/mcp/adapter.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/mcp/credentials.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/mcp/errors.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/mcp/manager.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/mcp/oauth.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/mcp/state.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/mcp/uri.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/plugin.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/provider.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/providers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/sandbox.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/scope.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/tools/stage_binding.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/workspace/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/workspace/stack.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/workspace/types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/_fixtures/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/_fixtures/fake_claude.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/_fixtures/fake_echo_cli.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/_fixtures/geny_manifest_layout.json +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/_fixtures/manifest_entries.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/conftest.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/fixtures/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/fixtures/adapter/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/fixtures/adapter/adapter.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/test_c1_six_layer_retrieval.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/test_c2_execution_recording.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/test_c3_reflection_and_promotion.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/test_c4_rest_coverage.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/test_c5_embedding_migration.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/test_c6_session_resume.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/test_c7_adapter_parity.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/completeness/test_spec_loads.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/memory_provider_contract.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_embedding_clients.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_error_codes_stability.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_embedding_credentials.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_auto_vector.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_composite.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_composite_routing.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_curated_global.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_ephemeral.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_factory.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_file.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_file_layout.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_file_vector.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_sql.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_sql_dialect.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_sql_schema.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_provider_sql_vector.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_memory_vector_breaker.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/contract/test_stage_uniformity.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/integration/test_cycle_ab_cross_import.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/integration/test_integration.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/conformance/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/conformance/harness.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/conformance/test_anthropic.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/conformance/test_claude_code_cli.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/conformance/test_google.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/conformance/test_local_providers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/conformance/test_openai.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/conformance/test_vllm.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/golden/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/golden/cli-2.1.149-json.json +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/golden/cli-2.1.149-json.meta +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/golden/cli-2.1.149-stream.jsonl +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/golden/cli-2.1.149-stream.meta +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/golden/cli-2.1.162-stream.jsonl +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/golden/cli-2.1.162-stream.meta +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/golden/test_golden_replay.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/live/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/live/test_live_canaries.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_anthropic_build_kwargs.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_anthropic_classify.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_base_client.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_claude_code.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_cli_cancellation.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_cli_event_forwarding.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_cli_leaked_stdout.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_cli_prewarm.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_cli_runtime.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_container_runner.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_credentials.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_google_classify.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_local_probe.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_local_tool_repair.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_openai_client.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_profiles.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/llm_client/unit/test_translators_cli_claude_code.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/memory/test_note_delete_propagation.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/__init__.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_adaptive_model_router.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_adaptive_router_configure.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_adaptive_thinking_budget.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_adhoc_providers.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_agent_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_api_timeout_kwarg.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_artifact_metadata.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_ask_user_question_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_atlassian_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_attach_llm_client_guard.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_audio_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_binary_classify_manifest.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_browser_doc_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_budget_compaction_recovery.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_built_in_autoregister.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_builtin_capabilities.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_builtin_channels.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_builtin_features.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_cache_prefix_key.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_cancellation.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_claude_code_nonstream_prompt.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_claude_code_vision_wire.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_cli_hot_spare_liveness.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_cli_mcp_passthrough.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_cli_stream_limit.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_compaction_stm_watermark.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_composite_set_hooks.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_concurrent_runs.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_config_liveness.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_core_deferred_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_cron_runner.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_cron_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_cron_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_deterministic_prune_pass.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_dev_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_diff_order_keyed.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_dynamic_persona_builder.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_embedding_error_classification.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_embedding_loop_safety.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_embedding_openai_compatible.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_errors_categories.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_evaluation_chain.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_evaluation_chain_configure.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_event_catalog.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_event_channel_unification.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_event_correlation.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_external_tool_resolution.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_forge_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_fork_multi_provider.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_from_manifest_strict_validation.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_gateway.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_gateway_ws.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_geny_prod_manifest_repro.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_graph_edges.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_graph_rank.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_guard_fail_fast.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_hierarchical_sidecars.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_hook_gate_split.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_hook_in_process.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_hook_runner.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_hook_taxonomy.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_hooks_and_shared_keys.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_host_selections_resolve.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_identity_card_and_pinned.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_index_list_categories.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_index_render_vault_map.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_index_sidecar_coalescing.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_interaction_fields.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_internal_agentic_loop.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_introspection.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_llm_client_base.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_llm_client_capabilities.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_llm_client_registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_llm_client_request_types.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_llm_client_state.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_llm_compactor_selfwire.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_llm_summary_compactor.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_loop_agnostic_lock.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_manifest_factory.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_manifest_from_dict_hygiene.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_manifest_memory_wiring.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_manifest_provider_validation.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_manifest_subagents_memory_sections.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_manifest_v2.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_manifest_v3_migration.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_mcp_annotations_attach.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_mcp_credential_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_mcp_fsm.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_mcp_lifecycle.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_mcp_namespace.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_mcp_oauth.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_mcp_prompts_skills_bridge.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_mcp_resource_retriever.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_mcp_uri.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_mcp_wrapper_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_memory_aware_retriever.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_memory_facts.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_memory_hooks_after_callbacks.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_memory_metadata_extension.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_memory_rollup.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_model_discovery.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_model_overrides.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_multi_dim_budget_configure.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_multi_dim_budget_controller.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_multi_format_yield.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_multi_provider.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_multimodal.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_note_graph_queries.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_notebook_edit_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_notes_load_pinned.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_notes_store_offloop_scan.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_operator_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_ordered_emitter_chain.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_permission_matrix.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_permission_mode_promotions.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_permission_posture.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_persistent_subagent.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase1_foundation.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase1_pipeline.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase2_agent_loop.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase2_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase3_context_memory.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase4_think_agent_evaluate.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase5_emit_presets_mcp.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase5_environment.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase6_history.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase6_integration.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase7_security.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase9a_preset_regen.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_phase9a_scaffolding.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_pipeline_aclose.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_pipeline_attach_runtime.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_pipeline_events_tap.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_pipeline_from_manifest.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_pipeline_hook_lifecycle.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_pipeline_session_runtime.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_plan_mode_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_primary_provider_and_build_reports.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_progressive_disclosure.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_provider_driven_strategy.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_push_notification_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_qdrant_vector_store.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_refresh_backlinks_extension.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_refresh_runtime_and_run_lock.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_resolve_model_config.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_restore_bad_strategy_config.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_reviewer_policy_configure.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_runtime_task_runner.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_s06_chunk_forwarding.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_s06_provider_selection.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_s13_file_backed_registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_s13_task_registry_output.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_s19_frequency_policy.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_s9b1_tool_review.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_s9b2_task_registry.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_s9b3_hitl.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_s9b4_summarize.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_s9b5_persist.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_s9c1_pipeline_resume.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_s9c2_restore_state.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_sandbox_attach.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_sandbox_exec_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_sandbox_path_mapping.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_sandbox_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_security_hardening.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_self_modifying_env.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_send_message_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_settings_loader.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_skill_level3_resources.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_skill_phase_10_1.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_skill_phase_10_2.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_skill_phase_10_3.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_skill_phase_10_4_bundled.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_skill_phase_10_5_fork.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_skill_phase_10_6_killer.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_skill_phase_10_7_watcher.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_skill_richer_schema.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_skill_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_skills_foundation.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_slash_built_in_control.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_slash_built_in_introspection.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_slash_commands.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_slash_md_template.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_sql_stm_session_scope.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_ssh_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_stage10_ask_hitl.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_stage10_hook_wiring.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_stage10_partition_executor.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_stage10_permission_matrix.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_stage19_session_summary.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_state_mutation_wiring.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_state_shared_and_local.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_stm_append_event.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_storage_growth_caps.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_strategy_config_roundtrip.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_streaming_tool_executor.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_structured_output_parser.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_structured_reflection.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_subagent_catalog.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_subagent_credential_propagation.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_subagent_descriptor.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_subagent_manifest_compile.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_subagent_orchestrator_zero_arg.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_subagent_parallel.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_subagent_pipeline_lifecycle.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_subagent_type_orchestrator.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_task_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_todo_write_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_tool_abc_uplift.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_tool_call_events.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_tool_errors.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_tool_lifecycle_hooks.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_tool_pair_repair.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_tool_plugins.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_tool_provider.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_tool_result_persistence.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_tool_search_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_tool_stage_max_concurrency.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_ttft_cache_overhaul.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_ttft_critical_path.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_ttft_warmup_streaming.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_turn_boundary_state.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_validate_manifest.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_vault_map_drill.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_web_fetch_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_web_search_backends.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_web_search_tool.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_workspace.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_workspace_propagation.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_workspace_tools.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_workspace_tools_integration.py +0 -0
- {geny_executor-2.65.2 → geny_executor-2.65.4}/tests/unit/test_worktree_tools.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: geny-executor
|
|
3
|
-
Version: 2.65.
|
|
3
|
+
Version: 2.65.4
|
|
4
4
|
Summary: Harness-engineered agent pipeline library with 21-stage dual-abstraction architecture, built on the Anthropic API
|
|
5
5
|
Project-URL: Homepage, https://github.com/CocoRoF/geny-executor
|
|
6
6
|
Project-URL: Repository, https://github.com/CocoRoF/geny-executor
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "geny-executor"
|
|
7
|
-
version = "2.65.
|
|
7
|
+
version = "2.65.4"
|
|
8
8
|
description = "Harness-engineered agent pipeline library with 21-stage dual-abstraction architecture, built on the Anthropic API"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -70,7 +70,56 @@ class LoopAgnosticLock:
|
|
|
70
70
|
# Contended: wait in a worker thread so the event loop keeps running
|
|
71
71
|
# (and the current holder — possibly a coroutine on THIS loop that
|
|
72
72
|
# yielded mid-critical-section — can make progress and release).
|
|
73
|
-
|
|
73
|
+
#
|
|
74
|
+
# CANCELLATION LEAKS THE MUTEX unless it is handled here, and the
|
|
75
|
+
# leak is permanent. A worker thread blocked in ``lock.acquire()``
|
|
76
|
+
# cannot be cancelled: cancelling the *await* abandons the waiter
|
|
77
|
+
# while the thread goes on to take the lock, on behalf of a caller
|
|
78
|
+
# that no longer exists. ``__aenter__`` never returns, so
|
|
79
|
+
# ``__aexit__`` never runs, and the mutex is held forever by
|
|
80
|
+
# nobody. Every later acquirer — the turn's own memory write, the
|
|
81
|
+
# compaction kick, the conversation archiver — then parks on it,
|
|
82
|
+
# so the session stops answering until the process restarts.
|
|
83
|
+
#
|
|
84
|
+
# Production, 2026-08-11: turns were being abandoned by a
|
|
85
|
+
# host-side stall guard, and each abandonment leaked this lock, so
|
|
86
|
+
# one stall turned into every later turn stalling. Observed as
|
|
87
|
+
# three separate stacks parked in this method with no holder
|
|
88
|
+
# anywhere in the task list.
|
|
89
|
+
#
|
|
90
|
+
# So the WORKER decides what to do with the lock it just took, and
|
|
91
|
+
# decides it in the worker. Handing back via a loop callback would
|
|
92
|
+
# work only while the loop is still running — and "the loop is
|
|
93
|
+
# going away" is exactly one of the situations that cancels an
|
|
94
|
+
# acquire. ``handoff`` guards the one race that matters: the
|
|
95
|
+
# instant between the thread taking the mutex and the caller
|
|
96
|
+
# deciding it no longer wants it.
|
|
97
|
+
handoff = threading.Lock()
|
|
98
|
+
state = {"cancelled": False, "held": False}
|
|
99
|
+
|
|
100
|
+
def _take() -> bool:
|
|
101
|
+
self._lock.acquire()
|
|
102
|
+
with handoff:
|
|
103
|
+
if state["cancelled"]:
|
|
104
|
+
self._lock.release() # nobody is waiting for it now
|
|
105
|
+
return False
|
|
106
|
+
state["held"] = True
|
|
107
|
+
return True
|
|
108
|
+
|
|
109
|
+
waiter = asyncio.ensure_future(asyncio.to_thread(_take))
|
|
110
|
+
try:
|
|
111
|
+
# shield: cancelling the inner task would not stop the thread,
|
|
112
|
+
# it would only hide what the thread went on to do.
|
|
113
|
+
await asyncio.shield(waiter)
|
|
114
|
+
except asyncio.CancelledError:
|
|
115
|
+
with handoff:
|
|
116
|
+
if state["held"]:
|
|
117
|
+
# The thread already took it for us; give it straight
|
|
118
|
+
# back, here, without needing the loop again.
|
|
119
|
+
self._lock.release()
|
|
120
|
+
else:
|
|
121
|
+
state["cancelled"] = True
|
|
122
|
+
raise
|
|
74
123
|
|
|
75
124
|
async def __aenter__(self) -> "LoopAgnosticLock":
|
|
76
125
|
await self._acquire_without_blocking_loop()
|
{geny_executor-2.65.2 → geny_executor-2.65.4}/src/geny_executor/memory/providers/file/notes_store.py
RENAMED
|
@@ -45,7 +45,40 @@ logger = logging.getLogger(__name__)
|
|
|
45
45
|
# the vector layer can keep its index in lockstep with markdown disk
|
|
46
46
|
# state. Returning the chunk count is informational; failures are
|
|
47
47
|
# swallowed (logger.warning) to keep markdown writes authoritative.
|
|
48
|
-
|
|
48
|
+
#: ``(ref, body)`` — and, for indexers that want it, the Note itself as a
|
|
49
|
+
#: third positional argument. Passing it is what lets a vector store index
|
|
50
|
+
#: what the note IS (title, tags, importance) and not merely what it says.
|
|
51
|
+
#:
|
|
52
|
+
#: It matters that BOTH write paths agree. A store whose idempotence digest
|
|
53
|
+
#: covers that metadata will re-index a note forever if the write hook sends
|
|
54
|
+
#: a bare row and a later reconciliation sends a rich one: the digests never
|
|
55
|
+
#: settle. Observed in production 2026-08-18 as freshly written notes
|
|
56
|
+
#: showing a blank title in the catalogue while the reconciled ones had it.
|
|
57
|
+
VectorIndexer = Callable[..., Awaitable[int]]
|
|
58
|
+
|
|
59
|
+
def _indexer_takes_note(indexer: Any) -> bool:
|
|
60
|
+
"""Whether *indexer* has room for the note as a third argument.
|
|
61
|
+
|
|
62
|
+
Asked by signature rather than by try/except so a genuine TypeError
|
|
63
|
+
raised INSIDE the indexer is never mistaken for "wrong arity" and
|
|
64
|
+
silently retried with less information.
|
|
65
|
+
"""
|
|
66
|
+
import inspect
|
|
67
|
+
|
|
68
|
+
# NOT unwrapped to ``__func__``: ``signature`` on a BOUND method already
|
|
69
|
+
# omits ``self``, and unwrapping puts it back — which counted a plain
|
|
70
|
+
# ``index(self, ref, text)`` as having room for a third argument.
|
|
71
|
+
try:
|
|
72
|
+
params = inspect.signature(indexer).parameters
|
|
73
|
+
except (TypeError, ValueError): # pragma: no cover — builtins
|
|
74
|
+
return False
|
|
75
|
+
if any(p.kind is inspect.Parameter.VAR_POSITIONAL for p in params.values()):
|
|
76
|
+
return True
|
|
77
|
+
positional = [p for p in params.values()
|
|
78
|
+
if p.kind in (inspect.Parameter.POSITIONAL_ONLY,
|
|
79
|
+
inspect.Parameter.POSITIONAL_OR_KEYWORD)]
|
|
80
|
+
return len(positional) >= 3
|
|
81
|
+
|
|
49
82
|
|
|
50
83
|
|
|
51
84
|
_WIKILINK = re.compile(r"\[\[([^\]\|]+)(?:\|([^\]]+))?\]\]")
|
|
@@ -187,11 +220,13 @@ class _FilesystemNotesStore(NotesHandle):
|
|
|
187
220
|
self._refresh_backlinks()
|
|
188
221
|
indexer = self._vector_indexer
|
|
189
222
|
ref_for_index, body_for_index = note.ref, note.body
|
|
223
|
+
note_for_index = note
|
|
190
224
|
note_meta = note.as_meta()
|
|
191
225
|
# Run auto-vector outside the write lock — embedding the body
|
|
192
226
|
# is an HTTP round-trip and must never block other note ops.
|
|
193
227
|
if indexer is not None and body_for_index:
|
|
194
|
-
await self._safe_index(indexer, ref_for_index, body_for_index
|
|
228
|
+
await self._safe_index(indexer, ref_for_index, body_for_index,
|
|
229
|
+
note_for_index)
|
|
195
230
|
await self._refresh_index_for(note.category)
|
|
196
231
|
await _fire_hook(
|
|
197
232
|
self._hooks.after_note_write,
|
|
@@ -230,9 +265,11 @@ class _FilesystemNotesStore(NotesHandle):
|
|
|
230
265
|
self._refresh_backlinks()
|
|
231
266
|
indexer = self._vector_indexer
|
|
232
267
|
ref_for_index, body_for_index = current.ref, current.body
|
|
268
|
+
note_for_index = current
|
|
233
269
|
note_meta = current.as_meta()
|
|
234
270
|
if indexer is not None and body_for_index:
|
|
235
|
-
await self._safe_index(indexer, ref_for_index, body_for_index
|
|
271
|
+
await self._safe_index(indexer, ref_for_index, body_for_index,
|
|
272
|
+
note_for_index)
|
|
236
273
|
await self._refresh_index_for(current.category)
|
|
237
274
|
await _fire_hook(
|
|
238
275
|
self._hooks.after_note_update,
|
|
@@ -257,7 +294,8 @@ class _FilesystemNotesStore(NotesHandle):
|
|
|
257
294
|
logger.debug("index refresh callback failed for category=%r", category, exc_info=True)
|
|
258
295
|
|
|
259
296
|
@staticmethod
|
|
260
|
-
async def _safe_index(indexer: VectorIndexer, ref: NoteRef, body: str
|
|
297
|
+
async def _safe_index(indexer: VectorIndexer, ref: NoteRef, body: str,
|
|
298
|
+
note: Any = None) -> None:
|
|
261
299
|
"""Best-effort indexer call — markdown writes win on any
|
|
262
300
|
embedding failure.
|
|
263
301
|
|
|
@@ -274,7 +312,14 @@ class _FilesystemNotesStore(NotesHandle):
|
|
|
274
312
|
from geny_executor.memory.embedding.client import EmbeddingError
|
|
275
313
|
|
|
276
314
|
try:
|
|
277
|
-
|
|
315
|
+
# Offer the note; fall back for indexers written to the older
|
|
316
|
+
# two-argument shape. Every VectorStore in this package takes
|
|
317
|
+
# (ref, text), so the fallback is the normal path for them —
|
|
318
|
+
# only a host store that opted in receives the metadata.
|
|
319
|
+
if note is not None and _indexer_takes_note(indexer):
|
|
320
|
+
await indexer(ref, body, note)
|
|
321
|
+
else:
|
|
322
|
+
await indexer(ref, body)
|
|
278
323
|
except EmbeddingError as exc:
|
|
279
324
|
if getattr(exc, "category", "unknown") == "unknown":
|
|
280
325
|
logger.warning(
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"""A cancelled acquirer must not walk off with the lock.
|
|
2
|
+
|
|
3
|
+
Production, 2026-08-11. Turns stopped answering and stayed that way
|
|
4
|
+
until a restart. Three separate stacks — the turn's own memory write,
|
|
5
|
+
the compaction kick, the conversation archiver — were all parked in
|
|
6
|
+
``LoopAgnosticLock._acquire_without_blocking_loop``, and no task in the
|
|
7
|
+
process held the lock.
|
|
8
|
+
|
|
9
|
+
A worker thread blocked in ``lock.acquire()`` cannot be cancelled.
|
|
10
|
+
Cancelling the *await* abandoned the waiter while the thread went on to
|
|
11
|
+
take the mutex on behalf of a caller that no longer existed:
|
|
12
|
+
``__aenter__`` never returned, so ``__aexit__`` never ran, and the lock
|
|
13
|
+
was held forever by nobody. Every later acquirer parked behind it.
|
|
14
|
+
|
|
15
|
+
The trigger was mundane and frequent — a host-side stall guard
|
|
16
|
+
abandoning a slow turn. One stall leaked the lock; from then on every
|
|
17
|
+
turn stalled.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import asyncio
|
|
23
|
+
import os
|
|
24
|
+
import sys
|
|
25
|
+
|
|
26
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "src"))
|
|
27
|
+
|
|
28
|
+
import pytest
|
|
29
|
+
|
|
30
|
+
from geny_executor.memory._locks import LoopAgnosticLock
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
async def _acquire_and_release(lock: LoopAgnosticLock) -> None:
|
|
34
|
+
async with lock:
|
|
35
|
+
pass
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
@pytest.mark.asyncio
|
|
39
|
+
async def test_cancelling_a_contended_acquire_does_not_strand_the_lock():
|
|
40
|
+
"""The exact production shape, minimised."""
|
|
41
|
+
lock = LoopAgnosticLock()
|
|
42
|
+
holder_may_release = asyncio.Event()
|
|
43
|
+
holder_has_lock = asyncio.Event()
|
|
44
|
+
|
|
45
|
+
async def holder():
|
|
46
|
+
async with lock:
|
|
47
|
+
holder_has_lock.set()
|
|
48
|
+
await holder_may_release.wait()
|
|
49
|
+
|
|
50
|
+
h = asyncio.create_task(holder())
|
|
51
|
+
await holder_has_lock.wait()
|
|
52
|
+
|
|
53
|
+
c = asyncio.create_task(_acquire_and_release(lock))
|
|
54
|
+
await asyncio.sleep(0.05) # let it reach the thread hop
|
|
55
|
+
c.cancel() # ← the stall guard, in production
|
|
56
|
+
with pytest.raises(asyncio.CancelledError):
|
|
57
|
+
await c
|
|
58
|
+
|
|
59
|
+
holder_may_release.set()
|
|
60
|
+
await h
|
|
61
|
+
|
|
62
|
+
# The lock must be free. Before the fix the worker thread took it on
|
|
63
|
+
# behalf of the cancelled contender and nothing ever released it.
|
|
64
|
+
await asyncio.wait_for(_acquire_and_release(lock), timeout=5.0)
|
|
65
|
+
assert not lock.locked()
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
@pytest.mark.asyncio
|
|
69
|
+
async def test_repeated_cancellations_do_not_accumulate():
|
|
70
|
+
"""One leak is already fatal; ten makes sure the release path itself
|
|
71
|
+
does not go wrong under repetition."""
|
|
72
|
+
lock = LoopAgnosticLock()
|
|
73
|
+
release = asyncio.Event()
|
|
74
|
+
got_it = asyncio.Event()
|
|
75
|
+
|
|
76
|
+
async def holder():
|
|
77
|
+
async with lock:
|
|
78
|
+
got_it.set()
|
|
79
|
+
await release.wait()
|
|
80
|
+
|
|
81
|
+
h = asyncio.create_task(holder())
|
|
82
|
+
await got_it.wait()
|
|
83
|
+
|
|
84
|
+
for _ in range(10):
|
|
85
|
+
c = asyncio.create_task(_acquire_and_release(lock))
|
|
86
|
+
await asyncio.sleep(0.01)
|
|
87
|
+
c.cancel()
|
|
88
|
+
with pytest.raises(asyncio.CancelledError):
|
|
89
|
+
await c
|
|
90
|
+
|
|
91
|
+
release.set()
|
|
92
|
+
await h
|
|
93
|
+
await asyncio.wait_for(_acquire_and_release(lock), timeout=5.0)
|
|
94
|
+
assert not lock.locked()
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
@pytest.mark.asyncio
|
|
98
|
+
async def test_uncancelled_contention_still_works():
|
|
99
|
+
"""The fix must not break what the lock is for: a contended acquirer
|
|
100
|
+
waits, then gets it, and not before."""
|
|
101
|
+
lock = LoopAgnosticLock()
|
|
102
|
+
order = []
|
|
103
|
+
release = asyncio.Event()
|
|
104
|
+
got_it = asyncio.Event()
|
|
105
|
+
|
|
106
|
+
async def holder():
|
|
107
|
+
async with lock:
|
|
108
|
+
got_it.set()
|
|
109
|
+
order.append("holder-in")
|
|
110
|
+
await release.wait()
|
|
111
|
+
order.append("holder-out")
|
|
112
|
+
|
|
113
|
+
async def waiter():
|
|
114
|
+
async with lock:
|
|
115
|
+
order.append("waiter-in")
|
|
116
|
+
|
|
117
|
+
h = asyncio.create_task(holder())
|
|
118
|
+
await got_it.wait()
|
|
119
|
+
w = asyncio.create_task(waiter())
|
|
120
|
+
await asyncio.sleep(0.05)
|
|
121
|
+
assert order == ["holder-in"], "the waiter took a held lock"
|
|
122
|
+
release.set()
|
|
123
|
+
await asyncio.wait_for(asyncio.gather(h, w), timeout=5.0)
|
|
124
|
+
assert order == ["holder-in", "holder-out", "waiter-in"]
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@pytest.mark.asyncio
|
|
128
|
+
async def test_the_loop_keeps_running_while_contended():
|
|
129
|
+
"""The reason for the thread hop in the first place — a contended
|
|
130
|
+
acquire must not freeze the event loop."""
|
|
131
|
+
lock = LoopAgnosticLock()
|
|
132
|
+
release = asyncio.Event()
|
|
133
|
+
got_it = asyncio.Event()
|
|
134
|
+
ticks = 0
|
|
135
|
+
|
|
136
|
+
async def ticker():
|
|
137
|
+
nonlocal ticks
|
|
138
|
+
for _ in range(5):
|
|
139
|
+
await asyncio.sleep(0.01)
|
|
140
|
+
ticks += 1
|
|
141
|
+
|
|
142
|
+
async def holder():
|
|
143
|
+
async with lock:
|
|
144
|
+
got_it.set()
|
|
145
|
+
await release.wait()
|
|
146
|
+
|
|
147
|
+
h = asyncio.create_task(holder())
|
|
148
|
+
await got_it.wait()
|
|
149
|
+
w = asyncio.create_task(_acquire_and_release(lock))
|
|
150
|
+
await ticker()
|
|
151
|
+
assert ticks == 5, "the loop stopped while an acquire was contended"
|
|
152
|
+
release.set()
|
|
153
|
+
await asyncio.wait_for(asyncio.gather(h, w), timeout=5.0)
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"""A note's write hook must offer the note, not just its body.
|
|
2
|
+
|
|
3
|
+
Production 2026-08-18: freshly written notes showed a blank title in the
|
|
4
|
+
catalogue while reconciled ones had it. Two write paths, two shapes —
|
|
5
|
+
the auto-vector hook sent ``(ref, body)`` while the host's periodic
|
|
6
|
+
reconciliation sent the whole note.
|
|
7
|
+
|
|
8
|
+
That is not merely a lost field. A vector store whose idempotence digest
|
|
9
|
+
covers title/tags/importance will never settle: the hook writes digest A,
|
|
10
|
+
the reconciliation rewrites digest B, the next edit writes A again, and
|
|
11
|
+
the note re-indexes forever.
|
|
12
|
+
|
|
13
|
+
Indexers are asked by SIGNATURE, never by try/except, so a genuine
|
|
14
|
+
TypeError raised inside an indexer is never mistaken for "wrong arity"
|
|
15
|
+
and silently retried with less information.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
import os
|
|
21
|
+
import sys
|
|
22
|
+
|
|
23
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "src"))
|
|
24
|
+
|
|
25
|
+
import pytest
|
|
26
|
+
|
|
27
|
+
from geny_executor.memory.providers.file.notes_store import _indexer_takes_note
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# ── arity detection ──────────────────────────────────────────────────
|
|
31
|
+
|
|
32
|
+
def test_a_two_argument_indexer_is_left_alone():
|
|
33
|
+
async def old(ref, text):
|
|
34
|
+
return 1
|
|
35
|
+
|
|
36
|
+
assert _indexer_takes_note(old) is False
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_a_three_argument_indexer_is_offered_the_note():
|
|
40
|
+
async def new(ref, text, note=None):
|
|
41
|
+
return 1
|
|
42
|
+
|
|
43
|
+
assert _indexer_takes_note(new) is True
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def test_a_bound_method_is_measured_without_self():
|
|
47
|
+
"""`signature` on a bound method already omits `self`; unwrapping to
|
|
48
|
+
`__func__` puts it back and made every two-arg store look three-arg."""
|
|
49
|
+
class _Old:
|
|
50
|
+
async def index(self, ref, text):
|
|
51
|
+
return 1
|
|
52
|
+
|
|
53
|
+
class _New:
|
|
54
|
+
async def index(self, ref, text, note=None):
|
|
55
|
+
return 1
|
|
56
|
+
|
|
57
|
+
assert _indexer_takes_note(_Old().index) is False
|
|
58
|
+
assert _indexer_takes_note(_New().index) is True
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_star_args_counts_as_room():
|
|
62
|
+
async def flexible(ref, *args):
|
|
63
|
+
return 1
|
|
64
|
+
|
|
65
|
+
assert _indexer_takes_note(flexible) is True
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def test_an_unreadable_signature_is_treated_as_narrow():
|
|
69
|
+
"""Never guess wide: an indexer we cannot measure gets the old shape."""
|
|
70
|
+
assert _indexer_takes_note(object()) is False
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
# ── end-to-end through the store ─────────────────────────────────────
|
|
74
|
+
|
|
75
|
+
@pytest.mark.asyncio
|
|
76
|
+
async def test_the_write_hook_hands_the_note_to_a_willing_indexer(tmp_path):
|
|
77
|
+
from datetime import timezone
|
|
78
|
+
|
|
79
|
+
from geny_executor.memory.provider import NoteDraft, Scope
|
|
80
|
+
from geny_executor.memory.providers.file.notes_store import _FilesystemNotesStore
|
|
81
|
+
from geny_executor.memory.providers.file.layout import DirectoryLayout
|
|
82
|
+
|
|
83
|
+
got = []
|
|
84
|
+
|
|
85
|
+
async def indexer(ref, text, note=None):
|
|
86
|
+
got.append(note)
|
|
87
|
+
return 1
|
|
88
|
+
|
|
89
|
+
layout = DirectoryLayout(tmp_path)
|
|
90
|
+
layout.ensure()
|
|
91
|
+
store = _FilesystemNotesStore(layout=layout, tz=timezone.utc, scope=Scope.SESSION)
|
|
92
|
+
store.attach_vector_indexer(indexer)
|
|
93
|
+
|
|
94
|
+
await store.write(NoteDraft(title="제목", body="본문입니다", category="daily",
|
|
95
|
+
tags=["work"]))
|
|
96
|
+
assert got and got[0] is not None, "the hook indexed without the note"
|
|
97
|
+
assert got[0].title == "제목"
|
|
98
|
+
assert list(got[0].tags) == ["work"]
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
@pytest.mark.asyncio
|
|
102
|
+
async def test_an_old_two_argument_indexer_still_works(tmp_path):
|
|
103
|
+
"""Every VectorStore in this package takes (ref, text) — the common
|
|
104
|
+
path must not break to serve the new one."""
|
|
105
|
+
from datetime import timezone
|
|
106
|
+
|
|
107
|
+
from geny_executor.memory.provider import NoteDraft, Scope
|
|
108
|
+
from geny_executor.memory.providers.file.notes_store import _FilesystemNotesStore
|
|
109
|
+
from geny_executor.memory.providers.file.layout import DirectoryLayout
|
|
110
|
+
|
|
111
|
+
calls = []
|
|
112
|
+
|
|
113
|
+
async def old_indexer(ref, text):
|
|
114
|
+
calls.append(ref.filename)
|
|
115
|
+
return 1
|
|
116
|
+
|
|
117
|
+
layout = DirectoryLayout(tmp_path)
|
|
118
|
+
layout.ensure()
|
|
119
|
+
store = _FilesystemNotesStore(layout=layout, tz=timezone.utc, scope=Scope.SESSION)
|
|
120
|
+
store.attach_vector_indexer(old_indexer)
|
|
121
|
+
|
|
122
|
+
await store.write(NoteDraft(title="제목", body="본문입니다", category="daily"))
|
|
123
|
+
assert len(calls) == 1
|
|
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.65.2 → geny_executor-2.65.4}/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.65.2 → geny_executor-2.65.4}/src/geny_executor/channels/send_message_channel.py
RENAMED
|
File without changes
|
{geny_executor-2.65.2 → geny_executor-2.65.4}/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.65.2 → geny_executor-2.65.4}/src/geny_executor/cron/store_impl/file_backed.py
RENAMED
|
File without changes
|
{geny_executor-2.65.2 → geny_executor-2.65.4}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|