Sources
Citations for answers grounded in documents: a numbered list and inline markers.
Installation
Once per app, set up Aedis UI. The CLI verifies the signed release before writing anything and pins every dependency:
npx @aedis/cli@0.1.0 initImport the theme once in your global CSS, after Tailwind:
app/globals.css
@import "tailwindcss";@import "./styles/aedis-theme.css";Then add the component:
npx @aedis/cli@0.1.0 add sources# pnpm dlx @aedis/cli@0.1.0 add sources · yarn dlx @aedis/cli@0.1.0 add sources · bunx @aedis/cli@0.1.0 add sourcesProps
| Prop | Type | Default | Description |
|---|---|---|---|
| Sources sources | { title; url; snippet? }[] | — | Titles and snippets are text; URLs go through safeUrl. |
| Sources idPrefix | string | — | Anchor prefix shared with the inline Citation markers. |
| Citation n / idPrefix / title? | number / string / string | — | Inline marker linking to entry n, named "Source n: title". |
| sourceDomain(url) | string | null | — | The host a person lands on, punycode for international names. |
| labels | Partial<SourcesLabels> | — | title, source. |
Security
- Every link goes through safeUrl; external ones open with noopener noreferrer and are marked.
- The domain is shown next to the title, in punycode for international names, so a lookalike domain cannot pass for the real one.
- No favicon is fetched from third parties: nothing leaks who reads the answer, and img-src stays strict.
- Titles and snippets are text, hidden characters removed.