CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/tui4j-chat

Build terminal chat UIs with TUI4J - Elm Architecture chat client for AI agent demos with Spring Boot integration

90

1.38x
Quality

90%

Does it follow best practices?

Impact

94%

1.38x

Average score across 3 eval scenarios

SecuritybySnyk

Advisory

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-2/

{
  "context": "Tests whether the agent correctly configures Textarea and Viewport components with the expected settings, applies the correct ANSI color codes via Lipgloss for message styling, composes the view correctly, handles quit key bindings, and uses width-constrained rendering.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Textarea prompt char",
      "description": "Textarea.setPrompt() is called with the value \"┃ \" (box-drawing vertical bar followed by space)",
      "max_score": 8
    },
    {
      "name": "Textarea char limit",
      "description": "Textarea.setCharLimit(500) is called — exactly 500",
      "max_score": 8
    },
    {
      "name": "Textarea line numbers off",
      "description": "Textarea.setShowLineNumbers(false) is called",
      "max_score": 8
    },
    {
      "name": "Textarea focused",
      "description": "textarea.focus() is called during initialization",
      "max_score": 6
    },
    {
      "name": "Viewport gotoBottom",
      "description": "viewport.gotoBottom() is called after setting new content (auto-scroll to latest)",
      "max_score": 8
    },
    {
      "name": "User message color",
      "description": "User/agent messages styled with Color.color(\"12\") for blue foreground",
      "max_score": 8
    },
    {
      "name": "Response message color",
      "description": "Customer/response messages styled with Color.color(\"10\") for green foreground",
      "max_score": 8
    },
    {
      "name": "Status/dim color",
      "description": "Waiting/status indicator styled with Color.color(\"8\") for gray foreground",
      "max_score": 8
    },
    {
      "name": "Width-constrained render",
      "description": "Content passed to viewport uses Style.newStyle().width(w).render(content) for wrapping",
      "max_score": 8
    },
    {
      "name": "View composition order",
      "description": "view() returns viewport output, then newline, then status, then newline, then textarea output (viewport first, textarea last)",
      "max_score": 12
    },
    {
      "name": "Quit key bindings",
      "description": "Both \"ctrl+c\" and \"esc\" key presses return QuitMessage::new to exit",
      "max_score": 10
    },
    {
      "name": "Component update forwarding",
      "description": "update() calls both textarea.update(msg) and viewport.update(msg)",
      "max_score": 8
    }
  ]
}

evals

tile.json