HTML artifacts: render agent-sent HTML/CSS/JS code blocks in an in-app WebView (Android platform WebView, desktop JCEF/KCEF) via a full-screen preview; artifact card with Preview button + code toggle, shown only once the message stops streaming; webview-multiplatform 1.9.40 + KCEF deps, detection + unit tests

This commit is contained in:
ARIA committed 2026-08-21 00:43:39 +02:00
1 parent a1814d016c
commit 7ba5632a03
11 files changed
+479 -3

No files matched your search

@@ -0,0 +1,65 @@
package iris.ui
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertNull
import kotlin.test.assertTrue
class HtmlArtifactTest {
@Test
fun htmlLanguageTagIsArtifact() {
assertTrue(isHtmlArtifact("html", "<p>hi</p>"))
assertTrue(isHtmlArtifact("htm", "<p>hi</p>"))
assertTrue(isHtmlArtifact("HTML", "<p>hi</p>"))
assertTrue(isHtmlArtifact(" html ", "<p>hi</p>"))
}
@Test
fun otherLanguageTagsAreNotArtifacts() {
assertFalse(isHtmlArtifact("css", "<style>x</style>"))
assertFalse(isHtmlArtifact("js", "console.log(1)"))
assertFalse(isHtmlArtifact("kotlin", "fun main() {}"))
// Even a full document inside a non-html fence is not an artifact.
assertFalse(isHtmlArtifact("text", "<!DOCTYPE html><html></html>"))
}
@Test
fun untaggedCompleteDocumentIsArtifact() {
assertTrue(isHtmlArtifact(null, "<!DOCTYPE html>\n<html><body>hi</body></html>"))
assertTrue(isHtmlArtifact(null, " <html><body>hi</body></html>"))
assertTrue(isHtmlArtifact(null, "<HTML><BODY>hi</BODY></HTML>"))
}
@Test
fun untaggedFragmentIsNotArtifact() {
assertFalse(isHtmlArtifact(null, "<div>just a fragment</div>"))
assertFalse(isHtmlArtifact(null, "Some prose with <b>bold</b> inside."))
assertFalse(isHtmlArtifact(null, ""))
}
@Test
fun extractsTitle() {
assertEquals(
"My Page",
htmlTitle("<html><head><title>My Page</title></head><body></body></html>"),
)
assertEquals(
"Spaced",
htmlTitle("<title> Spaced </title>"),
)
// Case-insensitive, attributes allowed.
assertEquals(
"X",
htmlTitle("<TITLE lang=\"en\">X</TITLE>"),
)
}
@Test
fun missingOrEmptyTitleIsNull() {
assertNull(htmlTitle("<html><body>no title</body></html>"))
assertNull(htmlTitle("<title></title>"))
assertNull(htmlTitle("<title> </title>"))
}
}