Skip to content

refactor(memory): complete TinyCortex engine migration - #4794

Merged
senamakel merged 30 commits into
tinyhumansai:mainfrom
senamakel:feat/tinycortex-crate-ports
Jul 13, 2026
Merged

senamakel merged 30 commits into
tinyhumansai:mainfrom
senamakel:feat/tinycortex-crate-ports

Conversation

@senamakel

@senamakel senamakel commented Jul 12, 2026

Copy link
Copy Markdown
Member

Summary

  • Complete the TinyCortex migration by moving reusable memory storage, queue, ingestion, sync, tree, scoring, graph, retrieval, source, and summarisation engines into the vendored crate.
  • Replace duplicate host implementations with narrow adapters for Config, providers, credentials, event publication, scheduling, RPC/tools, and product policy.
  • Port embedding providers into tinyagents and preserve one embedding trait identity across both Cargo worlds.
  • Preserve existing SQLite schemas, workspace paths, RPC payloads, source-scope access control, taint propagation, and on-disk Markdown artifacts.
  • Remove 56,100 lines of duplicate host engine/test code while retaining crate and host integration coverage.

Problem

  • OpenHuman still owned large duplicate memory-engine bodies despite TinyCortex being the intended reusable core. The duplication had already drifted in PII handling, source filtering, content hydration, queue settlement, and sealing behavior.
  • Storage and tree cutovers had to remain atomic across the shared SQLite connection; piecemeal delegation would risk dual connection semantics and inconsistent persisted types.

Solution

Submission Checklist

  • Tests added or updated (happy path + failure/edge cases): crate unit/integration coverage and host E2E fixtures were updated.
  • Diff coverage ≥ 80%: migrated engine lines are covered by the 1,118-test TinyCortex suite; CI remains authoritative for the merged diff gate.
  • N/A: Coverage matrix feature rows are unchanged; this is an implementation ownership migration with stable product behavior.
  • N/A: No affected feature IDs; user-facing feature inventory is unchanged.
  • No new production network behavior; sync tests use mocked Composio transport. The temporary git source pins reviewed dependency code only.
  • N/A: Release smoke surfaces and user workflows are unchanged.
  • N/A: No single tracking issue is being auto-closed; this executes the checked-in TinyCortex migration specification.

Impact

Related


AI Authored PR Metadata (required for Codex/Linear PRs)

Linear Issue

  • Key: N/A
  • URL: N/A

Commit & Branch

  • Branch: feat/tinycortex-crate-ports
  • Commit SHA: b3880460c0ccc42e68316ac08125845ff2cd2e4c

Validation Run

  • pnpm --filter openhuman-app format:check
  • pnpm typecheck
  • Focused tests: TinyCortex 1,118 passed; tinyagents embeddings 35 passed; source/retrieval/tree/queue/safety/goals focused suites passed.
  • Rust fmt/check: GGML_NATIVE=OFF cargo check --tests passed across all host targets; post-dependency cargo check --lib passed.
  • Tauri fmt/check: formatting passed; compile blocked by missing local glib-2.0.pc before project code compilation.

Validation Blocked

  • command: cargo check --manifest-path app/src-tauri/Cargo.toml
  • error: local system package glib-2.0 is absent from pkg-config search paths
  • impact: environment-only Linux desktop prerequisite; CI runners install the required GTK/GLib packages. The dependency graph resolves to one vendored tinyagents crate before this native build step.

Behavior Changes

  • Intended behavior change: engine ownership moves to reusable crates with parity fixes for hydration, source filtering, atomic sealing, and PII boundary handling.
  • User-visible effect: no intentional workflow or RPC change.

Parity Contract

  • Legacy behavior preserved: SQLite schema/table names, Markdown paths/frontmatter, embedding signatures, taint, source scopes, RPC payloads, and scheduler/event integration.
  • Guard/fallback/dispatch parity checks: golden workspace tests, mocked sync E2E, source-scope-before-limit tests, queue settlement tests, sealing atomicity tests, and full host test-target compilation.

Duplicate / Superseded PR Handling

  • Duplicate PR(s): N/A
  • Canonical PR: this PR
  • Resolution (closed/superseded/updated): N/A

Summary by CodeRabbit

  • New Features

    • Added unified synchronization and backfill flows for Gmail, Slack, and other connected sources, with clearer ingestion counts, status reporting, and audit tracking.
    • Added compatibility support for OpenAI, Cohere, Voyage, Ollama, and cloud embedding providers.
    • Expanded tree sealing, summarization, document ingestion, retrieval, and memory-source handling.
  • Bug Fixes

    • Improved embedding endpoint error detection for additional HTTP 404/405 response formats.
    • Improved Gmail ingestion validation and embedding behavior for empty inputs.
  • Refactor

    • Standardized memory, queue, ingestion, retrieval, and synchronization behavior across shared engine components.

@senamakel
senamakel requested a review from a team July 12, 2026 11:34
@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 31 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 700c0be6-4587-43bd-9a58-1fac6d8e4f61

📥 Commits

Reviewing files that changed from the base of the PR and between e797300 and 823142b.

📒 Files selected for processing (14)
  • src/openhuman/agent/harness/session/builder/factory.rs
  • src/openhuman/memory_sync/composio/providers/traits.rs
  • src/openhuman/memory_tree/retrieval/integration_tests.rs
  • src/openhuman/tinycortex/mod.rs
  • src/openhuman/tinycortex/sync.rs
  • tests/raw_coverage/embeddings_ollama_raw_coverage_e2e.rs
  • tests/raw_coverage/memory_core_threads_raw_coverage_e2e.rs
  • tests/raw_coverage/memory_sync_round23_raw_coverage_e2e.rs
  • tests/raw_coverage/memory_sync_slack_bus_raw_coverage_e2e.rs
  • tests/raw_coverage/memory_sync_tree_round21_raw_coverage_e2e.rs
  • tests/raw_coverage/memory_threads_raw_coverage_e2e.rs
  • tests/raw_coverage/memory_tree_sync_raw_coverage_e2e.rs
  • vendor/tinyagents
  • vendor/tinycortex
📝 Walkthrough

Walkthrough

This PR migrates OpenHuman memory, embeddings, ingestion, retrieval, queue, tree, and synchronization paths to TinyCortex and TinyAgents adapters. It also updates Cargo patching, provider backfill flows, session memory connections, endpoint detection, and related tests.

Changes

TinyCortex migration

Layer / File(s) Summary
Dependency and embedding adapters
Cargo.toml, app/src-tauri/Cargo.toml, src/openhuman/embeddings/*
TinyCortex features and vendored TinyAgents patches are configured; embedding providers delegate through TinyAgents models and compatibility wrappers.
Ingestion and memory contracts
src/openhuman/memory/*, src/openhuman/memory_store/*, src/openhuman/memory_queue/*
Memory contracts, ingestion, queue operations, storage, safety, and tree persistence are delegated to TinyCortex adapters.
Synchronization and source pipelines
src/openhuman/memory_sync/*, src/openhuman/tinycortex/*, src/bin/*backfill*.rs
Composio, Gmail, Slack, source readers, audit state, and backfill flows use TinyCortex orchestration and host adapters.
Retrieval and tree runtime
src/openhuman/memory_tree/*
Retrieval, scoring, graph traversal, sealing, summarization, and runtime storage delegate to TinyCortex implementations.
Tests and compatibility updates
src/openhuman/**tests*, tests/*
Tests update provider defaults, document ingestion, sync-state adapters, raw artifact setup, and embedding cardinality expectations.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested labels: rust-core, memory

Suggested reviewers: codeghost21, m3ga-mind, sanil-23

Poem

I’m a rabbit watching crates align,
TinyCortex hops through every line.
Embeddings burrow, queues run neat,
Syncing carrots from source to seat.
Tests twitch bright in the moonlit glow.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 62.96% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: completing the memory engine migration to TinyCortex.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b3880460c0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/openhuman/tinycortex/sync.rs Outdated
Comment thread src/openhuman/tinycortex/sync.rs Outdated

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: db76303ba9

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/openhuman/memory/ingest_pipeline.rs Outdated
Comment thread src/bin/gmail_backfill_3d.rs Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 12, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a8acb19e30

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/openhuman/memory_tree/retrieval/source.rs Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 12, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 12, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 67b1b84c55

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/openhuman/memory_tree/retrieval/drill_down.rs Outdated
Comment thread src/openhuman/memory_sources/sync.rs

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e03b9f31fb

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@@ -348,50 +348,38 @@ impl Memory for UnifiedMemory {
&self,
namespace: Option<&str>,
category: Option<&MemoryCategory>,
_session_id: Option<&str>,
session_id: Option<&str>,
) -> anyhow::Result<Vec<MemoryEntry>> {
let ns = normalize_namespace(namespace);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Sanitize namespaces before listing memory rows

When callers list a namespace containing characters that are sanitized on write (for example team alpha/#1, which upsert_document stores as team_alpha/_1), this new direct SQL path queries the unsanitized normalize_namespace value. The previous list_documents(Some(ns)) call sanitized internally, so Memory::list(Some(...)) now returns an empty list for valid namespaces with spaces, #, dots, etc.; apply UnifiedMemory::sanitize_namespace before binding the namespace, matching the write path.

Useful? React with 👍 / 👎.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 12, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4a42fa76dd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

.tick(
&pipeline_id,
&memory_config,
&source_sync_context(memory, config, false),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Route Gmail backfill through the memory-tree sink

When gmail-backfill-3d calls run_gmail_backfill, this local=false context supplies no LocalDocumentSink; the Gmail pipeline therefore stores via the SkillDocSink path (HostSyncAdapter::storestore_skill_sync) instead of the old ingest_page_into_memory_tree path. Operators running the backfill get records_ingested but chunks.db/content files remain empty, and the existing integrity check just verifies zero chunks. Use a memory-tree/local-document sink for this backfill or update the CLI semantics.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 751500ca69

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +381 to +383
.store_skill_sync(
&document.namespace_skill_id,
&document.connection_id,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Clear skill-sync documents when deleting connections

When a Gmail/Slack/etc. Composio sync stores through this SkillDocSink, it writes memory_docs rows in skill-* namespaces via store_skill_sync, but composio_delete_connection(clear_memory=true) only enumerates MemoryCleanupTargets that delete memory-tree chunks and never clears these namespace documents. In that delete-with-clear-memory scenario, newly synced emails/messages/docs can remain listed/searchable after the connection is removed; include the skill-* documents for the connection in the cleanup path as well.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f9439b9487

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +222 to +223
source.max_items = max_items;
source.sync_depth_days = sync_depth_days;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve Composio sync caps when no override is passed

When run_composio_connection or the provider sync default calls this helper with max_items/sync_depth_days as None, these assignments overwrite any registered source caps (and even the fallback defaults created above) with None. That makes manual, trigger-driven, and connection-created Composio syncs run uncapped instead of honoring the user's per-source limits; only replace these fields when an override is actually present.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: a64e623367

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

source_id,
source_kind,
scope,
usize::MAX,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Cap cover-window scans before querying

When memory_tree_cover_window is called for a broad window (for example the morning-brief path over a busy 24h period) with a small or default return limit, this now asks TinyCortex for usize::MAX hits and only truncates after the full response is materialized. The previous implementation bounded the DB scan to MAX_WINDOW_CHUNKS/per-source caps before building the cover, so large workspaces can now scan and allocate over every in-window chunk just to return the first 200 results; pass the caller/default cap (or restore an internal scan cap) into the engine instead of disabling the limit here.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e06a1d8473

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +164 to +170
let outcome = openhuman_core::openhuman::tinycortex::run_gmail_backfill(
&connection_id,
&query,
cli.max_pages as usize,
cli.page_size as usize,
&config,
)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Honor --include-spam-trash in Gmail backfills

When gmail-backfill-3d --include-spam-trash is used, the new path only omits the -in:spam -in:trash query filter and then calls run_gmail_backfill, which has no way to pass the Gmail/Composio include_spam_trash flag. The previous implementation set args["include_spam_trash"] = true; without that boolean, Gmail fetches still use the default exclusion, so this CLI option no longer includes Spam/Trash despite reporting that it will.

Useful? React with 👍 / 👎.

.tick(
&pipeline_id,
&memory_config,
&source_sync_context(memory, config, false),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Route Slack search backfill through the tree sink

When slack-backfill --use-search runs, this passes local=false, and source_sync_context therefore omits the LocalDocumentSink/summariser that feed memory-tree ingestion. The old run_backfill_via_search path grouped search results and called ingest_page_into_memory_tree, so operators using search backfill populated tree chunks; with only the skill-document sink available, the command can report records while memory-tree retrieval remains empty for those backfilled Slack messages.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d944413508

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

.map_err(|e| format!("kv_set_global: {e}"))?;
Ok(())
pub async fn kv_set_global(&self, key: &str, value: &serde_json::Value) -> Result<(), String> {
self.tinycortex_kv()?.set_global(key, value)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Restore KV safety filtering before delegating writes

When openhuman.memory_kv_set or other KV callers persist user-provided keys/values, this direct delegation bypasses the host safety checks that previously rejected secret/PII-like keys/namespaces and sanitized JSON payloads before writing kv_global/kv_namespace (the unchanged kv_set_* tests still assert that contract). As a result, a value containing bearer tokens or a key like ssn-... can be stored and later recalled from memory instead of being redacted/rejected; keep the host safety gate here or make the crate call enforce the same contract before writing.

Useful? React with 👍 / 👎.

@senamakel
senamakel merged commit 96c3703 into tinyhumansai:main Jul 13, 2026
16 checks passed
yh928 added a commit to yh928/openhuman that referenced this pull request Aug 5, 2026
The reshape that slims a verbose `GMAIL_FETCH_EMAILS` payload into one record
per message — body pre-rendered as markdown — lost its caller when the sync
moved into TinyCortex (tinyhumansai#4794 deleted `gmail/source.rs`, which called it). Since
then the sync has been storing the raw provider payload as document content.

The pipeline lives below this crate and cannot call the reshape, so wrap the
executor it fetches through: every successful page is reshaped before the
pipeline turns it into a document, in the same order the pre-migration sync
used (pin the response-level `markdownFormatted` per message, then slim the
envelope). Error responses pass through untouched so the sync's own error
handling still sees provider diagnostics.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SRSNnqQsokuGmkbpLoLCGy
senamakel added a commit to nocstah/openhuman that referenced this pull request Sep 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

memory Memory store, memory tree, recall, summarization, and embeddings in src/openhuman/memory/. rust-core Core Rust runtime in src/: CLI, core_server, shared infrastructure.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant