Repository navigation
catalog: hindsight memory provider from vectorize-io/hindsight (subdir, pin dc75038; memory-provider migration) - #119767
Merged
Merged
Conversation
…r hindsight-integrations/hermes) Pins the maintainer-owned copy of the formerly bundled plugins/memory/hindsight at dc75038866a3966b5bf5c82ff57c7a758bb4070a (tree identical to tag v0.10.1). Same provider name, memory.hindsight section, data dir and tool names, so hermes_cli/memory_provider_migration.py can install it for existing users once the bundled copy leaves core.
૮ >ﻌ< ა ci reviewran on 4d3892b — catalog: hindsight memory provider from vectorize-io/hindsig debug infoCI timingsCI timings · View report · View jobWall time 6m16s vs 6m15s (+0.3%). 3 job(s) slower, 6 faster, 3 unchanged.
|
This was referenced Sep 23, 2026
7 of 8 tasks
nicoloboschi
added a commit
to vectorize-io/hindsight
that referenced
this pull request
Sep 23, 2026
teknium authored the real entry in NousResearch/hermes-agent#119767, so plugin-catalog-entry.yaml is a second copy of a file we do not own and would silently drift from the one that actually ships. The README now points at theirs and states the consequence that matters: changes here reach nobody until that pin moves.
nicoloboschi
added a commit
to vectorize-io/hindsight
that referenced
this pull request
Sep 23, 2026
…#4655) * fix(hermes): port two post-handoff fixes and floor the deps at 0.10.1 Closes #4640. Two fixes landed on hermes-agent's bundled copy after the 2026-09-17 handoff and never reached this tree. Users moved onto our copy by the catalog migration would have regressed on both. - Bounded append-mode turn buffer (hermes-agent 6e1de4850e6, their #62950). sync_turn now clears _session_turns after an append retain instead of moving the watermark to its length. The retain job snapshots its own content and append retains only ever read the un-retained tail, so keeping the turns pinned the whole session in memory on long-running gateway sessions. Overwrite mode is untouched — it resends the full session each retain and must keep every turn. This also removes a duplicate write: on_session_switch flushes the WHOLE buffer under the old document id, so after an append retain it re-shipped turns that had already been stored. test_session_switch_starts_a_new_document was pinning that second retain; it now expects one per session. - Gated root warning (hermes-agent cd3de040ab9). initialize() records warning_callback/platform and _start_embedded_daemon routes the "cannot run as root" notice through the host's sink, falling back to gateway.warning_notifications.render_notification, instead of an unconditional stderr print. That is what lets users opt out of user-channel warnings on messaging platforms. Also drops the `hooks:` key from plugin.yaml. Hermes reads `provides_hooks`, and the bundled copy dropped the declaration in 72ee40fa680 because memory providers get their lifecycle calls through the provider interface, not registered hooks. Separately, floors the declared deps at >=0.10.1. hindsight-embed 0.10.0 (on PyPI 2026-09-14 to 2026-09-21) shipped a probe that ran asyncio.run on the caller's thread, clearing its event loop, so the next client call hit an aiohttp session bound to a dead loop and local_embedded failed outright. Anyone who installed in that window is pinned to the broken release until a floor moves them off it; _MIN_CLIENT_VERSION moves with it so _maybe_upgrade_client() pulls the client forward on session start rather than waiting for a `hermes update`. Both behaviour fixes have a regression test, each verified to fail on the pre-fix code. * chore(hermes): drop our copy of the catalog entry teknium authored the real entry in NousResearch/hermes-agent#119767, so plugin-catalog-entry.yaml is a second copy of a file we do not own and would silently drift from the one that actually ships. The README now points at theirs and states the consequence that matters: changes here reach nobody until that pin moves. * review: read the warning sink directly and pin its defaults __init__ now guarantees _warning_callback/_platform, so the getattr fallbacks carried over from the upstream port were dead defensiveness. Reading the attributes directly makes the __init__ defaults load-bearing, so a test pins them: availability probes construct a provider without ever calling initialize(), and _start_embedded_daemon reads both.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Lists the maintainer-owned copy of the
hindsightmemory provider (vectorize-io/hindsight, subdirhindsight-integrations/hermes) in the plugin catalog sohermes_cli/memory_provider_migration.py(#114569) can install it for existingmemory.provider: hindsightusers once the bundledplugins/memory/hindsightleaves core.Do not merge from a sweep — Teknium lands this one himself (memory-provider migration, first provider).
Entry
dc75038866a3966b5bf5c82ff57c7a758bb4070a— last default-branch commit touching the subdir (2026-09-21); tag v0.10.1 (f8950b0) has a byte-identical subdir treesubdirhindsight-integrations/hermeslocal_embeddedmode the plugin self-installs thehindsight-allPyPI package on first use via core's lazy-install path (honourssecurity.allow_lazy_installs);hermes memory setupfetches its bank-template catalog fromraw.githubusercontent.com(vectorize-io/hindsightmain)Intake gates at the pin
hermes plugins validate— ok, 13/13 checks, 0 warnings, in the main venv and a bare py3.11pip install -evenv (with and without--install-deps).plugin_python_deps.resolve(..., dry_run=True)— ok (hindsight-client>=0.6.1,<1,hindsight-embed>=0.6.1,<1; hindsight-client stays at core's 0.6.1 pin).uv pip installhints, an example LAN URL and a test fixture.desktop/bundle; no subprocess; no vendor credential stores; egress = Hindsight API/UI hosts, the templates JSON above, openrouter default base URL for embedded mode.scripts/validate_plugin_catalog.py plugin-catalog/—OK: 242 file(s) valid;extract-plugins.pyemits the entry.Diff vs the bundled copy (origin/main 731e99d)
The handoff was byte-identical; the pin is a
ruff formatpass plus a 188-line semantic delta:embedded.py::_ensure_local_runtime()(self-install ofhindsight-allon the local_embedded availability probe, replacing core's_provider_pip_dependenciesspecial case),pyproject.toml+uv.lock,tests/(stubbed core), README for standalone install, aplugin-catalog-entry.yamldraft.plugin.yamlcarries a strayhooks: [on_session_end]key (notprovides_hooks; ignored by validate).tools.lazy_deps.ensure("memory.hindsight"), the PLUGIN-COMPAT block.6e1de4850e6bounded append-mode turn buffer (Unbounded in-memory caches accumulate in long-running gateway/TUI processes #62950) andcd3de040ab9gated root-warning presentation. Reported upstream: hermes integration: two post-handoff fixes from the bundled hermes-agent copy are missing (append-mode turn buffer bound, gated root warning) vectorize-io/hindsight#4640; neither blocks listing.Live E2E — bundled→catalog migration (#114569) on a real scratch home
Fake
HOME/HERMES_HOME, editable venv of this branch, fake OpenAI stub for the LLM,HINDSIGHT_API_KEYfake withapi_urlon an unreachable loopback; live catalog cache seeded with this branch'sextract-plugins.pyoutput (the entry is not published yet).hermes memory status,hermes chat -Q -q hiregistered (3 tools),activated; toolshindsight_recall/reflect/retainhermes chat -Q -q hi✓ Memory provider 'hindsight' moved out of core — installed its plugin from the catalog…; installed tree byte-identical to the pin;.install-metadata.jsonpinned: true, sha = pin;.env+hindsight/config.jsonunchanged; config.yaml gains onlyplugins.enabled: [hindsight]hermes memory statusinstalled/available;hermes plugins list→catalog:community;plugins.manage listrowsource: userwithcatalog_name/sha/version; Desktop Memory surfaceGET /api/memory/providers/hindsight/config?surface=declared→ 5 fieldshermes updatehook (migrate_all_homes) ×2security.allow_lazy_installs: falseat agent startsecurity.allow_lazy_installs: falseon the update hookhermes profile create x --clonememory.provider,plugins.enabled) but notplugins/; the update hook andhermes -p x chatboth install into the clone home;--clone-allcopiesplugins/Full transcript: lane scratch
RESULTS.md(every command + output).Infographic