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.
Files changed (794) hide show
  1. {geny_executor-2.64.2 → geny_executor-2.64.4}/PKG-INFO +1 -1
  2. {geny_executor-2.64.2 → geny_executor-2.64.4}/pyproject.toml +1 -1
  3. geny_executor-2.64.4/src/geny_executor/memory/_offload.py +40 -0
  4. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/facts.py +47 -1
  5. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/provider.py +12 -0
  6. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/index_store.py +55 -7
  7. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/notes_store.py +21 -1
  8. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/vector_store.py +29 -2
  9. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/retriever.py +131 -3
  10. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/vector/qdrant_store.py +45 -0
  11. geny_executor-2.64.4/tests/unit/test_identity_card_and_pinned.py +159 -0
  12. geny_executor-2.64.4/tests/unit/test_index_sidecar_coalescing.py +162 -0
  13. {geny_executor-2.64.2 → geny_executor-2.64.4}/.gitignore +0 -0
  14. {geny_executor-2.64.2 → geny_executor-2.64.4}/LICENSE +0 -0
  15. {geny_executor-2.64.2 → geny_executor-2.64.4}/NOTICE +0 -0
  16. {geny_executor-2.64.2 → geny_executor-2.64.4}/README.md +0 -0
  17. {geny_executor-2.64.2 → geny_executor-2.64.4}/README_ko.md +0 -0
  18. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/__init__.py +0 -0
  19. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/audio/__init__.py +0 -0
  20. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/audio/stt/__init__.py +0 -0
  21. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/audio/stt/openai_compatible.py +0 -0
  22. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/audio/stt/provider.py +0 -0
  23. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/audio/stt/registry.py +0 -0
  24. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/channels/__init__.py +0 -0
  25. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/channels/built_in.py +0 -0
  26. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/channels/factory.py +0 -0
  27. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/channels/send_message_channel.py +0 -0
  28. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/channels/user_file_channel.py +0 -0
  29. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/__init__.py +0 -0
  30. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/artifact.py +0 -0
  31. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/builder.py +0 -0
  32. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/compaction.py +0 -0
  33. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/config.py +0 -0
  34. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/context_prune.py +0 -0
  35. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/diff.py +0 -0
  36. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/environment.py +0 -0
  37. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/environment_control.py +0 -0
  38. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/errors.py +0 -0
  39. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/introspection.py +0 -0
  40. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/manifest_factory.py +0 -0
  41. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/message_repair.py +0 -0
  42. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/mutation.py +0 -0
  43. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/pipeline.py +0 -0
  44. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/presets.py +0 -0
  45. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/result.py +0 -0
  46. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/schema.py +0 -0
  47. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/shared_keys.py +0 -0
  48. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/slot.py +0 -0
  49. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/snapshot.py +0 -0
  50. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/stage.py +0 -0
  51. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/state.py +0 -0
  52. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/core/token_estimate.py +0 -0
  53. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/__init__.py +0 -0
  54. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/runner.py +0 -0
  55. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/store_abc.py +0 -0
  56. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/store_impl/__init__.py +0 -0
  57. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/store_impl/file_backed.py +0 -0
  58. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/store_impl/in_memory.py +0 -0
  59. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/cron/types.py +0 -0
  60. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/events/__init__.py +0 -0
  61. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/events/bus.py +0 -0
  62. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/events/catalog.py +0 -0
  63. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/events/types.py +0 -0
  64. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/__init__.py +0 -0
  65. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/adapter.py +0 -0
  66. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/discord.py +0 -0
  67. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/factory.py +0 -0
  68. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/runner.py +0 -0
  69. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/slack.py +0 -0
  70. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/telegram.py +0 -0
  71. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/types.py +0 -0
  72. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/gateway/ws_base.py +0 -0
  73. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/__init__.py +0 -0
  74. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/ab_test.py +0 -0
  75. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/cost.py +0 -0
  76. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/models.py +0 -0
  77. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/monitor.py +0 -0
  78. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/replay.py +0 -0
  79. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/history/service.py +0 -0
  80. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/hooks/__init__.py +0 -0
  81. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/hooks/config.py +0 -0
  82. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/hooks/events.py +0 -0
  83. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/hooks/runner.py +0 -0
  84. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/__init__.py +0 -0
  85. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/_cli_runtime.py +0 -0
  86. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/anthropic.py +0 -0
  87. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/base.py +0 -0
  88. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/claude_code.py +0 -0
  89. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/credentials.py +0 -0
  90. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/google.py +0 -0
  91. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/local_probe.py +0 -0
  92. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/model_discovery.py +0 -0
  93. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/openai.py +0 -0
  94. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/openai_compatible.py +0 -0
  95. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/profiles.py +0 -0
  96. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/registry.py +0 -0
  97. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/translators/__init__.py +0 -0
  98. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/translators/_canonical.py +0 -0
  99. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/translators/_cli.py +0 -0
  100. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/types.py +0 -0
  101. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/llm_client/vllm.py +0 -0
  102. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/__init__.py +0 -0
  103. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/_locks.py +0 -0
  104. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/_progressive.py +0 -0
  105. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/composite/__init__.py +0 -0
  106. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/composite/handles.py +0 -0
  107. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/composite/provider.py +0 -0
  108. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/composite/routing.py +0 -0
  109. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/composite/snapshot.py +0 -0
  110. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/__init__.py +0 -0
  111. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/client.py +0 -0
  112. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/google.py +0 -0
  113. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/local.py +0 -0
  114. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/openai.py +0 -0
  115. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/openai_compatible.py +0 -0
  116. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/registry.py +0 -0
  117. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/embedding/voyage.py +0 -0
  118. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/factory.py +0 -0
  119. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/graph_rank.py +0 -0
  120. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/presets.py +0 -0
  121. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/__init__.py +0 -0
  122. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/ephemeral.py +0 -0
  123. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/__init__.py +0 -0
  124. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/config.py +0 -0
  125. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/frontmatter.py +0 -0
  126. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/graph_edges.py +0 -0
  127. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/layout.py +0 -0
  128. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/ltm_store.py +0 -0
  129. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/provider.py +0 -0
  130. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/snapshot.py +0 -0
  131. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/stm_store.py +0 -0
  132. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/file/timezone.py +0 -0
  133. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/__init__.py +0 -0
  134. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/config.py +0 -0
  135. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/connection.py +0 -0
  136. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/index_store.py +0 -0
  137. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/ltm_store.py +0 -0
  138. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/notes_store.py +0 -0
  139. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/provider.py +0 -0
  140. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/schema.py +0 -0
  141. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/snapshot.py +0 -0
  142. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/stm_store.py +0 -0
  143. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/providers/sql/vector_store.py +0 -0
  144. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/rollup.py +0 -0
  145. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/strategy.py +0 -0
  146. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/memory/vector/__init__.py +0 -0
  147. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/notifications/__init__.py +0 -0
  148. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/notifications/registry.py +0 -0
  149. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/permission/__init__.py +0 -0
  150. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/permission/loader.py +0 -0
  151. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/permission/matrix.py +0 -0
  152. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/permission/types.py +0 -0
  153. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/py.typed +0 -0
  154. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/runtime/__init__.py +0 -0
  155. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/runtime/task_executors.py +0 -0
  156. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/runtime/task_runner.py +0 -0
  157. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/security/__init__.py +0 -0
  158. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/security/import_validator.py +0 -0
  159. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/security/script_sandbox.py +0 -0
  160. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/session/__init__.py +0 -0
  161. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/session/freshness.py +0 -0
  162. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/session/manager.py +0 -0
  163. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/session/persistence.py +0 -0
  164. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/session/session.py +0 -0
  165. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/settings/__init__.py +0 -0
  166. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/settings/loader.py +0 -0
  167. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/settings/section_registry.py +0 -0
  168. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/__init__.py +0 -0
  169. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/batch/SKILL.md +0 -0
  170. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/debug/SKILL.md +0 -0
  171. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/environment/REFERENCE.md +0 -0
  172. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/environment/SKILL.md +0 -0
  173. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/loop/SKILL.md +0 -0
  174. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/lorem-ipsum/SKILL.md +0 -0
  175. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/simplify/SKILL.md +0 -0
  176. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/skillify/SKILL.md +0 -0
  177. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/stuck/SKILL.md +0 -0
  178. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/tool-builder/REFERENCE.md +0 -0
  179. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/tool-builder/SKILL.md +0 -0
  180. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled/verify/SKILL.md +0 -0
  181. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/bundled_skills.py +0 -0
  182. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/fork.py +0 -0
  183. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/frontmatter.py +0 -0
  184. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/loader.py +0 -0
  185. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/mcp_bridge.py +0 -0
  186. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/path_match.py +0 -0
  187. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/registry.py +0 -0
  188. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/shell_blocks.py +0 -0
  189. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/skill_tool.py +0 -0
  190. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/types.py +0 -0
  191. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/skills/watcher.py +0 -0
  192. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/__init__.py +0 -0
  193. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/__init__.py +0 -0
  194. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/_helpers.py +0 -0
  195. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/cancel.py +0 -0
  196. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/clear.py +0 -0
  197. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/compact.py +0 -0
  198. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/config.py +0 -0
  199. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/context.py +0 -0
  200. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/cost.py +0 -0
  201. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/help.py +0 -0
  202. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/memory.py +0 -0
  203. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/model.py +0 -0
  204. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/preset_info.py +0 -0
  205. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/status.py +0 -0
  206. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/built_in/tasks.py +0 -0
  207. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/md_template.py +0 -0
  208. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/parser.py +0 -0
  209. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/registry.py +0 -0
  210. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/slash_commands/types.py +0 -0
  211. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/__init__.py +0 -0
  212. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/__init__.py +0 -0
  213. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/artifact/__init__.py +0 -0
  214. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/artifact/default/__init__.py +0 -0
  215. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/artifact/default/normalizers.py +0 -0
  216. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/artifact/default/stage.py +0 -0
  217. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/artifact/default/validators.py +0 -0
  218. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/interface.py +0 -0
  219. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/normalizers.py +0 -0
  220. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/stage.py +0 -0
  221. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/types.py +0 -0
  222. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s01_input/validators.py +0 -0
  223. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/__init__.py +0 -0
  224. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/artifact/__init__.py +0 -0
  225. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/artifact/default/__init__.py +0 -0
  226. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/artifact/default/compactors.py +0 -0
  227. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/artifact/default/retrievers.py +0 -0
  228. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/artifact/default/stage.py +0 -0
  229. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/artifact/default/strategies.py +0 -0
  230. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/compactors.py +0 -0
  231. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/interface.py +0 -0
  232. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/retrievers.py +0 -0
  233. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/stage.py +0 -0
  234. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/strategies.py +0 -0
  235. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s02_context/types.py +0 -0
  236. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/__init__.py +0 -0
  237. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/artifact/__init__.py +0 -0
  238. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/artifact/default/__init__.py +0 -0
  239. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/artifact/default/builders.py +0 -0
  240. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/artifact/default/stage.py +0 -0
  241. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/builders.py +0 -0
  242. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/interface.py +0 -0
  243. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/persona/__init__.py +0 -0
  244. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/persona/builder.py +0 -0
  245. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/persona/provider.py +0 -0
  246. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s03_system/stage.py +0 -0
  247. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/__init__.py +0 -0
  248. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/artifact/__init__.py +0 -0
  249. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/artifact/default/__init__.py +0 -0
  250. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/artifact/default/guards.py +0 -0
  251. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/artifact/default/stage.py +0 -0
  252. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/guards.py +0 -0
  253. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/interface.py +0 -0
  254. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/stage.py +0 -0
  255. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s04_guard/types.py +0 -0
  256. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/__init__.py +0 -0
  257. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/artifact/__init__.py +0 -0
  258. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/artifact/default/__init__.py +0 -0
  259. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/artifact/default/stage.py +0 -0
  260. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/artifact/default/strategies.py +0 -0
  261. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/interface.py +0 -0
  262. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/stage.py +0 -0
  263. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s05_cache/strategies.py +0 -0
  264. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/__init__.py +0 -0
  265. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/_translate.py +0 -0
  266. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/__init__.py +0 -0
  267. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/default/__init__.py +0 -0
  268. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/default/providers.py +0 -0
  269. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/default/retry.py +0 -0
  270. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/default/router.py +0 -0
  271. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/default/stage.py +0 -0
  272. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/default/tool_loop.py +0 -0
  273. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/google/__init__.py +0 -0
  274. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/google/providers.py +0 -0
  275. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/openai/__init__.py +0 -0
  276. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/artifact/openai/providers.py +0 -0
  277. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/interface.py +0 -0
  278. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/providers.py +0 -0
  279. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/retry.py +0 -0
  280. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/stage.py +0 -0
  281. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s06_api/types.py +0 -0
  282. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/__init__.py +0 -0
  283. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/artifact/__init__.py +0 -0
  284. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/artifact/default/__init__.py +0 -0
  285. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/artifact/default/pricing.py +0 -0
  286. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/artifact/default/stage.py +0 -0
  287. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/artifact/default/trackers.py +0 -0
  288. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/interface.py +0 -0
  289. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/pricing.py +0 -0
  290. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/stage.py +0 -0
  291. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s07_token/trackers.py +0 -0
  292. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/__init__.py +0 -0
  293. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/artifact/default/__init__.py +0 -0
  294. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/artifact/default/budget.py +0 -0
  295. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/artifact/default/processors.py +0 -0
  296. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/artifact/default/stage.py +0 -0
  297. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/interface.py +0 -0
  298. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/processors.py +0 -0
  299. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/stage.py +0 -0
  300. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s08_think/types.py +0 -0
  301. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/__init__.py +0 -0
  302. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/artifact/default/__init__.py +0 -0
  303. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/artifact/default/parsers.py +0 -0
  304. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/artifact/default/signals.py +0 -0
  305. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/artifact/default/stage.py +0 -0
  306. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/interface.py +0 -0
  307. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/parsers.py +0 -0
  308. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/signals.py +0 -0
  309. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/stage.py +0 -0
  310. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s09_parse/types.py +0 -0
  311. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/__init__.py +0 -0
  312. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/artifact/__init__.py +0 -0
  313. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/artifact/default/__init__.py +0 -0
  314. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/artifact/default/executors.py +0 -0
  315. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/artifact/default/routers.py +0 -0
  316. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/artifact/default/stage.py +0 -0
  317. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/dispatcher.py +0 -0
  318. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/executors.py +0 -0
  319. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/interface.py +0 -0
  320. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/persistence.py +0 -0
  321. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/routers.py +0 -0
  322. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/stage.py +0 -0
  323. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/state_mutation.py +0 -0
  324. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s10_tool/streaming.py +0 -0
  325. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s11_tool_review/__init__.py +0 -0
  326. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s11_tool_review/artifact/__init__.py +0 -0
  327. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s11_tool_review/artifact/default/__init__.py +0 -0
  328. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s11_tool_review/artifact/default/reviewers.py +0 -0
  329. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s11_tool_review/artifact/default/stage.py +0 -0
  330. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s11_tool_review/interface.py +0 -0
  331. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/__init__.py +0 -0
  332. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/artifact/__init__.py +0 -0
  333. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/artifact/default/__init__.py +0 -0
  334. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/artifact/default/orchestrators.py +0 -0
  335. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/artifact/default/stage.py +0 -0
  336. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/interface.py +0 -0
  337. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/orchestrators.py +0 -0
  338. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/persistent_subagent.py +0 -0
  339. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/stage.py +0 -0
  340. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/subagent_catalog.py +0 -0
  341. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/subagent_type.py +0 -0
  342. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s12_agent/types.py +0 -0
  343. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/__init__.py +0 -0
  344. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/artifact/__init__.py +0 -0
  345. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/artifact/default/__init__.py +0 -0
  346. {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
  347. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/artifact/default/policies.py +0 -0
  348. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/artifact/default/registry.py +0 -0
  349. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/artifact/default/stage.py +0 -0
  350. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/interface.py +0 -0
  351. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s13_task_registry/types.py +0 -0
  352. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/__init__.py +0 -0
  353. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/artifact/__init__.py +0 -0
  354. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/__init__.py +0 -0
  355. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/artifact/adaptive/strategy.py +0 -0
  356. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/artifact/default/__init__.py +0 -0
  357. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/artifact/default/stage.py +0 -0
  358. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/artifact/default/strategies.py +0 -0
  359. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/interface.py +0 -0
  360. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/stage.py +0 -0
  361. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/strategies.py +0 -0
  362. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s14_evaluate/types.py +0 -0
  363. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/__init__.py +0 -0
  364. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/artifact/__init__.py +0 -0
  365. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/artifact/default/__init__.py +0 -0
  366. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/artifact/default/requesters.py +0 -0
  367. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/artifact/default/stage.py +0 -0
  368. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/artifact/default/timeouts.py +0 -0
  369. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/interface.py +0 -0
  370. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s15_hitl/types.py +0 -0
  371. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/__init__.py +0 -0
  372. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/artifact/__init__.py +0 -0
  373. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/artifact/default/__init__.py +0 -0
  374. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/artifact/default/controllers.py +0 -0
  375. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/artifact/default/stage.py +0 -0
  376. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/controllers.py +0 -0
  377. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/interface.py +0 -0
  378. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s16_loop/stage.py +0 -0
  379. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/__init__.py +0 -0
  380. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/artifact/__init__.py +0 -0
  381. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/artifact/default/__init__.py +0 -0
  382. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/artifact/default/emitters.py +0 -0
  383. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/artifact/default/stage.py +0 -0
  384. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/emitters.py +0 -0
  385. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/interface.py +0 -0
  386. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/stage.py +0 -0
  387. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s17_emit/types.py +0 -0
  388. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/__init__.py +0 -0
  389. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/_dehydrate.py +0 -0
  390. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/artifact/__init__.py +0 -0
  391. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/artifact/default/__init__.py +0 -0
  392. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/artifact/default/persistence.py +0 -0
  393. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/artifact/default/stage.py +0 -0
  394. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/artifact/default/strategies.py +0 -0
  395. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/insight.py +0 -0
  396. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/interface.py +0 -0
  397. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/persistence.py +0 -0
  398. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/stage.py +0 -0
  399. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s18_memory/strategies.py +0 -0
  400. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/__init__.py +0 -0
  401. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/artifact/__init__.py +0 -0
  402. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/artifact/default/__init__.py +0 -0
  403. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/artifact/default/importance.py +0 -0
  404. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/artifact/default/stage.py +0 -0
  405. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/artifact/default/summarizers.py +0 -0
  406. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/frequency_policy.py +0 -0
  407. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/interface.py +0 -0
  408. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s19_summarize/types.py +0 -0
  409. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/__init__.py +0 -0
  410. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/artifact/__init__.py +0 -0
  411. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/artifact/default/__init__.py +0 -0
  412. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/artifact/default/frequencies.py +0 -0
  413. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/artifact/default/persisters.py +0 -0
  414. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/artifact/default/stage.py +0 -0
  415. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/interface.py +0 -0
  416. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/restore.py +0 -0
  417. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s20_persist/types.py +0 -0
  418. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/__init__.py +0 -0
  419. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/artifact/__init__.py +0 -0
  420. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/artifact/default/__init__.py +0 -0
  421. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/artifact/default/formatters.py +0 -0
  422. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/artifact/default/multi_format.py +0 -0
  423. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/artifact/default/stage.py +0 -0
  424. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/formatters.py +0 -0
  425. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/interface.py +0 -0
  426. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/stages/s21_yield/stage.py +0 -0
  427. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/__init__.py +0 -0
  428. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/_sandbox.py +0 -0
  429. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/_ssh.py +0 -0
  430. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/adhoc.py +0 -0
  431. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/base.py +0 -0
  432. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/__init__.py +0 -0
  433. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/_path_guard.py +0 -0
  434. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/_ssh_store.py +0 -0
  435. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/_web_search_backends.py +0 -0
  436. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/agent_tool.py +0 -0
  437. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/ask_user_question_tool.py +0 -0
  438. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/atlassian_tools.py +0 -0
  439. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/audio_tools.py +0 -0
  440. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/bash_tool.py +0 -0
  441. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/browser_tools.py +0 -0
  442. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/cron_tools.py +0 -0
  443. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/dev_tools.py +0 -0
  444. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/doc_tools.py +0 -0
  445. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/edit_tool.py +0 -0
  446. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/env_tools.py +0 -0
  447. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/glob_tool.py +0 -0
  448. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/google_tools.py +0 -0
  449. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/grep_tool.py +0 -0
  450. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/mcp_wrapper_tools.py +0 -0
  451. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/notebook_edit_tool.py +0 -0
  452. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/operator_tools.py +0 -0
  453. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/plan_mode_tools.py +0 -0
  454. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/push_notification_tool.py +0 -0
  455. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/read_tool.py +0 -0
  456. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/sandbox_exec_tool.py +0 -0
  457. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/send_message_tool.py +0 -0
  458. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/ssh_tools.py +0 -0
  459. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/subagent_tools.py +0 -0
  460. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/task_tools.py +0 -0
  461. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/todo_write_tool.py +0 -0
  462. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/tool_search_tool.py +0 -0
  463. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/web_fetch_tool.py +0 -0
  464. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/web_search_tool.py +0 -0
  465. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/workspace_tools.py +0 -0
  466. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/worktree_tools.py +0 -0
  467. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/built_in/write_tool.py +0 -0
  468. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/composer.py +0 -0
  469. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/errors.py +0 -0
  470. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/__init__.py +0 -0
  471. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/adapter.py +0 -0
  472. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/credentials.py +0 -0
  473. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/errors.py +0 -0
  474. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/manager.py +0 -0
  475. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/oauth.py +0 -0
  476. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/state.py +0 -0
  477. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/mcp/uri.py +0 -0
  478. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/plugin.py +0 -0
  479. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/provider.py +0 -0
  480. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/providers.py +0 -0
  481. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/registry.py +0 -0
  482. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/sandbox.py +0 -0
  483. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/scope.py +0 -0
  484. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/tools/stage_binding.py +0 -0
  485. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/workspace/__init__.py +0 -0
  486. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/workspace/stack.py +0 -0
  487. {geny_executor-2.64.2 → geny_executor-2.64.4}/src/geny_executor/workspace/types.py +0 -0
  488. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/__init__.py +0 -0
  489. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/_fixtures/__init__.py +0 -0
  490. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/_fixtures/fake_claude.py +0 -0
  491. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/_fixtures/fake_echo_cli.py +0 -0
  492. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/_fixtures/geny_manifest_layout.json +0 -0
  493. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/_fixtures/manifest_entries.py +0 -0
  494. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/__init__.py +0 -0
  495. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/conftest.py +0 -0
  496. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/fixtures/__init__.py +0 -0
  497. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/fixtures/adapter/__init__.py +0 -0
  498. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/fixtures/adapter/adapter.py +0 -0
  499. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c1_six_layer_retrieval.py +0 -0
  500. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c2_execution_recording.py +0 -0
  501. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c3_reflection_and_promotion.py +0 -0
  502. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c4_rest_coverage.py +0 -0
  503. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c5_embedding_migration.py +0 -0
  504. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c6_session_resume.py +0 -0
  505. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_c7_adapter_parity.py +0 -0
  506. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/completeness/test_spec_loads.py +0 -0
  507. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/__init__.py +0 -0
  508. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/memory_provider_contract.py +0 -0
  509. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_embedding_clients.py +0 -0
  510. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_error_codes_stability.py +0 -0
  511. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_embedding_credentials.py +0 -0
  512. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_auto_vector.py +0 -0
  513. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_composite.py +0 -0
  514. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_composite_routing.py +0 -0
  515. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_curated_global.py +0 -0
  516. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_ephemeral.py +0 -0
  517. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_factory.py +0 -0
  518. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_file.py +0 -0
  519. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_file_layout.py +0 -0
  520. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_file_vector.py +0 -0
  521. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_sql.py +0 -0
  522. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_sql_dialect.py +0 -0
  523. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_sql_schema.py +0 -0
  524. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_provider_sql_vector.py +0 -0
  525. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_memory_vector_breaker.py +0 -0
  526. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/contract/test_stage_uniformity.py +0 -0
  527. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/integration/test_cycle_ab_cross_import.py +0 -0
  528. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/integration/test_integration.py +0 -0
  529. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/__init__.py +0 -0
  530. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/__init__.py +0 -0
  531. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/harness.py +0 -0
  532. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/test_anthropic.py +0 -0
  533. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/test_claude_code_cli.py +0 -0
  534. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/test_google.py +0 -0
  535. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/test_local_providers.py +0 -0
  536. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/test_openai.py +0 -0
  537. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/conformance/test_vllm.py +0 -0
  538. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/__init__.py +0 -0
  539. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/cli-2.1.149-json.json +0 -0
  540. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/cli-2.1.149-json.meta +0 -0
  541. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/cli-2.1.149-stream.jsonl +0 -0
  542. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/cli-2.1.149-stream.meta +0 -0
  543. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/cli-2.1.162-stream.jsonl +0 -0
  544. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/cli-2.1.162-stream.meta +0 -0
  545. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/golden/test_golden_replay.py +0 -0
  546. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/live/__init__.py +0 -0
  547. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/live/test_live_canaries.py +0 -0
  548. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/__init__.py +0 -0
  549. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_anthropic_build_kwargs.py +0 -0
  550. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_anthropic_classify.py +0 -0
  551. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_base_client.py +0 -0
  552. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_claude_code.py +0 -0
  553. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_cli_cancellation.py +0 -0
  554. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_cli_event_forwarding.py +0 -0
  555. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_cli_prewarm.py +0 -0
  556. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_cli_runtime.py +0 -0
  557. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_container_runner.py +0 -0
  558. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_credentials.py +0 -0
  559. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_google_classify.py +0 -0
  560. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_local_probe.py +0 -0
  561. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_local_tool_repair.py +0 -0
  562. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_openai_client.py +0 -0
  563. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_profiles.py +0 -0
  564. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/llm_client/unit/test_translators_cli_claude_code.py +0 -0
  565. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/__init__.py +0 -0
  566. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_adaptive_model_router.py +0 -0
  567. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_adaptive_router_configure.py +0 -0
  568. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_adaptive_thinking_budget.py +0 -0
  569. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_adhoc_providers.py +0 -0
  570. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_agent_tool.py +0 -0
  571. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_api_timeout_kwarg.py +0 -0
  572. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_artifact_metadata.py +0 -0
  573. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_ask_user_question_tool.py +0 -0
  574. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_atlassian_tools.py +0 -0
  575. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_attach_llm_client_guard.py +0 -0
  576. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_audio_tools.py +0 -0
  577. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_binary_classify_manifest.py +0 -0
  578. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_browser_doc_tools.py +0 -0
  579. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_budget_compaction_recovery.py +0 -0
  580. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_built_in_autoregister.py +0 -0
  581. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_builtin_capabilities.py +0 -0
  582. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_builtin_channels.py +0 -0
  583. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_builtin_features.py +0 -0
  584. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cache_prefix_key.py +0 -0
  585. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cancellation.py +0 -0
  586. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_claude_code_nonstream_prompt.py +0 -0
  587. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_claude_code_vision_wire.py +0 -0
  588. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cli_mcp_passthrough.py +0 -0
  589. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cli_stream_limit.py +0 -0
  590. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_compaction_stm_watermark.py +0 -0
  591. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_composite_set_hooks.py +0 -0
  592. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_concurrent_runs.py +0 -0
  593. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_config_liveness.py +0 -0
  594. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_core_deferred_tools.py +0 -0
  595. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cron_runner.py +0 -0
  596. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cron_store.py +0 -0
  597. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_cron_tools.py +0 -0
  598. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_deterministic_prune_pass.py +0 -0
  599. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_dev_tools.py +0 -0
  600. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_diff_order_keyed.py +0 -0
  601. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_dynamic_persona_builder.py +0 -0
  602. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_embedding_error_classification.py +0 -0
  603. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_embedding_loop_safety.py +0 -0
  604. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_embedding_openai_compatible.py +0 -0
  605. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_errors_categories.py +0 -0
  606. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_evaluation_chain.py +0 -0
  607. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_evaluation_chain_configure.py +0 -0
  608. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_event_catalog.py +0 -0
  609. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_event_channel_unification.py +0 -0
  610. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_event_correlation.py +0 -0
  611. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_external_tool_resolution.py +0 -0
  612. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_forge_tool.py +0 -0
  613. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_fork_multi_provider.py +0 -0
  614. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_from_manifest_strict_validation.py +0 -0
  615. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_gateway.py +0 -0
  616. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_gateway_ws.py +0 -0
  617. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_geny_prod_manifest_repro.py +0 -0
  618. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_graph_edges.py +0 -0
  619. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_graph_rank.py +0 -0
  620. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_guard_fail_fast.py +0 -0
  621. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_hierarchical_sidecars.py +0 -0
  622. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_hook_gate_split.py +0 -0
  623. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_hook_in_process.py +0 -0
  624. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_hook_runner.py +0 -0
  625. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_hook_taxonomy.py +0 -0
  626. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_hooks_and_shared_keys.py +0 -0
  627. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_host_selections_resolve.py +0 -0
  628. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_index_list_categories.py +0 -0
  629. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_index_render_vault_map.py +0 -0
  630. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_interaction_fields.py +0 -0
  631. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_internal_agentic_loop.py +0 -0
  632. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_introspection.py +0 -0
  633. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_client_base.py +0 -0
  634. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_client_capabilities.py +0 -0
  635. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_client_registry.py +0 -0
  636. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_client_request_types.py +0 -0
  637. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_client_state.py +0 -0
  638. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_compactor_selfwire.py +0 -0
  639. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_llm_summary_compactor.py +0 -0
  640. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_loop_agnostic_lock.py +0 -0
  641. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_factory.py +0 -0
  642. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_from_dict_hygiene.py +0 -0
  643. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_memory_wiring.py +0 -0
  644. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_provider_validation.py +0 -0
  645. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_subagents_memory_sections.py +0 -0
  646. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_v2.py +0 -0
  647. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_manifest_v3_migration.py +0 -0
  648. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_annotations_attach.py +0 -0
  649. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_credential_store.py +0 -0
  650. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_fsm.py +0 -0
  651. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_lifecycle.py +0 -0
  652. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_namespace.py +0 -0
  653. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_oauth.py +0 -0
  654. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_prompts_skills_bridge.py +0 -0
  655. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_resource_retriever.py +0 -0
  656. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_uri.py +0 -0
  657. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_mcp_wrapper_tools.py +0 -0
  658. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_memory_aware_retriever.py +0 -0
  659. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_memory_facts.py +0 -0
  660. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_memory_hooks_after_callbacks.py +0 -0
  661. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_memory_metadata_extension.py +0 -0
  662. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_memory_rollup.py +0 -0
  663. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_model_discovery.py +0 -0
  664. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_model_overrides.py +0 -0
  665. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_multi_dim_budget_configure.py +0 -0
  666. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_multi_dim_budget_controller.py +0 -0
  667. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_multi_format_yield.py +0 -0
  668. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_multi_provider.py +0 -0
  669. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_multimodal.py +0 -0
  670. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_note_graph_queries.py +0 -0
  671. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_notebook_edit_tool.py +0 -0
  672. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_notes_load_pinned.py +0 -0
  673. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_notes_store_offloop_scan.py +0 -0
  674. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_operator_tools.py +0 -0
  675. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_ordered_emitter_chain.py +0 -0
  676. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_permission_matrix.py +0 -0
  677. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_permission_mode_promotions.py +0 -0
  678. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_permission_posture.py +0 -0
  679. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_persistent_subagent.py +0 -0
  680. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase1_foundation.py +0 -0
  681. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase1_pipeline.py +0 -0
  682. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase2_agent_loop.py +0 -0
  683. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase2_tools.py +0 -0
  684. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase3_context_memory.py +0 -0
  685. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase4_think_agent_evaluate.py +0 -0
  686. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase5_emit_presets_mcp.py +0 -0
  687. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase5_environment.py +0 -0
  688. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase6_history.py +0 -0
  689. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase6_integration.py +0 -0
  690. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase7_security.py +0 -0
  691. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase9a_preset_regen.py +0 -0
  692. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_phase9a_scaffolding.py +0 -0
  693. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_pipeline_aclose.py +0 -0
  694. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_pipeline_attach_runtime.py +0 -0
  695. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_pipeline_events_tap.py +0 -0
  696. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_pipeline_from_manifest.py +0 -0
  697. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_pipeline_hook_lifecycle.py +0 -0
  698. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_pipeline_session_runtime.py +0 -0
  699. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_plan_mode_tools.py +0 -0
  700. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_primary_provider_and_build_reports.py +0 -0
  701. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_progressive_disclosure.py +0 -0
  702. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_provider_driven_strategy.py +0 -0
  703. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_push_notification_tool.py +0 -0
  704. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_qdrant_vector_store.py +0 -0
  705. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_refresh_backlinks_extension.py +0 -0
  706. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_refresh_runtime_and_run_lock.py +0 -0
  707. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_resolve_model_config.py +0 -0
  708. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_restore_bad_strategy_config.py +0 -0
  709. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_reviewer_policy_configure.py +0 -0
  710. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_runtime_task_runner.py +0 -0
  711. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s06_chunk_forwarding.py +0 -0
  712. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s06_provider_selection.py +0 -0
  713. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s13_file_backed_registry.py +0 -0
  714. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s13_task_registry_output.py +0 -0
  715. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s19_frequency_policy.py +0 -0
  716. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9b1_tool_review.py +0 -0
  717. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9b2_task_registry.py +0 -0
  718. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9b3_hitl.py +0 -0
  719. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9b4_summarize.py +0 -0
  720. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9b5_persist.py +0 -0
  721. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9c1_pipeline_resume.py +0 -0
  722. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_s9c2_restore_state.py +0 -0
  723. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_sandbox_attach.py +0 -0
  724. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_sandbox_exec_tool.py +0 -0
  725. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_sandbox_path_mapping.py +0 -0
  726. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_sandbox_tools.py +0 -0
  727. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_security_hardening.py +0 -0
  728. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_self_modifying_env.py +0 -0
  729. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_send_message_tool.py +0 -0
  730. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_settings_loader.py +0 -0
  731. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_level3_resources.py +0 -0
  732. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_1.py +0 -0
  733. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_2.py +0 -0
  734. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_3.py +0 -0
  735. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_4_bundled.py +0 -0
  736. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_5_fork.py +0 -0
  737. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_6_killer.py +0 -0
  738. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_phase_10_7_watcher.py +0 -0
  739. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_richer_schema.py +0 -0
  740. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skill_tool.py +0 -0
  741. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_skills_foundation.py +0 -0
  742. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_slash_built_in_control.py +0 -0
  743. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_slash_built_in_introspection.py +0 -0
  744. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_slash_commands.py +0 -0
  745. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_slash_md_template.py +0 -0
  746. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_sql_stm_session_scope.py +0 -0
  747. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_ssh_tools.py +0 -0
  748. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_stage10_ask_hitl.py +0 -0
  749. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_stage10_hook_wiring.py +0 -0
  750. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_stage10_partition_executor.py +0 -0
  751. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_stage10_permission_matrix.py +0 -0
  752. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_stage19_session_summary.py +0 -0
  753. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_state_mutation_wiring.py +0 -0
  754. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_state_shared_and_local.py +0 -0
  755. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_stm_append_event.py +0 -0
  756. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_storage_growth_caps.py +0 -0
  757. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_strategy_config_roundtrip.py +0 -0
  758. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_streaming_tool_executor.py +0 -0
  759. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_structured_output_parser.py +0 -0
  760. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_structured_reflection.py +0 -0
  761. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_catalog.py +0 -0
  762. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_credential_propagation.py +0 -0
  763. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_descriptor.py +0 -0
  764. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_manifest_compile.py +0 -0
  765. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_orchestrator_zero_arg.py +0 -0
  766. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_parallel.py +0 -0
  767. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_pipeline_lifecycle.py +0 -0
  768. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_subagent_type_orchestrator.py +0 -0
  769. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_task_tools.py +0 -0
  770. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_todo_write_tool.py +0 -0
  771. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_abc_uplift.py +0 -0
  772. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_call_events.py +0 -0
  773. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_errors.py +0 -0
  774. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_lifecycle_hooks.py +0 -0
  775. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_pair_repair.py +0 -0
  776. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_plugins.py +0 -0
  777. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_provider.py +0 -0
  778. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_result_persistence.py +0 -0
  779. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_search_tool.py +0 -0
  780. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_tool_stage_max_concurrency.py +0 -0
  781. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_ttft_cache_overhaul.py +0 -0
  782. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_ttft_critical_path.py +0 -0
  783. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_ttft_warmup_streaming.py +0 -0
  784. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_turn_boundary_state.py +0 -0
  785. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_validate_manifest.py +0 -0
  786. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_vault_map_drill.py +0 -0
  787. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_web_fetch_tool.py +0 -0
  788. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_web_search_backends.py +0 -0
  789. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_web_search_tool.py +0 -0
  790. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_workspace.py +0 -0
  791. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_workspace_propagation.py +0 -0
  792. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_workspace_tools.py +0 -0
  793. {geny_executor-2.64.2 → geny_executor-2.64.4}/tests/unit/test_workspace_tools_integration.py +0 -0
  794. {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.2
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.2"
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
@@ -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
- payload = await self._compute()
104
- self._write_hierarchical_sidecars(payload, category=None)
105
- return payload
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
- async with self._lock:
118
- payload = await self._compute()
119
- self._write_hierarchical_sidecars(payload, category=category)
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
- return await self._compute()
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]] = {}
@@ -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
- cache = await asyncio.to_thread(self._scan_disk)
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
- texts = [text for _, text in items]
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(items, vectors):
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
- _add("kw_notes", lambda: self._provider.notes().search(query, limit=hooks.max_results))
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
- if total + len(body) > budget:
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",
@@ -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