@talk2view/sdk 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +291 -69
- package/dist/assistant-ui/convert.d.ts +40 -0
- package/dist/assistant-ui/convert.d.ts.map +1 -0
- package/dist/assistant-ui/convert.js +113 -0
- package/dist/assistant-ui/convert.js.map +1 -0
- package/dist/assistant-ui/dictation.d.ts +39 -0
- package/dist/assistant-ui/dictation.d.ts.map +1 -0
- package/dist/assistant-ui/dictation.js +128 -0
- package/dist/assistant-ui/dictation.js.map +1 -0
- package/dist/assistant-ui/index.d.ts +37 -0
- package/dist/assistant-ui/index.d.ts.map +1 -0
- package/dist/assistant-ui/index.js +224 -0
- package/dist/assistant-ui/index.js.map +1 -0
- package/dist/auth.d.ts +19 -2
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +65 -3
- package/dist/auth.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -4
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +5 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +28 -6
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +59 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +227 -35
- package/dist/index.js.map +1 -1
- package/dist/react/T2VProvider.d.ts +2 -2
- package/dist/react/T2VProvider.d.ts.map +1 -1
- package/dist/react/T2VProvider.js +1 -1
- package/dist/react/T2VProvider.js.map +1 -1
- package/dist/react/index.d.ts +14 -14
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +7 -7
- package/dist/react/index.js.map +1 -1
- package/dist/react/usePartnerConfig.d.ts +1 -1
- package/dist/react/usePartnerConfig.d.ts.map +1 -1
- package/dist/react/usePartnerConfig.js +1 -1
- package/dist/react/usePartnerConfig.js.map +1 -1
- package/dist/react/useT2VAuth.d.ts +8 -1
- package/dist/react/useT2VAuth.d.ts.map +1 -1
- package/dist/react/useT2VAuth.js +25 -6
- package/dist/react/useT2VAuth.js.map +1 -1
- package/dist/react/useT2VChat.d.ts +3 -3
- package/dist/react/useT2VChat.d.ts.map +1 -1
- package/dist/react/useT2VChat.js +1 -1
- package/dist/react/useT2VChat.js.map +1 -1
- package/dist/react/useT2VTools.d.ts +1 -1
- package/dist/react/useT2VTools.d.ts.map +1 -1
- package/dist/react/useT2VTools.js +1 -1
- package/dist/react/useT2VTools.js.map +1 -1
- package/dist/react/useUserPreferences.d.ts +1 -1
- package/dist/react/useUserPreferences.d.ts.map +1 -1
- package/dist/react/useUserPreferences.js +1 -1
- package/dist/react/useUserPreferences.js.map +1 -1
- package/dist/sessions.d.ts +3 -3
- package/dist/sessions.d.ts.map +1 -1
- package/dist/skills.d.ts +2 -2
- package/dist/skills.d.ts.map +1 -1
- package/dist/streaming.d.ts +1 -1
- package/dist/streaming.d.ts.map +1 -1
- package/dist/tools.d.ts +2 -2
- package/dist/tools.d.ts.map +1 -1
- package/dist/types.d.ts +119 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/components/ApprovalCard.d.ts +1 -1
- package/dist/ui/components/ApprovalCard.d.ts.map +1 -1
- package/dist/ui/components/ChatHeader.js +1 -1
- package/dist/ui/components/ChatHeader.js.map +1 -1
- package/dist/ui/components/ChatPanel.d.ts +1 -1
- package/dist/ui/components/ChatPanel.d.ts.map +1 -1
- package/dist/ui/components/ChatPanel.js +14 -13
- package/dist/ui/components/ChatPanel.js.map +1 -1
- package/dist/ui/components/ChatWidget.d.ts +1 -1
- package/dist/ui/components/ChatWidget.d.ts.map +1 -1
- package/dist/ui/components/ChatWidget.js +2 -2
- package/dist/ui/components/ChatWidget.js.map +1 -1
- package/dist/ui/components/Composer.d.ts.map +1 -1
- package/dist/ui/components/Composer.js +13 -6
- package/dist/ui/components/Composer.js.map +1 -1
- package/dist/ui/components/LoginForm.d.ts.map +1 -1
- package/dist/ui/components/LoginForm.js +19 -5
- package/dist/ui/components/LoginForm.js.map +1 -1
- package/dist/ui/components/MarkdownRenderer.d.ts +4 -0
- package/dist/ui/components/MarkdownRenderer.d.ts.map +1 -1
- package/dist/ui/components/MarkdownRenderer.js +7 -35
- package/dist/ui/components/MarkdownRenderer.js.map +1 -1
- package/dist/ui/components/MessageActions.js +1 -1
- package/dist/ui/components/MessageActions.js.map +1 -1
- package/dist/ui/components/MessageBubble.d.ts +1 -1
- package/dist/ui/components/MessageBubble.d.ts.map +1 -1
- package/dist/ui/components/MessageBubble.js +9 -9
- package/dist/ui/components/MessageBubble.js.map +1 -1
- package/dist/ui/components/MessageList.js +2 -2
- package/dist/ui/components/MessageList.js.map +1 -1
- package/dist/ui/components/SettingsPanel.js +4 -4
- package/dist/ui/components/SettingsPanel.js.map +1 -1
- package/dist/ui/components/Talk2View.d.ts +1 -1
- package/dist/ui/components/Talk2View.d.ts.map +1 -1
- package/dist/ui/components/Talk2View.js +16 -12
- package/dist/ui/components/Talk2View.js.map +1 -1
- package/dist/ui/components/ThinkingBlock.js +2 -2
- package/dist/ui/components/ThinkingBlock.js.map +1 -1
- package/dist/ui/components/WelcomeScreen.js +2 -2
- package/dist/ui/components/WelcomeScreen.js.map +1 -1
- package/dist/ui/context.d.ts +4 -2
- package/dist/ui/context.d.ts.map +1 -1
- package/dist/ui/context.js.map +1 -1
- package/dist/ui/index.d.ts +27 -26
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +21 -20
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/safeMarkdown.d.ts +17 -0
- package/dist/ui/safeMarkdown.d.ts.map +1 -0
- package/dist/ui/safeMarkdown.js +196 -0
- package/dist/ui/safeMarkdown.js.map +1 -0
- package/dist/ui/theme.d.ts +1 -1
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/utils.d.ts +1 -1
- package/dist/ui/utils.d.ts.map +1 -1
- package/package.json +26 -2
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useState, useEffect, useMemo, useCallback } from 'react';
|
|
3
|
-
import { T2VProvider, useT2V } from '../../react/T2VProvider';
|
|
4
|
-
import { useUserPreferences } from '../../react/useUserPreferences';
|
|
5
|
-
import { usePartnerConfig } from '../../react/usePartnerConfig';
|
|
6
|
-
import { Talk2ViewContext, ChatContext } from '../context';
|
|
7
|
-
import { injectTheme, injectFonts } from '../theme';
|
|
8
|
-
import { injectComponentStyles } from '../styles';
|
|
3
|
+
import { T2VProvider, useT2V } from '../../react/T2VProvider.js';
|
|
4
|
+
import { useUserPreferences } from '../../react/useUserPreferences.js';
|
|
5
|
+
import { usePartnerConfig } from '../../react/usePartnerConfig.js';
|
|
6
|
+
import { Talk2ViewContext, ChatContext } from '../context.js';
|
|
7
|
+
import { injectTheme, injectFonts } from '../theme.js';
|
|
8
|
+
import { injectComponentStyles } from '../styles.js';
|
|
9
9
|
/**
|
|
10
10
|
* Root provider for Talk2View UI components.
|
|
11
11
|
*
|
|
@@ -53,6 +53,7 @@ function InnerProvider({ systemPrompt, tools, theme, children, }) {
|
|
|
53
53
|
const [alwaysAllowedTools, setAlwaysAllowedTools] = useState(t2v.alwaysAllowedTools);
|
|
54
54
|
const [isAnonymous, setIsAnonymous] = useState(() => t2v.auth.isAnonymous());
|
|
55
55
|
const [demoLimitReached, setDemoLimitReached] = useState(false);
|
|
56
|
+
const [anonymousUnavailable, setAnonymousUnavailable] = useState(false);
|
|
56
57
|
useEffect(() => {
|
|
57
58
|
const unsubs = [
|
|
58
59
|
t2v.on('messagesChange', setMessages),
|
|
@@ -63,28 +64,31 @@ function InnerProvider({ systemPrompt, tools, theme, children, }) {
|
|
|
63
64
|
t2v.on('threadIdChange', setThreadId),
|
|
64
65
|
t2v.on('alwaysAllowedChange', setAlwaysAllowedTools),
|
|
65
66
|
t2v.on('demoLimitReached', () => setDemoLimitReached(true)),
|
|
67
|
+
t2v.on('anonymousUnavailable', () => setAnonymousUnavailable(true)),
|
|
66
68
|
];
|
|
67
69
|
return () => unsubs.forEach((u) => u());
|
|
68
70
|
}, [t2v]);
|
|
69
71
|
// Recompute anonymity whenever auth changes. When the user signs in after the
|
|
70
|
-
// demo limit was hit, close the gate AND
|
|
71
|
-
//
|
|
72
|
-
// so the resend lands in a fresh
|
|
72
|
+
// demo limit was hit or anonymous sign-in was refused, close the gate AND
|
|
73
|
+
// auto-resume the interrupted task: the core has already reset the orphaned
|
|
74
|
+
// anonymous session on the identity change, so the resend lands in a fresh
|
|
75
|
+
// session owned by the now-authenticated user.
|
|
73
76
|
useEffect(() => {
|
|
74
77
|
const anon = t2v.auth.isAnonymous();
|
|
75
78
|
setIsAnonymous(anon);
|
|
76
|
-
if (user !== null && !anon && demoLimitReached) {
|
|
79
|
+
if (user !== null && !anon && (demoLimitReached || anonymousUnavailable)) {
|
|
77
80
|
setDemoLimitReached(false);
|
|
81
|
+
setAnonymousUnavailable(false);
|
|
78
82
|
void t2v.retryLastMessage();
|
|
79
83
|
}
|
|
80
|
-
}, [t2v, user, demoLimitReached]);
|
|
84
|
+
}, [t2v, user, demoLimitReached, anonymousUnavailable]);
|
|
81
85
|
const sendMessage = useCallback((content, options) => t2v.sendMessage(content, { systemPrompt, model: resolvedModel, ...options }), [t2v, systemPrompt, resolvedModel]);
|
|
82
86
|
const approveToolCall = useCallback((d) => t2v.approveToolCall(d), [t2v]);
|
|
83
87
|
const retryLastMessage = useCallback(() => t2v.retryLastMessage(), [t2v]);
|
|
84
88
|
const stop = useCallback(() => t2v.stop(), [t2v]);
|
|
85
89
|
const clearMessages = useCallback(() => t2v.clearMessages(), [t2v]);
|
|
86
90
|
const clearError = useCallback(() => t2v.clearError(), [t2v]);
|
|
87
|
-
const t2vValue = useMemo(() => ({ t2v, user, isAuthenticated, isAnonymous, demoLimitReached }), [t2v, user, isAuthenticated, isAnonymous, demoLimitReached]);
|
|
91
|
+
const t2vValue = useMemo(() => ({ t2v, user, isAuthenticated, isAnonymous, demoLimitReached, anonymousUnavailable }), [t2v, user, isAuthenticated, isAnonymous, demoLimitReached, anonymousUnavailable]);
|
|
88
92
|
const chatValue = useMemo(() => ({
|
|
89
93
|
messages, isLoading, error, pendingApproval, agentStatus, threadId, alwaysAllowedTools,
|
|
90
94
|
sendMessage, approveToolCall, retryLastMessage, stop, clearMessages, clearError,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Talk2View.js","sourceRoot":"","sources":["../../../src/ui/components/Talk2View.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Talk2View.js","sourceRoot":"","sources":["../../../src/ui/components/Talk2View.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState, useEffect, useRef } from 'react';
|
|
3
3
|
import { Brain, ChevronDown } from 'lucide-react';
|
|
4
|
-
import { Shimmer } from './Shimmer';
|
|
5
|
-
import { MarkdownRenderer } from './MarkdownRenderer';
|
|
4
|
+
import { Shimmer } from './Shimmer.js';
|
|
5
|
+
import { MarkdownRenderer } from './MarkdownRenderer.js';
|
|
6
6
|
export function ThinkingBlock({ content, isStreaming, startTime }) {
|
|
7
7
|
const [expanded, setExpanded] = useState(true);
|
|
8
8
|
const [duration, setDuration] = useState(null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThinkingBlock.js","sourceRoot":"","sources":["../../../src/ui/components/ThinkingBlock.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ThinkingBlock.js","sourceRoot":"","sources":["../../../src/ui/components/ThinkingBlock.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useChat } from '../context';
|
|
3
|
-
import { LOGOS } from '../theme';
|
|
2
|
+
import { useChat } from '../context.js';
|
|
3
|
+
import { LOGOS } from '../theme.js';
|
|
4
4
|
export function WelcomeScreen({ heading, suggestions }) {
|
|
5
5
|
const { sendMessage } = useChat();
|
|
6
6
|
return (_jsxs("div", { style: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WelcomeScreen.js","sourceRoot":"","sources":["../../../src/ui/components/WelcomeScreen.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"WelcomeScreen.js","sourceRoot":"","sources":["../../../src/ui/components/WelcomeScreen.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAOpC,MAAM,UAAU,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAsB;IACxE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC;IAClC,OAAO,CACL,eAAK,KAAK,EAAE;YACV,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ;YACjD,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ;YAC9C,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ;SACvD,aACC,cAAK,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,EAAC,EAAE,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAI,EAC/E,aAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,YACvH,OAAO,IAAI,qBAAqB,GAC9B,EACJ,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACxC,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,YACnG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACzB,iBAAgB,OAAO,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAC,eAAe,EAAC,KAAK,EAAE;wBACnG,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,sBAAsB;wBAC1D,MAAM,EAAE,6BAA6B,EAAE,UAAU,EAAE,eAAe;wBAClE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM;wBAClE,KAAK,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG;wBAClE,UAAU,EAAE,oBAAoB;qBACjC,YAAG,CAAC,IANQ,CAAC,CAMC,CAChB,CAAC,GACE,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
package/dist/ui/context.d.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import type { Talk2View as Talk2ViewClass } from '../index';
|
|
2
|
-
import type { Attachment, User, DisplayMessage, PendingApproval, HumanDecision } from '../types';
|
|
1
|
+
import type { Talk2View as Talk2ViewClass } from '../index.js';
|
|
2
|
+
import type { Attachment, User, DisplayMessage, PendingApproval, HumanDecision } from '../types.js';
|
|
3
3
|
export interface Talk2ViewContextValue {
|
|
4
4
|
t2v: Talk2ViewClass;
|
|
5
5
|
user: User | null;
|
|
6
6
|
isAuthenticated: boolean;
|
|
7
7
|
isAnonymous: boolean;
|
|
8
8
|
demoLimitReached: boolean;
|
|
9
|
+
/** True once anonymous sign-in was refused; the chat shows sign-in instead. */
|
|
10
|
+
anonymousUnavailable: boolean;
|
|
9
11
|
}
|
|
10
12
|
export interface ChatContextValue {
|
|
11
13
|
messages: DisplayMessage[];
|
package/dist/ui/context.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/ui/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/ui/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEpG,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,+EAA+E;IAC/E,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,WAAW,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACxD,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1F,eAAe,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,6EAA6E;IAC7E,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,gBAAgB,uDAAoD,CAAC;AAClF,eAAO,MAAM,WAAW,kDAA+C,CAAC;AAExE,wBAAgB,YAAY,IAAI,qBAAqB,CAIpD;AAED,wBAAgB,OAAO,IAAI,gBAAgB,CAI1C"}
|
package/dist/ui/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/ui/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/ui/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AA+BlD,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAA+B,IAAI,CAAC,CAAC;AAClF,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAC;AAExE,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACzC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC1E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACrE,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
export { Talk2View } from './components/Talk2View';
|
|
2
|
-
export type { Talk2ViewProps } from './components/Talk2View';
|
|
3
|
-
export { ChatPanel } from './components/ChatPanel';
|
|
4
|
-
export type { ChatPanelProps } from './components/ChatPanel';
|
|
5
|
-
export { ChatWidget } from './components/ChatWidget';
|
|
6
|
-
export type { ChatWidgetProps } from './components/ChatWidget';
|
|
7
|
-
export { useChat, useTalk2View } from './context';
|
|
8
|
-
export type { ChatContextValue, Talk2ViewContextValue } from './context';
|
|
9
|
-
export { MessageList } from './components/MessageList';
|
|
10
|
-
export { MessageBubble } from './components/MessageBubble';
|
|
11
|
-
export { Composer } from './components/Composer';
|
|
12
|
-
export { WelcomeScreen } from './components/WelcomeScreen';
|
|
13
|
-
export { LoginForm } from './components/LoginForm';
|
|
14
|
-
export { ChatHeader } from './components/ChatHeader';
|
|
15
|
-
export { SettingsPanel } from './components/SettingsPanel';
|
|
16
|
-
export { ApprovalCard } from './components/ApprovalCard';
|
|
17
|
-
export { ToolDisplay, ToolStepGroup } from './components/ToolDisplay';
|
|
18
|
-
export type { ToolDisplayProps, ToolStepGroupProps } from './components/ToolDisplay';
|
|
19
|
-
export { MarkdownRenderer } from './components/MarkdownRenderer';
|
|
20
|
-
export { CodeBlock } from './components/CodeBlock';
|
|
21
|
-
export { ThinkingBlock } from './components/ThinkingBlock';
|
|
22
|
-
export { MessageActions } from './components/MessageActions';
|
|
23
|
-
export { Shimmer } from './components/Shimmer';
|
|
24
|
-
export { THEME_DEFAULTS, LOGOS } from './theme';
|
|
25
|
-
export { groupModelsByProvider, providerTitle, UNKNOWN_PROVIDER_KEY } from './utils';
|
|
26
|
-
export
|
|
1
|
+
export { Talk2View } from './components/Talk2View.js';
|
|
2
|
+
export type { Talk2ViewProps } from './components/Talk2View.js';
|
|
3
|
+
export { ChatPanel } from './components/ChatPanel.js';
|
|
4
|
+
export type { ChatPanelProps } from './components/ChatPanel.js';
|
|
5
|
+
export { ChatWidget } from './components/ChatWidget.js';
|
|
6
|
+
export type { ChatWidgetProps } from './components/ChatWidget.js';
|
|
7
|
+
export { useChat, useTalk2View } from './context.js';
|
|
8
|
+
export type { ChatContextValue, Talk2ViewContextValue } from './context.js';
|
|
9
|
+
export { MessageList } from './components/MessageList.js';
|
|
10
|
+
export { MessageBubble } from './components/MessageBubble.js';
|
|
11
|
+
export { Composer } from './components/Composer.js';
|
|
12
|
+
export { WelcomeScreen } from './components/WelcomeScreen.js';
|
|
13
|
+
export { LoginForm } from './components/LoginForm.js';
|
|
14
|
+
export { ChatHeader } from './components/ChatHeader.js';
|
|
15
|
+
export { SettingsPanel } from './components/SettingsPanel.js';
|
|
16
|
+
export { ApprovalCard } from './components/ApprovalCard.js';
|
|
17
|
+
export { ToolDisplay, ToolStepGroup } from './components/ToolDisplay.js';
|
|
18
|
+
export type { ToolDisplayProps, ToolStepGroupProps } from './components/ToolDisplay.js';
|
|
19
|
+
export { MarkdownRenderer } from './components/MarkdownRenderer.js';
|
|
20
|
+
export { CodeBlock } from './components/CodeBlock.js';
|
|
21
|
+
export { ThinkingBlock } from './components/ThinkingBlock.js';
|
|
22
|
+
export { MessageActions } from './components/MessageActions.js';
|
|
23
|
+
export { Shimmer } from './components/Shimmer.js';
|
|
24
|
+
export { THEME_DEFAULTS, LOGOS } from './theme.js';
|
|
25
|
+
export { groupModelsByProvider, providerTitle, UNKNOWN_PROVIDER_KEY } from './utils.js';
|
|
26
|
+
export { renderSafeMarkdown } from './safeMarkdown.js';
|
|
27
|
+
export type { ModelGroup } from './utils.js';
|
|
27
28
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/ui/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAG5E,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGlD,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/ui/index.js
CHANGED
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
// Components
|
|
2
|
-
export { Talk2View } from './components/Talk2View';
|
|
3
|
-
export { ChatPanel } from './components/ChatPanel';
|
|
4
|
-
export { ChatWidget } from './components/ChatWidget';
|
|
2
|
+
export { Talk2View } from './components/Talk2View.js';
|
|
3
|
+
export { ChatPanel } from './components/ChatPanel.js';
|
|
4
|
+
export { ChatWidget } from './components/ChatWidget.js';
|
|
5
5
|
// Context hooks (for advanced custom UI)
|
|
6
|
-
export { useChat, useTalk2View } from './context';
|
|
6
|
+
export { useChat, useTalk2View } from './context.js';
|
|
7
7
|
// Individual components (for composition)
|
|
8
|
-
export { MessageList } from './components/MessageList';
|
|
9
|
-
export { MessageBubble } from './components/MessageBubble';
|
|
10
|
-
export { Composer } from './components/Composer';
|
|
11
|
-
export { WelcomeScreen } from './components/WelcomeScreen';
|
|
12
|
-
export { LoginForm } from './components/LoginForm';
|
|
13
|
-
export { ChatHeader } from './components/ChatHeader';
|
|
14
|
-
export { SettingsPanel } from './components/SettingsPanel';
|
|
15
|
-
export { ApprovalCard } from './components/ApprovalCard';
|
|
16
|
-
export { ToolDisplay, ToolStepGroup } from './components/ToolDisplay';
|
|
17
|
-
export { MarkdownRenderer } from './components/MarkdownRenderer';
|
|
18
|
-
export { CodeBlock } from './components/CodeBlock';
|
|
19
|
-
export { ThinkingBlock } from './components/ThinkingBlock';
|
|
20
|
-
export { MessageActions } from './components/MessageActions';
|
|
21
|
-
export { Shimmer } from './components/Shimmer';
|
|
8
|
+
export { MessageList } from './components/MessageList.js';
|
|
9
|
+
export { MessageBubble } from './components/MessageBubble.js';
|
|
10
|
+
export { Composer } from './components/Composer.js';
|
|
11
|
+
export { WelcomeScreen } from './components/WelcomeScreen.js';
|
|
12
|
+
export { LoginForm } from './components/LoginForm.js';
|
|
13
|
+
export { ChatHeader } from './components/ChatHeader.js';
|
|
14
|
+
export { SettingsPanel } from './components/SettingsPanel.js';
|
|
15
|
+
export { ApprovalCard } from './components/ApprovalCard.js';
|
|
16
|
+
export { ToolDisplay, ToolStepGroup } from './components/ToolDisplay.js';
|
|
17
|
+
export { MarkdownRenderer } from './components/MarkdownRenderer.js';
|
|
18
|
+
export { CodeBlock } from './components/CodeBlock.js';
|
|
19
|
+
export { ThinkingBlock } from './components/ThinkingBlock.js';
|
|
20
|
+
export { MessageActions } from './components/MessageActions.js';
|
|
21
|
+
export { Shimmer } from './components/Shimmer.js';
|
|
22
22
|
// Theme
|
|
23
|
-
export { THEME_DEFAULTS, LOGOS } from './theme';
|
|
23
|
+
export { THEME_DEFAULTS, LOGOS } from './theme.js';
|
|
24
24
|
// Utilities
|
|
25
|
-
export { groupModelsByProvider, providerTitle, UNKNOWN_PROVIDER_KEY } from './utils';
|
|
25
|
+
export { groupModelsByProvider, providerTitle, UNKNOWN_PROVIDER_KEY } from './utils.js';
|
|
26
|
+
export { renderSafeMarkdown } from './safeMarkdown.js';
|
|
26
27
|
//# sourceMappingURL=index.js.map
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAGxD,yCAAyC;AACzC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGrD,0CAA0C;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,QAAQ;AACR,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnD,YAAY;AACZ,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run already-parsed HTML through the private sanitizer: a strict allow-list
|
|
3
|
+
* plus the hook above (the second line of defence — ADR 0009). Without a DOM
|
|
4
|
+
* (server rendering) it falls back to escaping the HTML as plain text, since
|
|
5
|
+
* the sanitizer can't run there.
|
|
6
|
+
*
|
|
7
|
+
* Exported for tests; partners use `renderSafeMarkdown`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function sanitizeReplyHtml(html: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Render an untrusted model reply as safe HTML: markdown only, no remote content
|
|
12
|
+
* loaded on its own. Use this for any custom chat UI; `<ChatPanel>` already does.
|
|
13
|
+
* Without a DOM (server rendering) the reply comes back as escaped plain text,
|
|
14
|
+
* because the sanitizer can't run there.
|
|
15
|
+
*/
|
|
16
|
+
export declare function renderSafeMarkdown(markdown: string): string;
|
|
17
|
+
//# sourceMappingURL=safeMarkdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safeMarkdown.d.ts","sourceRoot":"","sources":["../../src/ui/safeMarkdown.ts"],"names":[],"mappings":"AAsKA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAStD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAI3D"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import DOMPurify from 'dompurify';
|
|
2
|
+
import { Marked } from 'marked';
|
|
3
|
+
/**
|
|
4
|
+
* Model replies are untrusted: prompt injection through web search, a document,
|
|
5
|
+
* email content or a tool result can make the model write anything. A reply is
|
|
6
|
+
* therefore rendered as markdown only and never loads remote content on its own
|
|
7
|
+
* (docs/adr/0009-model-replies-render-as-markdown-only.md):
|
|
8
|
+
* - raw HTML in the reply is shown as text, never parsed;
|
|
9
|
+
* - an image becomes a link the end-user can choose to open;
|
|
10
|
+
* - links open in a new tab and must be http(s) or mailto;
|
|
11
|
+
* - the output then passes a strict allow-list sanitizer.
|
|
12
|
+
*/
|
|
13
|
+
const ALLOWED_TAGS = [
|
|
14
|
+
'p', 'br', 'strong', 'em', 'del', 'code', 'pre', 'blockquote',
|
|
15
|
+
'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'a',
|
|
16
|
+
'table', 'thead', 'tbody', 'tr', 'th', 'td', 'input',
|
|
17
|
+
];
|
|
18
|
+
const ALLOWED_ATTR = [
|
|
19
|
+
'href', 'title', 'target', 'rel', 'class', 'align', 'start', 'type', 'checked', 'disabled',
|
|
20
|
+
];
|
|
21
|
+
// Link targets a reply may keep. DOMPurify's default URI check still runs first
|
|
22
|
+
// (it strips javascript:, data: and the like). A custom ALLOWED_URI_REGEXP can't
|
|
23
|
+
// be used for this: DOMPurify applies it to every non-URI-safe attribute value,
|
|
24
|
+
// which would strip align="center", start="3" and type="checkbox".
|
|
25
|
+
const ALLOWED_HREF = /^(?:https?:|mailto:)/i;
|
|
26
|
+
const WEB_URI = /^https?:/i;
|
|
27
|
+
const LANGUAGE_CLASS = /^language-[\w+#.-]+$/;
|
|
28
|
+
const TABLE_ALIGN = new Set(['left', 'center', 'right']);
|
|
29
|
+
function escapeHtml(text) {
|
|
30
|
+
return text
|
|
31
|
+
.replace(/&/g, '&')
|
|
32
|
+
.replace(/</g, '<')
|
|
33
|
+
.replace(/>/g, '>')
|
|
34
|
+
.replace(/"/g, '"')
|
|
35
|
+
.replace(/'/g, ''');
|
|
36
|
+
}
|
|
37
|
+
function webHost(href) {
|
|
38
|
+
try {
|
|
39
|
+
const url = new URL(href);
|
|
40
|
+
return url.protocol === 'http:' || url.protocol === 'https:' ? url.host : null;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// A raw markdown href can carry HTML character references (e.g. `/`,
|
|
47
|
+
// `@`) that the browser decodes when the rendered HTML is parsed. Decode
|
|
48
|
+
// them here, once, so webHost() and the title fallback see the same string
|
|
49
|
+
// the href will actually resolve to. A detached <textarea> never runs
|
|
50
|
+
// anything it's given: its innerHTML setter only ever produces text nodes
|
|
51
|
+
// under it, and nothing reads or attaches this element beyond .value.
|
|
52
|
+
function decodeHtmlEntities(text) {
|
|
53
|
+
const textarea = document.createElement('textarea');
|
|
54
|
+
textarea.innerHTML = text;
|
|
55
|
+
return textarea.value;
|
|
56
|
+
}
|
|
57
|
+
const parser = new Marked({ gfm: true, breaks: true });
|
|
58
|
+
parser.use({
|
|
59
|
+
// marked 15 flips lexer.state.inRawBlock on an inline <pre>/<code>/<kbd>/
|
|
60
|
+
// <script> tag, even though our html() renderer below escapes the tag
|
|
61
|
+
// itself. While that state is on, the default text renderer emits
|
|
62
|
+
// following text tokens unescaped (marked treats them as already-safe raw
|
|
63
|
+
// HTML), and the state carries across paragraphs until a matching close
|
|
64
|
+
// tag. Raw HTML is never markup here, so always escape it.
|
|
65
|
+
walkTokens(token) {
|
|
66
|
+
if (token.type === 'text' && 'escaped' in token && token.escaped) {
|
|
67
|
+
token.escaped = false;
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
renderer: {
|
|
71
|
+
// Raw HTML is shown as the text the model wrote, never parsed — except an
|
|
72
|
+
// exact <br>, the only way GFM lets a reply break a line inside a table
|
|
73
|
+
// cell (a cell can't hold a literal newline). It has no attributes to
|
|
74
|
+
// carry an event handler or style, and DOMPurify still runs on it.
|
|
75
|
+
html({ text }) {
|
|
76
|
+
if (/^<br\s*\/?>\s*$/i.test(text))
|
|
77
|
+
return '<br>';
|
|
78
|
+
return escapeHtml(text);
|
|
79
|
+
},
|
|
80
|
+
// Loading an image would send its URL, and anything packed into it, to
|
|
81
|
+
// whoever runs that server, with no click. Show a link instead.
|
|
82
|
+
image({ href, title, tokens }) {
|
|
83
|
+
const alt = this.parser.parseInline(tokens, this.parser.textRenderer);
|
|
84
|
+
const label = alt ? `Image: ${escapeHtml(alt)}` : 'Image';
|
|
85
|
+
const decodedHref = decodeHtmlEntities(href);
|
|
86
|
+
const host = webHost(decodedHref);
|
|
87
|
+
if (!host)
|
|
88
|
+
return label;
|
|
89
|
+
let safeHref;
|
|
90
|
+
try {
|
|
91
|
+
// Same encoding marked's own link renderer uses (cleanUrl), so an
|
|
92
|
+
// image link's href decodes the same way a markdown link's does.
|
|
93
|
+
safeHref = encodeURI(decodedHref).replace(/%25/g, '%');
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return label;
|
|
97
|
+
}
|
|
98
|
+
return `<a href="${escapeHtml(safeHref)}" title="${escapeHtml(title || decodedHref)}">${label} (${escapeHtml(host)})</a>`;
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
function hardenNode(node) {
|
|
103
|
+
if (node.nodeType !== 1)
|
|
104
|
+
return;
|
|
105
|
+
const element = node;
|
|
106
|
+
const tag = element.nodeName;
|
|
107
|
+
if (tag === 'A') {
|
|
108
|
+
const rawHref = element.getAttribute('href');
|
|
109
|
+
if (rawHref !== null && !ALLOWED_HREF.test(rawHref))
|
|
110
|
+
element.removeAttribute('href');
|
|
111
|
+
const href = element.getAttribute('href') ?? '';
|
|
112
|
+
if (WEB_URI.test(href)) {
|
|
113
|
+
element.setAttribute('target', '_blank');
|
|
114
|
+
element.setAttribute('rel', 'noopener noreferrer');
|
|
115
|
+
if (!element.getAttribute('title'))
|
|
116
|
+
element.setAttribute('title', href);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
element.removeAttribute('target');
|
|
120
|
+
element.removeAttribute('rel');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const className = element.getAttribute('class');
|
|
124
|
+
if (className !== null && !(tag === 'CODE' && LANGUAGE_CLASS.test(className))) {
|
|
125
|
+
element.removeAttribute('class');
|
|
126
|
+
}
|
|
127
|
+
const align = element.getAttribute('align');
|
|
128
|
+
if (align !== null && !((tag === 'TH' || tag === 'TD') && TABLE_ALIGN.has(align))) {
|
|
129
|
+
element.removeAttribute('align');
|
|
130
|
+
}
|
|
131
|
+
const start = element.getAttribute('start');
|
|
132
|
+
if (start !== null && !(tag === 'OL' && /^\d{1,9}$/.test(start))) {
|
|
133
|
+
element.removeAttribute('start');
|
|
134
|
+
}
|
|
135
|
+
if (tag === 'INPUT') {
|
|
136
|
+
// Only GFM task-list boxes reach here: always a disabled checkbox, never a field.
|
|
137
|
+
const checked = element.hasAttribute('checked');
|
|
138
|
+
for (const name of element.getAttributeNames())
|
|
139
|
+
element.removeAttribute(name);
|
|
140
|
+
element.setAttribute('type', 'checkbox');
|
|
141
|
+
element.setAttribute('disabled', '');
|
|
142
|
+
if (checked)
|
|
143
|
+
element.setAttribute('checked', '');
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
element.removeAttribute('type');
|
|
147
|
+
element.removeAttribute('checked');
|
|
148
|
+
element.removeAttribute('disabled');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
let purifier = null;
|
|
152
|
+
// A private instance: hooks added here never reach the host app's own DOMPurify.
|
|
153
|
+
function getPurifier() {
|
|
154
|
+
if (purifier)
|
|
155
|
+
return purifier;
|
|
156
|
+
if (typeof window === 'undefined')
|
|
157
|
+
return null;
|
|
158
|
+
const instance = DOMPurify(window);
|
|
159
|
+
if (!instance.isSupported)
|
|
160
|
+
return null;
|
|
161
|
+
instance.addHook('afterSanitizeAttributes', hardenNode);
|
|
162
|
+
purifier = instance;
|
|
163
|
+
return purifier;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Run already-parsed HTML through the private sanitizer: a strict allow-list
|
|
167
|
+
* plus the hook above (the second line of defence — ADR 0009). Without a DOM
|
|
168
|
+
* (server rendering) it falls back to escaping the HTML as plain text, since
|
|
169
|
+
* the sanitizer can't run there.
|
|
170
|
+
*
|
|
171
|
+
* Exported for tests; partners use `renderSafeMarkdown`.
|
|
172
|
+
*/
|
|
173
|
+
export function sanitizeReplyHtml(html) {
|
|
174
|
+
const purify = getPurifier();
|
|
175
|
+
if (!purify)
|
|
176
|
+
return escapeHtml(html);
|
|
177
|
+
return purify.sanitize(html, {
|
|
178
|
+
ALLOWED_TAGS,
|
|
179
|
+
ALLOWED_ATTR,
|
|
180
|
+
ALLOW_DATA_ATTR: false,
|
|
181
|
+
ALLOW_ARIA_ATTR: false,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Render an untrusted model reply as safe HTML: markdown only, no remote content
|
|
186
|
+
* loaded on its own. Use this for any custom chat UI; `<ChatPanel>` already does.
|
|
187
|
+
* Without a DOM (server rendering) the reply comes back as escaped plain text,
|
|
188
|
+
* because the sanitizer can't run there.
|
|
189
|
+
*/
|
|
190
|
+
export function renderSafeMarkdown(markdown) {
|
|
191
|
+
if (!getPurifier())
|
|
192
|
+
return escapeHtml(markdown);
|
|
193
|
+
const html = parser.parse(markdown, { async: false });
|
|
194
|
+
return sanitizeReplyHtml(html);
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=safeMarkdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safeMarkdown.js","sourceRoot":"","sources":["../../src/ui/safeMarkdown.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/theme.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Talk2ViewTheme } from '../types';
|
|
1
|
+
import type { Talk2ViewTheme } from '../types.js';
|
|
2
2
|
export declare const THEME_DEFAULTS: Required<Talk2ViewTheme>;
|
|
3
3
|
export declare function generateThemeCSS(theme: Talk2ViewTheme): string;
|
|
4
4
|
export declare function injectTheme(theme: Talk2ViewTheme): void;
|
package/dist/ui/theme.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/ui/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/ui/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,cAAc,CAkBnD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAwB9D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAUvD;AAGD,wBAAgB,WAAW,IAAI,IAAI,CAUlC;AAGD,eAAO,MAAM,KAAK;;;;CAIR,CAAC"}
|
package/dist/ui/utils.d.ts
CHANGED
package/dist/ui/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/ui/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/ui/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;;GASG;AAEH,wDAAwD;AACxD,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,+DAA+D;IAC/D,GAAG,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AA6BD,0EAA0E;AAC1E,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,CAoBnE"}
|