A module for the Loopstack AI automation framework.
This module provides tools and document types for creating UI elements that render in Loopstack Studio.
The Core UI Module enables workflows to create structured documents that display as interactive UI components. It includes the CreateDocument tool along with predefined document types for common use cases.
By using this module, you'll be able to:
- Create documents that render as UI widgets in Loopstack Studio
- Display chat-style messages with role and content
- Show formatted markdown content
- Present error messages with appropriate styling
- Output plain text displays
This module is essential for workflows that need to present information to users through the Loopstack Studio interface.
Create a new Loopstack project if you haven't already:
npx create-loopstack-app my-project
cd my-projectStart Environment
cd my-project
docker compose up -dnpm install --save @loopstack/core-ui-moduleloopstack add @loopstack/core-ui-module
loopstack addcopies the source files into yoursrcdirectory. This is a great way to explore the code to learn new concepts or add own customizations.
Add CoreUiModule to your default.module.ts (included in the skeleton app) or to your own module:
import { Module } from '@nestjs/common';
import { LoopCoreModule } from '@loopstack/core';
import { CoreUiModule } from '@loopstack/core-ui-module';
import { DefaultWorkspace } from './default.workspace';
@Module({
imports: [LoopCoreModule, CoreUiModule],
providers: [DefaultWorkspace],
})
export class DefaultModule {}Inject the tool and documents in your workflow class:
import { Injectable } from '@nestjs/common';
import { BlockConfig, Document, Tool } from '@loopstack/common';
import { WorkflowBase } from '@loopstack/core';
import {
CreateDocument,
MessageDocument,
MarkdownDocument,
ErrorDocument,
PlainDocument,
} from '@loopstack/core-ui-module';
@Injectable()
@BlockConfig({
configFile: __dirname + '/my.workflow.yaml',
})
export class MyWorkflow extends WorkflowBase {
// Tool
@Tool() createDocument: CreateDocument;
// Documents
@Document() messageDocument: MessageDocument;
@Document() markdownDocument: MarkdownDocument;
@Document() errorDocument: ErrorDocument;
@Document() plainDocument: PlainDocument;
}And use them in your YAML workflow configuration:
# src/my.workflow.yaml
transitions:
- id: show_response
from: start
to: end
call:
- tool: createDocument
args:
document: messageDocument
update:
content:
role: 'assistant'
content: 'Hello! How can I help you today?'Creates a document instance that renders as a UI widget in Loopstack Studio.
| Argument | Type | Required | Description |
|---|---|---|---|
document |
string | Yes | Name of the document type to create |
id |
string | No | Custom identifier for the document (auto-generated if not provided) |
validate |
'strict' | 'safe' | 'skip' |
No | Schema validation mode (default: 'strict') |
update |
object | No | Override document configuration, including content |
strict(default): Throws an error if content doesn't match the document schemasafe: Validates content but continues with partial data on failureskip: Bypasses schema validation entirely
Displays a chat-style message with role and content. Useful for conversational interfaces.
Schema:
{
role: string; // e.g., 'assistant', 'user', 'system'
content: string; // The message text
}Example:
- tool: createDocument
args:
document: messageDocument
update:
content:
role: 'assistant'
content: 'This is a chat message'Renders formatted markdown content with full styling support.
Schema:
{
markdown: string; // Markdown-formatted text
}Example:
- tool: createDocument
args:
document: markdownDocument
update:
content:
markdown: |
# Heading
This is **bold** and `code`.Displays an error message with error-specific styling.
Schema:
{
error: string; // Error message text
}Example:
- tool: createDocument
args:
document: errorDocument
update:
content:
error: 'Something went wrong'Displays plain, unformatted text.
Schema:
{
text: string; // Plain text content
}Example:
- tool: createDocument
args:
document: plainDocument
update:
content:
text: 'Simple text output'Author: Jakob Klippel
License: Apache-2.0
- Loopstack Documentation
- Getting Started with Loopstack
- For more examples how to use this module look for
@loopstack/core-ui-modulein the Loopstack Registry