geny-executor 2.64.2__tar.gz → 2.64.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.64.2 → geny_executor-2.64.4}/PKG-INFO +1 -1
- {geny_executor-2.64.2 → geny_executor-2.64.4}/pyproject.toml +1 -1
- geny_executor-2.64.4/src/geny_executor/memory/_offload.py +40 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/facts.py +47 -1
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/provider.py +12 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/index_store.py +55 -7
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/notes_store.py +21 -1
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/vector_store.py +29 -2
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/retriever.py +131 -3
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/vector/qdrant_store.py +45 -0
- geny_executor-2.64.4/tests/unit/test_identity_card_and_pinned.py +159 -0
- geny_executor-2.64.4/tests/unit/test_index_sidecar_coalescing.py +162 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/.gitignore +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/LICENSE +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/NOTICE +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/README.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/README_ko.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/audio/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/audio/stt/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/audio/stt/openai_compatible.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/audio/stt/provider.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/audio/stt/registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/channels/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/channels/built_in.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/channels/factory.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/channels/send_message_channel.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/channels/user_file_channel.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/artifact.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/builder.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/compaction.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/config.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/context_prune.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/diff.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/environment.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/environment_control.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/errors.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/introspection.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/manifest_factory.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/message_repair.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/mutation.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/pipeline.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/presets.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/result.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/schema.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/shared_keys.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/slot.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/snapshot.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/state.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/token_estimate.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/runner.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/store_abc.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/store_impl/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/store_impl/file_backed.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/store_impl/in_memory.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/events/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/events/bus.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/events/catalog.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/events/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/adapter.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/discord.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/factory.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/runner.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/slack.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/telegram.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/ws_base.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/ab_test.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/cost.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/models.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/monitor.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/replay.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/service.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/hooks/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/hooks/config.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/hooks/events.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/hooks/runner.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/_cli_runtime.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/anthropic.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/base.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/claude_code.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/credentials.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/google.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/local_probe.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/model_discovery.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/openai.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/openai_compatible.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/profiles.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/translators/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/translators/_canonical.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/translators/_cli.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/vllm.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/_locks.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/_progressive.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/composite/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/composite/handles.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/composite/provider.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/composite/routing.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/composite/snapshot.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/client.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/google.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/local.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/openai.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/openai_compatible.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/voyage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/factory.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/graph_rank.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/presets.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/ephemeral.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/config.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/frontmatter.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/graph_edges.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/layout.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/ltm_store.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/provider.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/snapshot.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/stm_store.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/timezone.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/config.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/connection.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/index_store.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/ltm_store.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/notes_store.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/provider.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/schema.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/snapshot.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/stm_store.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/vector_store.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/rollup.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/strategy.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/vector/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/notifications/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/notifications/registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/permission/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/permission/loader.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/permission/matrix.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/permission/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/py.typed +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/runtime/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/runtime/task_executors.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/runtime/task_runner.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/security/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/security/import_validator.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/security/script_sandbox.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/session/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/session/freshness.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/session/manager.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/session/persistence.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/session/session.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/settings/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/settings/loader.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/settings/section_registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/batch/SKILL.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/debug/SKILL.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/environment/REFERENCE.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/environment/SKILL.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/loop/SKILL.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/lorem-ipsum/SKILL.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/simplify/SKILL.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/skillify/SKILL.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/stuck/SKILL.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/tool-builder/REFERENCE.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/tool-builder/SKILL.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/verify/SKILL.md +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled_skills.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/fork.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/frontmatter.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/loader.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/mcp_bridge.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/path_match.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/shell_blocks.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/skill_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/watcher.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/_helpers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/cancel.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/clear.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/compact.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/config.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/context.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/cost.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/help.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/memory.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/model.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/preset_info.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/status.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/tasks.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/md_template.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/parser.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/artifact/default/normalizers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/artifact/default/validators.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/normalizers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/validators.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/artifact/default/compactors.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/artifact/default/retrievers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/artifact/default/strategies.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/compactors.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/retrievers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/strategies.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/artifact/default/builders.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/builders.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/persona/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/persona/builder.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/persona/provider.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/artifact/default/guards.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/guards.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/artifact/default/strategies.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/strategies.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/_translate.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/default/providers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/default/retry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/default/router.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/default/tool_loop.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/google/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/google/providers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/openai/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/openai/providers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/providers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/retry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/artifact/default/pricing.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/artifact/default/trackers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/pricing.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/trackers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/artifact/default/budget.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/artifact/default/processors.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/processors.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/artifact/default/parsers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/artifact/default/signals.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/parsers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/signals.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/artifact/default/executors.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/artifact/default/routers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/dispatcher.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/executors.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/persistence.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/routers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/state_mutation.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/streaming.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s11_tool_review/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s11_tool_review/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s11_tool_review/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s11_tool_review/artifact/default/reviewers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s11_tool_review/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s11_tool_review/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/artifact/default/orchestrators.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/orchestrators.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/persistent_subagent.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/subagent_catalog.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/subagent_type.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/artifact/default/file_backed_registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/artifact/default/policies.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/artifact/default/registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/strategy.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/artifact/default/strategies.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/strategies.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/artifact/default/requesters.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/artifact/default/timeouts.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/artifact/default/controllers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/controllers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/artifact/default/emitters.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/emitters.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/_dehydrate.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/artifact/default/persistence.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/artifact/default/strategies.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/insight.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/persistence.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/strategies.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/artifact/default/importance.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/artifact/default/summarizers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/frequency_policy.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/artifact/default/frequencies.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/artifact/default/persisters.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/restore.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/artifact/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/artifact/default/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/artifact/default/formatters.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/artifact/default/multi_format.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/artifact/default/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/formatters.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/interface.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/stage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/_sandbox.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/_ssh.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/adhoc.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/base.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/_path_guard.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/_ssh_store.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/_web_search_backends.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/agent_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/ask_user_question_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/atlassian_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/audio_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/bash_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/browser_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/cron_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/dev_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/doc_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/edit_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/env_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/glob_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/google_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/grep_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/mcp_wrapper_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/notebook_edit_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/operator_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/plan_mode_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/push_notification_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/read_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/sandbox_exec_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/send_message_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/ssh_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/subagent_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/task_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/todo_write_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/tool_search_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/web_fetch_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/web_search_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/workspace_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/worktree_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/write_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/composer.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/errors.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/adapter.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/credentials.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/errors.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/manager.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/oauth.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/state.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/uri.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/plugin.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/provider.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/providers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/sandbox.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/scope.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/stage_binding.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/workspace/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/workspace/stack.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/workspace/types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/_fixtures/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/_fixtures/fake_claude.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/_fixtures/fake_echo_cli.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/_fixtures/geny_manifest_layout.json +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/_fixtures/manifest_entries.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/conftest.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/fixtures/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/fixtures/adapter/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/fixtures/adapter/adapter.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c1_six_layer_retrieval.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c2_execution_recording.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c3_reflection_and_promotion.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c4_rest_coverage.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c5_embedding_migration.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c6_session_resume.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c7_adapter_parity.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_spec_loads.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/memory_provider_contract.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_embedding_clients.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_error_codes_stability.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_embedding_credentials.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_auto_vector.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_composite.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_composite_routing.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_curated_global.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_ephemeral.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_factory.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_file.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_file_layout.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_file_vector.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_sql.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_sql_dialect.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_sql_schema.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_sql_vector.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_vector_breaker.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_stage_uniformity.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/integration/test_cycle_ab_cross_import.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/integration/test_integration.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/harness.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/test_anthropic.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/test_claude_code_cli.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/test_google.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/test_local_providers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/test_openai.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/test_vllm.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/cli-2.1.149-json.json +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/cli-2.1.149-json.meta +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/cli-2.1.149-stream.jsonl +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/cli-2.1.149-stream.meta +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/cli-2.1.162-stream.jsonl +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/cli-2.1.162-stream.meta +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/test_golden_replay.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/live/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/live/test_live_canaries.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_anthropic_build_kwargs.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_anthropic_classify.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_base_client.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_claude_code.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_cli_cancellation.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_cli_event_forwarding.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_cli_prewarm.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_cli_runtime.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_container_runner.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_credentials.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_google_classify.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_local_probe.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_local_tool_repair.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_openai_client.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_profiles.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_translators_cli_claude_code.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/__init__.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_adaptive_model_router.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_adaptive_router_configure.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_adaptive_thinking_budget.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_adhoc_providers.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_agent_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_api_timeout_kwarg.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_artifact_metadata.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_ask_user_question_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_atlassian_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_attach_llm_client_guard.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_audio_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_binary_classify_manifest.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_browser_doc_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_budget_compaction_recovery.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_built_in_autoregister.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_builtin_capabilities.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_builtin_channels.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_builtin_features.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cache_prefix_key.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cancellation.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_claude_code_nonstream_prompt.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_claude_code_vision_wire.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cli_mcp_passthrough.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cli_stream_limit.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_compaction_stm_watermark.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_composite_set_hooks.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_concurrent_runs.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_config_liveness.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_core_deferred_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cron_runner.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cron_store.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cron_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_deterministic_prune_pass.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_dev_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_diff_order_keyed.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_dynamic_persona_builder.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_embedding_error_classification.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_embedding_loop_safety.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_embedding_openai_compatible.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_errors_categories.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_evaluation_chain.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_evaluation_chain_configure.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_event_catalog.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_event_channel_unification.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_event_correlation.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_external_tool_resolution.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_forge_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_fork_multi_provider.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_from_manifest_strict_validation.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_gateway.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_gateway_ws.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_geny_prod_manifest_repro.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_graph_edges.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_graph_rank.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_guard_fail_fast.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_hierarchical_sidecars.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_hook_gate_split.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_hook_in_process.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_hook_runner.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_hook_taxonomy.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_hooks_and_shared_keys.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_host_selections_resolve.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_index_list_categories.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_index_render_vault_map.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_interaction_fields.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_internal_agentic_loop.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_introspection.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_client_base.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_client_capabilities.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_client_registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_client_request_types.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_client_state.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_compactor_selfwire.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_summary_compactor.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_loop_agnostic_lock.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_factory.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_from_dict_hygiene.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_memory_wiring.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_provider_validation.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_subagents_memory_sections.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_v2.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_v3_migration.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_annotations_attach.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_credential_store.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_fsm.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_lifecycle.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_namespace.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_oauth.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_prompts_skills_bridge.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_resource_retriever.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_uri.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_wrapper_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_memory_aware_retriever.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_memory_facts.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_memory_hooks_after_callbacks.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_memory_metadata_extension.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_memory_rollup.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_model_discovery.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_model_overrides.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_multi_dim_budget_configure.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_multi_dim_budget_controller.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_multi_format_yield.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_multi_provider.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_multimodal.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_note_graph_queries.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_notebook_edit_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_notes_load_pinned.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_notes_store_offloop_scan.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_operator_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_ordered_emitter_chain.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_permission_matrix.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_permission_mode_promotions.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_permission_posture.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_persistent_subagent.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase1_foundation.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase1_pipeline.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase2_agent_loop.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase2_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase3_context_memory.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase4_think_agent_evaluate.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase5_emit_presets_mcp.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase5_environment.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase6_history.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase6_integration.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase7_security.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase9a_preset_regen.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase9a_scaffolding.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_pipeline_aclose.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_pipeline_attach_runtime.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_pipeline_events_tap.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_pipeline_from_manifest.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_pipeline_hook_lifecycle.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_pipeline_session_runtime.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_plan_mode_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_primary_provider_and_build_reports.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_progressive_disclosure.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_provider_driven_strategy.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_push_notification_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_qdrant_vector_store.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_refresh_backlinks_extension.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_refresh_runtime_and_run_lock.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_resolve_model_config.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_restore_bad_strategy_config.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_reviewer_policy_configure.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_runtime_task_runner.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s06_chunk_forwarding.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s06_provider_selection.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s13_file_backed_registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s13_task_registry_output.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s19_frequency_policy.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9b1_tool_review.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9b2_task_registry.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9b3_hitl.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9b4_summarize.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9b5_persist.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9c1_pipeline_resume.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9c2_restore_state.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_sandbox_attach.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_sandbox_exec_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_sandbox_path_mapping.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_sandbox_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_security_hardening.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_self_modifying_env.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_send_message_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_settings_loader.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_level3_resources.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_1.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_2.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_3.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_4_bundled.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_5_fork.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_6_killer.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_7_watcher.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_richer_schema.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skills_foundation.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_slash_built_in_control.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_slash_built_in_introspection.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_slash_commands.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_slash_md_template.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_sql_stm_session_scope.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_ssh_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_stage10_ask_hitl.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_stage10_hook_wiring.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_stage10_partition_executor.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_stage10_permission_matrix.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_stage19_session_summary.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_state_mutation_wiring.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_state_shared_and_local.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_stm_append_event.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_storage_growth_caps.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_strategy_config_roundtrip.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_streaming_tool_executor.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_structured_output_parser.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_structured_reflection.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_catalog.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_credential_propagation.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_descriptor.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_manifest_compile.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_orchestrator_zero_arg.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_parallel.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_pipeline_lifecycle.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_type_orchestrator.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_task_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_todo_write_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_abc_uplift.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_call_events.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_errors.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_lifecycle_hooks.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_pair_repair.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_plugins.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_provider.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_result_persistence.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_search_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_stage_max_concurrency.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_ttft_cache_overhaul.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_ttft_critical_path.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_ttft_warmup_streaming.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_turn_boundary_state.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_validate_manifest.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_vault_map_drill.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_web_fetch_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_web_search_backends.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_web_search_tool.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_workspace.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_workspace_propagation.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_workspace_tools.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_workspace_tools_integration.py +0 -0
- {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_worktree_tools.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: geny-executor
|
|
3
|
-
Version: 2.64.
|
|
3
|
+
Version: 2.64.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.64.
|
|
7
|
+
version = "2.64.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"
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Dedicated worker pool for the memory subsystem's internal offloads.
|
|
2
|
+
|
|
3
|
+
Why not ``asyncio.to_thread``
|
|
4
|
+
-----------------------------
|
|
5
|
+
``LoopAgnosticLock`` parks CONTENDED acquirers in the loop's default
|
|
6
|
+
thread pool (``to_thread(lock.acquire)``) so the loop stays free. If a
|
|
7
|
+
lock/gate HOLDER then runs its own work via ``to_thread`` too, holder and
|
|
8
|
+
waiters compete for the same bounded pool — and on small machines
|
|
9
|
+
(GitHub CI runners: 2 vCPUs → default pool ≈ 6 workers) a burst of
|
|
10
|
+
waiters can fill every slot while the holder's work item sits queued
|
|
11
|
+
behind them forever: a starvation deadlock. Observed live: the 2.64.3
|
|
12
|
+
release pipeline hung twice in ``Verify tests pass`` on exactly this
|
|
13
|
+
shape (10 concurrent deletes → 9 pooled waiters + 1 queued build),
|
|
14
|
+
while 32-core dev machines sailed through.
|
|
15
|
+
|
|
16
|
+
Running the subsystem's own offloads on this small dedicated pool makes
|
|
17
|
+
holder progress independent of waiter pressure: the holder finishes,
|
|
18
|
+
releases, and the pooled waiters drain. Two workers are plenty — these
|
|
19
|
+
are serialized-by-lock jobs (vault scan, sidecar build), not a fan-out.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
import asyncio
|
|
25
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
26
|
+
from functools import partial
|
|
27
|
+
from typing import Any, Callable, TypeVar
|
|
28
|
+
|
|
29
|
+
T = TypeVar("T")
|
|
30
|
+
|
|
31
|
+
_MEM_EXECUTOR = ThreadPoolExecutor(max_workers=2, thread_name_prefix="mem-offload")
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
async def run_offloaded(fn: Callable[..., T], *args: Any, **kwargs: Any) -> T:
|
|
35
|
+
"""Run ``fn`` on the memory subsystem's dedicated worker pool."""
|
|
36
|
+
loop = asyncio.get_running_loop()
|
|
37
|
+
return await loop.run_in_executor(_MEM_EXECUTOR, partial(fn, *args, **kwargs))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
__all__ = ["run_offloaded"]
|
|
@@ -36,7 +36,7 @@ import json
|
|
|
36
36
|
import logging
|
|
37
37
|
from dataclasses import dataclass, field
|
|
38
38
|
from datetime import datetime, timezone
|
|
39
|
-
from typing import Any, Awaitable, Callable, Dict, List, Optional, Sequence, Tuple
|
|
39
|
+
from typing import Any, Awaitable, Callable, Dict, List, Optional, Sequence, Set, Tuple
|
|
40
40
|
|
|
41
41
|
from geny_executor.memory.rollup import _flatten_turn
|
|
42
42
|
|
|
@@ -238,6 +238,52 @@ _KIND_HEADINGS = {
|
|
|
238
238
|
_IMPORTANCE_ORDER = {"critical": 0, "high": 1, "medium": 2, "low": 3}
|
|
239
239
|
|
|
240
240
|
|
|
241
|
+
IDENTITY_CARD_KINDS = ("identity", "relationship")
|
|
242
|
+
_PROHIBITION_MARKERS = (
|
|
243
|
+
"금지", "금기", "언급하지", "하지 마", "하지마", "never mention", "do not ", "don't ",
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
def render_identity_card(facts: Sequence[Fact], *, max_chars: int = 600) -> str:
|
|
248
|
+
"""Ultra-compact identity card — the facts a persona must NEVER act
|
|
249
|
+
ignorant of: who the user is, how to address them, standing
|
|
250
|
+
prohibitions. Injected by the retriever as its own never-dropped
|
|
251
|
+
layer (L1.4), independent of the pinned-notes budget, because the
|
|
252
|
+
field failure mode was exactly these facts silently falling out of
|
|
253
|
+
context and the persona asking its owner's name mid-relationship.
|
|
254
|
+
|
|
255
|
+
Returns "" when nothing qualifies (caller may fall back to
|
|
256
|
+
identity-tagged pinned notes).
|
|
257
|
+
"""
|
|
258
|
+
if max_chars <= 0:
|
|
259
|
+
return ""
|
|
260
|
+
active = [f for f in facts if f.status == "active"]
|
|
261
|
+
picked: List[Fact] = [f for f in active if f.kind in IDENTITY_CARD_KINDS]
|
|
262
|
+
picked += [
|
|
263
|
+
f
|
|
264
|
+
for f in active
|
|
265
|
+
if f.kind == "preference"
|
|
266
|
+
and any(m in f.statement for m in _PROHIBITION_MARKERS)
|
|
267
|
+
]
|
|
268
|
+
if not picked:
|
|
269
|
+
return ""
|
|
270
|
+
seen: Set[str] = set()
|
|
271
|
+
lines = ["[핀 고정 사실 — 이미 아는 것으로 전제할 것. 다시 묻지 말 것.]"]
|
|
272
|
+
used = len(lines[0])
|
|
273
|
+
for f in picked:
|
|
274
|
+
stmt = f.statement.strip()
|
|
275
|
+
key = stmt.casefold()
|
|
276
|
+
if not stmt or key in seen:
|
|
277
|
+
continue
|
|
278
|
+
seen.add(key)
|
|
279
|
+
line = f"- {stmt}"
|
|
280
|
+
if used + len(line) + 1 > max_chars:
|
|
281
|
+
break
|
|
282
|
+
lines.append(line)
|
|
283
|
+
used += len(line) + 1
|
|
284
|
+
return "\n".join(lines) if len(lines) > 1 else ""
|
|
285
|
+
|
|
286
|
+
|
|
241
287
|
def render_ledger_markdown(facts: Sequence[Fact]) -> str:
|
|
242
288
|
"""Deterministic human-readable rendering of the ACTIVE facts, grouped
|
|
243
289
|
by kind, importance-ranked inside each group. This is what the
|
|
@@ -1275,6 +1275,18 @@ class MemoryHooks:
|
|
|
1275
1275
|
# `NotesHandle.load_pinned(category=...)` and stamped on retrieved
|
|
1276
1276
|
# chunks as `metadata["host_layer"]`.
|
|
1277
1277
|
pin_category: str = "critical"
|
|
1278
|
+
|
|
1279
|
+
# L1.4 Identity Card (2.64.4) — its OWN small budget, never dropped and
|
|
1280
|
+
# independent of the pinned layer's ratio budgeting. Rendered from the
|
|
1281
|
+
# fact ledger's identity/relationship/prohibition facts (fallback:
|
|
1282
|
+
# identity-tagged pinned notes). 0 disables the layer.
|
|
1283
|
+
identity_card_chars: int = 600
|
|
1284
|
+
|
|
1285
|
+
# Categories excluded from the retriever's AUTOMATIC keyword/vector
|
|
1286
|
+
# layers (explicit memory_search tool calls are unaffected). Ambient
|
|
1287
|
+
# buffers like screen observations can dominate a vault (observed: 59%
|
|
1288
|
+
# of 6.2k notes) and drown real recall in noise.
|
|
1289
|
+
search_exclude_categories: Tuple[str, ...] = ()
|
|
1278
1290
|
# STM tail size injected as the L0 chunk regardless of query overlap.
|
|
1279
1291
|
recent_turns: int = 6
|
|
1280
1292
|
# When True, MemoryAwareRetriever returns only L0/L1/L1.5/L1.7 and
|
{geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/index_store.py
RENAMED
|
@@ -12,6 +12,7 @@ the format that `_FilesystemNotesStore` writes.
|
|
|
12
12
|
|
|
13
13
|
from __future__ import annotations
|
|
14
14
|
|
|
15
|
+
import asyncio
|
|
15
16
|
import json
|
|
16
17
|
import os
|
|
17
18
|
import tempfile
|
|
@@ -21,6 +22,7 @@ from pathlib import Path
|
|
|
21
22
|
from typing import Any, Dict, Iterable, List, Optional, Set, Tuple
|
|
22
23
|
|
|
23
24
|
from geny_executor.memory._locks import LoopAgnosticLock
|
|
25
|
+
from geny_executor.memory._offload import run_offloaded
|
|
24
26
|
from geny_executor.memory.provider import NoteGraph, NoteMeta, NoteOutline, NoteSummary
|
|
25
27
|
from geny_executor.memory.providers.file.graph_edges import derive_graph_edges
|
|
26
28
|
from geny_executor.memory.providers.file.layout import DirectoryLayout
|
|
@@ -78,6 +80,15 @@ class _FileIndexStore:
|
|
|
78
80
|
# keyed by a cheap (filename, updated_at) signature of the vault.
|
|
79
81
|
self._edges_sig: Optional[tuple] = None
|
|
80
82
|
self._edges_cache: Optional[List[Dict[str, Any]]] = None
|
|
83
|
+
# Sidecar-refresh coalescing (2.64.3). A burst of writes/deletes
|
|
84
|
+
# (e.g. an observation prune sweep) used to run one full-vault
|
|
85
|
+
# payload build PER CHANGE, inline on the event loop — a 6k-note
|
|
86
|
+
# vault blocked the loop for tens of seconds and got the host
|
|
87
|
+
# watchdog-restarted mid-sweep. Changes now just mark their
|
|
88
|
+
# category dirty; whoever holds the gate services ALL accumulated
|
|
89
|
+
# marks with ONE snapshot + one worker-thread compute/write.
|
|
90
|
+
self._refresh_dirty: Set[str] = set()
|
|
91
|
+
self._refresh_gate = LoopAgnosticLock()
|
|
81
92
|
|
|
82
93
|
def set_category_descriptions(self, descriptions: Dict[str, str]) -> None:
|
|
83
94
|
"""Late-set or replace the canonical description map. Called
|
|
@@ -100,9 +111,14 @@ class _FileIndexStore:
|
|
|
100
111
|
the disk view consistent.
|
|
101
112
|
"""
|
|
102
113
|
async with self._lock:
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
114
|
+
notes = await self._notes.all()
|
|
115
|
+
|
|
116
|
+
def _work() -> Dict[str, Any]:
|
|
117
|
+
payload = self._payload_from_notes(notes)
|
|
118
|
+
self._write_hierarchical_sidecars(payload, category=None)
|
|
119
|
+
return payload
|
|
120
|
+
|
|
121
|
+
return await run_offloaded(_work)
|
|
106
122
|
|
|
107
123
|
async def refresh_for_category(self, category: Optional[str]) -> None:
|
|
108
124
|
"""Incrementally refresh the on-disk sidecars affected by a
|
|
@@ -113,10 +129,36 @@ class _FileIndexStore:
|
|
|
113
129
|
|
|
114
130
|
Other category shards are left untouched. Called after every
|
|
115
131
|
``NotesStore.write`` / ``update`` / ``delete``.
|
|
132
|
+
|
|
133
|
+
COALESCED + OFF-LOOP (2.64.3): concurrent callers mark their
|
|
134
|
+
category dirty and serialize on a gate — the gate holder services
|
|
135
|
+
every accumulated mark with ONE payload build, executed in a
|
|
136
|
+
worker thread so a large vault never stalls the event loop. A
|
|
137
|
+
burst of N deletes therefore costs ~2 builds, not N. Sidecars
|
|
138
|
+
are best-effort by contract; a torn read of a concurrently
|
|
139
|
+
mutated note is repaired by the next refresh.
|
|
116
140
|
"""
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
141
|
+
self._refresh_dirty.add(category or "__all__")
|
|
142
|
+
async with self._refresh_gate:
|
|
143
|
+
if not self._refresh_dirty:
|
|
144
|
+
return # a sibling gate-holder already serviced our mark
|
|
145
|
+
pending = set(self._refresh_dirty)
|
|
146
|
+
self._refresh_dirty.clear()
|
|
147
|
+
async with self._lock:
|
|
148
|
+
notes = await self._notes.all()
|
|
149
|
+
|
|
150
|
+
def _work() -> None:
|
|
151
|
+
payload = self._payload_from_notes(notes)
|
|
152
|
+
if "__all__" in pending:
|
|
153
|
+
self._write_hierarchical_sidecars(payload, category=None)
|
|
154
|
+
return
|
|
155
|
+
for cat in pending:
|
|
156
|
+
self._write_hierarchical_sidecars(payload, category=cat)
|
|
157
|
+
|
|
158
|
+
# Dedicated pool: lock WAITERS park in the default to_thread pool
|
|
159
|
+
# (LoopAgnosticLock) — running the holder's build there too can
|
|
160
|
+
# starve-deadlock small pools (see memory/_offload.py).
|
|
161
|
+
await run_offloaded(_work)
|
|
120
162
|
|
|
121
163
|
async def tag_counts(self) -> Dict[str, int]:
|
|
122
164
|
payload = await self._cached_or_compute()
|
|
@@ -410,10 +452,16 @@ class _FileIndexStore:
|
|
|
410
452
|
cache, so ``_compute`` is fast even on large vaults.
|
|
411
453
|
"""
|
|
412
454
|
async with self._lock:
|
|
413
|
-
|
|
455
|
+
notes = await self._notes.all()
|
|
456
|
+
return await run_offloaded(self._payload_from_notes, notes)
|
|
414
457
|
|
|
415
458
|
async def _compute(self) -> Dict[str, Any]:
|
|
416
459
|
notes = await self._notes.all()
|
|
460
|
+
return self._payload_from_notes(notes)
|
|
461
|
+
|
|
462
|
+
def _payload_from_notes(self, notes) -> Dict[str, Any]:
|
|
463
|
+
"""Pure payload build from a notes snapshot — sync by design so
|
|
464
|
+
heavy vaults can run it in a worker thread (2.64.3)."""
|
|
417
465
|
files: Dict[str, Dict[str, Any]] = {}
|
|
418
466
|
tag_map: Dict[str, List[str]] = {}
|
|
419
467
|
link_graph: Dict[str, List[str]] = {}
|
{geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/notes_store.py
RENAMED
|
@@ -19,6 +19,7 @@ from pathlib import Path
|
|
|
19
19
|
from typing import Any, Awaitable, Callable, Dict, Iterable, List, Optional, Set, Tuple
|
|
20
20
|
|
|
21
21
|
from geny_executor.memory._locks import LoopAgnosticLock
|
|
22
|
+
from geny_executor.memory._offload import run_offloaded
|
|
22
23
|
from geny_executor.memory.provider import (
|
|
23
24
|
Importance,
|
|
24
25
|
MemoryHooks,
|
|
@@ -403,13 +404,27 @@ class _FilesystemNotesStore(NotesHandle):
|
|
|
403
404
|
modified = note.updated_at.isoformat() if note.updated_at else ""
|
|
404
405
|
return (-note.importance.boost, "" if modified is None else "") # placeholder
|
|
405
406
|
|
|
407
|
+
# Ordering (2.64.4): the fact LEDGER first — it is the designed
|
|
408
|
+
# always-inject note — then importance desc, then recency. Recency
|
|
409
|
+
# alone let a periodically-rewritten 5.6k evergreen note claim the
|
|
410
|
+
# front seat forever and crowd out identity/prohibition facts.
|
|
411
|
+
def _ledger_first(n: Note) -> int:
|
|
412
|
+
return 0 if n.ref.filename == "__facts__.md" else 1
|
|
413
|
+
|
|
406
414
|
pool.sort(
|
|
407
415
|
key=lambda n: (
|
|
416
|
+
_ledger_first(n),
|
|
408
417
|
-n.importance.boost,
|
|
409
418
|
-(n.updated_at.timestamp() if n.updated_at else 0.0),
|
|
410
419
|
)
|
|
411
420
|
)
|
|
412
421
|
|
|
422
|
+
# Per-note cap (2.64.4): one oversized note must never exhaust the
|
|
423
|
+
# whole budget. The old loop admitted the FIRST note whole even past
|
|
424
|
+
# max_chars — a 5.6k evergreen then starved every other pinned fact
|
|
425
|
+
# (and the downstream layer dropped the oversized result entirely).
|
|
426
|
+
per_note_cap = max(200, max_chars // 2)
|
|
427
|
+
|
|
413
428
|
parts: List[str] = []
|
|
414
429
|
used = 0
|
|
415
430
|
for note in pool:
|
|
@@ -418,6 +433,8 @@ class _FilesystemNotesStore(NotesHandle):
|
|
|
418
433
|
continue
|
|
419
434
|
header = f"## {note.title}" if note.title else ""
|
|
420
435
|
piece = f"{header}\n{block}".strip() if header else block
|
|
436
|
+
if len(piece) > per_note_cap:
|
|
437
|
+
piece = piece[: per_note_cap - 12].rstrip() + "\n…(truncated)"
|
|
421
438
|
cost = len(piece) + (2 if parts else 0) # blank-line separator
|
|
422
439
|
if used + cost > max_chars and parts:
|
|
423
440
|
break
|
|
@@ -466,7 +483,10 @@ class _FilesystemNotesStore(NotesHandle):
|
|
|
466
483
|
# BLOCKS the host's event loop — health checks stop answering and the
|
|
467
484
|
# process gets watchdog-killed mid-load. Run it in a worker thread;
|
|
468
485
|
# callers already hold self._lock, so the swap below is single-flight.
|
|
469
|
-
|
|
486
|
+
# Dedicated pool — the scan holder must never queue behind its own
|
|
487
|
+
# lock-waiters in the default to_thread pool (starvation deadlock on
|
|
488
|
+
# small machines; see memory/_offload.py).
|
|
489
|
+
cache = await run_offloaded(self._scan_disk)
|
|
470
490
|
self._cache = cache
|
|
471
491
|
self._explicit_links.clear()
|
|
472
492
|
self._refresh_backlinks()
|
|
@@ -25,6 +25,8 @@ backend.
|
|
|
25
25
|
|
|
26
26
|
from __future__ import annotations
|
|
27
27
|
|
|
28
|
+
import hashlib
|
|
29
|
+
|
|
28
30
|
import json
|
|
29
31
|
import logging
|
|
30
32
|
import math
|
|
@@ -133,10 +135,27 @@ class _FileVectorStore:
|
|
|
133
135
|
return 0
|
|
134
136
|
async with self._lock:
|
|
135
137
|
await self._ensure_loaded()
|
|
136
|
-
|
|
138
|
+
# Idempotent backfill (2.64.3): index_batch is the session-resume
|
|
139
|
+
# warm-up path — it used to re-embed EVERY note on every resume
|
|
140
|
+
# (6k-note vault ≈ minutes of embedding HTTP + real money, every
|
|
141
|
+
# 30-min idle-evict cycle). Rows persist a content sha, so only
|
|
142
|
+
# new/changed notes reach the embedder.
|
|
143
|
+
existing_sha = {
|
|
144
|
+
row.get("filename"): row.get("sha")
|
|
145
|
+
for row in self._rows
|
|
146
|
+
if row.get("sha")
|
|
147
|
+
}
|
|
148
|
+
todo = [
|
|
149
|
+
(ref, text)
|
|
150
|
+
for ref, text in items
|
|
151
|
+
if existing_sha.get(ref.filename) != _text_sha(text)
|
|
152
|
+
]
|
|
153
|
+
if not todo:
|
|
154
|
+
return 0
|
|
155
|
+
texts = [text for _, text in todo]
|
|
137
156
|
vectors = await self._embed_guarded(texts)
|
|
138
157
|
added = 0
|
|
139
|
-
for (ref, text), vec in zip(
|
|
158
|
+
for (ref, text), vec in zip(todo, vectors):
|
|
140
159
|
self._validate_dim(vec)
|
|
141
160
|
removed = self._remove_by_filename(ref.filename)
|
|
142
161
|
self._vectors.append(vec)
|
|
@@ -423,6 +442,10 @@ class _FileVectorStore:
|
|
|
423
442
|
# ── helpers ──────────────────────────────────────────────────────────
|
|
424
443
|
|
|
425
444
|
|
|
445
|
+
def _text_sha(text: str) -> str:
|
|
446
|
+
return hashlib.sha1((text or "").encode("utf-8")).hexdigest()
|
|
447
|
+
|
|
448
|
+
|
|
426
449
|
def _row_for(ref: NoteRef, text: str) -> Dict[str, Any]:
|
|
427
450
|
return {
|
|
428
451
|
"filename": ref.filename,
|
|
@@ -430,6 +453,10 @@ def _row_for(ref: NoteRef, text: str) -> Dict[str, Any]:
|
|
|
430
453
|
"category": ref.category,
|
|
431
454
|
"backend": ref.backend,
|
|
432
455
|
"preview": (text or "")[:400],
|
|
456
|
+
# Content fingerprint — lets index_batch (session-resume backfill)
|
|
457
|
+
# skip re-embedding unchanged notes (2.64.3). Rows persisted before
|
|
458
|
+
# this field simply lack it and re-embed once, then carry it.
|
|
459
|
+
"sha": _text_sha(text),
|
|
433
460
|
}
|
|
434
461
|
|
|
435
462
|
|
|
@@ -154,6 +154,17 @@ class MemoryAwareRetriever(MemoryRetriever):
|
|
|
154
154
|
)
|
|
155
155
|
_record("session_summary", before)
|
|
156
156
|
|
|
157
|
+
# ── L1.4: identity card — NEVER dropped, own budget ─────────
|
|
158
|
+
# The facts a persona must never act ignorant of (owner's name,
|
|
159
|
+
# honorific, standing prohibitions). Separate from the pinned layer
|
|
160
|
+
# because pinned is ratio-budgeted and was observed starving these
|
|
161
|
+
# exact facts out of context ("asked its owner's name").
|
|
162
|
+
before = total
|
|
163
|
+
total = await self._load_identity_card(
|
|
164
|
+
chunks, total, hooks, prefetched=pf.get("identity_card", _UNFETCHED)
|
|
165
|
+
)
|
|
166
|
+
_record("identity_card", before)
|
|
167
|
+
|
|
157
168
|
# ── L1.5: pinned facts (always-inject, host-policy category) ──
|
|
158
169
|
before = total
|
|
159
170
|
total = await self._load_pinned_facts(
|
|
@@ -276,6 +287,9 @@ class MemoryAwareRetriever(MemoryRetriever):
|
|
|
276
287
|
|
|
277
288
|
_add("summary", _fetch_summary)
|
|
278
289
|
|
|
290
|
+
if getattr(hooks, "identity_card_chars", 0) > 0:
|
|
291
|
+
_add("identity_card", lambda: self._build_identity_card(hooks))
|
|
292
|
+
|
|
279
293
|
pinned_cap = _layer_cap(hooks, "pinned")
|
|
280
294
|
if pinned_cap > 0:
|
|
281
295
|
_add(
|
|
@@ -285,6 +299,22 @@ class MemoryAwareRetriever(MemoryRetriever):
|
|
|
285
299
|
),
|
|
286
300
|
)
|
|
287
301
|
|
|
302
|
+
# Ambient-noise exclusion for the AUTOMATIC search layers (explicit
|
|
303
|
+
# memory_search tool calls are unaffected): screen-observation style
|
|
304
|
+
# buffers can dominate a vault and drown real recall.
|
|
305
|
+
_excluded = set(getattr(hooks, "search_exclude_categories", ()) or ())
|
|
306
|
+
|
|
307
|
+
def _drop_excluded(hits):
|
|
308
|
+
if not _excluded or not hits:
|
|
309
|
+
return hits
|
|
310
|
+
kept = []
|
|
311
|
+
for h in hits:
|
|
312
|
+
cat = (getattr(h, "metadata", None) or {}).get("category")
|
|
313
|
+
if cat in _excluded:
|
|
314
|
+
continue
|
|
315
|
+
kept.append(h)
|
|
316
|
+
return kept
|
|
317
|
+
|
|
288
318
|
if hooks.slim_mode or hooks.always_render_vault_map:
|
|
289
319
|
_add(
|
|
290
320
|
"vault_map",
|
|
@@ -302,11 +332,16 @@ class MemoryAwareRetriever(MemoryRetriever):
|
|
|
302
332
|
vec = self._provider.vector()
|
|
303
333
|
if vec is None:
|
|
304
334
|
return None
|
|
305
|
-
return await vec.search(query, top_k=hooks.max_results)
|
|
335
|
+
return _drop_excluded(await vec.search(query, top_k=hooks.max_results))
|
|
306
336
|
|
|
307
337
|
_add("vector", _fetch_vector)
|
|
308
338
|
|
|
309
|
-
|
|
339
|
+
async def _fetch_kw_notes() -> Any:
|
|
340
|
+
return _drop_excluded(
|
|
341
|
+
await self._provider.notes().search(query, limit=hooks.max_results)
|
|
342
|
+
)
|
|
343
|
+
|
|
344
|
+
_add("kw_notes", _fetch_kw_notes)
|
|
310
345
|
_add("kw_ltm", lambda: self._provider.ltm().search(query, limit=hooks.max_results))
|
|
311
346
|
|
|
312
347
|
async def _fetch_curated() -> Any:
|
|
@@ -442,6 +477,88 @@ class MemoryAwareRetriever(MemoryRetriever):
|
|
|
442
477
|
|
|
443
478
|
# ── L1.5 ────────────────────────────────────────────────────────
|
|
444
479
|
|
|
480
|
+
async def _load_identity_card(
|
|
481
|
+
self,
|
|
482
|
+
chunks: List[MemoryChunk],
|
|
483
|
+
total: int,
|
|
484
|
+
hooks: MemoryHooks,
|
|
485
|
+
*,
|
|
486
|
+
prefetched: Any = _UNFETCHED,
|
|
487
|
+
) -> int:
|
|
488
|
+
cap = getattr(hooks, "identity_card_chars", 0) or 0
|
|
489
|
+
if cap <= 0:
|
|
490
|
+
return total
|
|
491
|
+
if prefetched is not _UNFETCHED:
|
|
492
|
+
text = prefetched or ""
|
|
493
|
+
else:
|
|
494
|
+
text = await self._build_identity_card(hooks)
|
|
495
|
+
if not text:
|
|
496
|
+
return total
|
|
497
|
+
# By design this layer ignores the shared budget check: it is ≤ cap
|
|
498
|
+
# (small) and the whole point is that no budget pressure can evict it.
|
|
499
|
+
chunks.append(
|
|
500
|
+
MemoryChunk(
|
|
501
|
+
key="identity_card",
|
|
502
|
+
content=text,
|
|
503
|
+
source="identity_card",
|
|
504
|
+
relevance_score=3.0,
|
|
505
|
+
metadata={"layer": "identity_card", "char_count": len(text)},
|
|
506
|
+
)
|
|
507
|
+
)
|
|
508
|
+
return total + len(text)
|
|
509
|
+
|
|
510
|
+
async def _build_identity_card(self, hooks: MemoryHooks) -> str:
|
|
511
|
+
cap = getattr(hooks, "identity_card_chars", 0) or 0
|
|
512
|
+
if cap <= 0:
|
|
513
|
+
return ""
|
|
514
|
+
# Primary: the fact ledger's identity/relationship/prohibition rows.
|
|
515
|
+
try:
|
|
516
|
+
from geny_executor.memory.facts import FactLedger, render_identity_card
|
|
517
|
+
|
|
518
|
+
state = await FactLedger(self._provider).load()
|
|
519
|
+
text = render_identity_card(state.facts, max_chars=cap)
|
|
520
|
+
if text:
|
|
521
|
+
return text
|
|
522
|
+
except Exception: # noqa: BLE001
|
|
523
|
+
logger.debug("memory_aware: identity card (ledger) failed", exc_info=True)
|
|
524
|
+
# Fallback: identity-tagged notes in the pinned category — covers the
|
|
525
|
+
# (observed) real world where the ledger is empty but the persona has
|
|
526
|
+
# pinned "user name / honorific / taboo" notes by hand.
|
|
527
|
+
try:
|
|
528
|
+
notes = self._provider.notes()
|
|
529
|
+
metas = await notes.list(category=hooks.pin_category)
|
|
530
|
+
tags_of_interest = {"identity", "호칭", "금지주제", "금기", "이름"}
|
|
531
|
+
picked = [
|
|
532
|
+
m
|
|
533
|
+
for m in metas
|
|
534
|
+
if tags_of_interest & {str(t) for t in (m.tags or [])}
|
|
535
|
+
]
|
|
536
|
+
if not picked:
|
|
537
|
+
return ""
|
|
538
|
+
lines = ["[핀 고정 사실 — 이미 아는 것으로 전제할 것. 다시 묻지 말 것.]"]
|
|
539
|
+
used = len(lines[0])
|
|
540
|
+
seen: set = set()
|
|
541
|
+
for m in picked:
|
|
542
|
+
note = await notes.read(m.ref.filename)
|
|
543
|
+
if note is None or not (note.body or "").strip():
|
|
544
|
+
continue
|
|
545
|
+
stmt = " ".join((note.body or "").split())
|
|
546
|
+
key = stmt.casefold()
|
|
547
|
+
if key in seen:
|
|
548
|
+
continue
|
|
549
|
+
seen.add(key)
|
|
550
|
+
line = f"- {stmt}"
|
|
551
|
+
if len(line) > cap // 2:
|
|
552
|
+
line = line[: cap // 2].rstrip() + "…"
|
|
553
|
+
if used + len(line) + 1 > cap:
|
|
554
|
+
break
|
|
555
|
+
lines.append(line)
|
|
556
|
+
used += len(line) + 1
|
|
557
|
+
return "\n".join(lines) if len(lines) > 1 else ""
|
|
558
|
+
except Exception: # noqa: BLE001
|
|
559
|
+
logger.debug("memory_aware: identity card (fallback) failed", exc_info=True)
|
|
560
|
+
return ""
|
|
561
|
+
|
|
445
562
|
async def _load_pinned_facts(
|
|
446
563
|
self,
|
|
447
564
|
chunks: List[MemoryChunk],
|
|
@@ -466,8 +583,19 @@ class MemoryAwareRetriever(MemoryRetriever):
|
|
|
466
583
|
if not content or not str(content).strip():
|
|
467
584
|
return total
|
|
468
585
|
body = str(content)
|
|
469
|
-
|
|
586
|
+
# TRUNCATE, never drop (2.64.4). Silently discarding the whole layer
|
|
587
|
+
# when it didn't fit meant identity/prohibition facts vanished exactly
|
|
588
|
+
# on the turns with the most conversation history — the persona then
|
|
589
|
+
# asked its owner's name mid-relationship. Pinned facts are the last
|
|
590
|
+
# layer that may disappear wholesale; a bounded slice always ships.
|
|
591
|
+
room = budget - total
|
|
592
|
+
if room <= 0:
|
|
470
593
|
return total
|
|
594
|
+
if len(body) > room:
|
|
595
|
+
logger.debug(
|
|
596
|
+
"memory_aware: pinned facts truncated %d → %d chars", len(body), room
|
|
597
|
+
)
|
|
598
|
+
body = body[: max(0, room - 12)].rstrip() + "\n…(truncated)"
|
|
471
599
|
chunks.append(
|
|
472
600
|
MemoryChunk(
|
|
473
601
|
key="pinned_facts",
|
{geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/vector/qdrant_store.py
RENAMED
|
@@ -172,8 +172,53 @@ class QdrantVectorStore:
|
|
|
172
172
|
return await self.index_document(ref, [DocumentChunk(text=text)])
|
|
173
173
|
|
|
174
174
|
async def index_batch(self, items: Sequence[Tuple[NoteRef, str]]) -> int:
|
|
175
|
+
"""Bulk (re)index — the session-resume warm-up path.
|
|
176
|
+
|
|
177
|
+
Idempotent since 2.64.3: points already carry ``content_sha1``, so
|
|
178
|
+
one payload-only scroll of the collection lets unchanged notes skip
|
|
179
|
+
the embedder entirely. Re-embedding the whole vault on every resume
|
|
180
|
+
(6k notes ≈ minutes of embedding HTTP, repeated every idle-evict
|
|
181
|
+
cycle) was pure waste. Scroll failure falls back to full indexing —
|
|
182
|
+
correctness never depends on the skip.
|
|
183
|
+
"""
|
|
184
|
+
if not items:
|
|
185
|
+
return 0
|
|
186
|
+
existing: Dict[str, str] = {}
|
|
187
|
+
try:
|
|
188
|
+
await self._ensure_collection()
|
|
189
|
+
qdrant = self._get_qdrant()
|
|
190
|
+
offset = None
|
|
191
|
+
while True:
|
|
192
|
+
batch, offset = await qdrant.scroll(
|
|
193
|
+
collection_name=self._collection,
|
|
194
|
+
limit=1024,
|
|
195
|
+
offset=offset,
|
|
196
|
+
with_payload=["filename", "content_sha1", "chunk_index", "chunk_count"],
|
|
197
|
+
with_vectors=False,
|
|
198
|
+
)
|
|
199
|
+
for point in batch or []:
|
|
200
|
+
payload = getattr(point, "payload", None) or {}
|
|
201
|
+
# Only single-chunk chunk-0 points represent a plain note
|
|
202
|
+
# body — multi-chunk documents always re-index.
|
|
203
|
+
if payload.get("chunk_index") == 0 and payload.get("chunk_count") == 1:
|
|
204
|
+
fname = payload.get("filename")
|
|
205
|
+
sha = payload.get("content_sha1")
|
|
206
|
+
if fname and sha:
|
|
207
|
+
existing[str(fname)] = str(sha)
|
|
208
|
+
if not offset:
|
|
209
|
+
break
|
|
210
|
+
except Exception: # noqa: BLE001 — skip-map is an optimization only
|
|
211
|
+
logger.debug("qdrant: sha scroll failed — full re-index", exc_info=True)
|
|
212
|
+
existing = {}
|
|
213
|
+
|
|
175
214
|
total = 0
|
|
176
215
|
for ref, text in items:
|
|
216
|
+
# Compare the sha of the UNMODIFIED text — index_document stores
|
|
217
|
+
# sha1(chunk.text) verbatim (strip() is only its emptiness test).
|
|
218
|
+
if (text or "").strip() and existing.get(ref.filename) == hashlib.sha1(
|
|
219
|
+
(text or "").encode("utf-8")
|
|
220
|
+
).hexdigest():
|
|
221
|
+
continue
|
|
177
222
|
total += await self.index(ref, text)
|
|
178
223
|
return total
|
|
179
224
|
|