= {
`,
})
export class DurableExecutionComponent {
+ readonly ui = views({ 'step-pipeline': StepPipelineComponent });
+ readonly uiStore = signalStateStore({});
+
protected readonly stream = agent({
apiUrl: environment.langGraphApiUrl,
assistantId: environment.streamingAssistantId,
diff --git a/cockpit/langgraph/interrupts/angular/src/app/interrupts.component.ts b/cockpit/langgraph/interrupts/angular/src/app/interrupts.component.ts
index b6683d5b5..fade2da19 100644
--- a/cockpit/langgraph/interrupts/angular/src/app/interrupts.component.ts
+++ b/cockpit/langgraph/interrupts/angular/src/app/interrupts.component.ts
@@ -1,8 +1,10 @@
// SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
import { Component } from '@angular/core';
-import { ChatComponent, ChatInterruptPanelComponent, type InterruptAction } from '@cacheplane/chat';
+import { ChatComponent, ChatInterruptPanelComponent, views, type InterruptAction } from '@cacheplane/chat';
import { agent } from '@cacheplane/angular';
+import { signalStateStore } from '@cacheplane/render';
import { environment } from '../environments/environment';
+import { ApprovalCardComponent } from './views/approval-card.component';
/**
* InterruptsComponent demonstrates human-in-the-loop with `agent()`.
@@ -22,7 +24,7 @@ import { environment } from '../environments/environment';
imports: [ChatComponent, ChatInterruptPanelComponent],
template: `
-
+
@if (stream.interrupt()) {
@@ -32,6 +34,9 @@ import { environment } from '../environments/environment';
`,
})
export class InterruptsComponent {
+ readonly ui = views({ 'approval-card': ApprovalCardComponent });
+ readonly uiStore = signalStateStore({});
+
/**
* The streaming resource with interrupt support.
*
diff --git a/libs/chat/src/lib/compositions/chat/chat.component.ts b/libs/chat/src/lib/compositions/chat/chat.component.ts
index 0e5aa4077..dcfc55970 100644
--- a/libs/chat/src/lib/compositions/chat/chat.component.ts
+++ b/libs/chat/src/lib/compositions/chat/chat.component.ts
@@ -14,6 +14,8 @@ import {
} from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
import type { AgentRef } from '@cacheplane/angular';
+import type { ViewRegistry } from '@cacheplane/render';
+import type { StateStore } from '@json-render/core';
import { ChatMessagesComponent } from '../../primitives/chat-messages/chat-messages.component';
import { MessageTemplateDirective } from '../../primitives/chat-messages/message-template.directive';
import { ChatInputComponent } from '../../primitives/chat-input/chat-input.component';
@@ -176,6 +178,8 @@ export class ChatComponent {
private readonly sanitizer = inject(DomSanitizer);
readonly ref = input.required
>();
+ readonly views = input(undefined);
+ readonly store = input(undefined);
readonly threads = input([]);
readonly activeThreadId = input('');
readonly threadSelected = output();