Agent Memory
- {{ memorySource() === 'live' ? 'streamed live' : memorySource() === 'checkpoint' ? 'from checkpoint' : 'no source yet' }}
+ {{
+ memorySource() === 'live'
+ ? 'store observed during this run'
+ : memorySource() === 'checkpoint'
+ ? 'historical state/checkpoint read'
+ : memorySource() === 'unavailable'
+ ? 'memory observation unavailable'
+ : 'no source yet'
+ }}
- @if (memoryFiles().length === 0) {
-
Nothing remembered yet
+ @if (scopeWarning()) {
+
{{ scopeWarning() }}
+ }
+ @if (memoryFiles().length === 0 && (memorySource() === 'live' || memorySource() === 'checkpoint')) {
+
No memory file at this observation's read time
}
@for (file of memoryFiles(); track file.path) {
@@ -85,8 +88,8 @@ const SUGGESTIONS = [
}
- This file lives in the LangGraph store, not on the thread. Reload the page to start a
- new conversation and it will still be here.
+ This panel shows the scoped store at an observed read time. A new conversation uses
+ the same browser identity while its storage is available. Observations do not promise durability.
@@ -157,74 +160,118 @@ const SUGGESTIONS = [
],
})
export class MemoryComponent {
- protected readonly agent = injectAgent();
-
+ private readonly scope = inject(MemoryScope);
+ protected readonly agent = guardMemoryAgent(injectAgent(), this.scope);
+ protected readonly scopeWarning = computed(() => {
+ const snapshot = this.scope.snapshot();
+ return snapshot.status === 'blocked' ? snapshot.warning : null;
+ });
protected readonly suggestions = SUGGESTIONS;
// #region memory-sources
- /** Latest `memory_contents` announced on the custom stream. */
- private readonly liveMemory = computed