Files
coder/site/tailwind.config.js
T
edee917d88 feat: add experimental agents support (#22290)
feat: add AI chat system with agent tools and chat UI

Introduce the chatd subsystem and Agents UI for AI-powered chat
within Coder workspaces.

- Add chatd package with chat loop, message compaction, prompt
  management, and LLM provider integration (OpenAI, Anthropic)
- Add agent tools: create workspace, list/read templates, read/write/
  edit files, execute commands
- Add chat API endpoints with streaming, message editing, and
  durable reconnection
- Add database schema and migrations for chats, chat messages, chat
  providers, and chat model configs
- Add RBAC policies and dbauthz enforcement for chat resources
- Add Agents UI pages with conversation timeline, queued messages
  list, diff viewer, and model configuration panel
- Add comprehensive test coverage including coderd integration tests,
  chatd unit tests, and Storybook stories
- Gate feature behind experiments flag

---------

Co-authored-by: Cian Johnston <cian@coder.com>
Co-authored-by: Danielle Maywood <danielle@themaywoods.com>
Co-authored-by: Jeremy Ruppel <jeremy@coder.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-27 16:50:56 +00:00

110 lines
3.3 KiB
JavaScript

/** @type {import('tailwindcss').Config} */
module.exports = {
corePlugins: {
preflight: false,
},
darkMode: ["selector"],
content: [
"./index.html",
"./src/**/*.{js,ts,jsx,tsx}",
"./node_modules/streamdown/dist/**/*.js",
"./node_modules/@streamdown/*/dist/**/*.js",
],
important: ["#root", "#storybook-root"],
theme: {
extend: {
fontFamily: {
sans: `"Geist Variable", system-ui, sans-serif`,
},
size: {
"icon-lg": "1.5rem",
"icon-sm": "1.125rem",
"icon-xs": "0.875rem",
},
fontSize: {
"2xs": ["0.625rem", "0.875rem"],
xs: ["0.75rem", { lineHeight: "1rem", fontWeight: "500" }],
sm: ["0.875rem", { lineHeight: "1.5rem", fontWeight: "500" }],
base: ["1rem", { lineHeight: "1.5rem", fontWeight: "400" }],
"3xl": ["2rem", "2.5rem"],
},
borderRadius: {
lg: "var(--radius)",
md: "calc(var(--radius) - 2px)",
sm: "calc(var(--radius) - 4px)",
},
colors: {
content: {
primary: "hsl(var(--content-primary))",
secondary: "hsl(var(--content-secondary))",
disabled: "hsl(var(--content-disabled))",
invert: "hsl(var(--content-invert))",
success: "hsl(var(--content-success))",
link: "hsl(var(--content-link))",
destructive: "hsl(var(--content-destructive))",
warning: "hsl(var(--content-warning))",
},
surface: {
primary: "hsl(var(--surface-primary))",
secondary: "hsl(var(--surface-secondary))",
tertiary: "hsl(var(--surface-tertiary))",
quaternary: "hsl(var(--surface-quaternary))",
invert: {
primary: "hsl(var(--surface-invert-primary))",
secondary: "hsl(var(--surface-invert-secondary))",
},
destructive: "hsl(var(--surface-destructive))",
green: "hsl(var(--surface-green))",
grey: "hsl(var(--surface-grey))",
orange: "hsl(var(--surface-orange))",
sky: "hsl(var(--surface-sky))",
red: "hsl(var(--surface-red))",
purple: "hsl(var(--surface-purple))",
magenta: "hsl(var(--surface-magenta))",
},
border: {
DEFAULT: "hsl(var(--border-default))",
warning: "hsl(var(--border-warning))",
green: "hsl(var(--border-green))",
pending: "hsl(var(--border-sky))",
destructive: "hsl(var(--border-destructive))",
success: "hsl(var(--border-success))",
hover: "hsl(var(--border-hover))",
purple: "hsl(var(--border-purple))",
magenta: "hsl(var(--border-magenta))",
},
overlay: "hsla(var(--overlay-default))",
input: "hsl(var(--input))",
ring: "hsl(var(--ring))",
highlight: {
purple: "hsl(var(--highlight-purple))",
green: "hsl(var(--highlight-green))",
orange: "hsl(var(--highlight-orange))",
grey: "hsl(var(--highlight-grey))",
sky: "hsl(var(--highlight-sky))",
red: "hsl(var(--highlight-red))",
magenta: "hsl(var(--highlight-magenta))",
},
},
keyframes: {
loading: {
"0%": { opacity: 0.85 },
"25%": { opacity: 0.7 },
"50%": { opacity: 0.4 },
"75%": { opacity: 0.3 },
"100%": { opacity: 0.2 },
},
"caret-scan": {
"0%": { left: "0%" },
"100%": { left: "100%" },
},
},
animation: {
loading: "loading 2s ease-in-out infinite alternate",
"caret-scan": "caret-scan 3s ease-in-out infinite",
},
},
},
plugins: [require("tailwindcss-animate"), require("@tailwindcss/typography")],
};