Commit Graph

392 Commits

Author SHA1 Message Date
Teknium aa1b487f3b Merge branch 'simp/r3-27-D' into simp/integration3 2026-09-02 21:58:39 -07:00
Teknium 4c57ca38bb Merge branch 'simp/r3-27-C' into simp/integration3 2026-09-02 21:58:38 -07:00
Teknium 3b6dddc007 Merge branch 'simp/r3-27-B' into simp/integration3 2026-09-02 21:58:37 -07:00
Teknium 10c1457847 refactor(langfuse,hindsight): extract _build_client from _get_langfuse; fold usage-detail and delta-turn selection 2026-09-02 21:57:58 -07:00
Teknium 67ad059f0b refactor(openviking): inline single-use helpers, compact client/probe/tool code paths 2026-09-02 21:57:21 -07:00
Teknium 58277b0252 refactor(memory,langfuse): fold small helpers (read_file line parse, json hint merge, env-file parse, setup prompts) 2026-09-02 21:49:17 -07:00
Teknium 58f5d23f78 refactor(honcho): compact cli setup/status/identity bodies (help bytes identical) 2026-09-02 21:48:08 -07:00
Teknium cdef26332c Merge branches 'simp/r3-27-D-super' and 'simp/r3-27-D-rb' into simp/r3-27-D 2026-09-02 21:44:12 -07:00
Teknium 4c3e5cf2d9 refactor(memory,langfuse): unify recall/reflect calls, client close, hook client+key resolution; dict-comprehension metadata builders 2026-09-02 21:41:07 -07:00
Teknium 33f883219a refactor(honcho): compact client/session modules (no behavior change) 2026-09-02 21:36:44 -07:00
Teknium 7760efd76e refactor(openviking): compact setup wizard — shared cancel option, _say, inline profile validation 2026-09-02 21:34:04 -07:00
Teknium abe730fa40 refactor(memory/byterover): compact provider init, sync_turn and tool result path 2026-09-02 21:33:46 -07:00
Teknium a6b45ffb1f refactor(memory/supermemory): _quietly helper for log-and-return, tuple-driven tool schemas, inline single-use helpers 2026-09-02 21:32:00 -07:00
Teknium 7984db2e76 refactor(memory/retaindb): tighten provider init/prefetch/file tools and client headers 2026-09-02 21:31:56 -07:00
Teknium b5721f7cc4 refactor(memory): compact discovery/config-schema docs, fold CLI scan early-returns, dedupe hindsight setup/template request building 2026-09-02 21:28:43 -07:00
Teknium 93ee1c0e38 refactor(honcho): compact cli helpers and provider bodies (no behavior change) 2026-09-02 21:20:55 -07:00
Teknium 94ed143de2 refactor(hindsight): split initialize() into settings phase helpers; unify prefetch join and retain enqueue 2026-09-02 21:18:13 -07:00
Teknium bc2d79058b refactor(openviking): unify turn-upload/thread-tracking/settings helpers, drop dead wrappers 2026-09-02 21:18:06 -07:00
Teknium 38a5c86729 refactor(memory): compact retaindb queue bootstrap/overlay and byterover config loader/schemas 2026-09-02 21:16:10 -07:00
Teknium 8e35634acc refactor(hindsight): compact __init__ state setup, header docs and helper docstrings 2026-09-02 21:13:55 -07:00
Teknium cfa88e0104 refactor(memory/byterover): tool dispatch as one data table (arg, fail msg, runner, formatter) 2026-09-02 21:13:20 -07:00
Teknium 9e3fbba4d2 refactor(memory/supermemory): unify client build, tool dispatch with error prefixes, config loading; drop dead prefetch state 2026-09-02 21:12:37 -07:00
Teknium b0b8e39862 refactor(memory/retaindb): compact queue connection handling, prefetch assembly, dispatch and shutdown 2026-09-02 21:12:01 -07:00
Teknium a2811e03f1 refactor(memory/retaindb): inline single-use prefetch fetchers into jobs table, fold config strip, merge queue close helpers 2026-09-02 21:06:38 -07:00
Teknium c829298476 refactor(memory/byterover): flatten _run_brv error handling, compact provider init/hooks/dispatch 2026-09-02 21:01:39 -07:00
Teknium 42291693ab refactor(memory/retaindb): fold HTTP calls into one _http helper, unify debug-logged failures via _quiet, compact schemas/client 2026-09-02 20:57:29 -07:00
Teknium 4d1880e0bf fix(integration): restore subprocess encoding/stdin guards dropped in simplification
Simplification workers collapsed subprocess call sites into shared kwargs
helpers and dropped the Windows/TUI safety kwargs on the way:

- encoding='utf-8', errors='replace' restored on text=True runs in
  copilot_acp_client, hermes_cli/setup (vercel install), managed_uv
  (codesign steps), local_runtime/hardware._stdout, a2a adapter.
- stdin=subprocess.DEVNULL restored on copilot probe, verify/runner
  _SUBPROCESS_KW, iron_proxy._run, google_meet playwright/system_profiler,
  simplex convert, whatsapp _RUN_TEXT, mem0 ollama serve Popen.
  google_meet sudo/brew install keeps inherited stdin (user-confirmed,
  may prompt) — marked noqa: subprocess-stdin.
- Windows-safe SIGKILL: getattr(signal, 'SIGKILL', SIGTERM) in
  verify/runner; photon _kill call re-marked windows-footgun: ok
  (unreachable on win32).
- scripts/check_subprocess_stdin.py now recognizes **kwargs splats
  (**_KW / **_kw(...)) ONLY when the same-file definition provably sets
  stdin= — covers tui_gateway _capture_run_kwargs/run_kw. Parity test added.
2026-09-02 16:36:10 -07:00
Teknium 57c35858e3 refactor(plugins/memory): holographic/supermemory/retaindb/byterover — action dispatch tables, unified HTTP helpers, dead code removal; provider registry dedupe 2026-09-02 13:30:10 -07:00
Teknium 87a450145c refactor(plugins/memory): mem0 — table-driven setup prompts, tool dispatch, compact backend 2026-09-02 13:30:10 -07:00
Teknium 64f430a051 refactor(plugins/memory): honcho — extract session context/auth/peers/migration, dialectic, client cache, tool schemas; unify _parse_* config helpers; table-driven CLI 2026-09-02 13:30:09 -07:00
Teknium 3cd4d6d69a refactor(plugins/memory): hindsight — split settings/embedded/setup modules, unify config parsing, remove dead helpers 2026-09-02 13:30:09 -07:00
Teknium 365485a9f6 refactor(plugins/memory): openviking — remove dead search/rebuild/migrate paths, extract setup/CLI with dedupe, action dispatch tables 2026-09-02 13:30:09 -07:00
Teknium cd7811a7a7 fix(memory/hindsight): propagate profile scope into background threads under multiplex
Under multiplex_profiles the Hindsight provider's writer, daemon-start and
prefetch threads were spawned as bare threading.Thread, so they started with
an empty contextvars Context: no profile secret scope and no HERMES_HOME
override. get_secret() fails closed there, so the local_embedded daemon never
booted and every retain raised UnscopedSecretError, even though the spawning
thread (initialize()/sync_turn() inside the gateway's copy_context'd turn) had
the scope all along.

Spawn each thread with contextvars.copy_context().run so the child inherits
the spawner's scope + home override. No environ fallback, no re-parsed .env.
The shared hindsight-loop thread needs no wrap: coroutines submitted via
run_coroutine_threadsafe already run in the submitter's context per call.

Fixes #92608
Fixes #94933

Co-authored-by: KIAgent01 <297567825+KIAgent01@users.noreply.github.com>
Co-authored-by: Parker Fawcett <259203091+Parker-Fawcett@users.noreply.github.com>
2026-09-02 07:00:13 -07:00
ehz0ah 71a8240170 docs(openviking): clarify remember extraction semantics 2026-09-01 14:11:55 +05:30
ehz0ah 7fef5c7898 fix(openviking): clarify remember submission status 2026-09-01 14:11:55 +05:30
ehz0ah 6446e19cb5 fix(openviking): route remember through session extraction 2026-09-01 14:11:55 +05:30
ehz0ah 64b96bb5d2 fix(openviking): synchronize setup connection state 2026-08-31 17:20:45 +05:30
ehz0ah 823bcc887a feat(openviking): use user memory by default
Remove the implicit hermes peer and the peer question from new connection setup. Preserve explicit peer settings and keep memory paths consistent with the captured client identity.

Add setup, configuration, request, recall, and session regression tests, plus upgrade guidance.
2026-08-31 17:20:45 +05:30
GodsBoy e38cca50d6 fix(memory): keep Mem0 OSS OpenAI requests direct 2026-08-29 18:02:19 -07:00
pierrenode 6766732620 fix(memory-setup): route .env writer through save_env_value's validation gate
hermes_cli/memory_setup.py::_write_env_vars() wrote provider-controlled
.env entries with a direct Path.write_text() + post-hoc chmod, bypassing
the denylist/regex/CRLF-stripping/atomic-replace validation that
hermes_cli/config.py::save_env_value() already provides for every other
.env writer in the codebase. A malicious or buggy memory-provider plugin
declaring a crafted env-var name/value in its setup schema could inject
arbitrary lines into .env.

Routes memory-provider env writes through save_env_value(), and fixes a
regression this surfaced in plugins/memory/supermemory/__init__.py::
post_setup(), which called the old two-parameter _write_env_vars(env_path,
values) signature — restores the caller via context-local
hermes_constants.set_hermes_home_override()/reset_hermes_home_override()
instead of a removed env_path parameter, so explicit HERMES_HOME overrides
during setup still resolve correctly.

Adds test_env_file_created_with_secure_permissions, guarded on Windows
(POSIX mode bits aren't enforced there, mirroring the existing skip in
test_openviking_provider.py / test_supermemory_provider.py) since
save_env_value's atomic-replace path creates the temp file at 0o600 before
writing content, closing the TOCTOU window the old direct-write + chmod
implementation had.
2026-08-26 15:48:39 -07:00
kshitijk4poor fab534b503 fix: omit User-Agent from anonymous OpenViking identity probes
Anonymous probes (_anonymous_json) are designed to probe server identity
before disclosing credentials. Sending the Hermes version on these probes
would fingerprint the exact version to an untrusted/MITM endpoint.

Keep User-Agent on authenticated requests (_headers) and multipart uploads
(_multipart_headers), which already send credentials.
2026-08-26 12:43:17 +05:30
ehz0ah 3db5267008 feat(openviking): identify Hermes requests 2026-08-26 12:43:17 +05:30
kshitijk4poor b0cf2597c2 fix: follow-up for salvaged PR #93985 — cache key, snapshot, dead code
- Key _user_space_cache on _conn_snapshot instead of client object identity,
  so _new_client() results from the same connection share the cached user
  (previously every on_memory_write triggered an uncached /api/v1/system/status
  probe with a 30s default timeout)
- Thread a short timeout (0.05s) through the write-path identity probe
- Harden _tool_remember to snapshot the client before URI construction + POST,
  matching the pattern already established in on_memory_write
- Remove dead instance method _user_scoped_uri (zero callers; all call sites
  use the module-level function directly)

Co-authored-by: ehz0ah <haozhe4547@gmail.com>
2026-08-25 12:27:21 +05:30
ehz0ah 4387e03960 fix(memory): keep OpenViking identity operations consistent 2026-08-25 12:27:21 +05:30
ehz0ah 5ff03cb0c4 fix(memory): scope OpenViking user cache to connection 2026-08-25 12:27:21 +05:30
liuhao1024 7cd43cdf52 fix(memory): emit explicit-uid OpenViking URIs resolved from system status
Review follow-up to the viking://~ migration: the ~ home alias only
expands for USER/ADMIN roles. The DEFAULT dev auth mode (no
server.auth_mode, no root_api_key) resolves every request as ROOT,
which bypasses current-user expansion — the canonical parser rejects
viking://~ with 400 'Home alias URI is not canonical' (verified on a
live 0.4.16 server). A deployment upgrading to 0.4.16 with an
untouched ov.conf is in dev mode, so the ~ spelling would break
exactly the way the old uid-less one will.

Mirror the upstream first-party plugin pattern instead: resolve the
user space client-side from /api/v1/system/status (result.user,
'default' fallback) and emit explicit-uid
viking://user/<user>/memories/... URIs, which are canonical under
every auth mode (dev/ROOT, trusted/USER, api-key) and every server
version. viking://~/... input typed by the user keeps passing through
untouched. (#91995)
2026-08-25 12:27:21 +05:30
liuhao1024 fc4c2f456b fix(memory): migrate OpenViking URIs to the viking://~ home alias
Upstream OpenViking removed the uid-less viking://user/<segment>
shorthand (#4196, merged 2026-08-21): reserved segments like memories
and peers no longer expand to the caller's space and the server
rejects them with HTTP 400 (NamespaceShapeError). First-party clients
were migrated to viking://~ in the same change; the Hermes plugin was
not (#91995).

Migrate every URI the plugin constructs — the profile/preferences/
entities session-start reads, the _build_memory_uri memory-mirroring
write path, and the tool-schema example — to viking://~/... README
uid-less references updated to match; canonical user-scoped forms
(viking://user/default/...) are unchanged. The ~ alias requires
OpenViking server >= 0.4.16 (#4167).
2026-08-25 12:27:21 +05:30
Teknium 32fb12a235 fix(hindsight): let hindsight_retain convey event time via occurred_at
Adds an optional occurred_at (ISO-8601 date/datetime) parameter to the
hindsight_retain tool schema, threaded into the retain item's timestamp
field. When absent, the item timestamp defaults to the configured event
clock (base from PR #82928 by @ragingbulld, authorship preserved) so the
Hindsight server can resolve relative time phrases; previously no item
timestamp was ever sent and temporal memories landed with null
occurred_start/occurred_end.

Fixes #93568. Salvages #82928.
2026-08-24 03:23:52 -07:00
Fabiao De Gongniu 497d6d5a66 fix(hindsight): harden event timestamps 2026-08-24 03:23:52 -07:00
Fabiao De Gongniu 97850afa33 fix(hindsight): send configured event timestamps
Use Hermes timezone-aware timestamps for retained events and turn messages. Pass the public timestamp field supported by hindsight-client 0.6.1 and cover the final serialized request field.
2026-08-24 03:23:52 -07:00