Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
1c7d3cf
feat(db): add Workflow model for multi-agent workflow management
TaehyeungKim Mar 6, 2026
4bb0025
feat(rbac): add workflow access control scopes
TaehyeungKim Mar 6, 2026
f54f07c
feat(workflows): add visual workflow editor with DAG execution
TaehyeungKim Mar 6, 2026
3d18385
feat(nav): add Workflows navigation entry
TaehyeungKim Mar 6, 2026
65416b3
fix(ui): increase ChatMessage textarea height for better UX
TaehyeungKim Mar 6, 2026
aa0d290
chore(deps): add @xyflow/react for workflow visualization
TaehyeungKim Mar 6, 2026
9344dfb
refactor(workflows): improve type safety and code quality
TaehyeungKim Mar 7, 2026
a6e483e
feat(workflows): improve error handling for LLM API errors
TaehyeungKim Mar 7, 2026
1eae43a
fix(workflows): improve error handling for LLM API errors
TaehyeungKim Mar 7, 2026
92398b9
feat(workflows): add Input Mapping UI for data flow between agents
TaehyeungKim Mar 7, 2026
92eb311
fix(workflow-editor): move input mapping hooks before early return
TaehyeungKim Mar 7, 2026
215d316
feat(workflow-editor): implement Input/Output node features
TaehyeungKim Mar 7, 2026
af3a118
feat(workflows): add workflow list view and execution history
TaehyeungKim Mar 7, 2026
88aef9b
fix(workflows): resolve linting issues
TaehyeungKim Mar 7, 2026
a0f6d72
fix(workflows): critical fixes for list view and execution history
TaehyeungKim Mar 7, 2026
d530f28
fix(workflows): use Prisma ORM for getAll to handle optional executio…
TaehyeungKim Mar 7, 2026
1253e0e
fix(workflows): prevent infinite fetching in workflow editor
TaehyeungKim Mar 7, 2026
a5ebdca
feat(mcp): add workflow tools for MCP server
TaehyeungKim Mar 9, 2026
3bc0dff
fix(mcp): fix WebStandard HTTP transport and enhance workflow tools
TaehyeungKim Mar 9, 2026
a486ba4
feat(workflows): enhance workflow editor with router nodes, condition…
TaehyeungKim Mar 9, 2026
4b926cd
feat(workflows): add generic tool node interface with Neo4j vector se…
TaehyeungKim Mar 9, 2026
c9207d1
feat(workflows): add multi-turn chat interface with Run panel and fix…
TaehyeungKim Mar 9, 2026
de60092
feat(workflows): add generic http-api-call tool and deprecate neo4j-v…
TaehyeungKim Mar 9, 2026
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
4 changes: 4 additions & 0 deletions .env.dev.example
Original file line number Diff line number Diff line change
Expand Up @@ -156,3 +156,7 @@ LANGFUSE_ENABLE_EVENTS_TABLE_V2_APIS=true
LANGFUSE_EXPERIMENT_INSERT_INTO_EVENTS_TABLE=true

CLICKHOUSE_USE_LIGHTWEIGHT_UPDATE="true"

# Workflow Tool: Standards Search API (Python service)
WORKFLOW_TOOL_SEARCH_API_URL=http://localhost:8000
WORKFLOW_TOOL_SEARCH_API_KEY=your_search_api_key
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,6 @@ web/test-results/*

# Refactoring planning files (local only)
**/.refactor/

# OMC state files
.omc/
17 changes: 17 additions & 0 deletions packages/shared/prisma/generated/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -947,6 +947,22 @@ export type VerificationToken = {
token: string;
expires: Timestamp;
};
export type Workflow = {
id: string;
created_at: Generated<Timestamp>;
updated_at: Generated<Timestamp>;
project_id: string;
created_by: string;
name: string;
description: Generated<string>;
version: number;
tags: Generated<string[]>;
definition: unknown;
input_schema: unknown | null;
last_execution_at: Timestamp | null;
last_execution_results: unknown | null;
last_execution_status: string | null;
};
export type DB = {
Account: Account;
actions: Action;
Expand Down Expand Up @@ -1011,4 +1027,5 @@ export type DB = {
triggers: Trigger;
users: User;
verification_tokens: VerificationToken;
workflows: Workflow;
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
-- CreateTable
CREATE TABLE "workflows" (
"id" TEXT NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updated_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"project_id" TEXT NOT NULL,
"created_by" TEXT NOT NULL,
"name" TEXT NOT NULL,
"description" TEXT NOT NULL DEFAULT '',
"version" INTEGER NOT NULL,
"tags" TEXT[] DEFAULT ARRAY[]::TEXT[],
"definition" JSONB NOT NULL,
"input_schema" JSONB,

CONSTRAINT "workflows_pkey" PRIMARY KEY ("id")
);

-- CreateIndex
CREATE UNIQUE INDEX "workflows_project_id_name_version_key" ON "workflows"("project_id", "name", "version");

-- CreateIndex
CREATE INDEX "workflows_project_id_id_idx" ON "workflows"("project_id", "id");

-- CreateIndex
CREATE INDEX "workflows_created_at_idx" ON "workflows"("created_at");

-- CreateIndex
CREATE INDEX "workflows_updated_at_idx" ON "workflows"("updated_at");

-- CreateIndex
CREATE INDEX "workflows_tags_idx" ON "workflows" USING GIN ("tags");

-- AddForeignKey
ALTER TABLE "workflows" ADD CONSTRAINT "workflows_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
-- AlterTable
ALTER TABLE "workflows" ADD COLUMN "last_execution_at" TIMESTAMP(3),
ADD COLUMN "last_execution_results" JSONB,
ADD COLUMN "last_execution_status" TEXT;
33 changes: 33 additions & 0 deletions packages/shared/prisma/schema.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ model Project {
PromptDependency PromptDependency[]
LlmSchema LlmSchema[]
LlmTool LlmTool[]
Workflow Workflow[]
PromptProtectedLabels PromptProtectedLabels[]
Dashboard Dashboard[]
DashboardWidget DashboardWidget[]
Expand Down Expand Up @@ -809,6 +810,38 @@ model PromptDependency {
@@map("prompt_dependencies")
}

model Workflow {
id String @id @default(cuid())
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @default(now()) @updatedAt @map("updated_at")

projectId String @map("project_id")
project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)

createdBy String @map("created_by")

name String
description String @default("")
version Int
tags String[] @default([])

// Entire graph stored as JSON: { nodes: WorkflowNodeDef[], edges: WorkflowEdgeDef[] }
definition Json @db.Json

inputSchema Json? @map("input_schema") @db.Json

lastExecutionAt DateTime? @map("last_execution_at")
lastExecutionResults Json? @map("last_execution_results") @db.Json
lastExecutionStatus String? @map("last_execution_status")

@@unique([projectId, name, version])
@@index([projectId, id])
@@index([createdAt])
@@index([updatedAt])
@@index([tags(ops: ArrayOps)], type: Gin)
@@map("workflows")
}

model PromptProtectedLabels {
id String @id @default(cuid())
createdAt DateTime @default(now()) @map("created_at")
Expand Down
Loading