Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# atomicmemory-docs

Documentation site for [AtomicMemory](https://github.com/atomicmemory) the
Documentation site for [AtomicMemory](https://github.com/atomicmemory), the
standardized platform layer for AI memory.

Live site: **[docs.atomicmemory.ai](https://docs.atomicmemory.ai)**
Expand All @@ -13,7 +13,7 @@ Built with [Docusaurus](https://docusaurus.io/). Deployed to GitHub Pages.
docs/
├─ introduction.md # Landing page (served at /)
├─ quickstart.md # Docker → first ingest/search in 2 minutes
├─ platform/ # Why modular the differentiator narrative
├─ platform/ # Why modular, the differentiator narrative
│ ├─ architecture.md # Ingest / Search / CRUD / Lifecycle / Trust separation
│ ├─ composition.md # createCoreRuntime, createApp, bindEphemeral seams
│ ├─ stores.md # MemoryStore / SearchStore / ClaimStore / EntityStore / EpisodeStore
Expand Down Expand Up @@ -54,7 +54,7 @@ builds always render from the committed vendored spec.
## Contributing

`platform/` and `sdk/` pages are authored by hand. `api-reference/http/`
pages are generated edit `atomicmemory-core/src/schemas/*.ts` and
pages are generated, edit `atomicmemory-core/src/schemas/*.ts` and
regenerate via the workflow above to change them.

Apache-2.0 licensed. See [atomicmemory-core](https://github.com/atomicmemory/atomicmemory-core)
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"description":"Consolidation dry-run (execute=false).","properties":{"clusters":{"items":{"properties":{"avg_affinity":{"type":"number"},"member_contents":{"items":{"type":"string"},"type":"array"},"member_count":{"type":"number"},"member_ids":{"items":{"type":"string"},"type":"array"}},"required":["member_ids","member_contents","avg_affinity","member_count"],"type":"object"},"type":"array"},"clusters_found":{"type":"number"},"memories_in_clusters":{"type":"number"},"memories_scanned":{"type":"number"}},"required":["memories_scanned","clusters_found","memories_in_clusters","clusters"],"type":"object"},{"description":"Consolidation execution result (execute=true).","properties":{"clusters_consolidated":{"type":"number"},"consolidated_memory_ids":{"items":{"type":"string"},"type":"array"},"memories_archived":{"type":"number"},"memories_created":{"type":"number"}},"required":["clusters_consolidated","memories_archived","memories_created","consolidated_memory_ids"],"type":"object"}],"description":"Consolidation result — scan or execute."}}},"description":"Consolidation result."},"400":{"content":{"application/json":{"schema":{"description":"Standard error envelope. 400 for input validation errors, 500 for uncaught exceptions.","example":{"error":"user_id is required"},"properties":{"error":{"type":"string"}},"required":["error"],"type":"object"}}},"description":"Input validation error"},"500":{"content":{"application/json":{"schema":{"description":"Standard error envelope. 400 for input validation errors, 500 for uncaught exceptions.","example":{"error":"user_id is required"},"properties":{"error":{"type":"string"}},"required":["error"],"type":"object"}}},"description":"Internal server error"}}}
{"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"description":"Consolidation dry-run (execute=false).","properties":{"clusters":{"items":{"properties":{"avg_affinity":{"type":"number"},"member_contents":{"items":{"type":"string"},"type":"array"},"member_count":{"type":"number"},"member_ids":{"items":{"type":"string"},"type":"array"}},"required":["member_ids","member_contents","avg_affinity","member_count"],"type":"object"},"type":"array"},"clusters_found":{"type":"number"},"memories_in_clusters":{"type":"number"},"memories_scanned":{"type":"number"}},"required":["memories_scanned","clusters_found","memories_in_clusters","clusters"],"type":"object"},{"description":"Consolidation execution result (execute=true).","properties":{"clusters_consolidated":{"type":"number"},"consolidated_memory_ids":{"items":{"type":"string"},"type":"array"},"memories_archived":{"type":"number"},"memories_created":{"type":"number"}},"required":["clusters_consolidated","memories_archived","memories_created","consolidated_memory_ids"],"type":"object"}],"description":"Consolidation result, scan or execute."}}},"description":"Consolidation result."},"400":{"content":{"application/json":{"schema":{"description":"Standard error envelope. 400 for input validation errors, 500 for uncaught exceptions.","example":{"error":"user_id is required"},"properties":{"error":{"type":"string"}},"required":["error"],"type":"object"}}},"description":"Input validation error"},"500":{"content":{"application/json":{"schema":{"description":"Standard error envelope. 400 for input validation errors, 500 for uncaught exceptions.","example":{"error":"user_id is required"},"properties":{"error":{"type":"string"}},"required":["error"],"type":"object"}}},"description":"Internal server error"}}}
6 changes: 3 additions & 3 deletions docs/api-reference/http/conventions.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,13 @@ The canonical error envelope is a single string:

This shape applies to 400 (input validation), 404 (resource not found), and 500 (internal server error) on every route.

**Exception `PUT /v1/memories/config`** ships two richer envelopes so operators know exactly which guard rejected the request:
**Exception, `PUT /v1/memories/config`** ships two richer envelopes so operators know exactly which guard rejected the request:

```json
// 400 when a body includes startup-only fields
{
"error": "Provider/model selection is startup-only",
"detail": "Fields embedding_provider cannot be mutated at runtime the embedding/LLM provider caches are fixed at first use.",
"detail": "Fields embedding_provider cannot be mutated at runtime, the embedding/LLM provider caches are fixed at first use.",
"rejected": ["embedding_provider"]
}
```
Expand All @@ -45,7 +45,7 @@ This shape applies to 400 (input validation), 404 (resource not found), and 500
|--------|---------|
| 400 | Invalid input (missing/malformed fields). Basic `{ error }` on every route except `PUT /v1/memories/config`, which may return the richer envelope above. |
| 404 | Resource not found (e.g. `GET /v1/memories/:id` with an unknown id). |
| 410 | Gone `PUT /v1/memories/config` only, when runtime config mutation is disabled. Uses the richer envelope above. |
| 410 | Gone, `PUT /v1/memories/config` only, when runtime config mutation is disabled. Uses the richer envelope above. |
| 500 | Internal server error. |

## CORS
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"title":"Body","body":{"content":{"application/json":{"schema":{"description":"Ingest a conversation transcript. User-scoped unless workspace_id + agent_id are both provided.","properties":{"agent_id":{"description":"Optional agent identifier. Silently dropped if empty / non-string.","type":"string"},"config_override":{"additionalProperties":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"},{"type":"null"}]},"description":"Optional per-request overlay on RuntimeConfig. Keys correspond to RuntimeConfig field names; values must be primitives (boolean / number / string / null). Unknown keys are accepted but surfaced via the X-Atomicmem-Unknown-Override-Keys response header and a server-side warning log — they do not cause a 400. Scope: just this request — no server mutation.","type":"object"},"conversation":{"description":"Required. conversation.","minLength":1,"type":"string"},"skip_extraction":{"type":"boolean"},"source_site":{"description":"Required. source_site.","minLength":1,"type":"string"},"source_url":{"type":"string"},"user_id":{"description":"Required. user_id.","minLength":1,"type":"string"},"visibility":{"description":"Visibility (one of agent_only / restricted / workspace). Invalid values silently drop to undefined.","enum":["agent_only","restricted","workspace"],"type":"string"},"workspace_id":{"description":"Optional workspace identifier. Silently dropped if empty / non-string.","type":"string"}},"required":["user_id","conversation","source_site"],"type":"object"}}},"required":true}}
{"title":"Body","body":{"content":{"application/json":{"schema":{"description":"Ingest a conversation transcript. User-scoped unless workspace_id + agent_id are both provided.","properties":{"agent_id":{"description":"Optional agent identifier. Silently dropped if empty / non-string.","type":"string"},"config_override":{"additionalProperties":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"},{"type":"null"}]},"description":"Optional per-request overlay on RuntimeConfig. Keys correspond to RuntimeConfig field names; values must be primitives (boolean / number / string / null). Unknown keys are accepted but surfaced via the X-Atomicmem-Unknown-Override-Keys response header and a server-side warning log, they do not cause a 400. Scope: just this request, no server mutation.","type":"object"},"conversation":{"description":"Required. conversation.","minLength":1,"type":"string"},"skip_extraction":{"type":"boolean"},"source_site":{"description":"Required. source_site.","minLength":1,"type":"string"},"source_url":{"type":"string"},"user_id":{"description":"Required. user_id.","minLength":1,"type":"string"},"visibility":{"description":"Visibility (one of agent_only / restricted / workspace). Invalid values silently drop to undefined.","enum":["agent_only","restricted","workspace"],"type":"string"},"workspace_id":{"description":"Optional workspace identifier. Silently dropped if empty / non-string.","type":"string"}},"required":["user_id","conversation","source_site"],"type":"object"}}},"required":true}}
2 changes: 1 addition & 1 deletion docs/api-reference/http/ingest-memory.RequestSchema.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"title":"Body","body":{"content":{"application/json":{"schema":{"description":"Ingest a conversation transcript. User-scoped unless workspace_id + agent_id are both provided.","properties":{"agent_id":{"description":"Optional agent identifier. Silently dropped if empty / non-string.","type":"string"},"config_override":{"additionalProperties":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"},{"type":"null"}]},"description":"Optional per-request overlay on RuntimeConfig. Keys correspond to RuntimeConfig field names; values must be primitives (boolean / number / string / null). Unknown keys are accepted but surfaced via the X-Atomicmem-Unknown-Override-Keys response header and a server-side warning log — they do not cause a 400. Scope: just this request — no server mutation.","type":"object"},"conversation":{"description":"Required. conversation.","minLength":1,"type":"string"},"skip_extraction":{"type":"boolean"},"source_site":{"description":"Required. source_site.","minLength":1,"type":"string"},"source_url":{"type":"string"},"user_id":{"description":"Required. user_id.","minLength":1,"type":"string"},"visibility":{"description":"Visibility (one of agent_only / restricted / workspace). Invalid values silently drop to undefined.","enum":["agent_only","restricted","workspace"],"type":"string"},"workspace_id":{"description":"Optional workspace identifier. Silently dropped if empty / non-string.","type":"string"}},"required":["user_id","conversation","source_site"],"type":"object"}}},"required":true}}
{"title":"Body","body":{"content":{"application/json":{"schema":{"description":"Ingest a conversation transcript. User-scoped unless workspace_id + agent_id are both provided.","properties":{"agent_id":{"description":"Optional agent identifier. Silently dropped if empty / non-string.","type":"string"},"config_override":{"additionalProperties":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"},{"type":"null"}]},"description":"Optional per-request overlay on RuntimeConfig. Keys correspond to RuntimeConfig field names; values must be primitives (boolean / number / string / null). Unknown keys are accepted but surfaced via the X-Atomicmem-Unknown-Override-Keys response header and a server-side warning log, they do not cause a 400. Scope: just this request, no server mutation.","type":"object"},"conversation":{"description":"Required. conversation.","minLength":1,"type":"string"},"skip_extraction":{"type":"boolean"},"source_site":{"description":"Required. source_site.","minLength":1,"type":"string"},"source_url":{"type":"string"},"user_id":{"description":"Required. user_id.","minLength":1,"type":"string"},"visibility":{"description":"Visibility (one of agent_only / restricted / workspace). Invalid values silently drop to undefined.","enum":["agent_only","restricted","workspace"],"type":"string"},"workspace_id":{"description":"Optional workspace identifier. Silently dropped if empty / non-string.","type":"string"}},"required":["user_id","conversation","source_site"],"type":"object"}}},"required":true}}
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"title":"Body","body":{"content":{"application/json":{"schema":{"description":"Search memories. User-scoped unless workspace_id + agent_id are both provided.","properties":{"agent_id":{"description":"Optional agent identifier. Silently dropped if empty / non-string.","type":"string"},"agent_scope":{"description":"Agent-scope filter for workspace searches. String literal 'all' | 'self' | 'others' or a concrete agent_id. Array of agent_ids is also accepted. Any other value is silently ignored.","example":"all","oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]},"as_of":{"description":"ISO-8601 timestamp accepted by temporal search (as_of). Empty string or null means absent; any other non-ISO value is rejected with 400.","example":"2026-01-15T12:00:00Z","format":"date-time","type":"string"},"config_override":{"additionalProperties":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"},{"type":"null"}]},"description":"Optional per-request overlay on RuntimeConfig. Keys correspond to RuntimeConfig field names; values must be primitives (boolean / number / string / null). Unknown keys are accepted but surfaced via the X-Atomicmem-Unknown-Override-Keys response header and a server-side warning log — they do not cause a 400. Scope: just this request — no server mutation.","type":"object"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"namespace_scope":{"type":"string"},"query":{"description":"Required. query.","minLength":1,"type":"string"},"retrieval_mode":{"enum":["flat","tiered","abstract-aware"],"type":"string"},"skip_repair":{"type":"boolean"},"source_site":{"type":"string"},"token_budget":{"maximum":50000,"minimum":100,"type":"integer"},"user_id":{"description":"Required. user_id.","minLength":1,"type":"string"},"visibility":{"description":"Visibility (one of agent_only / restricted / workspace). Invalid values silently drop to undefined.","enum":["agent_only","restricted","workspace"],"type":"string"},"workspace_id":{"description":"Optional workspace identifier. Silently dropped if empty / non-string.","type":"string"}},"required":["user_id","query"],"type":"object"}}},"required":true}}
{"title":"Body","body":{"content":{"application/json":{"schema":{"description":"Search memories. User-scoped unless workspace_id + agent_id are both provided.","properties":{"agent_id":{"description":"Optional agent identifier. Silently dropped if empty / non-string.","type":"string"},"agent_scope":{"description":"Agent-scope filter for workspace searches. String literal 'all' | 'self' | 'others' or a concrete agent_id. Array of agent_ids is also accepted. Any other value is silently ignored.","example":"all","oneOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}]},"as_of":{"description":"ISO-8601 timestamp accepted by temporal search (as_of). Empty string or null means absent; any other non-ISO value is rejected with 400.","example":"2026-01-15T12:00:00Z","format":"date-time","type":"string"},"config_override":{"additionalProperties":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"},{"type":"null"}]},"description":"Optional per-request overlay on RuntimeConfig. Keys correspond to RuntimeConfig field names; values must be primitives (boolean / number / string / null). Unknown keys are accepted but surfaced via the X-Atomicmem-Unknown-Override-Keys response header and a server-side warning log, they do not cause a 400. Scope: just this request, no server mutation.","type":"object"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"namespace_scope":{"type":"string"},"query":{"description":"Required. query.","minLength":1,"type":"string"},"retrieval_mode":{"enum":["flat","tiered","abstract-aware"],"type":"string"},"skip_repair":{"type":"boolean"},"source_site":{"type":"string"},"token_budget":{"maximum":50000,"minimum":100,"type":"integer"},"user_id":{"description":"Required. user_id.","minLength":1,"type":"string"},"visibility":{"description":"Visibility (one of agent_only / restricted / workspace). Invalid values silently drop to undefined.","enum":["agent_only","restricted","workspace"],"type":"string"},"workspace_id":{"description":"Optional workspace identifier. Silently dropped if empty / non-string.","type":"string"}},"required":["user_id","query"],"type":"object"}}},"required":true}}
Loading