Ereignistypen
Ein append-only ConversationEvent-Union-Typ deckt Nachrichten, Tool-Blöcke, Wartezeiten und Orchestrator-Entscheidungen ab. Unbekannte Typen erscheinen als Fallback-Zeilen.
Angular-Komponenten, die Ereignisströme als Nachrichten, Tool-Aktivitäten, Wartezeiten und Entscheidungen darstellen. Kompatibel mit coding-agent-runner und jedem Backend, das dieselben Ereignisse ausgibt.
npm install coding-agent-chatDemo
Zwei ConversationEvent[]-Transkripte, dargestellt mit <cac-conversation-view>. Jede Wiedergabe enthält einen Composer und eine eigene Theme-Steuerung.
Planung, Tool-Aufrufe, eine Code-Antwort und die Freigabe durch den Orchestrator. Der Composer enthält Steuerelemente für Modell, Reasoning, Berechtigungen, Anhänge und Kontext.
Ein fehlgeschlagener Befehl, ein Watchdog-Timeout und ein erneuter Versuch des Orchestrators. Fehler und Erfolg verwenden dasselbe Ereignismodell.
Darstellung
Syntaxhervorhebung unterstützt 23 Grammatiken. Inline-Bilder und artifact.image-Ereignisse öffnen sich in einer vom Host bereitgestellten Lightbox. Wähle ein Bild, um die Galerie zu öffnen.
Die Syntaxhervorhebung nutzt lowlight mit Größenlimit und Memoisierung je Block. CHAT_MEDIA_LIGHTBOX verarbeitet Bildklicks; der Host stellt das Overlay bereit.
Übersicht
23+ Ereignistypen · 7 Einstiegspunkte · 379 bestandene Specs · keine Angular-Imports in core · Apache-2.0
Ein append-only ConversationEvent-Union-Typ deckt Nachrichten, Tool-Blöcke, Wartezeiten und Orchestrator-Entscheidungen ab. Unbekannte Typen erscheinen als Fallback-Zeilen.
coding-agent-chat/core ist reines TypeScript: der ConversationEvent-Vertrag plus projectConversation(). Backends, SSR-Code und Tests können es ohne Angular importieren.
Sieben Importpfade halten optionale Funktionen getrennt. core ist reines TypeScript ohne Angular-Abhängigkeit. Beispiele ansehen.
Vier Injection Tokens haben Standardwerte. Stelle CHAT_MEDIA_LIGHTBOX bereit, um Bilder vergrößerbar zu machen. Darstellungsdemo ansehen.
Importiere das optionale Stylesheet für das Standard-Theme. Setze data-studio-theme="light" auf einem beliebigen Elternelement für die helle Palette.
Signalbasierte Komponenten mit strikten Templates, ausgeliefert als Partial-Ivy-Paket. Diese Seite läuft ohne Zone.js.
246 Komponenten-Specs laufen gegen das gebaute Paket. Projektions- und Markdown-Hilfsfunktionen haben 133 weitere Specs.
Apache-2.0, dieselbe Lizenz wie das Backend-Gegenstück coding-agent-runner.
Dokumentation
npm install coding-agent-chat
# peer deps: @angular/core, @angular/common, @angular/forms (>=21 <22), rxjs ~7.8// app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideCodingAgentChat } from 'coding-agent-chat';
export const appConfig: ApplicationConfig = {
providers: [
// Every integration point has a safe default.
provideCodingAgentChat(),
],
};// any component
import { ConversationViewComponent } from 'coding-agent-chat/conversation';
import type { ConversationEvent } from 'coding-agent-chat/core';
@Component({
imports: [ConversationViewComponent],
template: '<cac-conversation-view [events]="events()" />',
})
export class RunView {
readonly events = signal<readonly ConversationEvent[]>([]);
} Sieben Importpfade halten Wire-Vertrag, Renderer und optionale Funktionen getrennt. Jeder Tab zeigt ein Komponentenbeispiel und den zugehörigen Code. Der Root-Import coding-agent-chat exportiert alle Einstiegspunkte und provideCodingAgentChat() erneut.
ConversationEvent und projectConversation() sind reines TypeScript ohne Angular-Abhängigkeit.
Alle vier Integrationen haben Standardwerte. Konfiguriere bei Bedarf Task-Links, Bildvergrößerung, Verlaufsdaten oder die Bestätigung für Verläufe.
CHAT_TASK_REFERENCE_PROVIDERmarkdownLiefert Task-Referenzen für die automatische Markdown-Verlinkung und übernimmt die Navigation beim Anklicken. Standard: Task-Schlüssel erscheinen als Klartext.
CHAT_MEDIA_LIGHTBOXsharedSteuert das Bild-Overlay zum Vergrößern per Klick (Modal-Stack, Fokusfalle). Standard: Bilder werden nicht vergrößert.
PROJECT_CHAT_DATA_SOURCEhistory Der Transport für Scroll-, Such-, Statistik- und Turn-Daten hinter <cac-project-chat-list>. Standard: ein leerer Verlauf.
CHAT_HISTORY_CONFIRMhistoryBestätigungsabfrage vor dem Laden eines vollständigen, langen Verlaufs. Standard: automatische Bestätigung.
// Both services bind via useExisting and retain their root instances.
provideCodingAgentChat({
taskReferences: TaskReferenceNavigationService, // implements ChatTaskReferenceProvider
mediaLightbox: MediaLightboxService, // implements ChatMediaLightbox
});// The history entry point adds two more seams, provided directly:
import { CHAT_HISTORY_CONFIRM, PROJECT_CHAT_DATA_SOURCE } from 'coding-agent-chat/history';
providers: [
// scroll/search/stats/turn transport behind <cac-project-chat-list>
{ provide: PROJECT_CHAT_DATA_SOURCE, useClass: MyProjectChatDataSource },
// guard prompt before loading an entire deep history (defaults to auto-confirm)
{ provide: CHAT_HISTORY_CONFIRM, useClass: MyHistoryConfirm },
];// Four read methods. This page implements them in memory.
export interface ProjectChatDataSource {
scroll(project: string, request: ProjectChatScrollRequest): Observable<ProjectChatScrollResponse>;
search(project: string, query: string, limit: number): Observable<ProjectChatSearchResponse>;
stats(project: string): Observable<ProjectChatStatsResponse>;
turn(project: string, turnId: string): Observable<ProjectChatTurnResponse>;
}// Angular-free core for backends, SSR, and tests.
// contract + projection without pulling in the renderer.
import { projectConversation } from 'coding-agent-chat/core';
import type { ConversationEvent } from 'coding-agent-chat/core';
// Convert CLI lines, timeline data, tokens, screenshots, and commits
// into an ordered ConversationEvent[].
const events: ConversationEvent[] = projectConversation({ source: jobId, lines }); Importiere das optionale Stylesheet. Setze data-studio-theme auf <html>. Überschreibe nach dem Import CSS-Variablen, um Farben anzupassen.
/* styles.scss */
@import 'coding-agent-chat/theme/cac-theme.css';<!-- Dark is the default. Use "dark" to force it. -->
<html lang="en" data-studio-theme="light">
...
</html>/* styles.scss, after the theme import */
:root {
--studio-accent: #7c3aed;
--studio-on-accent: #ffffff;
--studio-accent-2: #0f766e;
}