{"version":3,"file":"assistant-message.test.d.ts","sourceRoot":"","sources":["../../../../src/modes/interactive/components/assistant-message.test.ts"],"names":[],"mappings":"","sourcesContent":["import type { AssistantMessage } from \"@apholdings/jensen-ai\";\nimport { Markdown, Text } from \"@apholdings/jensen-tui\";\nimport { beforeAll, describe, expect, it } from \"vitest\";\nimport { initTheme } from \"../theme/theme.js\";\nimport { AssistantMessageComponent } from \"./assistant-message.js\";\n\nfunction getContentChildren(component: AssistantMessageComponent) {\n\tconst container = component as unknown as {\n\t\tcontentContainer: { children: unknown[] };\n\t};\n\treturn container.contentContainer.children;\n}\n\nfunction makeAssistantMessage(overrides?: Partial<AssistantMessage>): AssistantMessage {\n\treturn {\n\t\trole: \"assistant\",\n\t\tprovider: \"test-provider\",\n\t\tmodel: \"test-model\",\n\t\tstopReason: \"end_turn\",\n\t\terrorMessage: undefined,\n\t\tcontent: [{ type: \"text\", text: \"Detailed assistant prose\" }],\n\t\tusage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\tcost: { total: 0 },\n\t\t},\n\t\ttimestamp: Date.now(),\n\t\t...overrides,\n\t} as AssistantMessage;\n}\n\nbeforeAll(() => {\n\tinitTheme(\"dark\");\n});\n\ndescribe(\"AssistantMessageComponent brief-only rendering\", () => {\n\tit(\"renders ordinary assistant prose when brief-only is disabled\", () => {\n\t\tconst component = new AssistantMessageComponent(\n\t\t\tmakeAssistantMessage({\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"text\", text: \"Detailed assistant prose\" },\n\t\t\t\t\t{ type: \"thinking\", thinking: \"internal reasoning\" },\n\t\t\t\t],\n\t\t\t}),\n\t\t\tfalse,\n\t\t\tundefined,\n\t\t\tfalse,\n\t\t);\n\n\t\tconst children = getContentChildren(component);\n\t\texpect(children.some((child) => child instanceof Markdown)).toBe(true);\n\t});\n\n\tit(\"suppresses ordinary assistant prose when brief-only is enabled\", () => {\n\t\tconst component = new AssistantMessageComponent(\n\t\t\tmakeAssistantMessage({\n\t\t\t\tcontent: [\n\t\t\t\t\t{ type: \"text\", text: \"Detailed assistant prose\" },\n\t\t\t\t\t{ type: \"thinking\", thinking: \"internal reasoning\" },\n\t\t\t\t],\n\t\t\t}),\n\t\t\tfalse,\n\t\t\tundefined,\n\t\t\ttrue,\n\t\t);\n\n\t\tconst children = getContentChildren(component);\n\t\texpect(children.some((child) => child instanceof Markdown)).toBe(false);\n\t\texpect(children.some((child) => child instanceof Text)).toBe(false);\n\t});\n\n\tit(\"still shows security-relevant warning prose when brief-only is enabled\", () => {\n\t\tconst component = new AssistantMessageComponent(\n\t\t\tmakeAssistantMessage({\n\t\t\t\tcontent: [{ type: \"text\", text: \"Warning: approval required before deleting credentials.\" }],\n\t\t\t}),\n\t\t\tfalse,\n\t\t\tundefined,\n\t\t\ttrue,\n\t\t);\n\n\t\tconst children = getContentChildren(component);\n\t\texpect(children.some((child) => child instanceof Markdown)).toBe(true);\n\t});\n\n\tit(\"still shows honest error output when brief-only is enabled\", () => {\n\t\tconst component = new AssistantMessageComponent(\n\t\t\tmakeAssistantMessage({\n\t\t\t\tstopReason: \"error\",\n\t\t\t\terrorMessage: \"Permission denied\",\n\t\t\t\tcontent: [{ type: \"text\", text: \"Hidden prose\" }],\n\t\t\t}),\n\t\t\tfalse,\n\t\t\tundefined,\n\t\t\ttrue,\n\t\t);\n\n\t\tconst children = getContentChildren(component);\n\t\tconst errorText = children.find((child) => child instanceof Text) as (Text & { text?: string }) | undefined;\n\t\texpect(errorText).toBeDefined();\n\t\texpect(errorText?.text).toContain(\"Error: Permission denied\");\n\t});\n});\n"]}