Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
c330033
refactor(rpc): replace direct chunk store calls with memory guard
senamakel Aug 23, 2026
6730fe5
fix(rpc): correct ChunkQuery import path
senamakel Aug 23, 2026
0e2d1a0
fix(ranking): handle empty memory list in ranking function
senamakel Aug 23, 2026
ebe4925
test(ranking): add initial test module for ranking functionality
senamakel Aug 23, 2026
88b419b
feat(memory): add host-side ranking module for agent search tools
senamakel Aug 23, 2026
2cb0237
refactor(search): replace external tinycortex imports with internal r…
senamakel Aug 23, 2026
34d2a99
chore(tree): add import for MemoryProvider
senamakel Aug 23, 2026
ef53030
feat(cargo): add memory feature gate
senamakel Aug 23, 2026
a897831
feat(core): enable memory feature in Tauri app and CI
senamakel Aug 23, 2026
c676309
refactor(memory): re-export contract types directly from tinymemory-api
senamakel Aug 23, 2026
044438a
docs(specs): add memory bus specification for remaining surface
senamakel Aug 23, 2026
8b80fe5
feat(memory): gate memory submodules behind a feature flag
senamakel Aug 23, 2026
45128a3
fix(memory): add missing stub module for memory
senamakel Aug 23, 2026
7cfa69a
docs(AGENTS.md): add `memory` feature entry to the feature table
senamakel Aug 23, 2026
f62d7c5
refactor: replace `crate::openhuman::memory::sync::composio::provider…
senamakel Aug 23, 2026
0da789b
fix(stub): correct import path for ControllerSchema
senamakel Aug 23, 2026
69b9788
refactor(threads): replace internal memory module with tinymemory_core
senamakel Aug 23, 2026
00fba76
chore: files changed src/openhuman/desktop/provider_surfaces/schemas.…
senamakel Aug 23, 2026
1a0d845
chore(memory): gate memory-related modules and re-exports behind the …
senamakel Aug 23, 2026
06fdd2f
feat(agent): gate memory-related modules behind the "memory" feature
senamakel Aug 23, 2026
289ac17
chore(agent): gate learning module behind memory feature
senamakel Aug 23, 2026
70fd6e6
fix(ops): gate memory-dependent tools behind the memory feature
senamakel Aug 23, 2026
88c25d2
fix(tools): gate goals and tool-stats tools behind memory feature
senamakel Aug 23, 2026
f13f7e7
fix(core): gate memory controllers behind the memory feature flag
senamakel Aug 23, 2026
7dc327c
chore(core): remove conditional compilation guards from memory contro…
senamakel Aug 23, 2026
6919751
feat(core): gate memory API behind the "memory" feature flag
senamakel Aug 23, 2026
4b90437
fix(context): guard memory init behind feature flag
senamakel Aug 23, 2026
bc2bc26
feat(agent): gate learning blocks behind memory feature flag
senamakel Aug 23, 2026
7f1722f
fix(agent): gate memory-dependent hooks behind feature flag
senamakel Aug 23, 2026
1010857
fix(agent): gate memory-dependent hooks behind the memory feature
senamakel Aug 23, 2026
0d1ab24
feat(agent): gate archivist_hook with memory feature
senamakel Aug 23, 2026
dc14f8f
refactor(memory): extract citation types into their own module
senamakel Aug 23, 2026
e29b1ab
refactor(memory): move MemoryCitation and CROSS_CHAT_HEADER to citati…
senamakel Aug 23, 2026
9a2560b
feat(harness): gate ArchivistHook import behind memory feature
senamakel Aug 23, 2026
f9cd71a
fix(types): gate archivist_hook fields behind memory feature
senamakel Aug 23, 2026
5fb83cb
feat(builder): conditionally compile archivist_hook under memory feature
senamakel Aug 23, 2026
f742e09
fix: guard archivist hook call with memory feature flag
senamakel Aug 23, 2026
668f6b7
fix: replace internal crate path with tinymemory_core for conversatio…
senamakel Aug 23, 2026
b4c2ab8
chore(memory): gate memory-dependent items behind the memory feature
senamakel Aug 23, 2026
6a59bed
chore: files changed src/openhuman/flows/mod.rs,src/openhuman/flows/n…
senamakel Aug 23, 2026
087afae
refactor(memory): replace inline namespace constants with re-export f…
senamakel Aug 23, 2026
a0a42b0
feat(ops): add compile-time error when memory feature is disabled
senamakel Aug 23, 2026
bf522f9
feat(core): gate memory-dependent registrations and jobs behind the m…
senamakel Aug 23, 2026
db8a6b5
refactor(memory): centralize namespace constants in a dedicated module
senamakel Aug 23, 2026
3af06bf
fix(agent): gate memory-dependent code behind feature flag
senamakel Aug 23, 2026
26c20eb
fix(runner): gate memory retrieval import behind feature flag
senamakel Aug 23, 2026
506fe97
fix(security): replace external crate path with internal module path
senamakel Aug 23, 2026
b162a4b
fix: guard conversation persistence subscriber and LinkedIn scrape be…
senamakel Aug 23, 2026
301d157
chore: files changed src/openhuman/agent/harness/subagent_runner/ops/…
senamakel Aug 23, 2026
99300dd
feat(subagent-runner): add feature gate for memory agent fast path
senamakel Aug 23, 2026
a53a99b
feat(core): gate memory subsystem behind a Cargo feature
senamakel Aug 23, 2026
7301ba4
feat(core): add memory ingest-payload schema-validation check
senamakel Aug 23, 2026
013279f
feat(memory): gate memory agent and module behind feature flag
senamakel Aug 23, 2026
b863d46
fix(core): gate memory-dependent code behind the memory feature
senamakel Aug 23, 2026
ce04d6f
feat(core): gate memory_cli module behind memory feature
senamakel Aug 23, 2026
1e88e6a
feat(memory): gate memory-tree operations behind the memory feature flag
senamakel Aug 23, 2026
c148565
feat(memory): gate memory-dependent code behind the "memory" feature …
senamakel Aug 23, 2026
cf24614
fix(helpers): gate prefetch_tool_memory_rules_blocking behind memory …
senamakel Aug 23, 2026
fdf7c8b
fix: gate memory-related imports behind the `memory` feature
senamakel Aug 23, 2026
6cfe295
fix(processor): gate memory context import behind feature flag
senamakel Aug 23, 2026
efcbaf0
fix(core): gate composio memory features behind `memory` feature flag
senamakel Aug 23, 2026
05d0dde
fix(agent): guard memory-dependent code behind feature flag
senamakel Aug 23, 2026
7bba3c6
chore(memory): ungate the host module to keep Config satisfying Memor…
senamakel Aug 23, 2026
4bcb8ce
fix(core, flows): gate FlowRunDigestSubscriber and its registration b…
senamakel Aug 23, 2026
3e70977
feat(memory): gate user error publishing behind the memory feature
senamakel Aug 23, 2026
6d27ad4
fix(core): correct module path for slack memory controllers
senamakel Aug 23, 2026
b37e279
chore(memory): remove unused serde import from memory_loader
senamakel Aug 23, 2026
5e4418f
test(direct_engine_refs): update allowed dependency list for retarget…
senamakel Aug 23, 2026
7600447
test(direct_engine_refs): add FacadeRevealed entries for dependency r…
senamakel Aug 23, 2026
8ba10eb
chore: files changed src/openhuman/memory/direct_engine_refs_tests.rs
senamakel Aug 23, 2026
4017923
chore: reorder imports and reformat code across multiple modules
senamakel Aug 23, 2026
12dd45e
fix(agent): move citation variable bindings inside cfg block
senamakel Aug 23, 2026
f47906b
docs(AGENTS.md): document the `memory` gate design and rationale
senamakel Aug 23, 2026
87552e1
refactor(rpc): migrate list_chunks and get_chunk to direct store calls
senamakel Aug 23, 2026
e92a525
chore: files changed docs/specs/2026-08-23-memory-bus-only-remaining-…
senamakel Aug 23, 2026
aa292e5
chore(tree): remove trailing blank line in rpc.rs
senamakel Aug 23, 2026
62570ce
feat(memory): add guard_for_config for caller-named workspace
senamakel Aug 23, 2026
15eebf8
refactor(rpc): replace direct chunk store calls with memory provider
senamakel Aug 23, 2026
83521c9
refactor(rpc): replace async guard calls with spawn_blocking for chun…
senamakel Aug 23, 2026
15193e2
chore(memory): remove unused `guard_for_config` function
senamakel Aug 23, 2026
a22edf3
docs(specs): rewrite A9 to document a verification gap instead of a p…
senamakel Aug 23, 2026
5c78192
fix(rpc): update get_chunk_rpc doc comment to reflect actual failure …
senamakel Aug 23, 2026
b35feaf
docs(spec): correct A9 section to describe injection seam instead of …
senamakel Aug 23, 2026
fea5c2d
docs(tree): update migration comment to point at injection seam
senamakel Aug 23, 2026
e70790e
docs(specs): revise memory-bus migration plan for chunk readers
senamakel Aug 23, 2026
0bba5dd
docs(specs): reorder A9 to run in parallel with earlier steps
senamakel Aug 23, 2026
b4bafdb
docs: update comment on get_chunk_rpc to clarify why an injection sea…
senamakel Aug 23, 2026
327e026
docs(specs): update A9 with email blocker and correct writer migratio…
senamakel Aug 23, 2026
940d711
docs(specs): update A9 timing to reflect current v1.2.0 capabilities
senamakel Aug 23, 2026
29e372f
refactor(tree): update comment on memory bus migration blockers
senamakel Aug 23, 2026
83599bb
feat(memory): add in-memory chunk provider for handler round-trip tests
senamakel Aug 23, 2026
2bd6d59
feat(memory): implement MemoryCore and MemoryIngest for InMemoryChunks
senamakel Aug 23, 2026
0619e0f
feat(memory): implement MemoryChunks, MemoryRecall, MemoryPortability…
senamakel Aug 23, 2026
e2b16ef
fix(guard): add missing imports for in-memory guard
senamakel Aug 23, 2026
563f8f5
feat(memory): update in-memory guard to match new portability interface
senamakel Aug 23, 2026
9af380a
feat(memory): update InMemoryChunks to match revised MemoryCore trait
senamakel Aug 23, 2026
9d0e0ea
test(in-memory-chunks): add integration tests for guarded in-memory c…
senamakel Aug 23, 2026
ac7005f
fix(test): update DataSource import path in in_memory_chunks_tests
senamakel Aug 23, 2026
5665e19
fix(test): correct data source variant in test helper
senamakel Aug 23, 2026
babbb79
docs(specs): update A9 analysis with IngestOutcome blocker
senamakel Aug 23, 2026
3e53fe5
fix(docs): correct A9 dependency description in memory bus spec
senamakel Aug 23, 2026
dc68bae
chore(docs): update design notes on guarded memory round-trips
senamakel Aug 23, 2026
df222a3
fix: use sort_by_key with Reverse for descending sort
senamakel Aug 23, 2026
a6ec238
chore: files changed docs/specs/2026-08-23-memory-bus-only-remaining-…
senamakel Aug 23, 2026
efb2edf
merge: resolve upstream main into pr/5695
senamakel Aug 29, 2026
bdeac9c
chore: files changed .claude/memory.md,.github/workflows/ci-full.yml,…
senamakel Aug 29, 2026
9167b2d
chore: complete upstream merge additions
senamakel Aug 29, 2026
3311926
fix(memory): support memory-disabled builds and correct MMR scoring
senamakel Aug 29, 2026
eacb825
fix(subsystem): report disabled memory status
senamakel Aug 29, 2026
1ad11d9
chore: files changed src/core/subsystem/schemas.rs,src/openhuman/memo…
senamakel Aug 29, 2026
855f5a2
style: format cfg-gated Rust blocks
senamakel Aug 29, 2026
33f5347
fix(memory): gate memory modules behind memory feature
senamakel Aug 29, 2026
cd46d7f
fix(memory): gate memory tools behind feature flag
senamakel Aug 29, 2026
2d60441
refactor(memory): reorder module declarations
senamakel Aug 29, 2026
bc17c20
refactor(memory): make memory modules unconditionally available
senamakel Aug 29, 2026
73f8dcc
feat(memory): expose citation namespace and ranking modules
senamakel Aug 29, 2026
4ad3202
refactor(memory): reorder namespace module declaration
senamakel Aug 29, 2026
bb297a0
fix(tools): gate memory tools behind memory feature
senamakel Aug 29, 2026
0c96d93
Merge remote-tracking branch 'upstream/main' into pr/5695
senamakel Aug 29, 2026
9a51dc9
chore(deps): update tinyagents submodule
senamakel Aug 29, 2026
346eb68
fix(modules): gate flow digest subscriber without memory
senamakel Aug 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 70 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -783,6 +783,7 @@ Two columns because there are two sets (see above): **Contrib** is `[features] d
| `voice` | OFF | ON | the `openhuman::voice` family (incl. `voice::audio_toolkit`) — STT/TTS providers, dictation server, always-on listening, podcast audio + email | `hound`, `lettre` |
| `inference` | OFF | ON | the `cpal` audio-device stack: microphone capture for voice, plus `desktop::accessibility::permissions`' mic-permission probe. Implied by `voice`. Off ⇒ the probe reports `Unknown`. **The name is historical** — it used to gate the bundled whisper.cpp STT engine, which no longer exists (see the scope note below); do not rename it, it is forwarded by name from the shell manifest and asserted by `INFERENCE_COMPILED_IN` | `cpal` |
| `web3` | OFF | ON | the `openhuman::web3` family (`web3`, `web3::wallet`, `web3::x402`) — crypto wallet (multi-chain sign/broadcast), swaps/bridges/dapp calls, x402 machine payments | `bitcoin`, `curve25519-dalek` |
| `memory` | ON | ON | the `openhuman::memory` family — recall/ingest/tree/goals/sources/sync, its ~13 RPC namespaces, the ~30 memory agent tools, the `MemoryGuard` policy decorator, the driver binding, and **the TinyMemory module the binding loads**. Implied by `memory-git`. Off ⇒ the `memory*` controllers are unregistered, every memory agent tool is absent rather than degraded, the memory subscribers are not installed, and no memory `cdylib` is downloaded or `dlopen`ed. Recall inside a turn returns nothing — the behaviour `NullMemoryProvider` already produces at runtime | **none.** `tinymemory-api` is the contract and stays; every crate the family touches (`rusqlite`, `reqwest`, `serde`) has other parents. Surface-only, like `media` — do not "fix" the empty list |
| `media` | ON | ON | `openhuman::media::generation` (the `media_generate_*` agent tools) + `openhuman::media::image` scaffold | none (surface-only) |
| `documents` | OFF | ON | the `generate_document` / `generate_presentation` agent tools and PDF text extraction during multimodal ingest. **The synthesis is not in this build** — all three run in the `tinydocs` TinyBus module (see below), so this gate turns on the tools and the host policy around them: the artifact pipeline, the deadlines, image resolution under the security policy. The dependency is `tinydocs-bus`, the wire contract crate, and nothing else from that repository. Implies `modules`. Off ⇒ both tools absent from the tool list rather than degraded, and PDF ingest degrades a file to a reference instead of extracted text | **39 crates**, and they leave `Cargo.lock` entirely: `docx-rs`, `ppt-rs`, `pdf-extract` plus `lopdf`, `syntect`, `pulldown-cmark`, `xml-rs`, `quick-xml`, `zip 0.6`, `zstd`, `bzip2`, `encoding_rs`, `euclid`, `ttf-parser`, the CFF/Type1/CMap parsers, … Product profile 505 → 448 names |
| `modules` | ON | ON | `openhuman::modules` — the dynamic module host: the loader that admits a compiled `cdylib` through tinybus's ABI descriptor, manifest, dependency and SHA-256 gates, the compiled-in registry of modules this build trusts, and the `modules` RPC namespace. Implied by `documents`. Off ⇒ `modules.*` is unknown-method and nothing can load a native module | none in the product profile (`ureq`, `flate2`, `tar`, `zip 2`, `tempfile`, `toml` are already there) — **but see the kernel-floor note**: this feature exists so `tinybus/modules` is not enabled on the dependency itself, which would put a `dlopen` loader into the kernel profile where `tinybus` is always-on |
Expand Down Expand Up @@ -1051,6 +1052,75 @@ The general shape of the warning still holds for *other* pairs: two crates with
near-identical types are a real hazard, and a "free carve-out" is only free once
the compiler says so. Probe before assuming, in either direction.

#### The `memory` gate

Facade + stub in the `voice` shape, with `skills`' type carve-out taken further
than anywhere else in the tree — **six** carve-outs rather than one. That is the
interesting part, and the part to copy.

**`pub mod memory;` is always compiled.** The behavioural submodules are
`#[cfg(feature = "memory")]` and `src/openhuman/memory/stub.rs` covers the
disabled build. What stays compiled in **both** directions, with exactly one
definition each and no stub twin:

| Ungated | What | Why it is not behaviour |
| --- | --- | --- |
| `memory::api` | the `tinymemory-api` re-export | contract vocabulary in always-on agent-harness signatures |
| `memory::host` | `MemoryHostConfig for Config` + the bus event sink | impls of API-crate traits on OpenHuman's own `Config`. ~20 always-compiled callers pass `&Config` where `dyn MemoryHostConfig` is expected; gating it makes `Config` stop satisfying a bound unrelated to the family |
| `memory::ranking` | `hybrid_score`, `WeightProfile`, `cosine_similarity`, `mmr_select` | arithmetic over values the caller already holds. Both search tools fetch through the guard *first*, so routing this back over the bus buys a serialization hop and nothing else |
| `memory::citation` | `MemoryCitation`, `CROSS_CHAT_HEADER` | inert serde type in the agent's `last_turn_citations` field and the web-chat delivery path |
| `memory::namespaces` | `CONVERSATION_RAW_NAMESPACE`, `REFLECTIONS_NAMESPACE` | gated producer, always-compiled reader; a `&'static str` cannot fail without a driver |
| `flows::namespace` | `flow_namespace`, `FLOW_MEMORY_NAMESPACE_PREFIX` | a `format!`; `flows_delete` and the run-digest subscriber need it with memory off |

**The rule these six share, and the reason to prefer it over a stub:** a stub
twin of an inert type is a *second definition*, free to drift, and the disabled
build cannot catch drift in a type it also defines. Carve the type out ungated;
stub only behaviour. `flow_namespace` carries a stated security invariant —
"the only place in the codebase that may construct this namespace string" —
and the move **kept** that true precisely because there is one definition, not
two.

**Stubs answer in two shapes, deliberately.** Registration sites want
*absence*: the `all_*_registered_controllers` aggregators return empty vectors,
so `core/all.rs` needs no `#[cfg]` for them, and `memory.*` becomes
unknown-method rather than a known method that fails. Write paths return a
build-fact error, because silently discarding a write is the one failure mode
that looks like success.

**Three mis-housings were retargeted, not stubbed** — the same move the
`channels` gate made for its three `tinychannels` imports. The Composio
provider catalogue, the conversation store `threads` uses, and the
`rpc_models` request types were always-compiled code reaching the engine
*through* a `memory::…` shim; they name `tinymemory_core` directly now. That
removed ~37 always-on → gated edges with no stub at all. **Watch the trap:**
those shims re-export the engine *and* define host code beside it, so a blanket
path substitution also catches the host half —
`register_conversation_persistence_subscriber` and
`slack::all_slack_memory_registered_controllers` both went to the engine crate,
where they do not exist. List what a shim adds beyond its glob before
retargeting it.

**CLI arms are kept, not deleted.** `openhuman memory` and `tree-summarizer`
answer with the gate name; falling through to generic namespace resolution
would say "unknown namespace: memory", which reads like a typo rather than a
build fact. Same reasoning as the `mcp` and `tui` arms.

**`CoreContext::current_memory_capabilities` answers CLOSED with the gate off**
— the one place it does. The open default exists because a capability set is
unknowable until a driver answers; with the family compiled out the state is
not "unknown", it is "absent".

**Sheds no third-party crate.** `tinymemory-api` is the contract and stays, and
every crate the family touches (`rusqlite`, `reqwest`, `serde`) has other
parents. Surface-only, like `media` — the `memory = []` list is intentional, do
not "fix" it with `dep:` entries. Implied by `memory-git`.

**Errors surface in waves.** Name resolution first, then trait bounds — the
`MemoryHostConfig` wave only appeared once resolution was clean, so a run that
looks nearly done can still be hiding a structural problem. Run
`cargo check --no-default-features --features "media,skills,flows,mcp,channels,medulla,http-server,scheduler-gate,file-logging,modules"`
(that is `default` minus `memory`) before pushing anything touching this surface.

#### The `tui` gate

The tabbed terminal UI (`openhuman`, or explicitly `openhuman tui` / alias `chat`) lives in `src/openhuman/tui/` and follows the **`mcp`/`voice` facade+stub** pattern: `pub mod tui;` is always compiled; the behavioural submodules (`app`, `render`, `state`, `terminal`, `runner`) are `#[cfg(feature = "tui")]`; and `#[cfg(not(feature = "tui"))] mod stub;` re-exposes the one symbol an always-compiled caller reaches — `run_from_cli` — with a build-fact error body (`"tui feature disabled at compile time … --features tui"`). Bare-command auto-launch requires terminal stdin/stdout and `HostKind::Cli`; Docker, CI, pipes, and `--no-tui` retain the non-TUI CLI path.
Expand Down
43 changes: 41 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -757,7 +757,7 @@ proptest = "1"
# (`modules`: Contrib=ON, Product=ON) and with `scripts/ci/product-features.txt`,
# which already lists it. This does NOT move the kernel floor: that profile is
# `--no-default-features --features flows` and never reads this list.
default = ["media", "skills", "flows", "mcp", "channels", "medulla", "http-server", "scheduler-gate", "file-logging", "modules"]
default = ["media", "memory", "skills", "flows", "mcp", "channels", "medulla", "http-server", "scheduler-gate", "file-logging", "modules"]
# HTTP + Socket.IO server transport (#5048): the `/rpc` JSON-RPC endpoint and
# its auth middleware/CORS layer (`core::jsonrpc`, `core::auth`), the `/v1`
# OpenAI-compatible router (`inference::http`), the ad-hoc static-dir file
Expand Down Expand Up @@ -804,7 +804,7 @@ default = ["media", "skills", "flows", "mcp", "channels", "medulla", "http-serve
# `None`; and the three `ops` entry points always-on code calls return a
# build-fact error, so a post-sync snapshot or a subconscious diff is logged and
# skipped rather than silently reported as "nothing changed".
memory-git = ["tinycortex/git-diff", "tinycortex/wiki-git", "tinymemory-core/memory-git"]
memory-git = ["memory", "tinycortex/git-diff", "tinycortex/wiki-git", "tinymemory-core/memory-git"]
http-server = ["dep:axum", "dep:socketioxide"]
# Local audio-device access: the `cpal` capture stack behind voice recording
# and the accessibility microphone-permission probe. Default-ON. Slim /
Expand Down Expand Up @@ -1005,6 +1005,45 @@ contacts = ["tinymemory-core/contacts"]
# controllers / stores / subscribers tagged `Media` (agent tools only), and
# `openhuman::image` is currently unwired scaffold (added #2997).
media = []

# The `openhuman::memory` family: the recall/ingest/tree/goals/sources/sync
# domains, their ~13 RPC namespaces, the ~30 memory agent tools, the guard, the
# driver binding, and the TinyMemory module the binding loads. Default-ON,
# product-ON — this is a core product surface, and the gate exists for the
# embedding host that wants a workflow or tool runtime with no memory at all
# (`DomainSet::kernel()` already models that at runtime; this is the
# compile-time axis it composes with).
#
# FACADE + STUB, not a leaf gate. `pub mod memory;` is always compiled: ~230
# production references across ~101 files outside the family reach into it, and
# a handful of always-on callers (the agent harness, flows, channels, cron)
# name concrete items rather than a registration aggregator. The behavioural
# submodules are `#[cfg(feature = "memory")]` and
# `src/openhuman/memory/stub.rs` re-exposes that surface with null / disabled
# bodies. Same shape as `voice`, with `skills`' refinement: inert types stay
# ungated so both builds share ONE definition.
#
# TYPE CARVE-OUT: `memory::api` (a re-export of `tinymemory-api`) and
# `memory::ranking` are compiled in BOTH builds. The first is the contract
# vocabulary — `MemoryEntry`, `RecallOpts`, `MemoryCategory` appear in
# always-on agent-harness signatures — and the second is host-side arithmetic
# with no driver behind it. Neither needs a stub twin, and a twin is exactly
# what would be free to drift.
#
# What OFF means: the `memory*` controllers are unregistered (unknown-method
# over `/rpc`, absent from `/schema`), every memory agent tool is ABSENT from
# the tool list rather than degraded to an error, the memory subscribers are
# not installed, and — the point of the gate for an embedder — the TinyMemory
# module is neither pinned nor loaded, so no `cdylib` is downloaded or
# `dlopen`ed. Recall inside an agent turn returns nothing, which is the
# behaviour `NullMemoryProvider` already produces at runtime.
#
# Sheds no third-party crate on its own: `tinymemory-api` is the contract and
# stays, and every crate the family touches (rusqlite, reqwest, serde) has
# other parents. The gate buys the tool surface, the prompt bloat, the RPC
# surface and the module download — not binary size. Do not "fix" the empty
# list by adding `dep:` entries.
memory = []
# Flows domains: the `flows::` automation surface (saved tinyflows graphs —
# create/run/schedule + the workflow_builder / flow_discovery agents), the
# `tinyflows::` adapter seam, and the `rhai_workflows::` language-workflow tool.
Expand Down
4 changes: 4 additions & 0 deletions app/src-tauri/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,10 @@ uuid = { version = "1", features = ["v4"] }
openhuman_core = { path = "../..", package = "openhuman", default-features = false, features = [
"channels",
"media",
# The memory family and the TinyMemory module it loads. Forwarded because
# the shell sets `default-features = false`, so a gate absent from this
# list is compiled out of the shipped app silently (#4901).
"memory",
"inference",
"voice",
"web3",
Expand Down
Loading
Loading