@lemoncat7/dsh-partner 1.4.0 → 1.4.1

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/lib/client.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/client.tsx", "../src/workspace-ownership.ts", "../node_modules/qrcode.react/lib/esm/index.js", "../src/client.css", "../src/client-api.ts", "../src/sidebar-anchor.ts", "../src/time-format.ts", "../src/glass-surface.tsx"],
4
- "sourcesContent": ["import { useCallback, useEffect, useId, useMemo, useRef, useState, type FormEvent, type ReactNode } from 'react'\nimport type { ClientContext, ISessions, SessionId } from '@deepseek-ai/dsh-client-runtime/client'\nimport type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-layout/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-sidebar/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-theme/client'\nimport { activatePluginWorkspace, observePluginWorkspace } from './workspace-ownership.js'\nimport {\n IconAgentPresetOutline16, IconCheckOutline14, IconChevronDownOutline14, IconChevronLeftOutline14,\n IconDataOutline16, IconEditOutline16, IconLinkOutline16, IconPlusOutline16,\n IconRefreshOutline16, IconTrashOutline16, IconUserOutline16,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport { QRCodeSVG } from 'qrcode.react'\nimport cssText from './client.css'\nimport { api, loadPartner, type AutomationView, type Capability, type ChannelView, type CompanionView, type ConcernActivityView, type ConcernObservationView, type ConcernSourceView, type ConcernView, type DailyReflectionView, type LoginView, type MemoryGraphView, type MemoryRelationView, type MemoryView, type ModelCatalogView, type PartnerSnapshot, type UserProfileSnapshotView } from './client-api.js'\nimport { useWorkspaceTopAnchor } from './sidebar-anchor.js'\nimport { futureTime } from './time-format.js'\nimport { GlassSurface } from './glass-surface.js'\n\nconst PLUGIN_ID = '@lemoncat7/dsh-partner'\nconst STYLE_ID = `${PLUGIN_ID}/client`\ntype SidebarProps = PropsRuntime<'sidebar.footer.action'>\ntype ConversationProps = PropsRuntime<'conversation'>\ntype Tab = 'home' | 'identity' | 'capabilities' | 'weixin' | 'memory'\n\ninterface Controller {\n open(companionId?: string): void\n close(): void\n toggle(): void\n isOpen(): boolean\n selected(): string | undefined\n openSession(routeId: string, sessionId: string): Promise<void>\n renewSession(routeId: string): Promise<void>\n subscribe(listener: () => void): () => void\n}\n\nexport const inject = ['slots', 'layout', 'sessions']\n\nexport function apply(ctx: ClientContext): void {\n ctx.effect(installStyles, 'dsh-partner: styles')\n const controller = createController(ctx)\n ctx.effect(() => observePluginWorkspace(PLUGIN_ID, controller.close), 'dsh-partner: exclusive workspace')\n ctx.effect(() => () => controller.close(), 'dsh-partner: workspace lifecycle')\n ctx.slots.inject('sidebar.footer.action', () => ctx.slots.register({\n name: 'sidebar.footer.action', id: 'partner', order: -120,\n }, props => <PartnerSidebar {...props} controller={controller} collapse={() => ctx.layout.toggleSidebar()} />))\n}\n\nfunction createController(ctx: ClientContext): Controller {\n const listeners = new Set<() => void>()\n let selected: string | undefined\n let dispose: (() => void) | undefined\n const notify = (): void => { for (const listener of listeners) listener() }\n const controller: Controller = {\n open(companionId) {\n if (companionId !== undefined) selected = companionId\n if (dispose === undefined) {\n activatePluginWorkspace(PLUGIN_ID)\n dispose = ctx.slots.register({ name: 'conversation', priority: -3 }, props => <PartnerWorkspace {...props} controller={controller} />)\n }\n notify()\n },\n close() { const current = dispose; dispose = undefined; current?.(); notify() },\n toggle() { if (dispose === undefined) controller.open(); else controller.close() },\n isOpen: () => dispose !== undefined,\n selected: () => selected,\n async openSession(routeId, sessionId) {\n const prepared = await api<{ sessionId: string }>(`/sessions/${encodeURIComponent(routeId)}/prepare`, { method: 'POST' })\n if (prepared.sessionId !== sessionId) throw new Error('\u4F19\u4F34\u4F1A\u8BDD\u6807\u8BC6\u4E0D\u4E00\u81F4')\n await waitForClientSession(ctx, sessionId)\n controller.close()\n clientSessions(ctx).open(sessionId as SessionId)\n },\n async renewSession(routeId) {\n const renewed = await api<{ routeId: string; sessionId: string }>(`/sessions/${encodeURIComponent(routeId)}/renew`, { method: 'POST' })\n await waitForClientSession(ctx, renewed.sessionId)\n controller.close()\n clientSessions(ctx).open(renewed.sessionId as SessionId)\n },\n subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener) },\n }\n return controller\n}\n\nfunction PartnerSidebar(props: SidebarProps & { controller: Controller; collapse(): void }): JSX.Element {\n const ref = useRef<HTMLElement>(null)\n useWorkspaceTopAnchor(ref)\n const [open, setOpen] = useState(true)\n const [snapshot, setSnapshot] = useState<PartnerSnapshot>()\n const [, update] = useState(0)\n useEffect(() => props.controller.subscribe(() => update(value => value + 1)), [props.controller])\n useEffect(() => { void loadPartner().then(setSnapshot).catch(() => {}) }, [props.controller.isOpen()])\n const launch = (id?: string): void => {\n props.controller.open(id)\n if (props.wide && window.matchMedia('(max-width: 820px)').matches) props.collapse()\n }\n if (!props.wide) return <section ref={ref} className=\"dsh-partner-sidebar is-rail\"><button type=\"button\" className={`dsh-partner-rail${props.controller.isOpen() ? ' is-active' : ''}`} title=\"\u4F19\u4F34\" onClick={() => props.controller.toggle()}><IconAgentPresetOutline16 size={18} /></button></section>\n return <section ref={ref} className=\"dsh-partner-sidebar\">\n <div className=\"dsh-partner-sidebar-heading\">\n <button type=\"button\" className=\"dsh-partner-sidebar-title\" aria-expanded={open} onClick={() => setOpen(value => !value)}><span data-open={open}><IconChevronDownOutline14 size={14} /></span>\u4F19\u4F34</button>\n <button type=\"button\" className=\"dsh-partner-sidebar-open\" onClick={() => launch()} aria-label=\"\u6253\u5F00\u4F19\u4F34\u9762\u677F\"><IconPlusOutline16 size={16} /></button>\n </div>\n <div className={`dsh-partner-sidebar-list${open ? ' is-open' : ''}`} aria-hidden={!open}>\n <div className=\"dsh-partner-sidebar-list-inner\">\n <button type=\"button\" tabIndex={open ? 0 : -1} className={`dsh-partner-sidebar-row${props.controller.isOpen() ? ' is-active' : ''}`} onClick={() => launch()}>\n <span className=\"dsh-partner-sidebar-symbol\"><IconAgentPresetOutline16 size={16} /></span><span><strong>\u4F19\u4F34\u9762\u677F</strong><small>{snapshot ? `${snapshot.companions.length} \u4F4D\u4F19\u4F34 \u00B7 ${snapshot.channels.filter(item => item.runtimeStatus === 'running').length} \u4E2A\u5FAE\u4FE1\u5728\u7EBF` : '\u8EAB\u4EFD\u3001\u80FD\u529B\u4E0E\u6E20\u9053'}</small></span><i className={snapshot?.channels.some(item => item.runtimeStatus === 'running') ? 'is-online' : ''} />\n </button>\n </div>\n </div>\n </section>\n}\n\nfunction PartnerWorkspace({ controller }: ConversationProps & { controller: Controller }): JSX.Element {\n const [snapshot, setSnapshot] = useState<PartnerSnapshot>()\n const [selectedId, setSelectedId] = useState(controller.selected())\n const [tab, setTab] = useState<Tab>('home')\n const [error, setError] = useState<string>()\n const [loading, setLoading] = useState(true)\n const refresh = useCallback(async () => {\n try {\n const next = await loadPartner()\n setSnapshot(next)\n setSelectedId(current => next.companions.some(item => item.id === current) ? current : next.companions[0]?.id)\n setError(undefined)\n } catch (reason) { setError(message(reason)) } finally { setLoading(false) }\n }, [])\n useEffect(() => { void refresh() }, [refresh])\n useEffect(() => controller.subscribe(() => { const next = controller.selected(); if (next) setSelectedId(next) }), [controller])\n const selected = snapshot?.companions.find(item => item.id === selectedId)\n const create = async (): Promise<void> => {\n try {\n const companion = await api<CompanionView>('/companions', { method: 'POST', body: JSON.stringify({ companion: {\n name: '\u65B0\u4F19\u4F34', role: '\u957F\u671F AI \u5DE5\u4F5C\u4F19\u4F34', description: '', instructions: '', capabilities: ['knowledge', 'skills'],\n } }) })\n await refresh(); setSelectedId(companion.id); setTab('identity')\n } catch (reason) { setError(message(reason)) }\n }\n const openSession = async (routeId: string, sessionId: string): Promise<void> => {\n try { setError(undefined); await controller.openSession(routeId, sessionId) }\n catch (reason) { setError(message(reason)) }\n }\n const renewSession = async (routeId: string): Promise<void> => {\n try { setError(undefined); await controller.renewSession(routeId) }\n catch (reason) { setError(message(reason)) }\n }\n return <main className=\"dsh-partner-workspace\">\n <header className=\"dsh-partner-topbar\"><div><button type=\"button\" data-xiaohei-workspace-close onClick={controller.close} aria-label=\"\u8FD4\u56DE\u4F1A\u8BDD\" title=\"\u8FD4\u56DE\u4F1A\u8BDD\"><IconChevronLeftOutline14 size={15} /></button><IconAgentPresetOutline16 size={18} /><span><strong>\u4F19\u4F34</strong><small>\u957F\u671F\u8EAB\u4EFD\u4E0E\u5FAE\u4FE1\u6E20\u9053</small></span></div></header>\n <div className=\"dsh-partner-grid\">\n <aside className=\"dsh-partner-roster\">\n <div className=\"dsh-partner-roster-title\"><span><small>COMPANIONS</small><strong>\u4F19\u4F34\u540D\u518C</strong></span><button type=\"button\" onClick={() => { void create() }} aria-label=\"\u65B0\u5EFA\u4F19\u4F34\"><IconPlusOutline16 size={16} /></button></div>\n <div className=\"dsh-partner-roster-list\">{snapshot?.companions.map(companion => {\n const channel = snapshot.channels.find(item => item.companionId === companion.id)\n return <button type=\"button\" key={companion.id} className={selectedId === companion.id ? 'is-active' : ''} onClick={() => { setSelectedId(companion.id); setTab('home') }}>\n <Avatar name={companion.name} /><span><strong>{companion.name}</strong><small>{companion.role}</small></span><i className={channel?.runtimeStatus === 'running' ? 'is-online' : ''} title={channel ? channel.runtimeStatus : '\u672A\u8FDE\u63A5\u6E20\u9053'} />\n </button>\n })}</div>\n <div className=\"dsh-partner-roster-note\"><IconLinkOutline16 size={16} /><span><strong>\u8EAB\u4EFD\u4E0E\u6E20\u9053\u5206\u79BB</strong><small>\u5FAE\u4FE1\u53EA\u8D1F\u8D23\u6536\u53D1\uFF0C\u6743\u9650\u4ECD\u7531 DSH \u5DE5\u5177\u51B3\u5B9A\u3002</small></span></div>\n </aside>\n <section className=\"dsh-partner-stage\">\n {loading ? <State title=\"\u6B63\u5728\u8BFB\u53D6\u4F19\u4F34\u2026\" /> : selected === undefined ? <State title=\"\u521B\u5EFA\u7B2C\u4E00\u4E2A\u4F19\u4F34\" detail=\"\u4F19\u4F34\u4F1A\u4FDD\u5B58\u72EC\u7ACB\u8EAB\u4EFD\u3001\u80FD\u529B\u548C\u5FAE\u4FE1\u4F1A\u8BDD\u3002\" action={<button onClick={() => { void create() }}>\u65B0\u5EFA\u4F19\u4F34</button>} /> : <>\n <div className=\"dsh-partner-identity\"><Avatar name={selected.name} /><span><small>ACTIVE COMPANION</small><h1>{selected.name}</h1><p>{selected.description || selected.role}</p></span><Status channel={snapshot?.channels.find(item => item.companionId === selected.id)} /></div>\n <nav className=\"dsh-partner-tabs\" aria-label=\"\u4F19\u4F34\u914D\u7F6E\">\n <TabButton active={tab === 'home'} onClick={() => setTab('home')} icon={<IconAgentPresetOutline16 size={16} />}>\u603B\u89C8</TabButton>\n <TabButton active={tab === 'identity'} onClick={() => setTab('identity')} icon={<IconEditOutline16 size={16} />}>\u8EAB\u4EFD</TabButton>\n <TabButton active={tab === 'capabilities'} onClick={() => setTab('capabilities')} icon={<IconAgentPresetOutline16 size={16} />}>\u80FD\u529B</TabButton>\n <TabButton active={tab === 'weixin'} onClick={() => setTab('weixin')} icon={<WeixinGlyph />}>\u5FAE\u4FE1</TabButton>\n <TabButton active={tab === 'memory'} onClick={() => setTab('memory')} icon={<IconDataOutline16 size={16} />}>\u8BB0\u5FC6</TabButton>\n </nav>\n <div className=\"dsh-partner-stage-scroll\">\n {tab === 'home' && <HomePanel companion={selected} snapshot={snapshot!} navigate={setTab} openSession={openSession} renewSession={renewSession} />}\n {tab === 'identity' && <IdentityEditor companion={selected} count={snapshot?.companions.length ?? 1} onChanged={refresh} />}\n {tab === 'capabilities' && <CapabilityEditor companion={selected} presets={snapshot?.presets ?? []} onChanged={refresh} />}\n {tab === 'weixin' && <WeixinPanel companion={selected} snapshot={snapshot!} onChanged={refresh} />}\n {tab === 'memory' && <MemoryPanel companion={selected} snapshot={snapshot!} openSession={openSession} renewSession={renewSession} onChanged={refresh} />}\n </div>\n </>}\n {error && <p className=\"dsh-partner-error\" role=\"alert\">{error}</p>}\n </section>\n </div>\n </main>\n}\n\nfunction HomePanel({ companion, snapshot, navigate, openSession, renewSession }: { companion: CompanionView; snapshot: PartnerSnapshot; navigate(tab: Tab): void; openSession(routeId: string, sessionId: string): Promise<void>; renewSession(routeId: string): Promise<void> }): JSX.Element {\n const channel = snapshot.channels.find(item => item.companionId === companion.id)\n const sessions = snapshot.sessions.filter(item => item.companionId === companion.id)\n const pending = channel ? snapshot.pairings.filter(item => item.channelId === channel.id && item.status === 'pending').length : 0\n const approved = channel ? snapshot.pairings.filter(item => item.channelId === channel.id && item.status === 'approved').length : 0\n const capabilities = companion.capabilities.map(item => ({ knowledge: '\u77E5\u8BC6\u5E93', skills: '\u6280\u80FD', ssh: 'SSH', git: 'Git' })[item])\n const online = channel?.runtimeStatus === 'running'\n const latestSession = sessions.reduce<(typeof sessions)[number] | undefined>((latest, item) => latest === undefined || item.lastMessageAt > latest.lastMessageAt ? item : latest, undefined)\n return <div className=\"dsh-partner-home\">\n <header className=\"dsh-partner-home-heading\">\n <span><small>\u5DE5\u4F5C\u53F0</small><h2>{online ? `${companion.name} \u6B63\u5728\u5FAE\u4FE1\u5F85\u547D` : `\u8FDE\u63A5 ${companion.name} \u7684\u7B2C\u4E00\u6761\u6E20\u9053`}</h2></span>\n <p>{online ? '\u6D88\u606F\u3001\u6388\u6743\u4E0E\u4E0A\u4E0B\u6587\u8FB9\u754C\u90FD\u5728\u8FD9\u91CC\u6C47\u603B\u3002' : '\u4F19\u4F34\u8EAB\u4EFD\u5DF2\u7ECF\u5C31\u7EEA\uFF0C\u8FDE\u63A5\u5FAE\u4FE1\u540E\u5373\u53EF\u5F00\u59CB\u6301\u7EED\u5DE5\u4F5C\u3002'}</p>\n </header>\n\n <GlassSurface as=\"section\" interactive className={`dsh-partner-home-channel${online ? ' is-online' : ''}`} borderRadius={20} distortionScale={-16} saturation={1.08}>\n <div className=\"dsh-partner-home-route\" aria-hidden=\"true\">\n <Avatar name={companion.name} />\n <span className=\"dsh-partner-route-line\"><i /></span>\n <span className=\"dsh-partner-route-weixin\"><WeixinGlyph large /></span>\n </div>\n <div className=\"dsh-partner-home-channel-copy\">\n <span className=\"dsh-partner-home-kicker\"><i />\u4E3B\u8981\u6E20\u9053 \u00B7 \u5FAE\u4FE1</span>\n <h3>{!channel ? '\u7B49\u5F85\u626B\u7801\u8FDE\u63A5' : online ? '\u8FDE\u63A5\u6B63\u5E38\uFF0C\u6B63\u5728\u63A5\u6536\u6D88\u606F' : channel.runtimeStatus === 'error' ? '\u6E20\u9053\u8FDE\u63A5\u9700\u8981\u5904\u7406' : '\u6E20\u9053\u5F53\u524D\u5DF2\u505C\u7528'}</h3>\n <p>{!channel ? '\u901A\u8FC7\u5FAE\u4FE1 iLink Bot \u63A5\u5165\u3002\u51ED\u636E\u53EA\u8FDB\u5165 DSH \u51ED\u636E\u5E93\uFF0C\u8054\u7CFB\u4EBA\u9996\u6B21\u53D1\u6D88\u606F\u4ECD\u9700\u4F60\u7684\u6279\u51C6\u3002' : online ? '\u6BCF\u4F4D\u8054\u7CFB\u4EBA\u62E5\u6709\u72EC\u7ACB DSH \u4F1A\u8BDD\uFF0C\u4F19\u4F34\u8EAB\u4EFD\u4E00\u81F4\uFF0C\u4F46\u4E0A\u4E0B\u6587\u4E0D\u4F1A\u4E92\u76F8\u6DF7\u5408\u3002' : channel.lastError || '\u6E20\u9053\u914D\u7F6E\u4ECD\u7136\u4FDD\u7559\uFF0C\u53EF\u4EE5\u968F\u65F6\u91CD\u65B0\u542F\u7528\u3002'}</p>\n <div className=\"dsh-partner-home-channel-actions\">\n <button type=\"button\" className=\"is-primary\" onClick={() => navigate('weixin')}>{!channel ? '\u8FDE\u63A5\u5FAE\u4FE1' : pending > 0 ? `\u5904\u7406 ${pending} \u4E2A\u8BF7\u6C42` : '\u7BA1\u7406\u6E20\u9053'}</button>\n <span>{!channel ? '\u626B\u7801\u5B8C\u6210\uFF0C\u65E0\u9700\u7C98\u8D34 Token' : `${approved} \u4F4D\u8054\u7CFB\u4EBA \u00B7 ${sessions.length} \u4E2A\u72EC\u7ACB\u4F1A\u8BDD`}</span>\n </div>\n </div>\n </GlassSurface>\n\n <div className=\"dsh-partner-home-details\">\n <GlassSurface as=\"section\" interactive className=\"dsh-partner-home-profile\" borderRadius={15} distortionScale={-11} saturation={1.06}>\n <header><span><IconUserOutline16 size={16} /></span><div><small>\u4F19\u4F34\u5E95\u7A3F</small><strong>{companion.role}</strong></div><button type=\"button\" onClick={() => navigate('identity')}>\u7F16\u8F91</button></header>\n <blockquote>{companion.instructions || companion.description || '\u5C1A\u672A\u8BBE\u7F6E\u957F\u671F\u884C\u4E3A\u51C6\u5219\u3002'}</blockquote>\n </GlassSurface>\n <GlassSurface as=\"section\" interactive className=\"dsh-partner-home-runtime\" borderRadius={15} distortionScale={-11} saturation={1.06}>\n <header><span><IconAgentPresetOutline16 size={16} /></span><div><small>\u8FD0\u884C\u80FD\u529B</small><strong>{companion.presetId || 'DSH \u9ED8\u8BA4 Preset'}</strong></div><button type=\"button\" onClick={() => navigate('capabilities')}>\u8C03\u6574</button></header>\n <div className=\"dsh-partner-home-capability-list\">{capabilities.length ? capabilities.map(item => <em key={item}>{item}</em>) : <small>\u5C1A\u672A\u58F0\u660E\u80FD\u529B\u8303\u56F4</small>}</div>\n </GlassSurface>\n <GlassSurface as=\"section\" interactive className=\"dsh-partner-home-continuity\" borderRadius={15} distortionScale={-11} saturation={1.06}>\n <header><span><IconDataOutline16 size={16} /></span><div><small>\u4F1A\u8BDD\u8FDE\u7EED\u6027</small><strong>{sessions.length ? `${sessions.length} \u4E2A\u5171\u4EAB\u4F1A\u8BDD` : '\u7B49\u5F85\u7B2C\u4E00\u6761\u6D88\u606F'}</strong></div><button type=\"button\" onClick={() => latestSession === undefined ? navigate('memory') : latestSession.archived ? void renewSession(latestSession.id) : void openSession(latestSession.id, latestSession.sessionId)}>{latestSession === undefined ? '\u67E5\u770B' : latestSession.archived ? '\u5F00\u59CB\u65B0\u4F1A\u8BDD' : '\u6253\u5F00\u4F1A\u8BDD'}</button></header>\n <p>{sessions.length ? `\u6700\u8FD1\u6D3B\u52A8\u4E8E ${relativeTime(Math.max(...sessions.map(item => item.lastMessageAt)))}` : '\u5FAE\u4FE1\u8054\u7CFB\u4EBA\u901A\u8FC7\u914D\u5BF9\u540E\uFF0C\u5C06\u5728\u8FD9\u91CC\u5EFA\u7ACB\u72EC\u7ACB\u4E0A\u4E0B\u6587\u3002'}</p>\n </GlassSurface>\n </div>\n </div>\n}\n\nfunction IdentityEditor({ companion, count, onChanged }: { companion: CompanionView; count: number; onChanged(): Promise<void> }): JSX.Element {\n const [form, setForm] = useState(() => companionDraft(companion))\n const [saving, setSaving] = useState(false)\n const [saved, setSaved] = useState(false)\n const [error, setError] = useState<string>()\n useEffect(() => { setForm(companionDraft(companion)); setSaved(false) }, [companion.id, companion.updatedAt])\n const submit = async (event: FormEvent): Promise<void> => {\n event.preventDefault(); setSaving(true); setError(undefined)\n try { await api(`/companions/${companion.id}`, { method: 'PUT', body: JSON.stringify({ companion: form }) }); setSaved(true); await onChanged() }\n catch (reason) { setError(message(reason)) } finally { setSaving(false) }\n }\n const remove = async (): Promise<void> => {\n if (!window.confirm(`\u5220\u9664\u4F19\u4F34\u300C${companion.name}\u300D\uFF1F\u6B64\u64CD\u4F5C\u8981\u6C42\u5148\u79FB\u9664\u5DF2\u7ED1\u5B9A\u6E20\u9053\u3002`)) return\n try { await api(`/companions/${companion.id}`, { method: 'DELETE' }); await onChanged() } catch (reason) { setError(message(reason)) }\n }\n return <form className=\"dsh-partner-form is-identity\" onSubmit={event => { void submit(event) }}>\n <Section eyebrow=\"IDENTITY\" title=\"\u5DE5\u4F5C\u8EAB\u4EFD\" detail=\"\u5B83\u4E0D\u662F\u4E00\u6B21\u5BF9\u8BDD\u7684\u63D0\u793A\u8BCD\uFF0C\u800C\u662F\u8FD9\u4E2A\u4F19\u4F34\u5728\u684C\u9762\u548C\u5FAE\u4FE1\u4E2D\u7684\u957F\u671F\u884C\u4E3A\u57FA\u7EBF\u3002\" />\n <div className=\"dsh-partner-fields two\"><Field label=\"\u540D\u5B57\"><input required maxLength={60} value={form.name} onChange={event => setForm({ ...form, name: event.target.value })} /></Field><Field label=\"\u89D2\u8272\"><input required maxLength={120} value={form.role} onChange={event => setForm({ ...form, role: event.target.value })} /></Field></div>\n <Field label=\"\u4E00\u53E5\u8BDD\u5B9A\u4F4D\" hint=\"\u7528\u4E8E\u540D\u518C\u8BC6\u522B\uFF0C\u4E0D\u4F1A\u66FF\u4EE3\u5B8C\u6574\u884C\u4E3A\u51C6\u5219\u3002\"><textarea rows={2} maxLength={500} value={form.description} onChange={event => setForm({ ...form, description: event.target.value })} /></Field>\n <Field label=\"\u957F\u671F\u884C\u4E3A\u51C6\u5219\" hint=\"\u5EFA\u8BAE\u5199\u804C\u8D23\u3001\u8868\u8FBE\u65B9\u5F0F\u4E0E\u8FB9\u754C\uFF1B\u6E20\u9053\u3001\u5DE5\u5177\u548C\u6388\u6743\u7531\u7CFB\u7EDF\u5355\u72EC\u63A7\u5236\u3002\"><textarea rows={9} maxLength={12000} value={form.instructions} onChange={event => setForm({ ...form, instructions: event.target.value })} /></Field>\n {error && <p className=\"dsh-partner-inline-error\">{error}</p>}\n <div className=\"dsh-partner-form-actions\"><span>{saved && <><IconCheckOutline14 size={14} />\u5DF2\u4FDD\u5B58\uFF0C\u540E\u7EED\u5FAE\u4FE1\u6D88\u606F\u5C06\u4F7F\u7528\u65B0\u8EAB\u4EFD</>}</span><button disabled={saving}>{saving ? '\u6B63\u5728\u4FDD\u5B58\u2026' : '\u4FDD\u5B58\u8EAB\u4EFD'}</button></div>\n <div className=\"dsh-partner-identity-danger\"><span><strong>\u5220\u9664\u4F19\u4F34</strong><small>\u5FC5\u987B\u5148\u79FB\u9664\u5DF2\u7ED1\u5B9A\u5FAE\u4FE1\u6E20\u9053\uFF1B\u4E0D\u4F1A\u81EA\u52A8\u628A\u8054\u7CFB\u4EBA\u8F6C\u4EA4\u7ED9\u5176\u4ED6\u4F19\u4F34\u3002</small></span><button type=\"button\" disabled={count <= 1} onClick={() => { void remove() }}><IconTrashOutline16 size={16} />\u5220\u9664</button></div>\n </form>\n}\n\nfunction CapabilityEditor({ companion, presets, onChanged }: { companion: CompanionView; presets: PartnerSnapshot['presets']; onChanged(): Promise<void> }): JSX.Element {\n const [form, setForm] = useState(() => companionDraft(companion))\n const [modelCatalog, setModelCatalog] = useState<ModelCatalogView>()\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<string>()\n useEffect(() => setForm(companionDraft(companion)), [companion.id, companion.updatedAt])\n useEffect(() => { void api<ModelCatalogView>('/models').then(setModelCatalog).catch(reason => setError(message(reason))) }, [])\n const toggle = (capability: Capability): void => setForm(current => ({ ...current, capabilities: current.capabilities.includes(capability) ? current.capabilities.filter(item => item !== capability) : [...current.capabilities, capability] }))\n const save = async (): Promise<void> => {\n setSaving(true); setError(undefined)\n try { await api(`/companions/${companion.id}`, { method: 'PUT', body: JSON.stringify({ companion: form }) }); await onChanged() }\n catch (reason) { setError(message(reason)) } finally { setSaving(false) }\n }\n const choices: { id: Capability; title: string; detail: string }[] = [\n { id: 'knowledge', title: '\u77E5\u8BC6\u5E93', detail: '\u5141\u8BB8\u4F19\u4F34\u5728\u5DF2\u6302\u8F7D\u8303\u56F4\u5185\u68C0\u7D22\u4E0E\u56DE\u5199\u77E5\u8BC6\u3002' },\n { id: 'skills', title: '\u6280\u80FD', detail: '\u4F7F\u7528\u5F53\u524D Agent Preset \u63D0\u4F9B\u7684\u6280\u80FD\u4E0E\u5DE5\u4F5C\u6D41\u7A0B\u3002' },\n { id: 'ssh', title: 'SSH', detail: '\u901A\u8FC7 SSH \u63D2\u4EF6\u6388\u6743\u7684\u4E3B\u673A\u4E0E\u547D\u4EE4\u8FB9\u754C\u5DE5\u4F5C\u3002' },\n { id: 'git', title: 'Git', detail: '\u9884\u7559 Git \u5DE5\u5177\u80FD\u529B\uFF0C\u4ECD\u9700\u5BF9\u5E94\u63D2\u4EF6\u5B9E\u9645\u5B89\u88C5\u3002' },\n ]\n const selectedProvider = form.provider || modelCatalog?.defaultSelection.provider || ''\n const modelOptions = modelCatalog?.providers.find(item => item.id === selectedProvider)?.models ?? []\n const currentModelMissing = Boolean(form.model) && !modelOptions.some(item => item.id === form.model)\n return <div className=\"dsh-partner-form is-capabilities\"><Section eyebrow=\"COMPOSITION\" title=\"\u80FD\u529B\u7EC4\u5408\" detail=\"\u4F19\u4F34\u58F0\u660E\u610F\u56FE\u8303\u56F4\uFF1B\u771F\u6B63\u53EF\u8C03\u7528\u7684\u5DE5\u5177\u4ECD\u6765\u81EA\u6240\u9009 Agent Preset\uFF0C\u5E76\u7EE7\u7EED\u6267\u884C\u5404\u63D2\u4EF6\u6743\u9650\u3002\" />\n <Field label=\"Agent Preset\" hint=\"\u51B3\u5B9A\u8FD9\u4E2A\u4F19\u4F34\u5B9E\u9645\u52A0\u8F7D\u54EA\u4E9B\u5DE5\u5177\u3001\u6280\u80FD\u548C\u7CFB\u7EDF\u63D0\u793A\u3002\"><select value={form.presetId} onChange={event => setForm({ ...form, presetId: event.target.value })}><option value=\"\">\u8DDF\u968F DSH \u9ED8\u8BA4 Preset</option>{presets.filter(item => !item.broken).map(item => <option value={item.id} key={item.id}>{item.name}</option>)}</select></Field>\n <div className=\"dsh-partner-capabilities\">{choices.map(choice => <GlassSurface as=\"button\" interactive type=\"button\" key={choice.id} className={form.capabilities.includes(choice.id) ? 'is-active' : ''} borderRadius={12} distortionScale={-9} saturation={1.05} aria-pressed={form.capabilities.includes(choice.id)} onClick={() => toggle(choice.id)}><span>{form.capabilities.includes(choice.id) && <IconCheckOutline14 size={14} />}</span><strong>{choice.title}</strong><small>{choice.detail}</small></GlassSurface>)}</div>\n <div className=\"dsh-partner-fields two\"><Field label=\"\u6A21\u578B\u63D0\u4F9B\u65B9\" hint=\"\u6A21\u578B\u76EE\u5F55\u6765\u81EA\u5F53\u524D\u5BA2\u6237\u7AEF\"><select value={form.provider} onChange={event => setForm({ ...form, provider: event.target.value, model: '' })}><option value=\"\">\u8DDF\u968F DSH \u9ED8\u8BA4 \u00B7 {modelCatalog?.defaultSelection.provider || '\u6B63\u5728\u8BFB\u53D6'}</option>{modelCatalog?.providers.map(provider => <option value={provider.id} key={provider.id}>{provider.name || provider.id}</option>)}</select></Field><Field label=\"\u6A21\u578B\" hint=\"\u968F\u63D0\u4F9B\u65B9\u8054\u52A8\"><select value={form.model} onChange={event => setForm({ ...form, model: event.target.value })}><option value=\"\">\u8DDF\u968F DSH \u9ED8\u8BA4 \u00B7 {modelCatalog?.defaultSelection.model || '\u6B63\u5728\u8BFB\u53D6'}</option>{currentModelMissing && <option value={form.model}>\u5F53\u524D\u914D\u7F6E \u00B7 {form.model}</option>}{modelOptions.map(model => <option value={model.id} key={model.id}>{model.name || model.id}</option>)}</select></Field></div>\n {error && <p className=\"dsh-partner-inline-error\">{error}</p>}<div className=\"dsh-partner-form-actions\"><span /><button type=\"button\" disabled={saving} onClick={() => { void save() }}>{saving ? '\u6B63\u5728\u5E94\u7528\u2026' : '\u5E94\u7528\u80FD\u529B\u7EC4\u5408'}</button></div>\n </div>\n}\n\nfunction WeixinPanel({ companion, snapshot, onChanged }: { companion: CompanionView; snapshot: PartnerSnapshot; onChanged(): Promise<void> }): JSX.Element {\n const channel = snapshot.channels.find(item => item.companionId === companion.id)\n const [login, setLogin] = useState<LoginView>()\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string>()\n useEffect(() => {\n if (!login || login.phase === 'confirmed' || login.phase === 'expired' || login.phase === 'error') return\n const timer = window.setInterval(() => {\n void api<{ login: LoginView; channel?: ChannelView }>(`/weixin/login/${login.id}`).then(async result => {\n setLogin(result.login)\n if (result.channel) { setLogin(undefined); await onChanged() }\n }).catch(reason => setError(message(reason)))\n }, 2_000)\n return () => clearInterval(timer)\n }, [login?.id, login?.phase, onChanged])\n const begin = async (): Promise<void> => {\n setBusy(true); setError(undefined)\n try { setLogin(await api('/weixin/login', { method: 'POST', body: JSON.stringify({ companionId: companion.id }) })) }\n catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const toggle = async (): Promise<void> => {\n if (!channel) return\n setBusy(true); setError(undefined)\n try { await api(`/channels/${channel.id}/enabled`, { method: 'POST', body: JSON.stringify({ enabled: !channel.enabled }) }); await onChanged() }\n catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const pairings = channel ? snapshot.pairings.filter(item => item.channelId === channel.id) : []\n const actPairing = async (id: string, status: 'approved' | 'blocked'): Promise<void> => {\n try { await api(`/pairings/${id}/status`, { method: 'POST', body: JSON.stringify({ status }) }); await onChanged() } catch (reason) { setError(message(reason)) }\n }\n return <div className=\"dsh-partner-form is-channel\"><Section eyebrow=\"PRIMARY CHANNEL\" title=\"\u5FAE\u4FE1\u6E20\u9053\" detail=\"\u4F7F\u7528\u5FAE\u4FE1 iLink Bot \u626B\u7801\u63A5\u5165\u3002\u6BCF\u4E2A\u673A\u5668\u4EBA\u53EA\u7ED1\u5B9A\u4E00\u4E2A\u4F19\u4F34\uFF0C\u6BCF\u4F4D\u8054\u7CFB\u4EBA\u4FDD\u6301\u72EC\u7ACB DSH \u4F1A\u8BDD\u3002\" />\n {!channel && !login && <GlassSurface as=\"div\" interactive className=\"dsh-partner-weixin-connect\" borderRadius={15} distortionScale={-10} saturation={1.06}><div className=\"dsh-partner-weixin-mark\"><WeixinGlyph large /></div><span><strong>\u628A {companion.name} \u5E26\u5230\u5FAE\u4FE1</strong><p>\u626B\u7801\u540E\uFF0C\u673A\u5668\u4EBA\u51ED\u636E\u76F4\u63A5\u4FDD\u5B58\u8FDB DSH \u51ED\u636E\u5E93\uFF0C\u4E0D\u4F1A\u663E\u793A\u5728\u6D4F\u89C8\u5668\u6216\u666E\u901A\u914D\u7F6E\u6587\u4EF6\u4E2D\u3002</p><ul><li>\u79C1\u804A\u9996\u6B21\u8054\u7CFB\u5FC5\u987B\u5BA1\u6279</li><li>\u8054\u7CFB\u4EBA\u4E4B\u95F4\u4E0A\u4E0B\u6587\u5B8C\u5168\u9694\u79BB</li><li>\u5DE5\u5177\u6743\u9650\u4E0D\u4F1A\u56E0\u5FAE\u4FE1\u8EAB\u4EFD\u81EA\u52A8\u6269\u5927</li></ul></span><button type=\"button\" disabled={busy} onClick={() => { void begin() }}>{busy ? '\u6B63\u5728\u7533\u8BF7\u4E8C\u7EF4\u7801\u2026' : '\u626B\u7801\u8FDE\u63A5\u5FAE\u4FE1'}</button></GlassSurface>}\n {login && <GlassSurface as=\"div\" interactive className=\"dsh-partner-qr\" borderRadius={16} distortionScale={-10} saturation={1.06}><div className=\"dsh-partner-qr-code\">{login.qrContent && <QRCodeSVG value={login.qrContent} size={176} level=\"M\" />}</div><span><small>WECHAT ILINK BOT</small><strong>{login.phase === 'scanned' ? '\u5DF2\u626B\u7801\uFF0C\u8BF7\u5728\u5FAE\u4FE1\u786E\u8BA4' : login.phase === 'expired' ? '\u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F' : login.phase === 'error' ? '\u8FDE\u63A5\u5931\u8D25' : '\u4F7F\u7528\u5FAE\u4FE1\u626B\u7801'}</strong><p>{login.error || (login.phase === 'scanned' ? '\u786E\u8BA4\u540E\u4F1A\u81EA\u52A8\u542F\u52A8\u6E20\u9053\uFF0C\u4E0D\u9700\u8981\u590D\u5236 Token\u3002' : '\u4E8C\u7EF4\u7801\u7EA6 5 \u5206\u949F\u6709\u6548\u3002\u6B64\u9875\u9762\u53EF\u4EE5\u5B89\u5168\u5730\u4FDD\u6301\u6253\u5F00\u3002')}</p>{(login.phase === 'expired' || login.phase === 'error') && <button type=\"button\" onClick={() => { setLogin(undefined); void begin() }}><IconRefreshOutline16 size={16} />\u91CD\u65B0\u751F\u6210</button>}</span></GlassSurface>}\n {channel && <>\n <GlassSurface as=\"div\" interactive className=\"dsh-partner-channel-card\" borderRadius={14} distortionScale={-10} saturation={1.06}><div className=\"dsh-partner-weixin-mark\"><WeixinGlyph large /></div><span><small>WECHAT CHANNEL</small><strong>{channel.name}</strong><p>{channel.accountId}</p></span><Status channel={channel} /><button type=\"button\" className=\"dsh-partner-switch\" data-on={channel.enabled} disabled={busy} aria-label={channel.enabled ? '\u505C\u7528\u5FAE\u4FE1\u6E20\u9053' : '\u542F\u7528\u5FAE\u4FE1\u6E20\u9053'} onClick={() => { void toggle() }}><i /></button></GlassSurface>\n {channel.lastError && <p className=\"dsh-partner-inline-error\">{channel.lastError}</p>}\n <div className=\"dsh-partner-pairing-heading\"><span><small>ACCESS</small><strong>\u79C1\u804A\u914D\u5BF9</strong></span><em>{pairings.filter(item => item.status === 'pending').length} \u4E2A\u5F85\u5904\u7406</em></div>\n <div className=\"dsh-partner-pairings\">{pairings.length === 0 ? <State title=\"\u8FD8\u6CA1\u6709\u8054\u7CFB\u4EBA\" detail=\"\u6709\u4EBA\u9996\u6B21\u5411\u673A\u5668\u4EBA\u53D1\u6D88\u606F\u540E\uFF0C\u914D\u5BF9\u8BF7\u6C42\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002\" compact /> : pairings.map(pairing => <article key={pairing.id}><span className={`is-${pairing.status}`}><IconUserOutline16 size={16} /></span><div><strong>{pairing.displayName}</strong><small>{pairing.status === 'pending' ? '\u7B49\u5F85\u5BA1\u6279' : pairing.status === 'approved' ? '\u5DF2\u6388\u6743\u72EC\u7ACB\u4F1A\u8BDD' : '\u5DF2\u963B\u6B62'} \u00B7 {new Date(pairing.updatedAt).toLocaleString()}</small></div>{pairing.status === 'pending' && <><button onClick={() => { void actPairing(pairing.id, 'blocked') }}>\u62D2\u7EDD</button><button className=\"is-primary\" onClick={() => { void actPairing(pairing.id, 'approved') }}>\u6279\u51C6</button></>}{pairing.status === 'approved' && <button onClick={() => { void actPairing(pairing.id, 'blocked') }}>\u64A4\u9500</button>}{pairing.status === 'blocked' && <button onClick={() => { void actPairing(pairing.id, 'approved') }}>\u91CD\u65B0\u6279\u51C6</button>}</article>)}</div>\n </>}\n {error && <p className=\"dsh-partner-inline-error\">{error}</p>}\n </div>\n}\n\nfunction MemoryPanel({ companion, snapshot, openSession, renewSession, onChanged }: { companion: CompanionView; snapshot: PartnerSnapshot; openSession(routeId: string, sessionId: string): Promise<void>; renewSession(routeId: string): Promise<void>; onChanged(): Promise<void> }): JSX.Element {\n const sessions = snapshot.sessions.filter(item => item.companionId === companion.id)\n const heartbeat = snapshot.heartbeatStates.find(item => item.companionId === companion.id)\n const [automation, setAutomation] = useState<AutomationView>(() => structuredClone(companion.automation))\n const [memories, setMemories] = useState<MemoryView[]>([])\n const [reflections, setReflections] = useState<DailyReflectionView[]>([])\n const [profiles, setProfiles] = useState<UserProfileSnapshotView[]>([])\n const [concernActivity, setConcernActivity] = useState<ConcernActivityView>({ concerns: [], observations: [] })\n const [newConcern, setNewConcern] = useState('')\n const [graph, setGraph] = useState<MemoryGraphView>({ memories: [], relations: [] })\n const [editing, setEditing] = useState<MemoryView>()\n const [busy, setBusy] = useState(false)\n const [notice, setNotice] = useState<string>()\n const [error, setError] = useState<string>()\n const [modelCatalog, setModelCatalog] = useState<ModelCatalogView>()\n const loadMemory = useCallback(async () => {\n const [result, relations, activity] = await Promise.all([api<{ memories: MemoryView[]; reflections: DailyReflectionView[]; profiles: UserProfileSnapshotView[] }>(`/companions/${companion.id}/memory`), api<MemoryGraphView>(`/companions/${companion.id}/memory/graph`), api<ConcernActivityView>(`/companions/${companion.id}/concerns`)])\n setMemories(result.memories); setReflections(result.reflections); setProfiles(result.profiles); setGraph(relations); setConcernActivity(activity)\n }, [companion.id])\n useEffect(() => { setAutomation(structuredClone(companion.automation)); void loadMemory().catch(reason => setError(message(reason))) }, [companion.id, companion.updatedAt, loadMemory])\n useEffect(() => { void api<ModelCatalogView>('/models').then(setModelCatalog).catch(reason => setError(message(reason))) }, [])\n const inheritedProvider = companion.provider || modelCatalog?.defaultSelection.provider || ''\n const selectedProvider = automation.memory.provider || inheritedProvider\n const modelOptions = modelCatalog?.providers.find(item => item.id === selectedProvider)?.models ?? []\n const save = async (): Promise<void> => {\n setBusy(true); setError(undefined); setNotice(undefined)\n try {\n await api(`/companions/${companion.id}/automation`, { method: 'PUT', body: JSON.stringify({ automation }) })\n setNotice('\u8BB0\u5FC6\u4E0E\u5FC3\u8DF3\u8BBE\u7F6E\u5DF2\u4FDD\u5B58')\n await onChanged()\n } catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const trigger = async (concernId?: string): Promise<void> => {\n setBusy(true); setError(undefined); setNotice(undefined)\n try {\n const result = await api<{ checked: boolean; sent: boolean; reason?: string }>(`/companions/${companion.id}/heartbeat/trigger`, {\n method: 'POST', body: JSON.stringify(concernId ? { concernId } : {}),\n })\n setNotice(result.sent ? '\u5FC3\u8DF3\u5DF2\u5B8C\u6210\u5E76\u53D1\u9001\u5FAE\u4FE1\u63D0\u9192' : result.reason ?? '\u5FC3\u8DF3\u68C0\u67E5\u5B8C\u6210')\n await Promise.all([onChanged(), loadMemory()])\n } catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const review = async (): Promise<void> => {\n setBusy(true); setError(undefined); setNotice(undefined)\n try {\n const result = await api<{ reviewed: number; failed: number; reason?: string }>(`/companions/${companion.id}/memory/review`, { method: 'POST' })\n setNotice(result.reason ?? `\u7EC8\u5BA1\u5B8C\u6210 ${result.reviewed} \u7BC7${result.failed ? `\uFF0C\u5931\u8D25 ${result.failed} \u7BC7` : ''}`); await loadMemory()\n } catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const saveMemory = async (): Promise<void> => {\n if (!editing) return\n setBusy(true); setError(undefined)\n try {\n await api(`/companions/${companion.id}/memory/${editing.id}`, { method: 'PUT', body: JSON.stringify({ subject: editing.subject, content: editing.content }) })\n setEditing(undefined); setNotice('\u8BB0\u5FC6\u5DF2\u4FEE\u6B63'); await loadMemory()\n } catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const deleteMemory = async (item: MemoryView): Promise<void> => {\n if (!window.confirm(`\u5220\u9664\u8BB0\u5FC6\u300C${item.subject}\u300D\uFF1F`)) return\n setBusy(true); setError(undefined)\n try { await api(`/companions/${companion.id}/memory/${item.id}`, { method: 'DELETE' }); if (editing?.id === item.id) setEditing(undefined); await loadMemory() }\n catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const addConcern = async (): Promise<void> => {\n const subject = newConcern.trim()\n if (!subject) return\n setBusy(true); setError(undefined); setNotice(undefined)\n try {\n await api(`/companions/${companion.id}/concerns`, { method: 'POST', body: JSON.stringify({ subject }) })\n setNewConcern(''); setNotice('\u4F19\u4F34\u4F1A\u7EE7\u7EED\u7559\u610F\u8FD9\u4EF6\u4E8B')\n await loadMemory()\n } catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const actConcern = async (item: ConcernView, action: 'watch' | 'ignore' | 'prioritize' | 'resolve'): Promise<void> => {\n setBusy(true); setError(undefined); setNotice(undefined)\n try {\n await api(`/companions/${companion.id}/concerns/${encodeURIComponent(item.id)}/action`, { method: 'POST', body: JSON.stringify({ action }) })\n setNotice(action === 'ignore' ? '\u4F19\u4F34\u4E0D\u518D\u5173\u6CE8\u8FD9\u4EF6\u4E8B' : action === 'resolve' ? '\u5DF2\u6807\u8BB0\u4E3A\u89E3\u51B3' : action === 'prioritize' ? '\u5DF2\u63D0\u9AD8\u5173\u6CE8' : '\u4F1A\u7EE7\u7EED\u7559\u610F')\n await loadMemory()\n } catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n return <div className=\"dsh-partner-form is-memory\"><Section eyebrow=\"CONTINUITY\" title=\"\u4F1A\u8BDD\u8BB0\u5FC6\" detail=\"\u8FD9\u91CC\u5C55\u793A\u6E20\u9053\u4F1A\u8BDD\u8FB9\u754C\u3002\u77E5\u8BC6\u5E93\u4ECD\u7531\u77E5\u8BC6\u5E93\u63D2\u4EF6\u7BA1\u7406\uFF0C\u4F19\u4F34\u4E0D\u4F1A\u628A\u4E0D\u540C\u5FAE\u4FE1\u8054\u7CFB\u4EBA\u7684\u539F\u59CB\u4E0A\u4E0B\u6587\u6DF7\u5728\u4E00\u8D77\u3002\" />\n <div className=\"dsh-partner-metrics\"><GlassSurface as=\"article\" interactive className=\"\" borderRadius={12} distortionScale={-9} saturation={1.05}><small>\u6E20\u9053\u4F1A\u8BDD</small><strong>{sessions.length}</strong><p>\u6BCF\u4F4D\u8054\u7CFB\u4EBA\u72EC\u7ACB</p></GlassSurface><GlassSurface as=\"article\" interactive className=\"\" borderRadius={12} distortionScale={-9} saturation={1.05}><small>\u957F\u671F\u8BB0\u5FC6</small><strong>{memories.filter(item => item.status === 'active').length}</strong><p>{reflections.length} \u7BC7\u6BCF\u65E5\u56DE\u987E</p></GlassSurface><GlassSurface as=\"article\" interactive className=\"\" borderRadius={12} distortionScale={-9} saturation={1.05}><small>\u6700\u8FD1\u5FC3\u8DF3</small><strong>{heartbeat?.lastCheckedAt ? relativeTime(heartbeat.lastCheckedAt) : '\u5C1A\u672A'}</strong><p>{heartbeat?.lastError ? '\u4E0A\u6B21\u6267\u884C\u5F02\u5E38' : `\u4ECA\u65E5\u53D1\u9001 ${heartbeat?.sentCount ?? 0} \u6B21`}</p></GlassSurface></div>\n\n <div className=\"dsh-partner-automation-grid\"><GlassSurface as=\"section\" interactive className=\"dsh-partner-automation\" borderRadius={14} distortionScale={-9} saturation={1.05}>\n <header><span><strong>\u5B66\u4E60\u4E0E\u957F\u671F\u8BB0\u5FC6</strong><small>\u6309\u8054\u7CFB\u4EBA\u5F52\u6863\u5B8C\u6574\u5BF9\u8BDD\uFF0C\u63D0\u70BC\u6BCF\u65E5\u56DE\u987E\u548C\u7ED3\u6784\u5316\u8BB0\u5FC6\uFF0C\u5E76\u5728\u76F8\u5173\u8BDD\u9898\u51FA\u73B0\u65F6\u53EC\u56DE\u3002</small></span><button type=\"button\" className=\"dsh-partner-switch\" data-on={automation.memory.enabled} aria-label=\"\u542F\u7528\u4F19\u4F34\u5B66\u4E60\" onClick={() => setAutomation(current => ({ ...current, memory: { ...current.memory, enabled: !current.memory.enabled } }))}><i /></button></header>\n <div className=\"dsh-partner-automation-fields is-memory-model\"><Field label=\"\u4FDD\u7559\u671F\u9650\"><select value={automation.memory.retentionDays} onChange={event => setAutomation(current => ({ ...current, memory: { ...current.memory, retentionDays: Number(event.target.value) } }))}><option value={0}>\u6C38\u4E45\u4FDD\u7559</option><option value={30}>30 \u5929</option><option value={90}>90 \u5929</option><option value={180}>180 \u5929</option><option value={365}>1 \u5E74</option><option value={1095}>3 \u5E74</option></select></Field><Field label=\"\u63D0\u70BC Provider\" hint=\"\u9ED8\u8BA4\u7EE7\u627F\u4F19\u4F34\"><select value={automation.memory.provider ?? ''} onChange={event => setAutomation(current => ({ ...current, memory: { ...current.memory, provider: event.target.value, model: '' } }))}><option value=\"\">\u8DDF\u968F\u4F19\u4F34 \u00B7 {inheritedProvider || 'DSH \u9ED8\u8BA4'}</option>{modelCatalog?.providers.map(provider => <option value={provider.id} key={provider.id}>{provider.name || provider.id}</option>)}</select></Field><Field label=\"\u63D0\u70BC\u6A21\u578B\" hint=\"\u9ED8\u8BA4\u7EE7\u627F\u4F19\u4F34\"><select value={automation.memory.model ?? ''} onChange={event => setAutomation(current => ({ ...current, memory: { ...current.memory, model: event.target.value } }))}><option value=\"\">\u8DDF\u968F\u4F19\u4F34 \u00B7 {companion.model || modelCatalog?.defaultSelection.model || 'DSH \u9ED8\u8BA4'}</option>{modelOptions.map(model => <option value={model.id} key={model.id}>{model.name || model.id}</option>)}</select></Field></div>\n <div className=\"dsh-partner-review-policy\"><button type=\"button\" className=\"dsh-partner-switch\" data-on={automation.memory.dailyReviewEnabled} aria-label=\"\u542F\u7528\u6BCF\u65E5\u7EC8\u5BA1\" onClick={() => setAutomation(current => ({ ...current, memory: { ...current.memory, dailyReviewEnabled: !current.memory.dailyReviewEnabled } }))}><i /></button><span><strong>\u6BCF\u65E5\u7EC8\u5BA1</strong><small>\u6B21\u65E5\u81EA\u52A8\u5408\u5E76\u91CD\u590D\u3001\u7EA0\u6B63\u504F\u5DEE\u5E76\u5EFA\u7ACB\u8BB0\u5FC6\u5173\u7CFB</small></span><label><select aria-label=\"\u6BCF\u65E5\u7EC8\u5BA1\u65F6\u95F4\" value={automation.memory.dailyReviewHour} onChange={event => setAutomation(current => ({ ...current, memory: { ...current.memory, dailyReviewHour: Number(event.target.value) } }))}>{Array.from({ length: 24 }, (_, hour) => <option value={hour} key={hour}>{String(hour).padStart(2, '0')}:00</option>)}</select></label><button type=\"button\" disabled={busy || reflections.length === 0} onClick={() => { void review() }}>\u7ACB\u5373\u7EC8\u5BA1</button></div>\n </GlassSurface>\n\n <GlassSurface as=\"section\" interactive className=\"dsh-partner-automation\" borderRadius={14} distortionScale={-9} saturation={1.05}>\n <header><span><strong>\u6301\u7EED\u611F\u77E5</strong><small>\u4F19\u4F34\u53EA\u89C2\u5BDF\u5C1A\u672A\u95ED\u73AF\u7684\u4E8B\u60C5\u662F\u5426\u51FA\u73B0\u65B0\u53D8\u5316\uFF0C\u5E76\u7531\u514B\u5236\u7684\u6253\u6270\u7B56\u7565\u51B3\u5B9A\u4F55\u65F6\u544A\u8BC9\u4F60\u3002</small></span><button type=\"button\" className=\"dsh-partner-switch\" data-on={automation.heartbeat.enabled} aria-label=\"\u542F\u7528\u4F19\u4F34\u5FC3\u8DF3\" onClick={() => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, enabled: !current.heartbeat.enabled } }))}><i /></button></header>\n <div className=\"dsh-partner-automation-fields is-heartbeat\">\n <Field label=\"\u68C0\u67E5\u95F4\u9694\"><select value={automation.heartbeat.intervalMinutes} onChange={event => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, intervalMinutes: Number(event.target.value) } }))}><option value={30}>30 \u5206\u949F</option><option value={60}>1 \u5C0F\u65F6</option><option value={180}>3 \u5C0F\u65F6</option><option value={360}>6 \u5C0F\u65F6</option><option value={720}>12 \u5C0F\u65F6</option><option value={1440}>24 \u5C0F\u65F6</option></select></Field>\n <Field label=\"\u514D\u6253\u6270\u5F00\u59CB\"><input type=\"number\" min={0} max={23} value={automation.heartbeat.quietStartHour} onChange={event => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, quietStartHour: Number(event.target.value) } }))} /></Field>\n <Field label=\"\u514D\u6253\u6270\u7ED3\u675F\"><input type=\"number\" min={0} max={23} value={automation.heartbeat.quietEndHour} onChange={event => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, quietEndHour: Number(event.target.value) } }))} /></Field>\n <Field label=\"\u6BCF\u65E5\u4E0A\u9650\"><select value={automation.heartbeat.dailyLimit} onChange={event => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, dailyLimit: Number(event.target.value) } }))}><option value={0}>\u4E0D\u9650</option><option value={1}>1 \u6B21</option><option value={2}>2 \u6B21</option><option value={3}>3 \u6B21</option><option value={5}>5 \u6B21</option><option value={8}>8 \u6B21</option></select></Field>\n </div>\n <ConcernBoard companionId={companion.id} activity={concernActivity} value={newConcern} busy={busy} onValue={setNewConcern} onAdd={() => { void addConcern() }} onCheck={item => { void trigger(item.id) }} onAct={(item, action) => { void actConcern(item, action) }} />\n {heartbeat?.lastError && <p className=\"dsh-partner-inline-error\">{heartbeat.lastError}</p>}\n <div className=\"dsh-partner-automation-actions\"><button type=\"button\" disabled={busy || sessions.length === 0} onClick={() => { void trigger() }}>\u68C0\u67E5\u5230\u671F\u9879</button><button type=\"button\" className=\"is-primary\" disabled={busy} onClick={() => { void save() }}>{busy ? '\u6B63\u5728\u5904\u7406\u2026' : '\u4FDD\u5B58\u8BBE\u7F6E'}</button></div>\n </GlassSurface></div>\n\n {notice && <p className=\"dsh-partner-inline-notice\"><IconCheckOutline14 size={14} />{notice}</p>}\n {error && <p className=\"dsh-partner-inline-error\">{error}</p>}\n\n <MemoryLibrary profiles={profiles} memories={memories} reflections={reflections} graph={graph} editing={editing} busy={busy} setEditing={setEditing} save={() => { void saveMemory() }} remove={item => { void deleteMemory(item) }} />\n\n <div className=\"dsh-partner-section-heading\"><span><small>SESSIONS</small><strong>\u5171\u4EAB\u4F1A\u8BDD</strong></span></div>\n <div className=\"dsh-partner-session-list\">{sessions.map(item => <article key={item.id} data-archived={item.archived}><span><IconDataOutline16 size={16} /></span><div><strong>\u5FAE\u4FE1\u8054\u7CFB\u4EBA \u00B7 {item.userId.slice(-6)}</strong><small>{item.archived ? '\u5DF2\u5F52\u6863 \u00B7 \u957F\u671F\u8BB0\u5FC6\u4FDD\u7559' : `${item.sessionId} \u00B7 ${new Date(item.lastMessageAt).toLocaleString()}`}</small></div><button type=\"button\" className={item.archived ? 'is-primary' : undefined} onClick={() => { if (item.archived) void renewSession(item.id); else void openSession(item.id, item.sessionId) }}>{item.archived ? '\u5F00\u59CB\u65B0\u4F1A\u8BDD' : '\u6253\u5F00\u4F1A\u8BDD'}</button></article>)}{sessions.length === 0 && <State title=\"\u8FD8\u6CA1\u6709\u5171\u4EAB\u4F1A\u8BDD\" detail=\"\u8054\u7CFB\u4EBA\u5B8C\u6210\u914D\u5BF9\u5E76\u53D1\u6765\u7B2C\u4E00\u6761\u6D88\u606F\u540E\uFF0C\u4F19\u4F34\u4F1A\u521B\u5EFA\u7F51\u9875\u4E0E\u5FAE\u4FE1\u5171\u7528\u7684\u4F1A\u8BDD\u3002\" compact />}</div>\n </div>\n}\n\nfunction ConcernBoard({ companionId, activity, value, busy, onValue, onAdd, onCheck, onAct }: {\n companionId: string; activity: ConcernActivityView; value: string; busy: boolean; onValue(value: string): void; onAdd(): void\n onCheck(item: ConcernView): void\n onAct(item: ConcernView, action: 'watch' | 'ignore' | 'prioritize' | 'resolve'): void\n}): JSX.Element {\n const visible = activity.concerns.filter(item => item.state !== 'archived')\n const active = visible.filter(item => item.state !== 'resolved')\n const resolved = visible.filter(item => item.state === 'resolved')\n const latest = new Map([...activity.observations].reverse().map(item => [item.concernId, item]))\n const [composing, setComposing] = useState(false)\n const [expandedId, setExpandedId] = useState<string>()\n const [visibleCount, setVisibleCount] = useState(5)\n const [mention, setMention] = useState<{ start: number; end: number; query: string }>()\n const [sources, setSources] = useState<ConcernSourceView[]>([])\n const [sourcesLoading, setSourcesLoading] = useState(false)\n const [sourceError, setSourceError] = useState<string>()\n const [activeSource, setActiveSource] = useState(0)\n const inputRef = useRef<HTMLInputElement>(null)\n const listboxId = useId()\n const shown = active.slice(0, visibleCount)\n const suggestionsOpen = composing && mention !== undefined\n useEffect(() => {\n if (!suggestionsOpen || mention === undefined) {\n setSources([]); setSourcesLoading(false); setSourceError(undefined); return\n }\n const controller = new AbortController()\n const timer = window.setTimeout(() => {\n setSourcesLoading(true); setSourceError(undefined)\n const params = new URLSearchParams({ q: mention.query })\n void api<{ items: ConcernSourceView[] }>(`/companions/${encodeURIComponent(companionId)}/concern-sources?${params}`).then(result => {\n if (!controller.signal.aborted) { setSources(result.items); setActiveSource(0) }\n }).catch(reason => {\n if (!controller.signal.aborted) { setSources([]); setSourceError(message(reason)) }\n }).finally(() => { if (!controller.signal.aborted) setSourcesLoading(false) })\n }, 150)\n return () => { window.clearTimeout(timer); controller.abort() }\n }, [companionId, mention?.query, suggestionsOpen])\n const submit = (event: FormEvent): void => { event.preventDefault(); onAdd(); setComposing(false); setMention(undefined) }\n const chooseSource = (source: ConcernSourceView): void => {\n if (mention === undefined) return\n const next = `${value.slice(0, mention.start)}${source.token} ${value.slice(mention.end)}`\n const cursor = mention.start + source.token.length + 1\n onValue(next); setMention(undefined); setSources([])\n window.requestAnimationFrame(() => { inputRef.current?.focus(); inputRef.current?.setSelectionRange(cursor, cursor) })\n }\n return <GlassSurface as=\"section\" interactive className=\"dsh-partner-concern-board\" borderRadius={11} distortionScale={-8} saturation={1.04} aria-labelledby=\"partner-concerns-title\">\n <header><span><strong id=\"partner-concerns-title\">\u4F19\u4F34\u5728\u610F\u7684\u4E8B <b>{active.length}</b></strong><p>\u5C1A\u672A\u95ED\u73AF\u3001\u503C\u5F97\u7EE7\u7EED\u7559\u610F\u7684\u4E8B\u60C5</p></span><button type=\"button\" aria-expanded={composing} onClick={() => setComposing(current => !current)}><IconPlusOutline16 size={14} />\u4EA4\u4EE3\u4E00\u4EF6\u4E8B</button></header>\n {composing && <form className=\"dsh-partner-concern-compose\" onSubmit={submit}><label><span>\u9700\u8981\u7559\u610F\u7684\u4E8B</span><div className=\"dsh-partner-concern-input-wrap\"><input\n ref={inputRef} autoFocus value={value} maxLength={300} placeholder=\"\u8F93\u5165 @ \u9009\u62E9\u6587\u4EF6\u6216\u77E5\u8BC6\u6587\u6863\"\n role=\"combobox\" aria-autocomplete=\"list\" aria-expanded={suggestionsOpen} aria-controls={suggestionsOpen ? listboxId : undefined}\n aria-activedescendant={suggestionsOpen && sources[activeSource] ? `${listboxId}-option-${activeSource}` : undefined}\n onChange={event => { onValue(event.target.value); setMention(activeMention(event.target.value, event.target.selectionStart ?? event.target.value.length)) }}\n onClick={event => setMention(activeMention(event.currentTarget.value, event.currentTarget.selectionStart ?? event.currentTarget.value.length))}\n onKeyDown={event => {\n if (!suggestionsOpen) return\n if (event.key === 'ArrowDown') { event.preventDefault(); setActiveSource(index => sources.length === 0 ? 0 : (index + 1) % sources.length) }\n else if (event.key === 'ArrowUp') { event.preventDefault(); setActiveSource(index => sources.length === 0 ? 0 : (index - 1 + sources.length) % sources.length) }\n else if (event.key === 'Enter' && sources[activeSource]) { event.preventDefault(); chooseSource(sources[activeSource]) }\n else if (event.key === 'Escape') { event.preventDefault(); setMention(undefined) }\n }}\n />{suggestionsOpen && <div id={listboxId} className=\"dsh-partner-concern-sources\" role=\"listbox\" aria-label=\"\u53EF\u5F15\u7528\u7684\u6587\u4EF6\u4E0E\u77E5\u8BC6\u6587\u6863\">\n {sourcesLoading ? <p role=\"status\">\u6B63\u5728\u67E5\u627E\u53EF\u5F15\u7528\u5185\u5BB9\u2026</p> : sourceError ? <p role=\"status\">\u5019\u9009\u52A0\u8F7D\u5931\u8D25\uFF1A{sourceError}</p> : sources.length === 0 ? <p role=\"status\">\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u6587\u4EF6\u6216\u5DF2\u6302\u8F7D\u77E5\u8BC6\u6587\u6863</p> : <>\n {sources.map((source, index) => <button\n type=\"button\" role=\"option\" id={`${listboxId}-option-${index}`} key={`${source.kind}:${source.token}`}\n aria-selected={index === activeSource} data-kind={source.kind} onMouseDown={event => event.preventDefault()}\n onMouseEnter={() => setActiveSource(index)} onClick={() => chooseSource(source)}\n ><span>{source.kind === 'file' ? <IconDataOutline16 size={15} /> : <IconLinkOutline16 size={15} />}</span><strong>{source.label}</strong><small>{source.detail}</small></button>)}\n </>}\n </div>}</div><small className=\"dsh-partner-concern-compose-hint\">\u8F93\u5165 <b>@</b> \u4F1A\u5217\u51FA\u5F53\u524D\u4F1A\u8BDD\u6587\u4EF6\u548C\u5DF2\u6302\u8F7D\u7684\u77E5\u8BC6\u6587\u6863\uFF0C\u4E5F\u53EF\u4EE5\u7EE7\u7EED\u8F93\u5165\u5173\u952E\u8BCD\u7B5B\u9009\u3002</small></label><div><button type=\"button\" onClick={() => { setComposing(false); setMention(undefined); onValue('') }}>\u53D6\u6D88</button><button type=\"submit\" className=\"is-primary\" disabled={busy || !value.trim()}>\u8BA9\u4F19\u4F34\u8BB0\u7740</button></div></form>}\n <div className=\"dsh-partner-concern-list\" role=\"list\">\n {active.length === 0 ? <p className=\"dsh-partner-concern-empty\">\u6700\u8FD1\u6CA1\u6709\u672A\u95ED\u73AF\u7684\u4E8B\u3002\u4F60\u4E5F\u53EF\u4EE5\u76F4\u63A5\u5BF9\u4F19\u4F34\u8BF4\u201C\u8FD9\u4E2A\u5E2E\u6211\u7559\u610F\u201D\u3002</p> : shown.map(item => {\n const observation = latest.get(item.id)\n const expanded = expandedId === item.id\n const status = observation ? concernObservationStatus(observation) : item.state === 'active' ? '\u6B63\u5728\u7559\u610F' : '\u6682\u65F6\u8BB0\u7740'\n return <article key={item.id} role=\"listitem\" data-state={item.state} data-expanded={expanded}>\n <button type=\"button\" className=\"dsh-partner-concern-row\" aria-expanded={expanded} onClick={() => setExpandedId(current => current === item.id ? undefined : item.id)}>\n <span className=\"dsh-partner-concern-state\"><i />{status}</span><span className=\"dsh-partner-concern-copy\"><strong>{item.subject}</strong><small>{observation ? observation.event : item.reason}</small></span><span className=\"dsh-partner-concern-time\" title={`\u8BA1\u5212\u4E8E ${new Date(item.nextCheckAt).toLocaleString()} \u518D\u6B21\u7559\u610F`}><small>\u4E0B\u6B21\u7559\u610F</small><strong>{futureTime(item.nextCheckAt)}</strong></span><IconChevronDownOutline14 size={14} />\n </button>\n {expanded && <div className=\"dsh-partner-concern-detail\"><p>{item.reason}</p>{observation && <><blockquote>{observation.event}</blockquote><div className=\"dsh-partner-concern-decision\" data-decision={observation.decision}><strong>{concernObservationStatus(observation)}</strong><span>{observation.decisionReason || concernObservationExplanation(observation)}</span><small>\u6253\u6270\u5206\u6570 {Math.round(observation.interruptScore * 100)}{observation.notificationRuleEffect !== 'auto' && observation.notificationRuleReason ? ` \u00B7 \u77E5\u8BC6\u89C4\u5219\uFF1A${observation.notificationRuleReason}` : ''}</small></div></>}{item.resources.length > 0 && <div className=\"dsh-partner-concern-resources\">{item.resources.map(resource => <span key={`${resource.kind}:${resource.locator}`}>{resource.kind === 'file' ? '\u6587\u4EF6' : '\u77E5\u8BC6'} \u00B7 {resource.label}</span>)}</div>}<small>{item.origin === 'explicit' ? '\u4F60\u660E\u786E\u4EA4\u4EE3' : '\u4F19\u4F34\u4ECE\u5BF9\u8BDD\u4E2D\u6CE8\u610F\u5230'} \u00B7 {watchKindLabel(item.watchKind)}</small><div className=\"dsh-partner-concern-actions\" aria-label={`${item.subject} \u7684\u64CD\u4F5C`}><button type=\"button\" disabled={busy} onClick={() => onCheck(item)}>\u7ACB\u5373\u68C0\u67E5\u8FD9\u6761</button><button type=\"button\" disabled={busy} onClick={() => onAct(item, 'watch')}>\u7EE7\u7EED\u7559\u610F</button><button type=\"button\" disabled={busy} onClick={() => onAct(item, 'prioritize')}>\u63D0\u9AD8\u5173\u6CE8</button><button type=\"button\" disabled={busy} onClick={() => onAct(item, 'resolve')}>\u5DF2\u7ECF\u89E3\u51B3</button><button type=\"button\" className=\"is-danger\" disabled={busy} onClick={() => onAct(item, 'ignore')}>\u522B\u7BA1\u8FD9\u4E2A</button></div></div>}\n </article>\n })}\n </div>\n {(active.length > shown.length || visibleCount > 5) && <div className=\"dsh-partner-concern-more\">{active.length > shown.length ? <button type=\"button\" onClick={() => setVisibleCount(count => Math.min(active.length, count + 20))}>\u518D\u663E\u793A {Math.min(20, active.length - shown.length)} \u6761</button> : <button type=\"button\" onClick={() => setVisibleCount(5)}>\u6536\u8D77\u5217\u8868</button>}</div>}\n {resolved.length > 0 && <details className=\"dsh-partner-concern-resolved\"><summary>\u5DF2\u7ECF\u89E3\u51B3 <b>{resolved.length}</b></summary><div>{resolved.slice(0, 30).map(item => <article key={item.id}><span><IconCheckOutline14 size={13} /></span><strong>{item.subject}</strong><button type=\"button\" disabled={busy} onClick={() => onAct(item, 'watch')}>\u91CD\u65B0\u7559\u610F</button></article>)}</div></details>}\n </GlassSurface>\n}\n\nfunction activeMention(value: string, cursor: number): { start: number; end: number; query: string } | undefined {\n const prefix = value.slice(0, cursor)\n const start = prefix.lastIndexOf('@')\n if (start < 0 || (start > 0 && !/\\s/u.test(prefix[start - 1] ?? ''))) return undefined\n const fragment = prefix.slice(start + 1)\n if (fragment.startsWith('\u77E5\u8BC6\u5E93[')) {\n if (fragment.includes(']')) return undefined\n return { start, end: cursor, query: fragment.slice(4) }\n }\n if (fragment.startsWith('\"')) {\n if (fragment.slice(1).includes('\"')) return undefined\n return { start, end: cursor, query: fragment.slice(1) }\n }\n if (/\\s/u.test(fragment)) return undefined\n return { start, end: cursor, query: fragment }\n}\n\nfunction watchKindLabel(value: ConcernView['watchKind']): string {\n return value === 'knowledge' ? '\u77E5\u8BC6\u5E93\u53D8\u5316' : value === 'workspace' ? '\u9879\u76EE\u53D8\u5316' : value === 'web' ? '\u5916\u90E8\u53D8\u5316' : '\u6309\u4E8B\u60C5\u5224\u65AD\u6765\u6E90'\n}\n\ntype MemoryLibraryMode = 'profile' | 'memory' | 'reflection' | 'graph'\nconst MEMORY_KINDS: Array<MemoryView['kind'] | 'all'> = ['all', 'preference', 'task', 'event', 'relationship', 'emotion']\n\nfunction MemoryLibrary({ profiles, memories, reflections, graph, editing, busy, setEditing, save, remove }: {\n profiles: UserProfileSnapshotView[]; memories: MemoryView[]; reflections: DailyReflectionView[]; graph: MemoryGraphView; editing: MemoryView | undefined; busy: boolean\n setEditing(value?: MemoryView): void; save(): void; remove(item: MemoryView): void\n}): JSX.Element {\n const activeMemories = useMemo(() => memories.filter(item => item.status === 'active' && item.kind !== 'profile'), [memories])\n const profileMemories = useMemo(() => memories.filter(item => item.status === 'active' && item.kind === 'profile'), [memories])\n const [mode, setMode] = useState<MemoryLibraryMode>('profile')\n const [kind, setKind] = useState<MemoryView['kind'] | 'all'>('all')\n const [query, setQuery] = useState('')\n const [selectedMemoryId, setSelectedMemoryId] = useState<string>()\n const [selectedDate, setSelectedDate] = useState<string>()\n const normalized = query.trim().toLocaleLowerCase()\n const filteredMemories = useMemo(() => activeMemories.filter(item =>\n (kind === 'all' || item.kind === kind) && (!normalized || `${item.subject} ${item.content}`.toLocaleLowerCase().includes(normalized)),\n ), [activeMemories, kind, normalized])\n const filteredReflections = useMemo(() => reflections.filter(item => !normalized ||\n `${item.date} ${item.summary} ${item.events.join(' ')} ${item.openTasks.join(' ')} ${item.learnings.join(' ')}`.toLocaleLowerCase().includes(normalized),\n ), [reflections, normalized])\n const selectedMemory = filteredMemories.find(item => item.id === selectedMemoryId) ?? filteredMemories[0]\n const selectedReflection = filteredReflections.find(item => item.date === selectedDate) ?? filteredReflections[0]\n\n return <GlassSurface as=\"section\" interactive className=\"dsh-partner-memory-library\" borderRadius={17} distortionScale={-7} saturation={1.04}>\n <header className=\"dsh-partner-library-header\"><span><small>MEMORY LIBRARY</small><strong>\u4F19\u4F34\u8BB0\u5FC6\u5E93</strong><p>\u67E5\u770B\u4F19\u4F34\u5982\u4F55\u4ECE\u957F\u671F\u5BF9\u8BDD\u4E2D\u8BA4\u8BC6\u4F60\uFF0C\u4EE5\u53CA\u8FD9\u4E9B\u7406\u89E3\u600E\u6837\u968F\u8BC1\u636E\u53D8\u5316\u3002</p></span><nav aria-label=\"\u8BB0\u5FC6\u5185\u5BB9\"><button type=\"button\" className={mode === 'profile' ? 'is-active' : ''} onClick={() => setMode('profile')}>\u4EBA\u7269\u753B\u50CF <b>{profiles.length}</b></button><button type=\"button\" className={mode === 'memory' ? 'is-active' : ''} onClick={() => setMode('memory')}>\u8BDD\u9898\u8BB0\u5FC6 <b>{activeMemories.length}</b></button><button type=\"button\" className={mode === 'reflection' ? 'is-active' : ''} onClick={() => setMode('reflection')}>\u6BCF\u65E5\u56DE\u987E <b>{reflections.length}</b></button><button type=\"button\" className={mode === 'graph' ? 'is-active' : ''} onClick={() => setMode('graph')}>\u5173\u7CFB\u56FE\u8C31 <b>{graph.relations.length}</b></button></nav></header>\n {mode !== 'profile' && <div className=\"dsh-partner-library-tools\"><label><span className=\"sr-only\">\u641C\u7D22\u8BB0\u5FC6</span><input value={query} onChange={event => setQuery(event.target.value)} placeholder={mode === 'memory' ? '\u641C\u7D22\u4E3B\u9898\u6216\u8BB0\u5FC6\u5185\u5BB9' : '\u641C\u7D22\u65E5\u671F\u3001\u603B\u7ED3\u6216\u5F85\u529E'} /></label>{mode === 'memory' && <div className=\"dsh-partner-memory-kinds\">{MEMORY_KINDS.map(value => <button type=\"button\" key={value} className={kind === value ? 'is-active' : ''} onClick={() => setKind(value)}>{value === 'all' ? '\u5168\u90E8' : memoryKind(value)}</button>)}</div>}</div>}\n {mode === 'profile' ? <ProfileLibrary profiles={profiles} memories={profileMemories} editing={editing} busy={busy} setEditing={setEditing} save={save} remove={remove} /> : mode === 'memory' ? <div className=\"dsh-partner-library-browser\">\n <div className=\"dsh-partner-library-list\" role=\"list\">{filteredMemories.length === 0 ? <State title={activeMemories.length === 0 ? '\u8FD8\u6CA1\u6709\u957F\u671F\u8BB0\u5FC6' : '\u6CA1\u6709\u5339\u914D\u7684\u8BB0\u5FC6'} detail={activeMemories.length === 0 ? '\u4F19\u4F34\u5B8C\u6210\u5BF9\u8BDD\u540E\u4F1A\u81EA\u52A8\u63D0\u70BC\u503C\u5F97\u957F\u671F\u4FDD\u7559\u7684\u4FE1\u606F\u3002' : '\u6362\u4E2A\u5173\u952E\u8BCD\u6216\u7C7B\u578B\u8BD5\u8BD5\u3002'} compact /> : filteredMemories.map(item => <button type=\"button\" role=\"listitem\" key={item.id} className={selectedMemory?.id === item.id ? 'is-active' : ''} onClick={() => { setSelectedMemoryId(item.id); setEditing(undefined) }}><span data-kind={item.kind}>{memoryKind(item.kind)}</span><strong>{item.subject}</strong><p>{item.content}</p><small>{relativeTime(item.updatedAt)}</small></button>)}</div>\n <div className=\"dsh-partner-library-detail\">{selectedMemory ? <MemoryCard item={selectedMemory} editing={editing?.id === selectedMemory.id ? editing : undefined} busy={busy} setEditing={setEditing} save={save} remove={() => remove(selectedMemory)} /> : <State title=\"\u9009\u62E9\u4E00\u6761\u8BB0\u5FC6\" detail=\"\u8BB0\u5FC6\u8BE6\u60C5\u4F1A\u663E\u793A\u5728\u8FD9\u91CC\u3002\" compact />}</div>\n </div> : mode === 'reflection' ? <div className=\"dsh-partner-library-browser\">\n <div className=\"dsh-partner-library-list is-diary\" role=\"list\">{filteredReflections.length === 0 ? <State title={reflections.length === 0 ? '\u8FD8\u6CA1\u6709\u6BCF\u65E5\u56DE\u987E' : '\u6CA1\u6709\u5339\u914D\u7684\u56DE\u987E'} detail={reflections.length === 0 ? '\u6BCF\u65E5\u56DE\u987E\u4F1A\u5728\u6BCF\u8F6E\u5B8C\u6574\u5BF9\u8BDD\u540E\u6301\u7EED\u66F4\u65B0\u3002' : '\u6362\u4E2A\u5173\u952E\u8BCD\u6216\u65E5\u671F\u8BD5\u8BD5\u3002'} compact /> : filteredReflections.map(entry => <button type=\"button\" role=\"listitem\" key={entry.date} className={selectedReflection?.date === entry.date ? 'is-active' : ''} onClick={() => setSelectedDate(entry.date)}><time>{entry.date}</time><strong>{entry.turnCount} \u8F6E\u4EA4\u6D41</strong><p>{entry.summary}</p><small>{entry.openTasks.length} \u9879\u5F85\u8DDF\u8FDB \u00B7 {entry.learnings.length} \u9879\u7406\u89E3</small></button>)}</div>\n <div className=\"dsh-partner-library-detail\">{selectedReflection ? <DailyReflectionDetail entry={selectedReflection} /> : <State title=\"\u9009\u62E9\u4E00\u5929\" detail=\"\u5F53\u5929\u7684\u603B\u7ED3\u4E0E\u5F85\u529E\u4F1A\u663E\u793A\u5728\u8FD9\u91CC\u3002\" compact />}</div>\n </div> : <MemoryGraph graph={graph} profiles={profiles} query={normalized} inspect={item => { setEditing(undefined); if (item.kind === 'profile') setMode('profile'); else { setSelectedMemoryId(item.id); setMode('memory') } }} />}\n </GlassSurface>\n}\n\nfunction ProfileLibrary({ profiles, memories, editing, busy, setEditing, save, remove }: {\n profiles: UserProfileSnapshotView[]; memories: MemoryView[]; editing: MemoryView | undefined; busy: boolean\n setEditing(value?: MemoryView): void; save(): void; remove(item: MemoryView): void\n}): JSX.Element {\n const [selectedScopeId, setSelectedScopeId] = useState<string>()\n const selected = profiles.find(item => item.scopeId === selectedScopeId) ?? profiles[0]\n if (!selected) return <State title=\"\u8FD8\u6CA1\u6709\u8054\u7CFB\u4EBA\u753B\u50CF\" detail=\"\u8054\u7CFB\u4EBA\u5F00\u59CB\u548C\u4F19\u4F34\u4EA4\u6D41\u540E\uFF0C\u8FD9\u91CC\u4F1A\u9010\u6B65\u5C55\u793A\u4F19\u4F34\u4ECE\u660E\u786E\u5BF9\u8BDD\u4E2D\u5F62\u6210\u7684\u957F\u671F\u7406\u89E3\u3002\" />\n const activeIds = new Set(selected.entries.map(item => item.id))\n const pending = memories.filter(item => item.scopeId === selected.scopeId && !activeIds.has(item.id))\n return <div className=\"dsh-partner-profile-browser\">\n <div className=\"dsh-partner-profile-people\" role=\"list\" aria-label=\"\u8054\u7CFB\u4EBA\u753B\u50CF\">\n {profiles.map(profile => <button type=\"button\" role=\"listitem\" key={profile.scopeId} className={profile.scopeId === selected.scopeId ? 'is-active' : ''} onClick={() => { setSelectedScopeId(profile.scopeId); setEditing(undefined) }}>\n <span><IconUserOutline16 size={16} /></span><div><strong>{profile.label}</strong><small>{profile.entries.length > 0 ? `${profile.entries.length} \u9879\u7A33\u5B9A\u7406\u89E3` : '\u8FD8\u5728\u8BA4\u8BC6\u4E2D'}</small></div><i aria-hidden=\"true\" />\n </button>)}\n </div>\n <div className=\"dsh-partner-profile-stage\">\n <header className=\"dsh-partner-profile-heading\"><span><small>PARTNER UNDERSTANDING</small><strong>\u4F19\u4F34\u773C\u4E2D\u7684 {selected.label}</strong><p>\u8FD9\u4E9B\u5185\u5BB9\u6765\u81EA\u4F60\u5728\u5BF9\u8BDD\u4E2D\u7684\u660E\u786E\u8868\u8FBE\u3002\u4F19\u4F34\u4F1A\u7528\u5B83\u4FDD\u6301\u7406\u89E3\u8FDE\u7EED\uFF0C\u4F46\u4E0D\u4F1A\u628A\u753B\u50CF\u5F53\u6210\u6807\u7B7E\u53CD\u590D\u590D\u8FF0\u3002</p></span><div data-ready={selected.entries.length > 0}><i />{selected.entries.length > 0 ? '\u4E0A\u4E0B\u6587\u57FA\u7EBF\u5DF2\u5C31\u7EEA' : '\u7B49\u5F85\u53EF\u9760\u8BC1\u636E'}</div></header>\n {selected.entries.length > 0 ? <>\n <div className=\"dsh-partner-profile-meta\"><span><small>\u753B\u50CF\u7248\u672C</small><strong>{selected.version}</strong></span><span><small>\u5BF9\u8BDD\u4F9D\u636E</small><strong>{selected.evidenceCount} \u5904</strong></span><span><small>\u7528\u6237\u786E\u8BA4</small><strong>{selected.lockedCount} \u9879</strong></span><span><small>\u6700\u8FD1\u4F9D\u636E</small><strong>{selected.updatedAt ? relativeTime(selected.updatedAt) : '\u5C1A\u672A'}</strong></span></div>\n <div className=\"dsh-partner-profile-entries\">{selected.entries.map(item => <MemoryCard key={item.id} item={item} editing={editing?.id === item.id ? editing : undefined} busy={busy} setEditing={setEditing} save={save} remove={() => remove(item)} />)}</div>\n </> : <State title=\"\u4F19\u4F34\u8FD8\u5728\u8BA4\u8BC6\u4F60\" detail=\"\u53EA\u6709\u660E\u786E\u3001\u7A33\u5B9A\u5E76\u8FBE\u5230\u53EF\u9760\u6807\u51C6\u7684\u957F\u671F\u4FE1\u606F\u624D\u4F1A\u8FDB\u5165\u753B\u50CF\uFF1B\u666E\u901A\u504F\u597D\u3001\u4E34\u65F6\u4EFB\u52A1\u548C\u4E00\u6B21\u6027\u60C5\u7EEA\u4E0D\u4F1A\u653E\u5728\u8FD9\u91CC\u3002\" compact />}\n {pending.length > 0 && <details className=\"dsh-partner-profile-pending\"><summary>\u5F85\u786E\u8BA4\u7684\u7406\u89E3 <b>{pending.length}</b></summary><div>{pending.map(item => <MemoryCard key={item.id} item={item} editing={editing?.id === item.id ? editing : undefined} busy={busy} setEditing={setEditing} save={save} remove={() => remove(item)} />)}</div></details>}\n </div>\n </div>\n}\n\ntype RelationFilter = MemoryRelationView['kind'] | 'all'\nconst RELATION_FILTERS: RelationFilter[] = ['all', 'conflicts_with', 'depends_on', 'supports', 'follows', 'about']\n\nfunction MemoryGraph({ graph, profiles, query, inspect }: { graph: MemoryGraphView; profiles: UserProfileSnapshotView[]; query: string; inspect(item: MemoryView): void }): JSX.Element {\n const byId = new Map(graph.memories.map(item => [item.id, item]))\n const scopeIds = [...new Set(graph.relations.map(item => item.scopeId))]\n const [requestedScopeId, setRequestedScopeId] = useState<string>()\n const scopeId = scopeIds.includes(requestedScopeId ?? '') ? requestedScopeId! : scopeIds[0]\n const [filter, setFilter] = useState<RelationFilter>('all')\n const scoped = graph.relations.filter(item => item.scopeId === scopeId)\n const visible = scoped.filter(item => {\n if (filter !== 'all' && item.kind !== filter) return false\n const source = byId.get(item.sourceMemoryId); const target = byId.get(item.targetMemoryId)\n return !query || `${source?.subject ?? ''} ${source?.content ?? ''} ${target?.subject ?? ''} ${target?.content ?? ''} ${item.label}`.toLocaleLowerCase().includes(query)\n }).sort((left, right) => Number(right.kind === 'conflicts_with') - Number(left.kind === 'conflicts_with') || right.confidence - left.confidence)\n const [selectedRelationId, setSelectedRelationId] = useState<string>()\n const selected = visible.find(item => item.id === selectedRelationId) ?? visible[0]\n const source = selected ? byId.get(selected.sourceMemoryId) : undefined\n const target = selected ? byId.get(selected.targetMemoryId) : undefined\n const label = profiles.find(item => item.scopeId === scopeId)?.label ?? (scopeId ? `\u8054\u7CFB\u4EBA ${scopeId.slice(-6)}` : '\u5F53\u524D\u8054\u7CFB\u4EBA')\n const conflictCount = scoped.filter(item => item.kind === 'conflicts_with').length\n if (graph.relations.length === 0) return <State title=\"\u8FD8\u6CA1\u6709\u53EF\u9760\u5173\u7CFB\" detail=\"\u6BCF\u65E5\u7EC8\u5BA1\u53EA\u4F1A\u4FDD\u5B58\u6709\u660E\u786E\u8BC1\u636E\u7684\u8BB0\u5FC6\u8054\u7CFB\uFF0C\u4E0D\u4F1A\u4E3A\u4E86\u586B\u6EE1\u56FE\u8C31\u800C\u731C\u6D4B\u3002\" />\n return <div className=\"dsh-partner-graph-audit\">\n <header className=\"dsh-partner-graph-toolbar\"><span><small>\u5173\u7CFB\u5BA1\u8BA1</small><strong>{label} \u7684\u7406\u89E3\u5173\u7CFB</strong><p>{scoped.length} \u6761\u53EF\u9760\u8054\u7CFB{conflictCount > 0 ? `\uFF0C\u5176\u4E2D ${conflictCount} \u6761\u9700\u8981\u786E\u8BA4` : '\uFF0C\u6682\u65E0\u5F85\u786E\u8BA4\u51B2\u7A81'}</p></span>{scopeIds.length > 1 && <label><span>\u8054\u7CFB\u4EBA</span><select value={scopeId} onChange={event => { setRequestedScopeId(event.target.value); setSelectedRelationId(undefined) }}>{scopeIds.map(value => <option value={value} key={value}>{profiles.find(item => item.scopeId === value)?.label ?? `\u8054\u7CFB\u4EBA ${value.slice(-6)}`}</option>)}</select></label>}</header>\n <nav className=\"dsh-partner-graph-filters\" aria-label=\"\u5173\u7CFB\u7C7B\u578B\">{RELATION_FILTERS.map(value => { const count = value === 'all' ? scoped.length : scoped.filter(item => item.kind === value).length; return <button type=\"button\" key={value} className={filter === value ? 'is-active' : ''} aria-pressed={filter === value} onClick={() => { setFilter(value); setSelectedRelationId(undefined) }}>{value === 'all' ? '\u5168\u90E8' : relationLabel(value)} <b>{count}</b></button> })}</nav>\n <div className=\"dsh-partner-graph-browser\"><div className=\"dsh-partner-graph-index\" role=\"list\">{visible.length === 0 ? <State title=\"\u6CA1\u6709\u5339\u914D\u7684\u5173\u7CFB\" detail=\"\u8C03\u6574\u5173\u7CFB\u7C7B\u578B\u6216\u641C\u7D22\u5173\u952E\u8BCD\u540E\u518D\u8BD5\u3002\" compact /> : visible.map(item => { const from = byId.get(item.sourceMemoryId); const to = byId.get(item.targetMemoryId); return <button type=\"button\" role=\"listitem\" key={item.id} data-kind={item.kind} className={selected?.id === item.id ? 'is-active' : ''} onClick={() => setSelectedRelationId(item.id)}><span>{relationLabel(item.kind)}</span><strong>{from?.subject ?? '\u5DF2\u5220\u9664\u8BB0\u5FC6'} <i aria-hidden=\"true\">\u2192</i> {to?.subject ?? '\u5DF2\u5220\u9664\u8BB0\u5FC6'}</strong><p>{item.label}</p><small>{Math.round(item.confidence * 100)}% \u53EF\u4FE1</small></button> })}</div>\n <div className=\"dsh-partner-graph-stage\">{selected && source && target ? <article data-kind={selected.kind}><header><span>{relationLabel(selected.kind)}</span><strong>{source.subject} <i aria-hidden=\"true\">\u2192</i> {target.subject}</strong><p>{selected.label}</p><small>{relationGuidance(selected.kind)}</small></header><div className=\"dsh-partner-graph-pair\"><GraphMemory item={source} side=\"\u8D77\u70B9\" inspect={inspect} /><div aria-hidden=\"true\"><i /><span>{relationLabel(selected.kind)}</span><i /></div><GraphMemory item={target} side=\"\u5173\u8054\u9879\" inspect={inspect} /></div><footer><small>\u6700\u8FD1\u7EC8\u5BA1\u4E8E {new Date(selected.updatedAt).toLocaleString()}</small><strong>\u5173\u7CFB\u7F6E\u4FE1\u5EA6 {Math.round(selected.confidence * 100)}%</strong></footer></article> : <State title=\"\u9009\u62E9\u4E00\u6761\u5173\u7CFB\" detail=\"\u5173\u7CFB\u4E24\u7AEF\u7684\u8BB0\u5FC6\u4E0E\u4F7F\u7528\u65B9\u5F0F\u4F1A\u663E\u793A\u5728\u8FD9\u91CC\u3002\" compact />}</div>\n </div>\n </div>\n}\n\nfunction GraphMemory({ item, side, inspect }: { item: MemoryView; side: string; inspect(item: MemoryView): void }): JSX.Element {\n return <GlassSurface as=\"section\" interactive className=\"\" borderRadius={13} distortionScale={-8} saturation={1.04}><header><small>{side} \u00B7 {memoryKind(item.kind)}</small><strong>{item.subject}</strong></header><p>{item.content}</p><button type=\"button\" onClick={() => inspect(item)}>\u67E5\u770B\u5E76\u4FEE\u6B63</button></GlassSurface>\n}\n\nfunction relationLabel(kind: MemoryRelationView['kind']): string { return ({ supports: '\u652F\u6301', depends_on: '\u4F9D\u8D56', about: '\u5173\u4E8E', conflicts_with: '\u51B2\u7A81', follows: '\u540E\u7EED' })[kind] }\nfunction relationGuidance(kind: MemoryRelationView['kind']): string {\n return ({\n supports: '\u56DE\u7B54\u6D89\u53CA\u76EE\u6807\u8BB0\u5FC6\u65F6\uFF0C\u53EF\u628A\u8D77\u70B9\u4F5C\u4E3A\u660E\u786E\u652F\u6301\u4F9D\u636E\uFF0C\u4F46\u4E0D\u80FD\u636E\u6B64\u8865\u5199\u65B0\u4E8B\u5B9E\u3002',\n depends_on: '\u5904\u7406\u8D77\u70B9\u4E8B\u9879\u65F6\uFF0C\u5E94\u540C\u65F6\u68C0\u67E5\u5173\u8054\u9879\u662F\u5426\u6210\u7ACB\u6216\u5DF2\u7ECF\u5B8C\u6210\u3002',\n about: '\u4E24\u6761\u8BB0\u5FC6\u5C5E\u4E8E\u540C\u4E00\u4E0A\u4E0B\u6587\uFF0C\u53EC\u56DE\u5176\u4E2D\u4E00\u6761\u65F6\u53EF\u4EE5\u8865\u5145\u53E6\u4E00\u6761\u5E2E\u52A9\u7406\u89E3\u3002',\n conflicts_with: '\u4E24\u6761\u7406\u89E3\u6682\u65F6\u4E0D\u80FD\u540C\u65F6\u4F5C\u4E3A\u4E8B\u5B9E\uFF1B\u4F19\u4F34\u5E94\u5728\u76F8\u5173\u8BDD\u9898\u51FA\u73B0\u65F6\u6307\u51FA\u5DEE\u5F02\u5E76\u8BF7\u6C42\u786E\u8BA4\u3002',\n follows: '\u5B83\u4EEC\u5B58\u5728\u660E\u786E\u5148\u540E\u5173\u7CFB\uFF0C\u540E\u7EED\u5224\u65AD\u9700\u8981\u4FDD\u7559\u8FD9\u4E2A\u987A\u5E8F\u3002',\n })[kind]\n}\n\nfunction DailyReflectionDetail({ entry }: { entry: DailyReflectionView }): JSX.Element {\n return <article className=\"dsh-partner-diary-detail\"><header><time>{entry.date}</time><strong>{entry.turnCount} \u8F6E\u4EA4\u6D41\u540E\u7684\u7406\u89E3</strong><small>\u66F4\u65B0\u4E8E {new Date(entry.updatedAt).toLocaleString()}</small></header><p>{entry.summary}</p><ReflectionGroup title=\"\u5F85\u8DDF\u8FDB\" items={entry.openTasks} /><ReflectionGroup title=\"\u5F53\u5929\u4E8B\u4EF6\" items={entry.events} /><ReflectionGroup title=\"\u65B0\u7406\u89E3\" items={entry.learnings} /><ReflectionGroup title=\"\u5DF2\u5B8C\u6210\" items={entry.completedTasks} /></article>\n}\n\nfunction ReflectionGroup({ title, items }: { title: string; items: string[] }): JSX.Element | null {\n if (items.length === 0) return null\n return <section><strong>{title}</strong><ul>{items.map(item => <li key={item}>{item}</li>)}</ul></section>\n}\n\nfunction MemoryCard({ item, editing, busy, setEditing, save, remove }: { item: MemoryView; editing: MemoryView | undefined; busy: boolean; setEditing(value?: MemoryView): void; save(): void; remove(): void }): JSX.Element {\n return <article data-kind={item.kind}>{editing ? <div className=\"dsh-partner-memory-editor\">\n <input aria-label=\"\u8BB0\u5FC6\u4E3B\u9898\" value={editing.subject} onChange={event => setEditing({ ...editing, subject: event.target.value })} />\n <textarea aria-label=\"\u8BB0\u5FC6\u5185\u5BB9\" value={editing.content} onChange={event => setEditing({ ...editing, content: event.target.value })} />\n <footer><button type=\"button\" onClick={() => setEditing(undefined)}>\u53D6\u6D88</button><button type=\"button\" className=\"is-primary\" disabled={busy || !editing.subject.trim() || !editing.content.trim()} onClick={save}>\u4FDD\u5B58\u4FEE\u6B63</button></footer>\n </div> : <>\n <header><span>{memoryKind(item.kind)}</span><div><button type=\"button\" onClick={() => setEditing({ ...item })}>\u7F16\u8F91</button><button type=\"button\" onClick={remove}>\u5220\u9664</button></div></header>\n <strong>{item.subject}</strong><p>{item.content}</p>\n <footer><progress max={1} value={item.confidence} aria-label={`\u7F6E\u4FE1\u5EA6 ${Math.round(item.confidence * 100)}%`} /><small>{item.locked ? '\u624B\u52A8\u786E\u8BA4' : `${Math.round(item.confidence * 100)}% \u53EF\u4FE1`} \u00B7 {relativeTime(item.updatedAt)}</small></footer>\n {item.evidence.length > 0 && <details className=\"dsh-partner-memory-evidence\"><summary>\u67E5\u770B\u5BF9\u8BDD\u4F9D\u636E <b>{item.evidence.length}</b></summary><div>{[...item.evidence].reverse().map(evidence => <blockquote key={`${evidence.turnId}:${evidence.at}`}><p>{evidence.excerpt}</p><time>{new Date(evidence.at).toLocaleString()}</time></blockquote>)}</div></details>}\n </>}</article>\n}\n\nfunction Status({ channel }: { channel: ChannelView | undefined }): JSX.Element {\n const status = !channel ? 'unbound' : channel.runtimeStatus\n return <span className={`dsh-partner-status is-${status}`}><i />{!channel ? '\u672A\u8FDE\u63A5' : statusLabel(channel.runtimeStatus)}</span>\n}\nfunction statusLabel(status: ChannelView['runtimeStatus']): string { return status === 'running' ? '\u5FAE\u4FE1\u5728\u7EBF' : status === 'starting' ? '\u8FDE\u63A5\u4E2D' : status === 'error' ? '\u8FDE\u63A5\u5F02\u5E38' : '\u5DF2\u505C\u7528' }\n\nfunction Avatar({ name, small = false }: { name: string; small?: boolean }): JSX.Element { return <span className={`dsh-partner-avatar${small ? ' is-small' : ''}`} aria-hidden=\"true\">{[...name][0] ?? '\u4F34'}</span> }\nfunction WeixinGlyph({ large = false }: { large?: boolean }): JSX.Element { return <span className={`dsh-partner-weixin-glyph${large ? ' is-large' : ''}`} aria-hidden=\"true\"><i /><b /></span> }\nfunction TabButton({ active, onClick, icon, children }: { active: boolean; onClick(): void; icon: ReactNode; children: ReactNode }): JSX.Element { return <button type=\"button\" className={active ? 'is-active' : ''} onClick={onClick}>{icon}<span>{children}</span></button> }\nfunction Field({ label, hint, children }: { label: string; hint?: string; children: ReactNode }): JSX.Element { return <label className=\"dsh-partner-field\"><span><strong>{label}</strong>{hint && <small>{hint}</small>}</span>{children}</label> }\nfunction Section({ eyebrow, title, detail }: { eyebrow: string; title: string; detail: string }): JSX.Element { return <header className=\"dsh-partner-section\"><small>{eyebrow}</small><h2>{title}</h2><p>{detail}</p></header> }\nfunction State({ title, detail, action, compact = false }: { title: string; detail?: string; action?: ReactNode; compact?: boolean }): JSX.Element { return <div className={`dsh-partner-state${compact ? ' is-compact' : ''}`}><IconAgentPresetOutline16 size={20} /><strong>{title}</strong>{detail && <p>{detail}</p>}{action}</div> }\nfunction companionDraft(companion: CompanionView): { name: string; role: string; description: string; instructions: string; presetId: string; provider: string; model: string; capabilities: Capability[] } { return { name: companion.name, role: companion.role, description: companion.description, instructions: companion.instructions, presetId: companion.presetId ?? '', provider: companion.provider ?? '', model: companion.model ?? '', capabilities: [...companion.capabilities] } }\nfunction relativeTime(value: number): string { const minutes = Math.floor((Date.now() - value) / 60_000); return minutes < 1 ? '\u521A\u521A' : minutes < 60 ? `${minutes} \u5206\u949F\u524D` : minutes < 1440 ? `${Math.floor(minutes / 60)} \u5C0F\u65F6\u524D` : `${Math.floor(minutes / 1440)} \u5929\u524D` }\nfunction concernObservationStatus(item: ConcernObservationView): string {\n if (item.decision === 'notify') return item.mentionedAt === undefined ? '\u5F85\u63D0\u9192' : '\u5DF2\u63D0\u9192'\n if (item.decision === 'feed') return '\u4F19\u4F34\u52A8\u6001'\n if (item.decision === 'defer') return item.mentionedAt === undefined ? '\u5F85\u987A\u5E26\u63D0' : '\u5DF2\u987A\u5E26\u63D0'\n return '\u9759\u9ED8\u8BB0\u4E0B'\n}\nfunction concernObservationExplanation(item: ConcernObservationView): string {\n if (item.decision === 'notify') return item.mentionedAt === undefined ? '\u8FBE\u5230\u4E3B\u52A8\u63D0\u9192\u6761\u4EF6\uFF0C\u7B49\u5F85\u6E20\u9053\u6295\u9012' : '\u5DF2\u7ECF\u901A\u8FC7\u6279\u51C6\u7684\u6E20\u9053\u4E3B\u52A8\u63D0\u9192'\n if (item.decision === 'feed') return '\u53EA\u663E\u793A\u5728\u4F19\u4F34\u52A8\u6001\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u8F6C\u6210\u4E3B\u52A8\u63D0\u9192'\n if (item.decision === 'defer') return item.mentionedAt === undefined ? '\u4E0B\u6B21\u51FA\u73B0\u76F8\u5173\u5BF9\u8BDD\u65F6\u987A\u5E26\u63D0\u53CA' : '\u5DF2\u7ECF\u5728\u76F8\u5173\u5BF9\u8BDD\u4E2D\u987A\u5E26\u63D0\u53CA'\n return '\u4EC5\u4FDD\u7559\u4E3A\u89C2\u5BDF\u8BB0\u5F55\uFF0C\u4E0D\u6253\u6270\u4F60'\n}\nfunction memoryKind(value: MemoryView['kind']): string { return ({ profile: '\u753B\u50CF', preference: '\u504F\u597D', task: '\u4EFB\u52A1', event: '\u4E8B\u4EF6', relationship: '\u5173\u7CFB', emotion: '\u60C5\u7EEA\u4FE1\u53F7' })[value] }\nfunction message(reason: unknown): string { return reason instanceof Error ? reason.message : String(reason) }\nfunction waitForClientSession(ctx: ClientContext, sessionId: string): Promise<void> {\n const id = sessionId as SessionId\n const sessions = clientSessions(ctx)\n if (sessions.list.getSnapshot().byId[id] !== undefined) return Promise.resolve()\n return new Promise((resolve, reject) => {\n let stop = (): void => {}\n const timeout = window.setTimeout(() => { stop(); reject(new Error('\u4F19\u4F34\u4F1A\u8BDD\u5C1A\u672A\u540C\u6B65\u5230\u7F51\u9875\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5')) }, 5_000)\n stop = sessions.list.subscribe(() => {\n if (sessions.list.getSnapshot().byId[id] === undefined) return\n window.clearTimeout(timeout)\n stop()\n resolve()\n })\n })\n}\nfunction clientSessions(ctx: ClientContext): ISessions { return ctx.sessions as unknown as ISessions }\nfunction installStyles(): () => void { let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null; if (!style) { style = document.createElement('style'); style.id = STYLE_ID; style.textContent = cssText; document.head.append(style) } return () => style?.remove() }\n", "const WORKSPACE_ACTIVATE_EVENT = '@lemoncat7/dsh-plugin-ui/workspace-activate'\n\ninterface WorkspaceActivateDetail {\n pluginId: string\n}\n\n/** Claim the conversation workspace while remaining compatible with installed plugin versions. */\nexport function activatePluginWorkspace(pluginId: string): void {\n window.dispatchEvent(new CustomEvent<WorkspaceActivateDetail>(WORKSPACE_ACTIVATE_EVENT, {\n detail: { pluginId },\n }))\n}\n\n/** Close this workspace when another plugin claims the conversation area. */\nexport function observePluginWorkspace(pluginId: string, close: () => void): () => void {\n const onActivate = (event: Event): void => {\n const detail = (event as CustomEvent<WorkspaceActivateDetail>).detail\n if (detail?.pluginId !== pluginId) close()\n }\n window.addEventListener(WORKSPACE_ACTIVATE_EVENT, onActivate)\n return () => window.removeEventListener(WORKSPACE_ACTIVATE_EVENT, onActivate)\n}\n", "var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n// src/index.tsx\nimport React from \"react\";\n\n// src/third-party/qrcodegen/index.ts\n/**\n * @license QR Code generator library (TypeScript)\n * Copyright (c) Project Nayuki.\n * SPDX-License-Identifier: MIT\n */\nvar qrcodegen;\n((qrcodegen2) => {\n const _QrCode = class _QrCode {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code with the given version number,\n // error correction level, data codeword bytes, and mask number.\n // This is a low-level API that most users should not use directly.\n // A mid-level API is the encodeSegments() function.\n constructor(version, errorCorrectionLevel, dataCodewords, msk) {\n this.version = version;\n this.errorCorrectionLevel = errorCorrectionLevel;\n // The modules of this QR Code (false = light, true = dark).\n // Immutable after constructor finishes. Accessed through getModule().\n this.modules = [];\n // Indicates function modules that are not subjected to masking. Discarded when constructor finishes.\n this.isFunction = [];\n if (version < _QrCode.MIN_VERSION || version > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version value out of range\");\n if (msk < -1 || msk > 7)\n throw new RangeError(\"Mask value out of range\");\n this.size = version * 4 + 17;\n let row = [];\n for (let i = 0; i < this.size; i++)\n row.push(false);\n for (let i = 0; i < this.size; i++) {\n this.modules.push(row.slice());\n this.isFunction.push(row.slice());\n }\n this.drawFunctionPatterns();\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n this.drawCodewords(allCodewords);\n if (msk == -1) {\n let minPenalty = 1e9;\n for (let i = 0; i < 8; i++) {\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n if (penalty < minPenalty) {\n msk = i;\n minPenalty = penalty;\n }\n this.applyMask(i);\n }\n }\n assert(0 <= msk && msk <= 7);\n this.mask = msk;\n this.applyMask(msk);\n this.drawFormatBits(msk);\n this.isFunction = [];\n }\n /*-- Static factory functions (high level) --*/\n // Returns a QR Code representing the given Unicode text string at the given error correction level.\n // As a conservative upper bound, this function is guaranteed to succeed for strings that have 738 or fewer\n // Unicode code points (not UTF-16 code units) if the low error correction level is used. The smallest possible\n // QR Code version is automatically chosen for the output. The ECC level of the result may be higher than the\n // ecl argument if it can be done without increasing the version.\n static encodeText(text, ecl) {\n const segs = qrcodegen2.QrSegment.makeSegments(text);\n return _QrCode.encodeSegments(segs, ecl);\n }\n // Returns a QR Code representing the given binary data at the given error correction level.\n // This function always encodes using the binary segment mode, not any text mode. The maximum number of\n // bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output.\n // The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version.\n static encodeBinary(data, ecl) {\n const seg = qrcodegen2.QrSegment.makeBytes(data);\n return _QrCode.encodeSegments([seg], ecl);\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a QR Code representing the given segments with the given encoding parameters.\n // The smallest possible QR Code version within the given range is automatically\n // chosen for the output. Iff boostEcl is true, then the ECC level of the result\n // may be higher than the ecl argument if it can be done without increasing the\n // version. The mask number is either between 0 to 7 (inclusive) to force that\n // mask, or -1 to automatically choose an appropriate mask (which may be slow).\n // This function allows the user to create a custom sequence of segments that switches\n // between modes (such as alphanumeric and byte) to encode text in less space.\n // This is a mid-level API; the high-level API is encodeText() and encodeBinary().\n static encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {\n if (!(_QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= _QrCode.MAX_VERSION) || mask < -1 || mask > 7)\n throw new RangeError(\"Invalid value\");\n let version;\n let dataUsedBits;\n for (version = minVersion; ; version++) {\n const dataCapacityBits2 = _QrCode.getNumDataCodewords(version, ecl) * 8;\n const usedBits = QrSegment.getTotalBits(segs, version);\n if (usedBits <= dataCapacityBits2) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion)\n throw new RangeError(\"Data too long\");\n }\n for (const newEcl of [_QrCode.Ecc.MEDIUM, _QrCode.Ecc.QUARTILE, _QrCode.Ecc.HIGH]) {\n if (boostEcl && dataUsedBits <= _QrCode.getNumDataCodewords(version, newEcl) * 8)\n ecl = newEcl;\n }\n let bb = [];\n for (const seg of segs) {\n appendBits(seg.mode.modeBits, 4, bb);\n appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n for (const b of seg.getData())\n bb.push(b);\n }\n assert(bb.length == dataUsedBits);\n const dataCapacityBits = _QrCode.getNumDataCodewords(version, ecl) * 8;\n assert(bb.length <= dataCapacityBits);\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - bb.length % 8) % 8, bb);\n assert(bb.length % 8 == 0);\n for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 236 ^ 17)\n appendBits(padByte, 8, bb);\n let dataCodewords = [];\n while (dataCodewords.length * 8 < bb.length)\n dataCodewords.push(0);\n bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));\n return new _QrCode(version, ecl, dataCodewords, mask);\n }\n /*-- Accessor methods --*/\n // Returns the color of the module (pixel) at the given coordinates, which is false\n // for light or true for dark. The top left corner has the coordinates (x=0, y=0).\n // If the given coordinates are out of bounds, then false (light) is returned.\n getModule(x, y) {\n return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x];\n }\n // Modified to expose modules for easy access\n getModules() {\n return this.modules;\n }\n /*-- Private helper methods for constructor: Drawing function modules --*/\n // Reads this object's version field, and draws and marks all function modules.\n drawFunctionPatterns() {\n for (let i = 0; i < this.size; i++) {\n this.setFunctionModule(6, i, i % 2 == 0);\n this.setFunctionModule(i, 6, i % 2 == 0);\n }\n this.drawFinderPattern(3, 3);\n this.drawFinderPattern(this.size - 4, 3);\n this.drawFinderPattern(3, this.size - 4);\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n if (!(i == 0 && j == 0 || i == 0 && j == numAlign - 1 || i == numAlign - 1 && j == 0))\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n this.drawFormatBits(0);\n this.drawVersion();\n }\n // Draws two copies of the format bits (with its own error correction code)\n // based on the given mask and this object's error correction level field.\n drawFormatBits(mask) {\n const data = this.errorCorrectionLevel.formatBits << 3 | mask;\n let rem = data;\n for (let i = 0; i < 10; i++)\n rem = rem << 1 ^ (rem >>> 9) * 1335;\n const bits = (data << 10 | rem) ^ 21522;\n assert(bits >>> 15 == 0);\n for (let i = 0; i <= 5; i++)\n this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++)\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n for (let i = 0; i < 8; i++)\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n for (let i = 8; i < 15; i++)\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n this.setFunctionModule(8, this.size - 8, true);\n }\n // Draws two copies of the version bits (with its own error correction code),\n // based on this object's version field, iff 7 <= version <= 40.\n drawVersion() {\n if (this.version < 7)\n return;\n let rem = this.version;\n for (let i = 0; i < 12; i++)\n rem = rem << 1 ^ (rem >>> 11) * 7973;\n const bits = this.version << 12 | rem;\n assert(bits >>> 18 == 0);\n for (let i = 0; i < 18; i++) {\n const color = getBit(bits, i);\n const a = this.size - 11 + i % 3;\n const b = Math.floor(i / 3);\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n // Draws a 9*9 finder pattern including the border separator,\n // with the center module at (x, y). Modules can be out of bounds.\n drawFinderPattern(x, y) {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\n const xx = x + dx;\n const yy = y + dy;\n if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size)\n this.setFunctionModule(xx, yy, dist != 2 && dist != 4);\n }\n }\n }\n // Draws a 5*5 alignment pattern, with the center module\n // at (x, y). All modules must be in bounds.\n drawAlignmentPattern(x, y) {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++)\n this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1);\n }\n }\n // Sets the color of a module and marks it as a function module.\n // Only used by the constructor. Coordinates must be in bounds.\n setFunctionModule(x, y, isDark) {\n this.modules[y][x] = isDark;\n this.isFunction[y][x] = true;\n }\n /*-- Private helper methods for constructor: Codewords and masking --*/\n // Returns a new byte string representing the given data with the appropriate error correction\n // codewords appended to it, based on this object's version and error correction level.\n addEccAndInterleave(data) {\n const ver = this.version;\n const ecl = this.errorCorrectionLevel;\n if (data.length != _QrCode.getNumDataCodewords(ver, ecl))\n throw new RangeError(\"Invalid argument\");\n const numBlocks = _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n const blockEccLen = _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver];\n const rawCodewords = Math.floor(_QrCode.getNumRawDataModules(ver) / 8);\n const numShortBlocks = numBlocks - rawCodewords % numBlocks;\n const shortBlockLen = Math.floor(rawCodewords / numBlocks);\n let blocks = [];\n const rsDiv = _QrCode.reedSolomonComputeDivisor(blockEccLen);\n for (let i = 0, k = 0; i < numBlocks; i++) {\n let dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n k += dat.length;\n const ecc = _QrCode.reedSolomonComputeRemainder(dat, rsDiv);\n if (i < numShortBlocks)\n dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n let result = [];\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n if (i != shortBlockLen - blockEccLen || j >= numShortBlocks)\n result.push(block[i]);\n });\n }\n assert(result.length == rawCodewords);\n return result;\n }\n // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n // data area of this QR Code. Function modules need to be marked off before this is called.\n drawCodewords(data) {\n if (data.length != Math.floor(_QrCode.getNumRawDataModules(this.version) / 8))\n throw new RangeError(\"Invalid argument\");\n let i = 0;\n for (let right = this.size - 1; right >= 1; right -= 2) {\n if (right == 6)\n right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n for (let j = 0; j < 2; j++) {\n const x = right - j;\n const upward = (right + 1 & 2) == 0;\n const y = upward ? this.size - 1 - vert : vert;\n if (!this.isFunction[y][x] && i < data.length * 8) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n }\n }\n }\n assert(i == data.length * 8);\n }\n // XORs the codeword modules in this QR Code with the given mask pattern.\n // The function modules must be marked and the codeword bits must be drawn\n // before masking. Due to the arithmetic of XOR, calling applyMask() with\n // the same mask value a second time will undo the mask. A final well-formed\n // QR Code needs exactly one (not zero, two, etc.) mask applied.\n applyMask(mask) {\n if (mask < 0 || mask > 7)\n throw new RangeError(\"Mask value out of range\");\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n let invert;\n switch (mask) {\n case 0:\n invert = (x + y) % 2 == 0;\n break;\n case 1:\n invert = y % 2 == 0;\n break;\n case 2:\n invert = x % 3 == 0;\n break;\n case 3:\n invert = (x + y) % 3 == 0;\n break;\n case 4:\n invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0;\n break;\n case 5:\n invert = x * y % 2 + x * y % 3 == 0;\n break;\n case 6:\n invert = (x * y % 2 + x * y % 3) % 2 == 0;\n break;\n case 7:\n invert = ((x + y) % 2 + x * y % 3) % 2 == 0;\n break;\n default:\n throw new Error(\"Unreachable\");\n }\n if (!this.isFunction[y][x] && invert)\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n // Calculates and returns the penalty score based on state of this QR Code's current modules.\n // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n getPenaltyScore() {\n let result = 0;\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] == runColor) {\n runX++;\n if (runX == 5)\n result += _QrCode.PENALTY_N1;\n else if (runX > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] == runColor) {\n runY++;\n if (runY == 5)\n result += _QrCode.PENALTY_N1;\n else if (runY > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n if (color == this.modules[y][x + 1] && color == this.modules[y + 1][x] && color == this.modules[y + 1][x + 1])\n result += _QrCode.PENALTY_N2;\n }\n }\n let dark = 0;\n for (const row of this.modules)\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n const total = this.size * this.size;\n const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n assert(0 <= k && k <= 9);\n result += k * _QrCode.PENALTY_N4;\n assert(0 <= result && result <= 2568888);\n return result;\n }\n /*-- Private helper functions --*/\n // Returns an ascending list of positions of alignment patterns for this version number.\n // Each position is in the range [0,177), and are used on both the x and y axes.\n // This could be implemented as lookup table of 40 variable-length lists of integers.\n getAlignmentPatternPositions() {\n if (this.version == 1)\n return [];\n else {\n const numAlign = Math.floor(this.version / 7) + 2;\n const step = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n let result = [6];\n for (let pos = this.size - 7; result.length < numAlign; pos -= step)\n result.splice(1, 0, pos);\n return result;\n }\n }\n // Returns the number of data bits that can be stored in a QR Code of the given version number, after\n // all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.\n // The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.\n static getNumRawDataModules(ver) {\n if (ver < _QrCode.MIN_VERSION || ver > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version number out of range\");\n let result = (16 * ver + 128) * ver + 64;\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7)\n result -= 36;\n }\n assert(208 <= result && result <= 29648);\n return result;\n }\n // Returns the number of 8-bit data (i.e. not error correction) codewords contained in any\n // QR Code of the given version number and error correction level, with remainder bits discarded.\n // This stateless pure function could be implemented as a (40*4)-cell lookup table.\n static getNumDataCodewords(ver, ecl) {\n return Math.floor(_QrCode.getNumRawDataModules(ver) / 8) - _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n }\n // Returns a Reed-Solomon ECC generator polynomial for the given degree. This could be\n // implemented as a lookup table over all possible parameter values, instead of as an algorithm.\n static reedSolomonComputeDivisor(degree) {\n if (degree < 1 || degree > 255)\n throw new RangeError(\"Degree out of range\");\n let result = [];\n for (let i = 0; i < degree - 1; i++)\n result.push(0);\n result.push(1);\n let root = 1;\n for (let i = 0; i < degree; i++) {\n for (let j = 0; j < result.length; j++) {\n result[j] = _QrCode.reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length)\n result[j] ^= result[j + 1];\n }\n root = _QrCode.reedSolomonMultiply(root, 2);\n }\n return result;\n }\n // Returns the Reed-Solomon error correction codeword for the given data and divisor polynomials.\n static reedSolomonComputeRemainder(data, divisor) {\n let result = divisor.map((_) => 0);\n for (const b of data) {\n const factor = b ^ result.shift();\n result.push(0);\n divisor.forEach((coef, i) => result[i] ^= _QrCode.reedSolomonMultiply(coef, factor));\n }\n return result;\n }\n // Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result\n // are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8.\n static reedSolomonMultiply(x, y) {\n if (x >>> 8 != 0 || y >>> 8 != 0)\n throw new RangeError(\"Byte out of range\");\n let z = 0;\n for (let i = 7; i >= 0; i--) {\n z = z << 1 ^ (z >>> 7) * 285;\n z ^= (y >>> i & 1) * x;\n }\n assert(z >>> 8 == 0);\n return z;\n }\n // Can only be called immediately after a light run is added, and\n // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n finderPenaltyCountPatterns(runHistory) {\n const n = runHistory[1];\n assert(n <= this.size * 3);\n const core = n > 0 && runHistory[2] == n && runHistory[3] == n * 3 && runHistory[4] == n && runHistory[5] == n;\n return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);\n }\n // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {\n if (currentRunColor) {\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n currentRunLength = 0;\n }\n currentRunLength += this.size;\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n finderPenaltyAddHistory(currentRunLength, runHistory) {\n if (runHistory[0] == 0)\n currentRunLength += this.size;\n runHistory.pop();\n runHistory.unshift(currentRunLength);\n }\n };\n /*-- Constants and tables --*/\n // The minimum version number supported in the QR Code Model 2 standard.\n _QrCode.MIN_VERSION = 1;\n // The maximum version number supported in the QR Code Model 2 standard.\n _QrCode.MAX_VERSION = 40;\n // For use in getPenaltyScore(), when evaluating which mask is best.\n _QrCode.PENALTY_N1 = 3;\n _QrCode.PENALTY_N2 = 3;\n _QrCode.PENALTY_N3 = 40;\n _QrCode.PENALTY_N4 = 10;\n _QrCode.ECC_CODEWORDS_PER_BLOCK = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Low\n [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n // Medium\n [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Quartile\n [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]\n // High\n ];\n _QrCode.NUM_ERROR_CORRECTION_BLOCKS = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n // Low\n [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n // Medium\n [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n // Quartile\n [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]\n // High\n ];\n let QrCode = _QrCode;\n qrcodegen2.QrCode = _QrCode;\n function appendBits(val, len, bb) {\n if (len < 0 || len > 31 || val >>> len != 0)\n throw new RangeError(\"Value out of range\");\n for (let i = len - 1; i >= 0; i--)\n bb.push(val >>> i & 1);\n }\n function getBit(x, i) {\n return (x >>> i & 1) != 0;\n }\n function assert(cond) {\n if (!cond)\n throw new Error(\"Assertion error\");\n }\n const _QrSegment = class _QrSegment {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code segment with the given attributes and data.\n // The character count (numChars) must agree with the mode and the bit buffer length,\n // but the constraint isn't checked. The given bit buffer is cloned and stored.\n constructor(mode, numChars, bitData) {\n this.mode = mode;\n this.numChars = numChars;\n this.bitData = bitData;\n if (numChars < 0)\n throw new RangeError(\"Invalid argument\");\n this.bitData = bitData.slice();\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a segment representing the given binary data encoded in\n // byte mode. All input byte arrays are acceptable. Any text string\n // can be converted to UTF-8 bytes and encoded as a byte mode segment.\n static makeBytes(data) {\n let bb = [];\n for (const b of data)\n appendBits(b, 8, bb);\n return new _QrSegment(_QrSegment.Mode.BYTE, data.length, bb);\n }\n // Returns a segment representing the given string of decimal digits encoded in numeric mode.\n static makeNumeric(digits) {\n if (!_QrSegment.isNumeric(digits))\n throw new RangeError(\"String contains non-numeric characters\");\n let bb = [];\n for (let i = 0; i < digits.length; ) {\n const n = Math.min(digits.length - i, 3);\n appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new _QrSegment(_QrSegment.Mode.NUMERIC, digits.length, bb);\n }\n // Returns a segment representing the given text string encoded in alphanumeric mode.\n // The characters allowed are: 0 to 9, A to Z (uppercase only), space,\n // dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static makeAlphanumeric(text) {\n if (!_QrSegment.isAlphanumeric(text))\n throw new RangeError(\"String contains unencodable characters in alphanumeric mode\");\n let bb = [];\n let i;\n for (i = 0; i + 2 <= text.length; i += 2) {\n let temp = _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n temp += _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n if (i < text.length)\n appendBits(_QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n return new _QrSegment(_QrSegment.Mode.ALPHANUMERIC, text.length, bb);\n }\n // Returns a new mutable list of zero or more segments to represent the given Unicode text string.\n // The result may use various segment modes and switch modes to optimize the length of the bit stream.\n static makeSegments(text) {\n if (text == \"\")\n return [];\n else if (_QrSegment.isNumeric(text))\n return [_QrSegment.makeNumeric(text)];\n else if (_QrSegment.isAlphanumeric(text))\n return [_QrSegment.makeAlphanumeric(text)];\n else\n return [_QrSegment.makeBytes(_QrSegment.toUtf8ByteArray(text))];\n }\n // Returns a segment representing an Extended Channel Interpretation\n // (ECI) designator with the given assignment value.\n static makeEci(assignVal) {\n let bb = [];\n if (assignVal < 0)\n throw new RangeError(\"ECI assignment value out of range\");\n else if (assignVal < 1 << 7)\n appendBits(assignVal, 8, bb);\n else if (assignVal < 1 << 14) {\n appendBits(2, 2, bb);\n appendBits(assignVal, 14, bb);\n } else if (assignVal < 1e6) {\n appendBits(6, 3, bb);\n appendBits(assignVal, 21, bb);\n } else\n throw new RangeError(\"ECI assignment value out of range\");\n return new _QrSegment(_QrSegment.Mode.ECI, 0, bb);\n }\n // Tests whether the given string can be encoded as a segment in numeric mode.\n // A string is encodable iff each character is in the range 0 to 9.\n static isNumeric(text) {\n return _QrSegment.NUMERIC_REGEX.test(text);\n }\n // Tests whether the given string can be encoded as a segment in alphanumeric mode.\n // A string is encodable iff each character is in the following set: 0 to 9, A to Z\n // (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static isAlphanumeric(text) {\n return _QrSegment.ALPHANUMERIC_REGEX.test(text);\n }\n /*-- Methods --*/\n // Returns a new copy of the data bits of this segment.\n getData() {\n return this.bitData.slice();\n }\n // (Package-private) Calculates and returns the number of bits needed to encode the given segments at\n // the given version. The result is infinity if a segment has too many characters to fit its length field.\n static getTotalBits(segs, version) {\n let result = 0;\n for (const seg of segs) {\n const ccbits = seg.mode.numCharCountBits(version);\n if (seg.numChars >= 1 << ccbits)\n return Infinity;\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n }\n // Returns a new array of bytes representing the given string encoded in UTF-8.\n static toUtf8ByteArray(str) {\n str = encodeURI(str);\n let result = [];\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) != \"%\")\n result.push(str.charCodeAt(i));\n else {\n result.push(parseInt(str.substring(i + 1, i + 3), 16));\n i += 2;\n }\n }\n return result;\n }\n };\n /*-- Constants --*/\n // Describes precisely all strings that are encodable in numeric mode.\n _QrSegment.NUMERIC_REGEX = /^[0-9]*$/;\n // Describes precisely all strings that are encodable in alphanumeric mode.\n _QrSegment.ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+.\\/:-]*$/;\n // The set of all legal characters in alphanumeric mode,\n // where each character value maps to the index in the string.\n _QrSegment.ALPHANUMERIC_CHARSET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\n let QrSegment = _QrSegment;\n qrcodegen2.QrSegment = _QrSegment;\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrCode;\n ((QrCode2) => {\n const _Ecc = class _Ecc {\n // The QR Code can tolerate about 30% erroneous codewords\n /*-- Constructor and fields --*/\n constructor(ordinal, formatBits) {\n this.ordinal = ordinal;\n this.formatBits = formatBits;\n }\n };\n /*-- Constants --*/\n _Ecc.LOW = new _Ecc(0, 1);\n // The QR Code can tolerate about 7% erroneous codewords\n _Ecc.MEDIUM = new _Ecc(1, 0);\n // The QR Code can tolerate about 15% erroneous codewords\n _Ecc.QUARTILE = new _Ecc(2, 3);\n // The QR Code can tolerate about 25% erroneous codewords\n _Ecc.HIGH = new _Ecc(3, 2);\n let Ecc = _Ecc;\n QrCode2.Ecc = _Ecc;\n })(QrCode = qrcodegen2.QrCode || (qrcodegen2.QrCode = {}));\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrSegment;\n ((QrSegment2) => {\n const _Mode = class _Mode {\n /*-- Constructor and fields --*/\n constructor(modeBits, numBitsCharCount) {\n this.modeBits = modeBits;\n this.numBitsCharCount = numBitsCharCount;\n }\n /*-- Method --*/\n // (Package-private) Returns the bit width of the character count field for a segment in\n // this mode in a QR Code at the given version number. The result is in the range [0, 16].\n numCharCountBits(ver) {\n return this.numBitsCharCount[Math.floor((ver + 7) / 17)];\n }\n };\n /*-- Constants --*/\n _Mode.NUMERIC = new _Mode(1, [10, 12, 14]);\n _Mode.ALPHANUMERIC = new _Mode(2, [9, 11, 13]);\n _Mode.BYTE = new _Mode(4, [8, 16, 16]);\n _Mode.KANJI = new _Mode(8, [8, 10, 12]);\n _Mode.ECI = new _Mode(7, [0, 0, 0]);\n let Mode = _Mode;\n QrSegment2.Mode = _Mode;\n })(QrSegment = qrcodegen2.QrSegment || (qrcodegen2.QrSegment = {}));\n})(qrcodegen || (qrcodegen = {}));\nvar qrcodegen_default = qrcodegen;\n\n// src/index.tsx\n/**\n * @license qrcode.react\n * Copyright (c) Paul O'Shannessy\n * SPDX-License-Identifier: ISC\n */\nvar ERROR_LEVEL_MAP = {\n L: qrcodegen_default.QrCode.Ecc.LOW,\n M: qrcodegen_default.QrCode.Ecc.MEDIUM,\n Q: qrcodegen_default.QrCode.Ecc.QUARTILE,\n H: qrcodegen_default.QrCode.Ecc.HIGH\n};\nvar DEFAULT_SIZE = 128;\nvar DEFAULT_LEVEL = \"L\";\nvar DEFAULT_BGCOLOR = \"#FFFFFF\";\nvar DEFAULT_FGCOLOR = \"#000000\";\nvar DEFAULT_INCLUDEMARGIN = false;\nvar DEFAULT_MINVERSION = 1;\nvar SPEC_MARGIN_SIZE = 4;\nvar DEFAULT_MARGIN_SIZE = 0;\nvar DEFAULT_IMG_SCALE = 0.1;\nfunction generatePath(modules, margin = 0) {\n const ops = [];\n modules.forEach(function(row, y) {\n let start = null;\n row.forEach(function(cell, x) {\n if (!cell && start !== null) {\n ops.push(\n `M${start + margin} ${y + margin}h${x - start}v1H${start + margin}z`\n );\n start = null;\n return;\n }\n if (x === row.length - 1) {\n if (!cell) {\n return;\n }\n if (start === null) {\n ops.push(`M${x + margin},${y + margin} h1v1H${x + margin}z`);\n } else {\n ops.push(\n `M${start + margin},${y + margin} h${x + 1 - start}v1H${start + margin}z`\n );\n }\n return;\n }\n if (cell && start === null) {\n start = x;\n }\n });\n });\n return ops.join(\"\");\n}\nfunction excavateModules(modules, excavation) {\n return modules.slice().map((row, y) => {\n if (y < excavation.y || y >= excavation.y + excavation.h) {\n return row;\n }\n return row.map((cell, x) => {\n if (x < excavation.x || x >= excavation.x + excavation.w) {\n return cell;\n }\n return false;\n });\n });\n}\nfunction getImageSettings(cells, size, margin, imageSettings) {\n if (imageSettings == null) {\n return null;\n }\n const numCells = cells.length + margin * 2;\n const defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);\n const scale = numCells / size;\n const w = (imageSettings.width || defaultSize) * scale;\n const h = (imageSettings.height || defaultSize) * scale;\n const x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;\n const y = imageSettings.y == null ? cells.length / 2 - h / 2 : imageSettings.y * scale;\n const opacity = imageSettings.opacity == null ? 1 : imageSettings.opacity;\n let excavation = null;\n if (imageSettings.excavate) {\n let floorX = Math.floor(x);\n let floorY = Math.floor(y);\n let ceilW = Math.ceil(w + x - floorX);\n let ceilH = Math.ceil(h + y - floorY);\n excavation = { x: floorX, y: floorY, w: ceilW, h: ceilH };\n }\n const crossOrigin = imageSettings.crossOrigin;\n return { x, y, h, w, excavation, opacity, crossOrigin };\n}\nfunction getMarginSize(includeMargin, marginSize) {\n if (marginSize != null) {\n return Math.max(Math.floor(marginSize), 0);\n }\n return includeMargin ? SPEC_MARGIN_SIZE : DEFAULT_MARGIN_SIZE;\n}\nfunction useQRCode({\n value,\n level,\n minVersion,\n includeMargin,\n marginSize,\n imageSettings,\n size,\n boostLevel\n}) {\n let qrcode = React.useMemo(() => {\n const values = Array.isArray(value) ? value : [value];\n const segments = values.reduce((accum, v) => {\n accum.push(...qrcodegen_default.QrSegment.makeSegments(v));\n return accum;\n }, []);\n return qrcodegen_default.QrCode.encodeSegments(\n segments,\n ERROR_LEVEL_MAP[level],\n minVersion,\n void 0,\n void 0,\n boostLevel\n );\n }, [value, level, minVersion, boostLevel]);\n const { cells, margin, numCells, calculatedImageSettings } = React.useMemo(() => {\n let cells2 = qrcode.getModules();\n const margin2 = getMarginSize(includeMargin, marginSize);\n const numCells2 = cells2.length + margin2 * 2;\n const calculatedImageSettings2 = getImageSettings(\n cells2,\n size,\n margin2,\n imageSettings\n );\n return {\n cells: cells2,\n margin: margin2,\n numCells: numCells2,\n calculatedImageSettings: calculatedImageSettings2\n };\n }, [qrcode, size, imageSettings, includeMargin, marginSize]);\n return {\n qrcode,\n margin,\n cells,\n numCells,\n calculatedImageSettings\n };\n}\nvar SUPPORTS_PATH2D = function() {\n try {\n new Path2D().addPath(new Path2D());\n } catch (e) {\n return false;\n }\n return true;\n}();\nvar QRCodeCanvas = React.forwardRef(\n function QRCodeCanvas2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n marginSize,\n imageSettings\n } = _a, extraProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const _b = extraProps, { style } = _b, otherProps = __objRest(_b, [\"style\"]);\n const imgSrc = imageSettings == null ? void 0 : imageSettings.src;\n const _canvas = React.useRef(null);\n const _image = React.useRef(null);\n const setCanvasRef = React.useCallback(\n (node) => {\n _canvas.current = node;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef]\n );\n const [isImgLoaded, setIsImageLoaded] = React.useState(false);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n React.useEffect(() => {\n if (_canvas.current != null) {\n const canvas = _canvas.current;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return;\n }\n let cellsToDraw = cells;\n const image = _image.current;\n const haveImageToRender = calculatedImageSettings != null && image !== null && image.complete && image.naturalHeight !== 0 && image.naturalWidth !== 0;\n if (haveImageToRender) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n }\n const pixelRatio = window.devicePixelRatio || 1;\n canvas.height = canvas.width = size * pixelRatio;\n const scale = size / numCells * pixelRatio;\n ctx.scale(scale, scale);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, numCells, numCells);\n ctx.fillStyle = fgColor;\n if (SUPPORTS_PATH2D) {\n ctx.fill(new Path2D(generatePath(cellsToDraw, margin)));\n } else {\n cells.forEach(function(row, rdx) {\n row.forEach(function(cell, cdx) {\n if (cell) {\n ctx.fillRect(cdx + margin, rdx + margin, 1, 1);\n }\n });\n });\n }\n if (calculatedImageSettings) {\n ctx.globalAlpha = calculatedImageSettings.opacity;\n }\n if (haveImageToRender) {\n ctx.drawImage(\n image,\n calculatedImageSettings.x + margin,\n calculatedImageSettings.y + margin,\n calculatedImageSettings.w,\n calculatedImageSettings.h\n );\n }\n }\n });\n React.useEffect(() => {\n setIsImageLoaded(false);\n }, [imgSrc]);\n const canvasStyle = __spreadValues({ height: size, width: size }, style);\n let img = null;\n if (imgSrc != null) {\n img = /* @__PURE__ */ React.createElement(\n \"img\",\n {\n src: imgSrc,\n key: imgSrc,\n style: { display: \"none\" },\n onLoad: () => {\n setIsImageLoaded(true);\n },\n ref: _image,\n crossOrigin: calculatedImageSettings == null ? void 0 : calculatedImageSettings.crossOrigin\n }\n );\n }\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\n \"canvas\",\n __spreadValues({\n style: canvasStyle,\n height: size,\n width: size,\n ref: setCanvasRef,\n role: \"img\"\n }, otherProps)\n ), img);\n }\n);\nQRCodeCanvas.displayName = \"QRCodeCanvas\";\nvar QRCodeSVG = React.forwardRef(\n function QRCodeSVG2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n title,\n marginSize,\n imageSettings\n } = _a, otherProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"title\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n let cellsToDraw = cells;\n let image = null;\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n image = /* @__PURE__ */ React.createElement(\n \"image\",\n {\n href: imageSettings.src,\n height: calculatedImageSettings.h,\n width: calculatedImageSettings.w,\n x: calculatedImageSettings.x + margin,\n y: calculatedImageSettings.y + margin,\n preserveAspectRatio: \"none\",\n opacity: calculatedImageSettings.opacity,\n crossOrigin: calculatedImageSettings.crossOrigin\n }\n );\n }\n const fgPath = generatePath(cellsToDraw, margin);\n return /* @__PURE__ */ React.createElement(\n \"svg\",\n __spreadValues({\n height: size,\n width: size,\n viewBox: `0 0 ${numCells} ${numCells}`,\n ref: forwardedRef,\n role: \"img\"\n }, otherProps),\n !!title && /* @__PURE__ */ React.createElement(\"title\", null, title),\n /* @__PURE__ */ React.createElement(\n \"path\",\n {\n fill: bgColor,\n d: `M0,0 h${numCells}v${numCells}H0z`,\n shapeRendering: \"crispEdges\"\n }\n ),\n /* @__PURE__ */ React.createElement(\"path\", { fill: fgColor, d: fgPath, shapeRendering: \"crispEdges\" }),\n image\n );\n }\n);\nQRCodeSVG.displayName = \"QRCodeSVG\";\nexport {\n QRCodeCanvas,\n QRCodeSVG\n};\n", ".dsh-partner-sidebar,\n.dsh-partner-workspace {\n color-scheme: light;\n --partner-canvas: transparent;\n --partner-surface: rgba(246, 247, 250, .17);\n --partner-pane: rgba(255, 255, 255, .16);\n --partner-raised: rgba(255, 255, 255, .38);\n --partner-control: rgba(255, 255, 255, .27);\n --partner-card-surface: rgba(255, 255, 255, .16);\n --partner-card-highlight: rgba(255, 255, 255, .58);\n --partner-solid-canvas: #e9e9ed;\n --partner-solid-panel: #f2f3f7;\n --partner-solid-raised: #f8f8fa;\n --partner-solid-control: #ffffff;\n --partner-card-shadow:\n inset 0 1px 0 var(--partner-card-highlight),\n inset 0 -1px 0 rgba(60, 60, 67, .08),\n 0 9px 24px rgba(31, 31, 35, .075),\n 0 2px 6px rgba(31, 31, 35, .04);\n --partner-text: #1d1d1f;\n --partner-text-secondary: #515154;\n --partner-text-tertiary: #747478;\n --partner-accent: #6e6e73;\n --partner-accent-strong: #2c2c2e;\n --partner-on-accent: #ffffff;\n --partner-success: #248a3d;\n --partner-weixin: #248a52;\n --partner-warning: #c93400;\n --partner-danger: #d70015;\n --partner-border: rgba(60, 60, 67, .14);\n --partner-separator: rgba(60, 60, 67, .11);\n --partner-hover: rgba(118, 118, 128, .09);\n --partner-selected: rgba(60, 60, 67, .085);\n --partner-focus-ring: rgba(60, 60, 67, .46);\n --partner-glass-clear: rgba(255, 255, 255, .11);\n --partner-glass-regular: rgba(255, 255, 255, .24);\n --partner-glass-thick: rgba(255, 255, 255, .42);\n --partner-glass-highlight: rgba(255, 255, 255, .7);\n --partner-glass-rim-shadow: rgba(60, 60, 67, .11);\n --partner-glass-filter: saturate(1.22) contrast(1.03) blur(32px);\n --partner-frosted-filter: blur(18px) saturate(.84) contrast(1.025);\n --partner-shadow-sm: 0 1px 2px rgba(0, 0, 0, .055);\n --partner-shadow-md: 0 10px 28px rgba(31, 31, 35, .085);\n --partner-shadow-lg: 0 24px 64px rgba(31, 31, 35, .14);\n --partner-glass-shadow:\n inset 0 1px 0 var(--partner-glass-highlight),\n inset 0 -1px 0 var(--partner-glass-rim-shadow),\n var(--partner-shadow-sm);\n --partner-ease-out: cubic-bezier(.22, 1, .36, 1);\n --partner-font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, \"SF Pro Text\", \"PingFang SC\", \"Microsoft YaHei\", sans-serif;\n --partner-font-caption: 12px;\n --partner-font-body: 13px;\n --partner-font-label: 14px;\n --partner-font-title: 18px;\n --partner-font-heading: 22px;\n --partner-font-display: clamp(24px, 2.2vw, 28px);\n color: var(--partner-text);\n font-family: var(--partner-font-family);\n font-size: var(--partner-font-body);\n line-height: 1.5;\n}\n\nbody[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {\n color-scheme: dark;\n --partner-canvas: transparent;\n --partner-surface: rgba(8, 10, 12, .19);\n --partner-pane: rgba(8, 10, 12, .18);\n --partner-raised: rgba(8, 10, 12, .42);\n --partner-control: rgba(8, 10, 12, .3);\n --partner-card-surface: rgba(7, 9, 11, .22);\n --partner-card-highlight: rgba(255, 255, 255, .11);\n --partner-solid-canvas: #1c1c1e;\n --partner-solid-panel: #2c2c2e;\n --partner-solid-raised: #323235;\n --partner-solid-control: #3a3a3c;\n --partner-card-shadow:\n inset 0 1px 0 var(--partner-card-highlight),\n inset 0 -1px 0 rgba(0, 0, 0, .28),\n 0 12px 30px rgba(0, 0, 0, .28),\n 0 2px 7px rgba(0, 0, 0, .2);\n --partner-text: #f5f5f7;\n --partner-text-secondary: #d1d1d6;\n --partner-text-tertiary: #98989d;\n --partner-accent: #aeaeb2;\n --partner-accent-strong: #f5f5f7;\n --partner-on-accent: #1d1d1f;\n --partner-success: #30d158;\n --partner-weixin: #30c96b;\n --partner-warning: #ff9f0a;\n --partner-danger: #ff453a;\n --partner-border: rgba(255, 255, 255, .105);\n --partner-separator: rgba(255, 255, 255, .08);\n --partner-hover: rgba(255, 255, 255, .075);\n --partner-selected: rgba(255, 255, 255, .09);\n --partner-focus-ring: rgba(255, 255, 255, .52);\n --partner-glass-clear: rgba(0, 0, 0, .1);\n --partner-glass-regular: rgba(0, 0, 0, .16);\n --partner-glass-thick: rgba(0, 0, 0, .26);\n --partner-glass-highlight: rgba(255, 255, 255, .16);\n --partner-glass-rim-shadow: rgba(0, 0, 0, .3);\n --partner-shadow-sm: 0 1px 2px rgba(0, 0, 0, .28);\n --partner-shadow-md: 0 12px 32px rgba(0, 0, 0, .34);\n --partner-shadow-lg: 0 28px 72px rgba(0, 0, 0, .48);\n}\n\n.dsh-partner-sidebar,\n.dsh-partner-sidebar *,\n.dsh-partner-workspace,\n.dsh-partner-workspace * { box-sizing: border-box; }\n\n.dsh-partner-sidebar :where(button, input, textarea, select),\n.dsh-partner-workspace :where(button, input, textarea, select) {\n margin: 0;\n border-radius: 0;\n appearance: none;\n color: inherit;\n font-family: var(--partner-font-family);\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n letter-spacing: inherit;\n}\n\n.dsh-partner-sidebar :where(button, input, textarea, select):focus,\n.dsh-partner-workspace :where(button, input, textarea, select):focus { outline: none; }\n\n.dsh-partner-sidebar :where(button, input, textarea, select):focus-visible,\n.dsh-partner-workspace :where(button, input, textarea, select):focus-visible {\n outline: 2px solid var(--partner-focus-ring);\n outline-offset: 2px;\n}\n\n.dsh-partner-sidebar :where(button, input, textarea, select):disabled,\n.dsh-partner-workspace :where(button, input, textarea, select):disabled {\n opacity: .45;\n cursor: default;\n}\n\n.dsh-partner-workspace select {\n padding-right: 32px;\n background-image:\n linear-gradient(45deg, transparent 50%, currentColor 50%),\n linear-gradient(135deg, currentColor 50%, transparent 50%);\n background-position:\n calc(100% - 15px) calc(50% - 1px),\n calc(100% - 11px) calc(50% - 1px);\n background-repeat: no-repeat;\n background-size: 4px 4px, 4px 4px;\n}\n\n.dsh-partner-workspace input[type=\"number\"] { appearance: textfield; }\n.dsh-partner-workspace input[type=\"number\"]::-webkit-inner-spin-button,\n.dsh-partner-workspace input[type=\"number\"]::-webkit-outer-spin-button { margin: 0; appearance: none; }\n\n.dsh-partner-workspace :where(.dsh-partner-roster-list, .dsh-partner-stage-scroll, .dsh-partner-library-list, .dsh-partner-library-detail, .dsh-partner-profile-people, .dsh-partner-profile-stage, .dsh-partner-graph-index, .dsh-partner-graph-stage, .dsh-partner-concern-sources, .dsh-partner-memory-kinds) {\n scrollbar-width: thin;\n scrollbar-color: color-mix(in srgb, var(--partner-text) 20%, transparent) transparent;\n}\n\n.dsh-partner-workspace :where(.dsh-partner-roster-list, .dsh-partner-stage-scroll, .dsh-partner-library-list, .dsh-partner-library-detail, .dsh-partner-profile-people, .dsh-partner-profile-stage, .dsh-partner-graph-index, .dsh-partner-graph-stage, .dsh-partner-concern-sources, .dsh-partner-memory-kinds)::-webkit-scrollbar { width: 6px; height: 6px; }\n.dsh-partner-workspace :where(.dsh-partner-roster-list, .dsh-partner-stage-scroll, .dsh-partner-library-list, .dsh-partner-library-detail, .dsh-partner-profile-people, .dsh-partner-profile-stage, .dsh-partner-graph-index, .dsh-partner-graph-stage, .dsh-partner-concern-sources, .dsh-partner-memory-kinds)::-webkit-scrollbar-track { background: transparent; }\n.dsh-partner-workspace :where(.dsh-partner-roster-list, .dsh-partner-stage-scroll, .dsh-partner-library-list, .dsh-partner-library-detail, .dsh-partner-profile-people, .dsh-partner-profile-stage, .dsh-partner-graph-index, .dsh-partner-graph-stage, .dsh-partner-concern-sources, .dsh-partner-memory-kinds)::-webkit-scrollbar-thumb {\n border: 1px solid transparent;\n border-radius: 999px;\n background: color-mix(in srgb, var(--partner-text) 20%, transparent);\n background-clip: padding-box;\n}\n\n.dsh-partner-sidebar { box-sizing: border-box; flex: none; margin: 0 8px 8px 2px; padding: 4px 0 7px; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 62%, transparent); }\n.dsh-partner-sidebar.is-rail { width: 36px; margin: 0 0 8px; padding: 0; border: 0; }\n.dsh-partner-sidebar-heading { display: flex; align-items: center; justify-content: space-between; height: 32px; padding: 0 4px 0 5px; }\n.dsh-partner-sidebar-title { display: flex; min-width: 0; align-items: center; gap: 5px; height: 28px; padding: 0 5px; border: 0; border-radius: 7px; color: var(--partner-text-secondary); background: transparent; font: 600 var(--partner-font-body)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-sidebar-title > span { display: grid; place-items: center; transition: transform .16s ease; }\n.dsh-partner-sidebar-title > span[data-open=\"false\"] { transform: rotate(-90deg); }\n.dsh-partner-sidebar-title:hover,\n.dsh-partner-sidebar-open:hover,\n.dsh-partner-rail:hover { color: var(--partner-text); background: var(--partner-hover); }\n.dsh-partner-sidebar-open { display: grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 0; border-radius: 8px; color: var(--partner-text-secondary); background: transparent; cursor: pointer; }\n.dsh-partner-sidebar-list { display: grid; grid-template-rows: 0fr; opacity: 0; transition: grid-template-rows 220ms var(--partner-ease-out), opacity 150ms ease; }\n.dsh-partner-sidebar-list.is-open { grid-template-rows: 1fr; opacity: 1; }\n.dsh-partner-sidebar-list-inner { display: grid; min-height: 0; gap: 2px; overflow: hidden; padding: 2px 1px 0; }\n.dsh-partner-sidebar-row { position: relative; isolation: isolate; display: grid; grid-template-columns: 26px minmax(0, 1fr) 7px; align-items: center; gap: 8px; width: 100%; min-height: 40px; padding: 4px 7px; overflow: hidden; border: 1px solid transparent; border-radius: 10px; color: inherit; background: transparent; text-align: left; cursor: pointer; transition: color 140ms ease, background-color 140ms ease, box-shadow 180ms ease, transform 180ms var(--partner-ease-out); }\n.dsh-partner-sidebar-row:hover { background: var(--partner-hover); transform: translateX(1px); }\n.dsh-partner-sidebar-row.is-active { border-color: transparent; background: var(--partner-selected); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-sm); }\n.dsh-partner-sidebar-row > span:nth-child(2) { display: grid; min-width: 0; gap: 2px; }\n.dsh-partner-sidebar-row strong,\n.dsh-partner-sidebar-row small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-sidebar-row strong { font-size: var(--partner-font-label); font-weight: 520; }\n.dsh-partner-sidebar-row small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-sidebar-row > i,\n.dsh-partner-roster-list button > i { width: 6px; height: 6px; border: 1px solid var(--partner-text-tertiary); border-radius: 50%; }\n.dsh-partner-sidebar-row > i.is-online,\n.dsh-partner-roster-list button > i.is-online { border-color: var(--partner-success); background: var(--partner-success); box-shadow: 0 0 0 2px color-mix(in srgb, var(--partner-success) 12%, transparent); }\n.dsh-partner-sidebar-symbol { display: grid !important; place-items: center; width: 25px; height: 25px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: var(--partner-glass-clear); box-shadow: inset 0 1px 0 var(--partner-glass-highlight); }\n.dsh-partner-sidebar-empty { margin: 5px 9px; color: var(--partner-text-tertiary); font-size: var(--partner-font-body); }\n.dsh-partner-rail { display: grid; place-items: center; width: 36px; height: 36px; padding: 0; border: 0; border-radius: 10px; color: var(--partner-text); background: transparent; cursor: pointer; }\n.dsh-partner-rail.is-active { background: var(--partner-hover); }\n\n.dsh-partner-avatar { display: grid; place-items: center; flex: none; width: 36px; height: 36px; border: 1px solid var(--partner-border); border-radius: 12px; color: var(--partner-text); background: linear-gradient(145deg, var(--partner-glass-thick), var(--partner-control)); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-sm); font-size: var(--partner-font-label); font-weight: 650; }\n.dsh-partner-avatar.is-small { width: 25px; height: 25px; border-radius: 8px; font-size: var(--partner-font-caption); }\n\n.dsh-partner-workspace { position: relative; isolation: isolate; display: grid; grid-template-rows: 64px minmax(0, 1fr); width: 100%; height: 100%; min-width: 0; overflow: hidden; background: var(--partner-canvas); }\n.dsh-partner-glass-surface { position: relative; isolation: isolate; transition: opacity 180ms ease-out, border-color 180ms ease, box-shadow 220ms var(--partner-ease-out), transform 220ms var(--partner-ease-out); }\n.dsh-partner-glass-surface.is-svg { -webkit-backdrop-filter: var(--partner-glass-filter-id) saturate(var(--partner-glass-saturation)); backdrop-filter: var(--partner-glass-filter-id) saturate(var(--partner-glass-saturation)); }\n.dsh-partner-glass-surface.is-fallback { -webkit-backdrop-filter: var(--partner-glass-filter); backdrop-filter: var(--partner-glass-filter); }\n.dsh-partner-glass-filter { position: absolute; z-index: -1; inset: 0; width: 100%; height: 100%; opacity: 0; pointer-events: none; }\n.dsh-partner-glass-surface.is-interactive::after {\n position: absolute;\n z-index: 2;\n inset: 1px;\n border-radius: inherit;\n background: linear-gradient(112deg, transparent 20%, color-mix(in srgb, var(--partner-glass-highlight) 86%, transparent) 48%, transparent 76%);\n -webkit-mask-image: radial-gradient(circle 180px at var(--partner-glare-x) var(--partner-glare-y), #000 0, rgba(0, 0, 0, .72) 38%, transparent 74%);\n mask-image: radial-gradient(circle 180px at var(--partner-glare-x) var(--partner-glare-y), #000 0, rgba(0, 0, 0, .72) 38%, transparent 74%);\n opacity: 0;\n pointer-events: none;\n transition: opacity 180ms ease-out;\n content: \"\";\n}\n.dsh-partner-glass-surface.is-interactive > :not(.dsh-partner-glass-filter) { position: relative; z-index: 1; }\n@media (hover: hover) {\n .dsh-partner-glass-surface.is-interactive:hover {\n border-color: color-mix(in srgb, var(--partner-border) 70%, var(--partner-text-tertiary));\n box-shadow:\n inset 0 1px 0 var(--partner-card-highlight),\n inset 0 -1px 0 var(--partner-glass-rim-shadow),\n 0 14px 32px color-mix(in srgb, var(--partner-text) 9%, transparent);\n transform: translateY(-1px);\n }\n .dsh-partner-glass-surface.is-interactive:hover::after { opacity: .72; }\n}\n.dsh-partner-topbar { position: relative; z-index: 3; display: flex; align-items: center; justify-content: space-between; min-height: 52px; margin: 8px 10px 0; padding: 7px 14px; border: 1px solid var(--partner-border); border-radius: 14px 14px 11px 11px; background: linear-gradient(145deg, color-mix(in srgb, var(--partner-glass-highlight) 20%, transparent), transparent 58%), var(--partner-pane); -webkit-backdrop-filter: var(--partner-frosted-filter); backdrop-filter: var(--partner-frosted-filter); box-shadow: var(--partner-glass-shadow); }\n.dsh-partner-topbar > div { display: flex; align-items: center; gap: 10px; }\n.dsh-partner-topbar > div > span:last-child { display: grid; gap: 2px; }\n.dsh-partner-topbar strong { font-size: var(--partner-font-label); font-weight: 620; }\n.dsh-partner-topbar small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-topbar [data-xiaohei-workspace-close] {\n display: grid;\n place-items: center;\n flex: none;\n width: 30px;\n height: 30px;\n padding: 0;\n border: 1px solid transparent;\n border-radius: 9px;\n color: var(--partner-text-secondary);\n background: transparent;\n line-height: 1;\n cursor: pointer;\n transition: color 140ms ease, background 140ms ease, border-color 140ms ease, transform 140ms ease;\n}\n.dsh-partner-topbar [data-xiaohei-workspace-close]:hover {\n border-color: var(--partner-border);\n color: var(--partner-text);\n background: var(--partner-hover);\n}\n.dsh-partner-topbar [data-xiaohei-workspace-close]:active { transform: scale(.96); }\n.dsh-partner-topbar [data-xiaohei-workspace-close] > svg { display: block; pointer-events: none; }\n.dsh-partner-grid { display: grid; grid-template-columns: 214px minmax(520px, 1fr); min-width: 0; min-height: 0; padding: 8px 10px 10px; gap: 8px; }\n\n.dsh-partner-roster { position: relative; display: flex; min-width: 0; min-height: 0; flex-direction: column; padding: 17px 10px 13px; overflow: hidden; border: 1px solid var(--partner-border); border-radius: 15px; background: linear-gradient(145deg, color-mix(in srgb, var(--partner-glass-highlight) 20%, transparent), transparent 56%), var(--partner-pane); -webkit-backdrop-filter: var(--partner-frosted-filter); backdrop-filter: var(--partner-frosted-filter); box-shadow: var(--partner-glass-shadow); }\n.dsh-partner-roster-title { display: flex; align-items: flex-start; justify-content: space-between; padding: 0 5px 13px; }\n.dsh-partner-roster-title > span { display: grid; gap: 5px; }\n.dsh-partner-roster-title small,\n.dsh-partner-section > small,\n.dsh-partner-identity small,\n.dsh-partner-channel-card small,\n.dsh-partner-pairing-heading small,\n.dsh-partner-qr small { color: var(--partner-accent); font-size: var(--partner-font-caption); font-weight: 700; letter-spacing: .12em; }\n.dsh-partner-roster-title strong { font-size: var(--partner-font-label); font-weight: 640; }\n.dsh-partner-roster-title button { display: grid; place-items: center; width: 30px; height: 30px; padding: 0; border: 1px solid var(--partner-border); border-radius: 10px; color: var(--partner-text-secondary); background: var(--partner-glass-clear); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-sm); cursor: pointer; transition: color 140ms ease, background-color 140ms ease, transform 160ms var(--partner-ease-out), box-shadow 180ms ease; }\n.dsh-partner-roster-title button:hover { color: var(--partner-text); border-color: var(--partner-border); background: var(--partner-glass-thick); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-md); transform: translateY(-1px); }\n.dsh-partner-roster-list { display: grid; width: 100%; min-width: 0; gap: 3px; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; }\n.dsh-partner-roster-list button { display: grid; grid-template-columns: 36px minmax(0, 1fr) 7px; align-items: center; gap: 9px; width: 100%; min-height: 58px; padding: 9px 8px; border: 1px solid transparent; border-radius: 12px; color: inherit; background: transparent; text-align: left; cursor: pointer; transition: transform .17s cubic-bezier(.2,.8,.2,1), background .15s ease, border-color .15s ease; }\n.dsh-partner-roster-list button:hover { background: var(--partner-hover); transform: translateX(1px); }\n.dsh-partner-roster-list button.is-active { transform: translateX(2px); border-color: transparent; background: var(--partner-selected); box-shadow: inset 2px 0 var(--partner-text-secondary), inset 0 1px 0 var(--partner-glass-highlight); }\n.dsh-partner-roster-list button > span:nth-child(2) { display: grid; min-width: 0; gap: 3px; }\n.dsh-partner-roster-list strong,\n.dsh-partner-roster-list small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-roster-list strong { font-size: var(--partner-font-label); font-weight: 580; }\n.dsh-partner-roster-list small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-roster-note { display: flex; align-items: flex-start; gap: 9px; margin-top: auto; padding: 12px 8px 2px; color: var(--partner-text-tertiary); }\n.dsh-partner-roster-note > svg { flex: none; margin-top: 1px; color: var(--partner-accent); }\n.dsh-partner-roster-note > span { display: grid; gap: 4px; }\n.dsh-partner-roster-note strong { color: var(--partner-text-secondary); font-size: var(--partner-font-body); font-weight: 580; }\n.dsh-partner-roster-note small { font-size: var(--partner-font-caption); line-height: 1.5; }\n\n.dsh-partner-stage { position: relative; display: grid; grid-template-rows: auto auto minmax(0, 1fr); min-width: 0; min-height: 0; overflow: hidden; border: 1px solid var(--partner-border); border-radius: 15px; background: linear-gradient(145deg, color-mix(in srgb, var(--partner-glass-highlight) 16%, transparent), transparent 52%), var(--partner-surface); -webkit-backdrop-filter: var(--partner-frosted-filter); backdrop-filter: var(--partner-frosted-filter); box-shadow: inset 0 1px 0 color-mix(in srgb, var(--partner-glass-highlight) 72%, transparent), inset 0 -1px 0 var(--partner-glass-rim-shadow), var(--partner-shadow-sm); }\n.dsh-partner-identity { display: flex; align-items: center; gap: 12px; min-height: 86px; padding: 18px clamp(20px, 4vw, 46px) 13px; }\n.dsh-partner-identity > span:nth-child(2) { display: grid; min-width: 0; flex: 1; gap: 3px; }\n.dsh-partner-identity h1 { margin: 0; font-size: var(--partner-font-heading); line-height: 1.15; font-weight: 650; letter-spacing: -.025em; }\n.dsh-partner-identity p { margin: 0; overflow: hidden; color: var(--partner-text-secondary); font-size: var(--partner-font-body); text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-status { display: inline-flex; align-items: center; flex: none; gap: 6px; padding: 5px 8px; border: 1px solid var(--partner-border); border-radius: 999px; color: var(--partner-text-secondary); background: color-mix(in srgb, var(--partner-raised) 76%, transparent); font-size: var(--partner-font-caption); }\n.dsh-partner-status > i { width: 6px; height: 6px; border-radius: 50%; background: var(--partner-text-tertiary); }\n.dsh-partner-status.is-running > i { background: var(--partner-success); box-shadow: 0 0 0 2px color-mix(in srgb, var(--partner-success) 13%, transparent); }\n.dsh-partner-status.is-starting > i { background: var(--partner-warning); }\n.dsh-partner-status.is-error > i { background: var(--partner-danger); }\n.dsh-partner-tabs { display: flex; align-items: center; gap: 3px; margin: 0 clamp(20px, 4vw, 46px); border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-tabs button { position: relative; display: inline-flex; align-items: center; gap: 6px; min-height: 37px; padding: 0 10px; border: 0; color: var(--partner-text-tertiary); background: transparent; font-size: var(--partner-font-body); cursor: pointer; }\n.dsh-partner-tabs button::after { content: \"\"; position: absolute; right: 9px; bottom: -1px; left: 9px; height: 2px; border-radius: 99px; background: var(--partner-text); opacity: 0; transform: scaleX(.45); transition: opacity 150ms ease, transform 210ms var(--partner-ease-out); }\n.dsh-partner-tabs button:hover { color: var(--partner-text); }\n.dsh-partner-tabs button.is-active { color: var(--partner-accent-strong); }\n.dsh-partner-tabs button.is-active::after { opacity: 1; transform: scaleX(1); }\n.dsh-partner-stage-scroll { min-width: 0; min-height: 0; overflow: auto; padding: 26px clamp(22px, 4vw, 52px) 52px; overscroll-behavior: contain; }\n.dsh-partner-stage-scroll > * { animation: dsh-partner-content-enter 260ms var(--partner-ease-out) both; }\n\n.dsh-partner-home { width: min(100%, 1160px); margin: 0 auto; }\n.dsh-partner-home-heading { display: flex; align-items: end; justify-content: space-between; gap: 28px; margin: 0 2px 22px; }\n.dsh-partner-home-heading > span { display: grid; gap: 6px; }\n.dsh-partner-home-heading small { color: var(--partner-accent); font-size: var(--partner-font-caption); font-weight: 700; letter-spacing: .08em; }\n.dsh-partner-home-heading h2 { margin: 0; font-size: var(--partner-font-display); line-height: 1.18; font-weight: 660; letter-spacing: -.035em; }\n.dsh-partner-home-heading p { max-width: 320px; margin: 0 0 2px; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.55; text-align: right; }\n.dsh-partner-home-channel { display: grid; grid-template-columns: minmax(230px, .8fr) minmax(330px, 1.2fr); align-items: center; min-height: 238px; overflow: hidden; border: 1px solid var(--partner-border); border-radius: 20px; background: linear-gradient(118deg, color-mix(in srgb, var(--partner-glass-highlight) 18%, transparent), transparent 56%), var(--partner-pane); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-md); transition: transform 240ms var(--partner-ease-out), box-shadow 240ms ease, border-color 180ms ease; }\n.dsh-partner-home-channel:hover { transform: translateY(-1px); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-lg); }\n.dsh-partner-home-route { position: relative; display: flex; align-items: center; justify-content: center; min-height: 100%; padding: 28px; background: radial-gradient(circle at 42% 50%, color-mix(in srgb, var(--partner-glass-highlight) 44%, transparent), transparent 58%); }\n.dsh-partner-home-route > .dsh-partner-avatar { position: relative; z-index: 1; width: 58px; height: 58px; border-radius: 18px; background: var(--partner-raised); box-shadow: 0 9px 28px color-mix(in srgb, var(--partner-accent-strong) 10%, transparent); font-size: var(--partner-font-title); }\n.dsh-partner-route-line { position: relative; width: clamp(58px, 7vw, 94px); height: 1px; margin: 0 10px; overflow: hidden; background: repeating-linear-gradient(90deg, color-mix(in srgb, var(--partner-accent) 25%, transparent) 0 4px, transparent 4px 9px); }\n.dsh-partner-route-line > i { position: absolute; left: 0; top: -2px; width: 5px; height: 5px; border-radius: 50%; background: var(--partner-accent); opacity: 0; transform: translateX(0); }\n.dsh-partner-home-channel.is-online .dsh-partner-route-line > i { animation: dsh-partner-route-pulse 2.4s ease-in-out infinite; }\n.dsh-partner-route-weixin { position: relative; z-index: 1; display: grid; place-items: center; width: 58px; height: 58px; border: 1px solid color-mix(in srgb, var(--partner-weixin) 18%, var(--partner-border)); border-radius: 18px; color: var(--partner-weixin); background: var(--partner-raised); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-md); }\n.dsh-partner-home-channel-copy { position: relative; z-index: 1; display: grid; justify-items: start; gap: 8px; padding: 32px 36px 32px 12px; }\n.dsh-partner-home-kicker { display: inline-flex; align-items: center; gap: 7px; color: var(--partner-accent-strong); font-size: var(--partner-font-caption); font-weight: 680; letter-spacing: .06em; }\n.dsh-partner-home-kicker > i { width: 6px; height: 6px; border-radius: 50%; background: var(--partner-text-tertiary); }\n.dsh-partner-home-channel.is-online .dsh-partner-home-kicker > i { background: var(--partner-success); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-success) 11%, transparent); }\n.dsh-partner-home-channel-copy h3 { margin: 1px 0 0; font-size: var(--partner-font-title); line-height: 1.28; font-weight: 650; letter-spacing: -.025em; }\n.dsh-partner-home-channel-copy p { max-width: 510px; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.65; }\n.dsh-partner-home-channel-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; margin-top: 7px; }\n.dsh-partner-home-channel-actions button { min-height: 36px; padding: 0 16px; border: 1px solid color-mix(in srgb, var(--partner-accent-strong) 78%, var(--partner-glass-highlight)); border-radius: 10px; color: var(--partner-on-accent); background: var(--partner-accent-strong); box-shadow: inset 0 1px 0 color-mix(in srgb, var(--partner-glass-highlight) 45%, transparent), var(--partner-shadow-sm); font: 600 var(--partner-font-body)/1 var(--partner-font-family); cursor: pointer; transition: transform 160ms var(--partner-ease-out), background-color 160ms ease, box-shadow 180ms ease; }\n.dsh-partner-home-channel-actions button:hover { background: color-mix(in srgb, var(--partner-accent-strong) 88%, #000); transform: translateY(-1px); }\n.dsh-partner-home-channel-actions button:active { transform: translateY(0) scale(.98); }\n.dsh-partner-home-channel-actions span { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-home-details { display: grid; grid-template-columns: minmax(0, 1.18fr) minmax(260px, .82fr); gap: 12px; margin-top: 18px; }\n.dsh-partner-home-details > section {\n position: relative;\n min-width: 0;\n padding: 19px 18px 21px;\n overflow: hidden;\n border: 1px solid var(--partner-border);\n border-radius: 15px;\n background:\n linear-gradient(145deg, color-mix(in srgb, var(--partner-glass-thick) 88%, transparent), var(--partner-glass-clear)),\n var(--partner-glass-regular);\n box-shadow:\n inset 0 1px 0 var(--partner-glass-highlight),\n inset 0 -1px 0 var(--partner-glass-rim-shadow),\n 0 8px 22px rgba(31, 31, 35, .075),\n 0 2px 5px rgba(31, 31, 35, .045);\n transition: transform 220ms var(--partner-ease-out), border-color 180ms ease, box-shadow 220ms ease;\n}\n.dsh-partner-home-details > section::after {\n position: absolute;\n top: 0;\n right: 16px;\n left: 16px;\n height: 1px;\n background: linear-gradient(90deg, transparent, var(--partner-glass-highlight), transparent);\n opacity: .72;\n pointer-events: none;\n content: \"\";\n}\n.dsh-partner-home-profile { grid-row: span 2; }\n.dsh-partner-home-details header { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; align-items: center; gap: 10px; }\n.dsh-partner-home-details header > span { display: grid; place-items: center; width: 32px; height: 32px; border-radius: 10px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 7%, transparent); }\n.dsh-partner-home-details header > div { display: grid; min-width: 0; gap: 3px; }\n.dsh-partner-home-details header small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-home-details header strong { overflow: hidden; font-size: var(--partner-font-label); font-weight: 620; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-home-details header button { padding: 5px 7px; border: 0; border-radius: 7px; color: var(--partner-text-tertiary); background: transparent; font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-home-details header button:hover { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 6%, transparent); }\n.dsh-partner-home-profile blockquote { display: -webkit-box; margin: 17px 2px 0 44px; overflow: hidden; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.7; -webkit-box-orient: vertical; -webkit-line-clamp: 5; }\n.dsh-partner-home-capability-list { display: flex; flex-wrap: wrap; gap: 6px; margin: 14px 0 0 44px; }\n.dsh-partner-home-capability-list em { padding: 5px 8px; border-radius: 7px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 7%, transparent); font-size: var(--partner-font-caption); font-style: normal; }\n.dsh-partner-home-capability-list small,\n.dsh-partner-home-continuity > p { margin: 13px 0 0 44px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.55; }\n@keyframes dsh-partner-route-pulse { 0% { opacity: 0; transform: translateX(0); } 18% { opacity: .8; } 82% { opacity: .8; } 100% { opacity: 0; transform: translateX(clamp(58px, 7vw, 94px)); } }\n\n.dsh-partner-form { width: min(100%, 1120px); margin: 0 auto; }\n.dsh-partner-form.is-identity { width: min(100%, 980px); }\n.dsh-partner-form.is-capabilities,\n.dsh-partner-form.is-channel,\n.dsh-partner-form.is-memory { width: min(100%, 1180px); }\n.dsh-partner-form.is-memory { container: partner-memory / inline-size; }\n.dsh-partner-section { position: relative; margin-bottom: 27px; padding-left: 14px; }\n.dsh-partner-section::before { position: absolute; top: 3px; bottom: 2px; left: 0; width: 2px; border-radius: 2px; background: linear-gradient(var(--partner-text-secondary), transparent 92%); content: ''; }\n.dsh-partner-section h2 { margin: 5px 0 7px; font-size: var(--partner-font-display); font-weight: 650; letter-spacing: -.035em; }\n.dsh-partner-section p { max-width: 640px; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.65; }\n.dsh-partner-fields { display: grid; gap: 14px; }\n.dsh-partner-fields.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n.dsh-partner-field { display: grid; min-width: 0; gap: 8px; margin-bottom: 16px; }\n.dsh-partner-field > span { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }\n.dsh-partner-field strong { font-size: var(--partner-font-body); font-weight: 610; }\n.dsh-partner-field small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.35; text-align: right; }\n.dsh-partner-field input,\n.dsh-partner-field textarea,\n.dsh-partner-field select { box-sizing: border-box; width: 100%; min-height: 38px; padding: 8px 10px; border: 1px solid var(--partner-border); border-radius: 10px; outline: none; color: var(--partner-text); background: var(--partner-control); font: var(--partner-font-label)/1.5 var(--partner-font-family); transition: border-color .15s ease, box-shadow .15s ease, background .15s ease; }\n.dsh-partner-field textarea { resize: vertical; }\n.dsh-partner-field input:focus,\n.dsh-partner-field textarea:focus,\n.dsh-partner-field select:focus { border-color: var(--partner-focus-ring); background: var(--partner-raised); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-focus-ring) 18%, transparent), inset 0 1px 0 var(--partner-glass-highlight); }\n.dsh-partner-form-actions { display: flex; align-items: center; justify-content: space-between; min-height: 40px; padding-top: 5px; }\n.dsh-partner-form-actions > span { display: inline-flex; align-items: center; gap: 5px; color: var(--partner-accent-strong); font-size: var(--partner-font-body); }\n.dsh-partner-form-actions > button,\n.dsh-partner-state > button,\n.dsh-partner-weixin-connect > button { min-height: 34px; padding: 0 15px; border: 1px solid color-mix(in srgb, var(--partner-accent) 60%, transparent); border-radius: 10px; color: var(--partner-on-accent); background: var(--partner-accent-strong); font: 600 var(--partner-font-body)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-form-actions > button:hover,\n.dsh-partner-state > button:hover,\n.dsh-partner-weixin-connect > button:hover { background: color-mix(in srgb, var(--partner-accent-strong) 88%, #000); }\n.dsh-partner-form-actions > button:disabled,\n.dsh-partner-weixin-connect > button:disabled { opacity: .55; cursor: default; }\n.dsh-partner-identity-danger { display: flex; align-items: center; justify-content: space-between; gap: 20px; margin-top: 34px; padding-top: 17px; border-top: 1px solid var(--partner-border); }\n.dsh-partner-identity-danger > span { display: grid; gap: 4px; }\n.dsh-partner-identity-danger strong { font-size: var(--partner-font-body); font-weight: 600; }\n.dsh-partner-identity-danger small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-identity-danger button { display: inline-flex; align-items: center; gap: 6px; min-height: 30px; padding: 0 10px; border: 1px solid color-mix(in srgb, var(--partner-danger) 24%, transparent); border-radius: 8px; color: var(--partner-danger); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-identity-danger button:disabled { opacity: .4; cursor: default; }\n.dsh-partner-inline-error,\n.dsh-partner-error { padding: 9px 11px; border: 1px solid color-mix(in srgb, var(--partner-danger) 20%, transparent); border-radius: 9px; color: var(--partner-danger); background: color-mix(in srgb, var(--partner-danger) 6%, transparent); font-size: var(--partner-font-body); }\n.dsh-partner-error { position: absolute; right: 18px; bottom: 14px; left: 18px; margin: 0; }\n\n.dsh-partner-capabilities { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 9px; margin: 3px 0 22px; }\n.dsh-partner-capabilities button { position: relative; display: grid; grid-template-columns: 22px minmax(0, 1fr); gap: 3px 9px; min-height: 78px; padding: 13px; border: 1px solid var(--partner-border); border-radius: 12px; color: inherit; background: color-mix(in srgb, var(--partner-raised) 70%, transparent); text-align: left; cursor: pointer; }\n.dsh-partner-capabilities button.is-active { border-color: color-mix(in srgb, var(--partner-accent) 30%, transparent); background: color-mix(in srgb, var(--partner-accent) 7%, var(--partner-raised)); }\n.dsh-partner-capabilities button > span { display: grid; place-items: center; grid-row: 1 / span 2; width: 19px; height: 19px; margin-top: 1px; border: 1px solid var(--partner-border); border-radius: 6px; color: var(--partner-on-accent); }\n.dsh-partner-capabilities button.is-active > span { border-color: var(--partner-accent); background: var(--partner-accent); }\n.dsh-partner-capabilities strong { font-size: var(--partner-font-body); font-weight: 610; }\n.dsh-partner-capabilities small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.5; }\n\n.dsh-partner-weixin-connect { display: grid; grid-template-columns: 54px minmax(0, 1fr) auto; align-items: center; gap: 17px; padding: 19px; border: 1px solid var(--partner-border); border-radius: 15px; background: color-mix(in srgb, var(--partner-raised) 72%, transparent); }\n.dsh-partner-weixin-connect > span { display: grid; gap: 4px; }\n.dsh-partner-weixin-connect strong { font-size: var(--partner-font-label); }\n.dsh-partner-weixin-connect p { margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.55; }\n.dsh-partner-weixin-connect ul { display: flex; flex-wrap: wrap; gap: 6px 15px; margin: 7px 0 0; padding: 0; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); list-style: none; }\n.dsh-partner-weixin-connect li::before { content: \"\u00B7\"; margin-right: 4px; color: var(--partner-accent); }\n.dsh-partner-weixin-mark { display: grid; place-items: center; width: 52px; height: 52px; border: 1px solid color-mix(in srgb, var(--partner-weixin) 18%, var(--partner-border)); border-radius: 16px; color: var(--partner-weixin); background: color-mix(in srgb, var(--partner-weixin) 7%, var(--partner-raised)); }\n.dsh-partner-weixin-glyph { position: relative; display: inline-block; width: 16px; height: 14px; }\n.dsh-partner-weixin-glyph::before,\n.dsh-partner-weixin-glyph::after { content: \"\"; position: absolute; border: 1.5px solid currentColor; border-radius: 48%; }\n.dsh-partner-weixin-glyph::before { left: 0; top: 0; width: 10px; height: 8px; }\n.dsh-partner-weixin-glyph::after { right: 0; bottom: 0; width: 9px; height: 7px; background: inherit; }\n.dsh-partner-weixin-glyph i,\n.dsh-partner-weixin-glyph b { position: absolute; z-index: 1; top: 4px; width: 1.5px; height: 1.5px; border-radius: 50%; background: currentColor; }\n.dsh-partner-weixin-glyph i { left: 3px; }\n.dsh-partner-weixin-glyph b { left: 7px; }\n.dsh-partner-weixin-glyph.is-large { transform: scale(1.55); }\n.dsh-partner-qr { display: grid; grid-template-columns: 206px minmax(0, 1fr); align-items: center; gap: 27px; padding: 22px; border: 1px solid var(--partner-border); border-radius: 16px; background: color-mix(in srgb, var(--partner-raised) 74%, transparent); }\n.dsh-partner-qr-code { display: grid; place-items: center; width: 196px; height: 196px; border-radius: 14px; background: #fff; box-shadow: 0 9px 28px color-mix(in srgb, #000 7%, transparent); }\n.dsh-partner-qr > span { display: grid; justify-items: start; gap: 7px; }\n.dsh-partner-qr strong { font-size: var(--partner-font-title); }\n.dsh-partner-qr p { max-width: 300px; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.6; }\n.dsh-partner-qr button { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; padding: 0 11px; border: 1px solid var(--partner-border); border-radius: 9px; color: inherit; background: var(--partner-raised); cursor: pointer; }\n.dsh-partner-channel-card { display: grid; grid-template-columns: 52px minmax(0, 1fr) auto auto; align-items: center; gap: 14px; padding: 15px; border: 1px solid var(--partner-border); border-radius: 14px; background: color-mix(in srgb, var(--partner-raised) 72%, transparent); }\n.dsh-partner-channel-card > span:nth-child(2) { display: grid; gap: 3px; }\n.dsh-partner-channel-card strong { font-size: var(--partner-font-label); }\n.dsh-partner-channel-card p { margin: 0; color: var(--partner-text-tertiary); font: var(--partner-font-caption)/1.4 ui-monospace, monospace; }\n.dsh-partner-switch { position: relative; width: 38px; height: 22px; padding: 0; border: 1px solid var(--partner-border); border-radius: 999px; background: color-mix(in srgb, var(--partner-text) 9%, transparent); cursor: pointer; transition: background .16s ease; }\n.dsh-partner-switch i { position: absolute; left: 3px; top: 3px; width: 14px; height: 14px; border-radius: 50%; background: var(--partner-raised); box-shadow: 0 1px 3px color-mix(in srgb, #000 16%, transparent); transition: transform .18s cubic-bezier(.2,.8,.2,1); }\n.dsh-partner-switch[data-on=\"true\"] { border-color: var(--partner-accent-strong); background: var(--partner-accent-strong); }\n.dsh-partner-switch[data-on=\"true\"] i { transform: translateX(16px); }\n.dsh-partner-pairing-heading { display: flex; align-items: end; justify-content: space-between; margin: 25px 1px 10px; }\n.dsh-partner-pairing-heading > span { display: grid; gap: 4px; }\n.dsh-partner-pairing-heading strong { font-size: var(--partner-font-label); }\n.dsh-partner-pairing-heading em { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-style: normal; }\n.dsh-partner-pairings { display: grid; gap: 5px; }\n.dsh-partner-pairings article { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto auto; align-items: center; gap: 9px; min-height: 52px; padding: 8px 9px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-pairings article > span { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 9px; color: var(--partner-text-tertiary); background: var(--partner-hover); }\n.dsh-partner-pairings article > span.is-approved { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 9%, transparent); }\n.dsh-partner-pairings article > div { display: grid; gap: 3px; }\n.dsh-partner-pairings strong { font-size: var(--partner-font-body); }\n.dsh-partner-pairings small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-pairings button { min-height: 29px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-pairings button.is-primary { color: var(--partner-on-accent); border-color: var(--partner-accent-strong); background: var(--partner-accent-strong); }\n\n.dsh-partner-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }\n.dsh-partner-metrics article { padding: 14px; border: 1px solid var(--partner-border); border-radius: 12px; background: color-mix(in srgb, var(--partner-raised) 66%, transparent); }\n.dsh-partner-metrics small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-metrics strong { display: block; margin: 8px 0 4px; font-size: var(--partner-font-title); font-weight: 640; }\n.dsh-partner-metrics p { margin: 0; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-session-list { display: grid; gap: 4px; margin-top: 20px; }\n.dsh-partner-session-list article { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 7px 5px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-session-list article > span { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 9px; color: var(--partner-accent); background: color-mix(in srgb, var(--partner-accent) 7%, transparent); }\n.dsh-partner-session-list article > div { display: grid; min-width: 0; flex: 1; gap: 3px; }\n.dsh-partner-session-list strong { font-size: var(--partner-font-body); }\n.dsh-partner-session-list small { overflow: hidden; color: var(--partner-text-tertiary); font: var(--partner-font-caption)/1.4 ui-monospace, monospace; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-session-list button { flex: none; min-height: 30px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-session-list button:hover { color: var(--partner-accent-strong); border-color: color-mix(in srgb, var(--partner-accent) 24%, var(--partner-border)); }\n.dsh-partner-automation { display: grid; min-width: 0; max-width: 100%; gap: 14px; margin-top: 16px; padding: 16px; border: 1px solid var(--partner-border); border-radius: 14px; background: color-mix(in srgb, var(--partner-raised) 72%, transparent); }\n.dsh-partner-automation-grid { display: grid; min-width: 0; grid-template-columns: minmax(480px, .95fr) minmax(430px, 1.05fr); align-items: stretch; gap: 12px; margin-top: 17px; }\n.dsh-partner-automation-grid .dsh-partner-automation { align-content: start; margin-top: 0; }\n.dsh-partner-automation-grid .dsh-partner-automation:last-child .dsh-partner-automation-actions { margin-top: auto; }\n.dsh-partner-review-policy { display: grid; grid-template-columns: auto minmax(0, 1fr) 90px auto; align-items: center; gap: 10px; padding-top: 12px; border-top: 1px solid var(--partner-border); }\n.dsh-partner-review-policy > span { display: grid; gap: 2px; }\n.dsh-partner-review-policy > span strong { font-size: var(--partner-font-body); }\n.dsh-partner-review-policy > span small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.4; }\n.dsh-partner-review-policy select { width: 100%; height: 32px; padding: 0 26px 0 9px; border: 1px solid var(--partner-border); border-radius: 8px; background-color: var(--partner-control); font-size: var(--partner-font-caption); }\n.dsh-partner-review-policy > button:last-child { height: 32px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: var(--partner-control); font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-automation > header { display: flex; align-items: center; justify-content: space-between; gap: 16px; }\n.dsh-partner-automation > header > span { display: grid; gap: 4px; }\n.dsh-partner-automation > header strong { font-size: var(--partner-font-body); }\n.dsh-partner-automation > header small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.55; }\n.dsh-partner-automation-fields { display: grid; min-width: 0; grid-template-columns: minmax(120px, 180px); gap: 10px; }\n.dsh-partner-automation-fields.is-memory-model { grid-template-columns: minmax(110px, .7fr) minmax(130px, 1fr) minmax(150px, 1.25fr); }\n.dsh-partner-automation-fields.is-heartbeat { grid-template-columns: repeat(4, minmax(100px, 1fr)); }\n.dsh-partner-concern-board { position: relative; display: grid; min-width: 0; max-width: 100%; overflow: visible; border: 1px solid var(--partner-border); border-radius: 11px; background: color-mix(in srgb, var(--partner-raised) 42%, transparent); }\n.dsh-partner-concern-board > header { display: flex; min-height: 46px; align-items: center; justify-content: space-between; gap: 14px; padding: 7px 10px 7px 12px; }\n.dsh-partner-concern-board > header > span { display: flex; min-width: 0; align-items: baseline; gap: 8px; }\n.dsh-partner-concern-board > header strong { display: flex; align-items: center; gap: 6px; font-size: var(--partner-font-body); font-weight: 640; white-space: nowrap; }\n.dsh-partner-concern-board > header strong b { display: grid; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 999px; place-items: center; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 9%, transparent); font-size: var(--partner-font-caption); font-variant-numeric: tabular-nums; }\n.dsh-partner-concern-board > header p { min-width: 0; margin: 0; overflow: hidden; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-concern-board > header > button { display: inline-flex; flex: none; height: 30px; align-items: center; gap: 5px; padding: 0 9px; border: 1px solid transparent; border-radius: 8px; color: var(--partner-text-secondary); background: transparent; font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-concern-board > header > button:hover,\n.dsh-partner-concern-board > header > button[aria-expanded=\"true\"] { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }\n.dsh-partner-concern-compose { display: grid; gap: 8px; padding: 10px 12px 11px; border-top: 1px solid var(--partner-border); background: color-mix(in srgb, var(--partner-control) 60%, transparent); animation: dsh-partner-reveal .16s ease-out; }\n.dsh-partner-concern-compose label { display: grid; gap: 6px; }\n.dsh-partner-concern-compose label > span { color: var(--partner-text-secondary); font-size: var(--partner-font-caption); font-weight: 600; }\n.dsh-partner-concern-compose input { width: 100%; height: 36px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text); background: var(--partner-raised); font: var(--partner-font-body)/1 var(--partner-font-family); transition: border-color .15s ease, box-shadow .15s ease; }\n.dsh-partner-concern-compose input:focus-visible { border-color: color-mix(in srgb, var(--partner-accent) 55%, var(--partner-border)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-accent) 9%, transparent); }\n.dsh-partner-concern-input-wrap { position: relative; min-width: 0; }\n.dsh-partner-concern-compose-hint { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 400; line-height: 1.45; }\n.dsh-partner-concern-compose-hint b { color: var(--partner-accent-strong); font-weight: 700; }\n.dsh-partner-concern-sources {\n position: absolute;\n z-index: 40;\n top: calc(100% + 6px);\n right: 0;\n left: 0;\n display: grid;\n max-height: 264px;\n overflow-y: auto;\n padding: 5px;\n border: 1px solid color-mix(in srgb, var(--partner-border) 88%, var(--partner-text) 12%);\n border-radius: 10px;\n background: var(--partner-raised);\n box-shadow: 0 14px 34px color-mix(in srgb, var(--partner-text) 15%, transparent);\n scrollbar-width: thin;\n}\n.dsh-partner-concern-sources > p { margin: 0; padding: 14px 12px; color: var(--partner-text-secondary); font-size: var(--partner-font-caption); line-height: 1.45; }\n.dsh-partner-concern-sources > button {\n display: grid;\n min-height: 46px;\n grid-template-columns: 28px minmax(0, 1fr);\n grid-template-rows: auto auto;\n align-items: center;\n column-gap: 8px;\n padding: 6px 8px;\n border: 1px solid transparent;\n border-radius: 8px;\n color: var(--partner-text);\n background: transparent;\n text-align: left;\n cursor: pointer;\n}\n.dsh-partner-concern-sources > button > span { display: grid; grid-row: 1 / 3; width: 28px; height: 28px; place-items: center; border-radius: 8px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 9%, var(--partner-control)); }\n.dsh-partner-concern-sources > button > strong { min-width: 0; overflow: hidden; font-size: var(--partner-font-body); font-weight: 610; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-concern-sources > button > small { min-width: 0; overflow: hidden; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 400; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-concern-sources > button:hover,\n.dsh-partner-concern-sources > button[aria-selected=\"true\"] { border-color: color-mix(in srgb, var(--partner-accent) 22%, var(--partner-border)); background: color-mix(in srgb, var(--partner-accent) 8%, var(--partner-raised)); }\n.dsh-partner-concern-compose > div { display: flex; justify-content: flex-end; gap: 6px; }\n.dsh-partner-concern-compose button { min-height: 30px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: var(--partner-raised); font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-concern-compose button.is-primary { border-color: transparent; color: var(--partner-on-accent); background: var(--partner-accent-strong); }\n.dsh-partner-concern-list { display: grid; min-height: 0; border-top: 1px solid var(--partner-border); }\n.dsh-partner-concern-list > article { min-width: 0; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 72%, transparent); background: transparent; transition: background .15s ease; }\n.dsh-partner-concern-list > article:last-child { border-bottom: 0; }\n.dsh-partner-concern-list > article:hover,\n.dsh-partner-concern-list > article[data-expanded=\"true\"] { background: color-mix(in srgb, var(--partner-accent) 4.5%, transparent); }\n.dsh-partner-concern-row { display: grid; width: 100%; min-height: 49px; grid-template-columns: 76px minmax(0, 1fr) auto 14px; align-items: center; gap: 9px; padding: 6px 11px 6px 12px; border: 0; color: inherit; background: transparent; text-align: left; cursor: pointer; }\n.dsh-partner-concern-state { display: flex; align-items: center; gap: 7px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); white-space: nowrap; }\n.dsh-partner-concern-state i { width: 6px; height: 6px; border-radius: 50%; background: var(--partner-accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-accent) 9%, transparent); }\n.dsh-partner-concern-copy { display: grid; min-width: 0; gap: 3px; }\n.dsh-partner-concern-copy strong,\n.dsh-partner-concern-copy small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-concern-copy strong { font-size: var(--partner-font-body); font-weight: 610; }\n.dsh-partner-concern-copy small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-concern-time { display: grid; justify-items: end; gap: 2px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-variant-numeric: tabular-nums; line-height: 1.1; white-space: nowrap; }\n.dsh-partner-concern-time small { font: inherit; }\n.dsh-partner-concern-time strong { color: var(--partner-text-secondary); font: 590 var(--partner-font-caption)/1.1 var(--partner-font-family); }\n.dsh-partner-concern-row > svg { color: var(--partner-text-tertiary); transition: transform .16s ease, color .16s ease; }\n.dsh-partner-concern-list > article[data-expanded=\"true\"] .dsh-partner-concern-row > svg { color: var(--partner-accent); transform: rotate(180deg); }\n.dsh-partner-concern-detail { display: grid; gap: 7px; padding: 0 34px 11px 97px; animation: dsh-partner-reveal .16s ease-out; }\n.dsh-partner-concern-detail p,\n.dsh-partner-concern-detail blockquote { margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-caption); line-height: 1.55; }\n.dsh-partner-concern-detail blockquote { padding-left: 9px; border-left: 2px solid color-mix(in srgb, var(--partner-accent) 40%, transparent); }\n.dsh-partner-concern-detail > small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-concern-decision { display: grid; min-width: 0; grid-template-columns: auto minmax(0, 1fr); align-items: baseline; gap: 3px 8px; padding: 7px 9px; border: 1px solid var(--partner-border); border-radius: 8px; background: var(--partner-control); font-size: var(--partner-font-caption); }\n.dsh-partner-concern-decision strong { color: var(--partner-accent-strong); font-weight: 620; white-space: nowrap; }\n.dsh-partner-concern-decision span { min-width: 0; color: var(--partner-text-secondary); line-height: 1.45; }\n.dsh-partner-concern-decision small { grid-column: 1 / -1; color: var(--partner-text-tertiary); line-height: 1.45; overflow-wrap: anywhere; }\n.dsh-partner-concern-resources { display: flex; flex-wrap: wrap; gap: 5px; }\n.dsh-partner-concern-resources span { max-width: 100%; overflow: hidden; padding: 4px 7px; border-radius: 6px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); font-size: var(--partner-font-caption); text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-concern-actions { display: flex; flex-wrap: wrap; gap: 5px; padding-top: 2px; }\n.dsh-partner-concern-actions button,\n.dsh-partner-concern-resolved button { min-height: 28px; padding: 0 8px; border: 1px solid var(--partner-border); border-radius: 7px; color: var(--partner-text-secondary); background: var(--partner-control); font: 540 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-concern-actions button:hover,\n.dsh-partner-concern-resolved button:hover { color: var(--partner-accent-strong); border-color: color-mix(in srgb, var(--partner-accent) 32%, var(--partner-border)); background: color-mix(in srgb, var(--partner-accent) 7%, var(--partner-control)); }\n.dsh-partner-concern-actions button.is-danger:hover { color: var(--partner-danger); border-color: color-mix(in srgb, var(--partner-danger) 35%, var(--partner-border)); background: color-mix(in srgb, var(--partner-danger) 7%, var(--partner-control)); }\n.dsh-partner-concern-more { display: flex; justify-content: center; padding: 5px; border-top: 1px solid var(--partner-border); }\n.dsh-partner-concern-more button { min-height: 26px; padding: 0 9px; border: 0; border-radius: 7px; color: var(--partner-text-tertiary); background: transparent; font: 540 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-concern-more button:hover { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 7%, transparent); }\n.dsh-partner-concern-empty { margin: 0; padding: 13px 12px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.5; }\n.dsh-partner-concern-resolved { border-top: 1px solid var(--partner-border); }\n.dsh-partner-concern-resolved summary { min-height: 34px; padding: 9px 12px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); cursor: pointer; list-style: none; }\n.dsh-partner-concern-resolved summary::-webkit-details-marker { display: none; }\n.dsh-partner-concern-resolved summary::before { display: inline-block; margin-right: 7px; content: '\\203A'; transition: transform .15s ease; }\n.dsh-partner-concern-resolved[open] summary::before { transform: rotate(90deg); }\n.dsh-partner-concern-resolved summary b { margin-left: 4px; color: var(--partner-accent); font-variant-numeric: tabular-nums; }\n.dsh-partner-concern-resolved > div { display: grid; max-height: 170px; overflow-y: auto; border-top: 1px solid color-mix(in srgb, var(--partner-border) 72%, transparent); }\n.dsh-partner-concern-resolved article { display: grid; min-height: 38px; grid-template-columns: 22px minmax(0, 1fr) auto; align-items: center; gap: 7px; padding: 4px 10px; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 60%, transparent); }\n.dsh-partner-concern-resolved article > span { display: grid; width: 20px; height: 20px; border-radius: 7px; place-items: center; color: var(--partner-accent); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }\n.dsh-partner-concern-resolved article strong { overflow: hidden; font-size: var(--partner-font-caption); font-weight: 560; text-overflow: ellipsis; white-space: nowrap; }\n@keyframes dsh-partner-reveal { from { opacity: 0; transform: translateY(-3px); } to { opacity: 1; transform: translateY(0); } }\n.dsh-partner-automation-actions { display: flex; justify-content: flex-end; gap: 8px; padding-top: 12px; border-top: 1px solid var(--partner-border); }\n.dsh-partner-automation-actions button, .dsh-partner-section-heading button { min-height: 32px; padding: 0 12px; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--partner-text-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-automation-actions button.is-primary { color: var(--partner-raised); border-color: transparent; background: var(--partner-accent-strong); }\n.dsh-partner-automation-actions button:disabled, .dsh-partner-section-heading button:disabled { opacity: .45; cursor: default; }\n.dsh-partner-inline-notice { display: flex; align-items: center; gap: 6px; margin: 12px 0 0; color: var(--partner-accent-strong); font-size: var(--partner-font-caption); }\n.dsh-partner-section-heading { display: flex; align-items: end; justify-content: space-between; gap: 12px; margin-top: 24px; padding-bottom: 8px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-section-heading span { display: grid; gap: 3px; }\n.dsh-partner-section-heading small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); letter-spacing: .12em; }\n.dsh-partner-section-heading strong { font-size: var(--partner-font-body); }\n.dsh-partner-memory-library { margin-top: 28px; overflow: hidden; border: 1px solid var(--partner-border); border-radius: 17px; background: color-mix(in srgb, var(--partner-raised) 58%, transparent); box-shadow: 0 22px 64px color-mix(in srgb, var(--partner-accent-strong) 5%, transparent), inset 0 1px color-mix(in srgb, white 6%, transparent); }\n.dsh-partner-library-header { display: flex; align-items: end; justify-content: space-between; gap: 24px; padding: 19px 20px 0; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-library-header > span { display: grid; gap: 4px; padding-bottom: 15px; }\n.dsh-partner-library-header > span small { color: var(--partner-accent); font-size: var(--partner-font-caption); font-weight: 700; letter-spacing: .12em; }\n.dsh-partner-library-header > span strong { font-size: var(--partner-font-title); font-weight: 650; letter-spacing: -.02em; }\n.dsh-partner-library-header > span p { margin: 0; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-library-header nav { display: flex; align-self: stretch; gap: 4px; }\n.dsh-partner-library-header nav button { position: relative; padding: 0 8px; border: 0; color: var(--partner-text-tertiary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-library-header nav button::after { position: absolute; right: 7px; bottom: -1px; left: 7px; height: 2px; border-radius: 2px; background: var(--partner-accent); opacity: 0; content: ''; }\n.dsh-partner-library-header nav button.is-active { color: var(--partner-text); }\n.dsh-partner-library-header nav button.is-active::after { opacity: 1; }\n.dsh-partner-library-header nav b { margin-left: 4px; color: var(--partner-accent); font-size: var(--partner-font-caption); font-variant-numeric: tabular-nums; }\n.dsh-partner-library-tools { display: flex; align-items: center; gap: 12px; min-height: 53px; padding: 9px 12px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-library-tools > label { flex: 0 1 230px; }\n.dsh-partner-library-tools input { width: 100%; height: 34px; padding: 0 11px; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--partner-text); background: var(--partner-control); font-size: var(--partner-font-caption); }\n.dsh-partner-library-tools input::placeholder { color: var(--partner-text-tertiary); }\n.dsh-partner-memory-kinds { display: flex; min-width: 0; gap: 3px; overflow-x: auto; }\n.dsh-partner-memory-kinds button { flex: none; height: 28px; padding: 0 8px; border: 0; border-radius: 7px; color: var(--partner-text-tertiary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-memory-kinds button:hover { color: var(--partner-text); background: var(--partner-hover); }\n.dsh-partner-memory-kinds button.is-active { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 10%, transparent); }\n.dsh-partner-library-browser { display: grid; grid-template-columns: minmax(270px, 31%) minmax(0, 1fr); height: clamp(430px, 58vh, 640px); min-height: 0; overflow: hidden; }\n.dsh-partner-library-list { min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior-x: contain; overscroll-behavior-y: auto; border-right: 1px solid var(--partner-border); scrollbar-gutter: stable; }\n.dsh-partner-library-list > button { display: grid; width: 100%; gap: 5px; padding: 12px 14px; border: 0; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 70%, transparent); color: inherit; background: transparent; text-align: left; cursor: pointer; }\n.dsh-partner-library-list > button:hover { background: color-mix(in srgb, var(--partner-accent) 4%, transparent); }\n.dsh-partner-library-list > button.is-active { background: color-mix(in srgb, var(--partner-accent) 8%, transparent); box-shadow: inset 2px 0 var(--partner-accent); }\n.dsh-partner-library-list > button > span { width: max-content; color: var(--partner-accent); font-size: var(--partner-font-caption); font-weight: 650; letter-spacing: .06em; }\n.dsh-partner-library-list > button > strong { overflow: hidden; font-size: var(--partner-font-body); font-weight: 610; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-library-list > button > p { display: -webkit-box; margin: 0; overflow: hidden; color: var(--partner-text-secondary); font-size: var(--partner-font-caption); line-height: 1.5; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }\n.dsh-partner-library-list > button > small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-library-list.is-diary time { color: var(--partner-accent); font: 600 var(--partner-font-caption)/1.2 var(--partner-font-family); font-variant-numeric: tabular-nums; }\n.dsh-partner-library-detail { min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior-x: contain; overscroll-behavior-y: auto; padding: 24px clamp(20px, 3vw, 34px) 40px; background: radial-gradient(circle at 92% 4%, color-mix(in srgb, var(--partner-accent) 6%, transparent), transparent 34%); scrollbar-gutter: stable; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) { display: grid; align-content: start; gap: 13px; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > header,\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > header span { color: var(--partner-accent); font-size: var(--partner-font-caption); font-weight: 650; letter-spacing: .08em; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > header > div { display: flex; gap: 10px; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > header button { min-width: 28px; min-height: 28px; padding: 0 6px; border: 0; border-radius: 7px; color: var(--partner-text-tertiary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > header button:hover { color: var(--partner-accent); }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > strong { font-size: var(--partner-font-title); font-weight: 650; letter-spacing: -.025em; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > p { max-width: 64ch; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.75; text-wrap: pretty; }\n.dsh-partner-library-detail progress { width: min(100px, 45%); height: 3px; overflow: hidden; border: 0; border-radius: 2px; appearance: none; background: var(--partner-border); }\n.dsh-partner-library-detail progress::-webkit-progress-bar { background: transparent; }\n.dsh-partner-library-detail progress::-webkit-progress-value { background: var(--partner-accent); }\n.dsh-partner-library-detail progress::-moz-progress-bar { background: var(--partner-accent); }\n.dsh-partner-library-detail footer small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-profile-browser { display: grid; grid-template-columns: minmax(220px, 25%) minmax(0, 1fr); height: clamp(450px, 61vh, 660px); min-height: 0; overflow: hidden; }\n.dsh-partner-profile-people { min-height: 0; overflow-x: hidden; overflow-y: auto; border-right: 1px solid var(--partner-border); scrollbar-gutter: stable; }\n.dsh-partner-profile-people > button { display: grid; grid-template-columns: 32px minmax(0, 1fr) 7px; align-items: center; gap: 10px; width: 100%; min-height: 58px; padding: 9px 13px; border: 0; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 70%, transparent); color: inherit; background: transparent; text-align: left; cursor: pointer; transition: background-color 150ms ease, box-shadow 180ms var(--partner-ease-out); }\n.dsh-partner-profile-people > button:hover { background: var(--partner-hover); }\n.dsh-partner-profile-people > button.is-active { background: var(--partner-selected); box-shadow: inset 2px 0 var(--partner-accent-strong); }\n.dsh-partner-profile-people > button > span { display: grid; place-items: center; width: 32px; height: 32px; border: 1px solid var(--partner-border); border-radius: 10px; color: var(--partner-text-secondary); background: var(--partner-glass-clear); box-shadow: inset 0 1px 0 var(--partner-glass-highlight); }\n.dsh-partner-profile-people > button > div { display: grid; min-width: 0; gap: 2px; }\n.dsh-partner-profile-people strong, .dsh-partner-profile-people small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-profile-people strong { font-size: var(--partner-font-body); font-weight: 610; }\n.dsh-partner-profile-people small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-profile-people > button > i { width: 6px; height: 6px; border: 1px solid var(--partner-text-tertiary); border-radius: 50%; }\n.dsh-partner-profile-people > button.is-active > i { border-color: var(--partner-accent-strong); background: var(--partner-accent-strong); }\n.dsh-partner-profile-stage { min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior-x: contain; overscroll-behavior-y: auto; padding: 25px clamp(20px, 3vw, 36px) 42px; scrollbar-gutter: stable; }\n.dsh-partner-profile-heading { display: flex; align-items: start; justify-content: space-between; gap: 24px; padding-bottom: 21px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-profile-heading > span { display: grid; max-width: 66ch; gap: 5px; }\n.dsh-partner-profile-heading > span small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 650; letter-spacing: .1em; }\n.dsh-partner-profile-heading > span strong { font-size: var(--partner-font-title); font-weight: 660; letter-spacing: -.025em; }\n.dsh-partner-profile-heading > span p { margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.6; }\n.dsh-partner-profile-heading > div { display: flex; flex: none; align-items: center; gap: 6px; min-height: 28px; padding: 0 9px; border: 1px solid var(--partner-border); border-radius: 999px; color: var(--partner-text-tertiary); background: var(--partner-glass-clear); font-size: var(--partner-font-caption); box-shadow: inset 0 1px 0 var(--partner-glass-highlight); }\n.dsh-partner-profile-heading > div > i { width: 6px; height: 6px; border: 1px solid currentColor; border-radius: 50%; }\n.dsh-partner-profile-heading > div[data-ready=\"true\"] { color: var(--partner-text-secondary); }\n.dsh-partner-profile-heading > div[data-ready=\"true\"] > i { background: currentColor; }\n.dsh-partner-profile-meta { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: 17px 0 8px; padding: 13px 0; border-block: 1px solid var(--partner-separator); }\n.dsh-partner-profile-meta > span { display: grid; min-width: 0; gap: 3px; padding: 0 14px; border-left: 1px solid var(--partner-separator); }\n.dsh-partner-profile-meta > span:first-child { padding-left: 0; border-left: 0; }\n.dsh-partner-profile-meta small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-profile-meta strong { overflow: hidden; font-size: var(--partner-font-body); font-weight: 620; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-profile-entries { display: grid; }\n.dsh-partner-profile-entries > article, .dsh-partner-profile-pending > div > article { display: grid; gap: 11px; padding: 18px 0; border-bottom: 1px solid var(--partner-separator); }\n.dsh-partner-profile-entries > article > header, .dsh-partner-profile-entries > article > footer,\n.dsh-partner-profile-pending > div > article > header, .dsh-partner-profile-pending > div > article > footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n.dsh-partner-profile-entries article > header > span, .dsh-partner-profile-pending article > header > span { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 650; letter-spacing: .07em; }\n.dsh-partner-profile-entries article > header > div, .dsh-partner-profile-pending article > header > div { display: flex; gap: 11px; }\n.dsh-partner-profile-entries article > header button, .dsh-partner-profile-pending article > header button { min-width: 28px; min-height: 28px; padding: 0 6px; border: 0; border-radius: 7px; color: var(--partner-text-tertiary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-profile-entries article > header button:hover, .dsh-partner-profile-pending article > header button:hover { color: var(--partner-text); }\n.dsh-partner-profile-entries article > strong, .dsh-partner-profile-pending article > strong { font-size: var(--partner-font-label); font-weight: 640; }\n.dsh-partner-profile-entries article > p, .dsh-partner-profile-pending article > p { max-width: 68ch; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.65; text-wrap: pretty; }\n.dsh-partner-profile-entries progress, .dsh-partner-profile-pending progress { width: min(100px, 45%); height: 3px; overflow: hidden; border: 0; border-radius: 2px; appearance: none; background: var(--partner-border); }\n.dsh-partner-profile-entries progress::-webkit-progress-bar, .dsh-partner-profile-pending progress::-webkit-progress-bar { background: transparent; }\n.dsh-partner-profile-entries progress::-webkit-progress-value, .dsh-partner-profile-pending progress::-webkit-progress-value { background: var(--partner-accent); }\n.dsh-partner-profile-entries progress::-moz-progress-bar, .dsh-partner-profile-pending progress::-moz-progress-bar { background: var(--partner-accent); }\n.dsh-partner-profile-entries footer small, .dsh-partner-profile-pending footer small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-profile-pending { margin-top: 18px; border-top: 1px solid var(--partner-border); }\n.dsh-partner-profile-pending > summary { display: flex; min-height: 40px; align-items: center; gap: 6px; padding: 8px 0 2px; color: var(--partner-text-secondary); font-size: var(--partner-font-body); font-weight: 610; list-style: none; cursor: pointer; }\n.dsh-partner-profile-pending > summary::-webkit-details-marker, .dsh-partner-memory-evidence > summary::-webkit-details-marker { display: none; }\n.dsh-partner-profile-pending > summary::before, .dsh-partner-memory-evidence > summary::before { display: inline-block; color: var(--partner-text-tertiary); font-size: 10px; content: '\u203A'; transform: rotate(0); transition: transform 160ms var(--partner-ease-out); }\n.dsh-partner-profile-pending[open] > summary::before, .dsh-partner-memory-evidence[open] > summary::before { transform: rotate(90deg); }\n.dsh-partner-profile-pending > summary b { margin-left: 4px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-memory-evidence { margin-top: 2px; border-top: 1px solid var(--partner-separator); }\n.dsh-partner-memory-evidence > summary { display: flex; min-height: 34px; align-items: center; gap: 5px; padding-top: 6px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); list-style: none; cursor: pointer; }\n.dsh-partner-memory-evidence > summary b { margin-left: 3px; font-weight: 620; }\n.dsh-partner-memory-evidence > div { display: grid; gap: 7px; padding-top: 9px; }\n.dsh-partner-memory-evidence blockquote { margin: 0; padding: 9px 11px; border-left: 2px solid var(--partner-border); color: var(--partner-text-secondary); background: color-mix(in srgb, var(--partner-control) 50%, transparent); }\n.dsh-partner-memory-evidence blockquote p { margin: 0; font-size: var(--partner-font-caption); line-height: 1.55; }\n.dsh-partner-memory-evidence blockquote time { display: block; margin-top: 5px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-memory-editor { display: grid; gap: 9px; }\n.dsh-partner-memory-editor input, .dsh-partner-memory-editor textarea { box-sizing: border-box; width: 100%; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--partner-text); outline: none; background: var(--partner-control); font: 500 var(--partner-font-caption)/1.5 var(--partner-font-family); }\n.dsh-partner-memory-editor input { min-height: 32px; padding: 0 10px; }\n.dsh-partner-memory-editor textarea { min-height: 76px; padding: 8px 10px; resize: vertical; }\n.dsh-partner-memory-editor input:focus, .dsh-partner-memory-editor textarea:focus { border-color: color-mix(in srgb, var(--partner-accent) 48%, var(--partner-border)); box-shadow: 0 0 0 2px color-mix(in srgb, var(--partner-accent) 8%, transparent); }\n.dsh-partner-memory-editor footer { display: flex; justify-content: flex-end; gap: 7px; }\n.dsh-partner-memory-editor button { min-height: 28px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-memory-editor button.is-primary { border-color: transparent; color: var(--partner-on-accent); background: var(--partner-accent-strong); }\n.dsh-partner-diary-detail { display: grid; align-content: start; gap: 20px; }\n.dsh-partner-diary-detail > header { display: grid; gap: 5px; padding-bottom: 16px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-diary-detail > header time { color: var(--partner-accent); font: 600 var(--partner-font-caption)/1 var(--partner-font-family); font-variant-numeric: tabular-nums; }\n.dsh-partner-diary-detail > header strong { font-size: var(--partner-font-title); letter-spacing: -.02em; }\n.dsh-partner-diary-detail > header small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-diary-detail > p { margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.75; text-wrap: pretty; }\n.dsh-partner-diary-detail > section { display: grid; gap: 8px; }\n.dsh-partner-diary-detail > section > strong { color: var(--partner-accent-strong); font-size: var(--partner-font-caption); }\n.dsh-partner-diary-detail ul { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }\n.dsh-partner-diary-detail li { position: relative; padding-left: 12px; color: var(--partner-text-secondary); font-size: var(--partner-font-caption); line-height: 1.55; }\n.dsh-partner-diary-detail li::before { position: absolute; top: .62em; left: 1px; width: 3px; height: 3px; border-radius: 50%; background: var(--partner-accent); content: ''; }\n.dsh-partner-graph-audit { min-height: 0; }\n.dsh-partner-graph-toolbar { display: flex; min-height: 78px; align-items: center; justify-content: space-between; gap: 20px; padding: 13px 18px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-graph-toolbar > span { display: grid; min-width: 0; gap: 3px; }\n.dsh-partner-graph-toolbar > span small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 650; letter-spacing: .1em; }\n.dsh-partner-graph-toolbar > span strong { overflow: hidden; font-size: var(--partner-font-label); font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-graph-toolbar > span p { margin: 0; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-toolbar > label { display: grid; flex: 0 1 220px; gap: 4px; }\n.dsh-partner-graph-toolbar > label > span { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-toolbar select { width: 100%; height: 34px; padding: 0 30px 0 10px; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--partner-text); background-color: var(--partner-control); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-filters { display: flex; min-width: 0; gap: 4px; min-height: 45px; align-items: center; padding: 7px 12px; overflow-x: auto; border-bottom: 1px solid var(--partner-border); scrollbar-width: none; }\n.dsh-partner-graph-filters::-webkit-scrollbar { display: none; }\n.dsh-partner-graph-filters button { flex: none; min-height: 30px; padding: 0 9px; border: 1px solid transparent; border-radius: 8px; color: var(--partner-text-tertiary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; transition: color 140ms ease, background-color 140ms ease, border-color 140ms ease; }\n.dsh-partner-graph-filters button:hover { color: var(--partner-text); background: var(--partner-hover); }\n.dsh-partner-graph-filters button.is-active { border-color: var(--partner-border); color: var(--partner-text); background: var(--partner-selected); box-shadow: inset 0 1px 0 var(--partner-glass-highlight); }\n.dsh-partner-graph-filters b { margin-left: 3px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-variant-numeric: tabular-nums; }\n.dsh-partner-graph-browser { display: grid; grid-template-columns: minmax(270px, 33%) minmax(0, 1fr); height: clamp(430px, 56vh, 620px); min-height: 0; overflow: hidden; }\n.dsh-partner-graph-index { min-height: 0; overflow-x: hidden; overflow-y: auto; border-right: 1px solid var(--partner-border); scrollbar-gutter: stable; }\n.dsh-partner-graph-index > button { display: grid; width: 100%; gap: 5px; padding: 12px 14px; border: 0; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 70%, transparent); color: inherit; background: transparent; text-align: left; cursor: pointer; transition: background-color 150ms ease, box-shadow 180ms var(--partner-ease-out); }\n.dsh-partner-graph-index > button:hover { background: var(--partner-hover); }\n.dsh-partner-graph-index > button.is-active { background: var(--partner-selected); box-shadow: inset 2px 0 var(--partner-accent-strong); }\n.dsh-partner-graph-index > button > span { width: max-content; padding: 3px 6px; border: 1px solid var(--partner-border); border-radius: 6px; color: var(--partner-text-secondary); background: var(--partner-glass-clear); font-size: var(--partner-font-caption); font-weight: 630; }\n.dsh-partner-graph-index > button[data-kind=\"conflicts_with\"] > span { color: var(--partner-danger); border-color: color-mix(in srgb, var(--partner-danger) 26%, var(--partner-border)); }\n.dsh-partner-graph-index strong { overflow: hidden; font-size: var(--partner-font-body); font-weight: 620; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-graph-index strong i { color: var(--partner-text-tertiary); font-style: normal; }\n.dsh-partner-graph-index p { display: -webkit-box; margin: 0; overflow: hidden; color: var(--partner-text-secondary); font-size: var(--partner-font-caption); line-height: 1.5; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }\n.dsh-partner-graph-index small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-stage { min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; padding: 24px clamp(20px, 3vw, 36px) 40px; scrollbar-gutter: stable; }\n.dsh-partner-graph-stage > article { display: grid; gap: 20px; animation: dsh-partner-content-enter 220ms var(--partner-ease-out) both; }\n.dsh-partner-graph-stage > article > header { display: grid; gap: 6px; padding-bottom: 18px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-graph-stage > article > header > span { width: max-content; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 650; letter-spacing: .06em; }\n.dsh-partner-graph-stage > article[data-kind=\"conflicts_with\"] > header > span { color: var(--partner-danger); }\n.dsh-partner-graph-stage > article > header > strong { font-size: var(--partner-font-title); font-weight: 650; letter-spacing: -.025em; }\n.dsh-partner-graph-stage > article > header > strong i { color: var(--partner-text-tertiary); font-style: normal; font-weight: 450; }\n.dsh-partner-graph-stage > article > header > p { max-width: 68ch; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.65; }\n.dsh-partner-graph-stage > article > header > small { max-width: 72ch; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.55; }\n.dsh-partner-graph-pair { display: grid; grid-template-columns: minmax(0, 1fr) 64px minmax(0, 1fr); align-items: stretch; }\n.dsh-partner-graph-pair > section { display: grid; align-content: start; gap: 9px; min-height: 170px; padding: 15px; border: 1px solid var(--partner-border); border-radius: 13px; }\n.dsh-partner-graph-pair > section > header { display: grid; gap: 3px; }\n.dsh-partner-graph-pair > section small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-pair > section strong { font-size: var(--partner-font-label); font-weight: 640; }\n.dsh-partner-graph-pair > section p { margin: 0 0 8px; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.6; overflow-wrap: anywhere; }\n.dsh-partner-graph-pair > section button { width: max-content; min-height: 30px; margin-top: auto; padding: 0 9px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: var(--partner-control); font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-graph-pair > section button:hover { color: var(--partner-text); background: var(--partner-hover); }\n.dsh-partner-graph-pair > div { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-pair > div i { height: 1px; background: var(--partner-border); }\n.dsh-partner-graph-pair > div span { padding: 0 5px; white-space: nowrap; }\n.dsh-partner-graph-stage > article > footer { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding-top: 2px; }\n.dsh-partner-graph-stage > article > footer small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-stage > article > footer > strong { color: var(--partner-text-secondary); font-size: var(--partner-font-body); font-variant-numeric: tabular-nums; }\n.dsh-partner-state { display: grid; place-items: center; align-content: center; min-height: 280px; padding: 30px; color: var(--partner-text-tertiary); text-align: center; }\n.dsh-partner-state > svg { margin-bottom: 10px; color: var(--partner-accent); }\n.dsh-partner-state strong { color: var(--partner-text-secondary); font-size: var(--partner-font-label); }\n.dsh-partner-state p { max-width: 330px; margin: 7px 0 14px; font-size: var(--partner-font-body); line-height: 1.55; }\n.dsh-partner-state.is-compact { min-height: 130px; }\n\n/* One material contract for every card surface in the partner workspace.\n Individual components own layout and state; this layer owns glass, edge\n refraction and elevation so visual treatment cannot drift between tabs. */\n:is(\n .dsh-partner-home-details > section,\n .dsh-partner-capabilities button,\n .dsh-partner-weixin-connect,\n .dsh-partner-qr,\n .dsh-partner-channel-card,\n .dsh-partner-metrics article,\n .dsh-partner-automation,\n .dsh-partner-concern-board,\n .dsh-partner-memory-library,\n .dsh-partner-graph-pair > section\n) {\n border-color: var(--partner-border);\n background:\n linear-gradient(118deg, color-mix(in srgb, var(--partner-card-highlight) 18%, transparent), transparent 56%),\n var(--partner-card-surface);\n box-shadow: var(--partner-card-shadow);\n}\n\n/* Editable controls share one compact translucent material. Keeping this\n separate from cards preserves hierarchy while preventing theme defaults or\n platform form colors from leaking into the workspace. */\n:is(\n .dsh-partner-field input,\n .dsh-partner-field textarea,\n .dsh-partner-field select,\n .dsh-partner-review-policy select,\n .dsh-partner-concern-compose input,\n .dsh-partner-library-tools input,\n .dsh-partner-memory-editor input,\n .dsh-partner-memory-editor textarea,\n .dsh-partner-graph-toolbar select\n) {\n background-color: var(--partner-control);\n box-shadow:\n inset 0 1px 0 color-mix(in srgb, var(--partner-card-highlight) 54%, transparent),\n inset 0 -1px 0 var(--partner-glass-rim-shadow);\n}\n\n:is(\n .dsh-partner-field input,\n .dsh-partner-field textarea,\n .dsh-partner-field select,\n .dsh-partner-review-policy select,\n .dsh-partner-concern-compose input,\n .dsh-partner-library-tools input,\n .dsh-partner-memory-editor input,\n .dsh-partner-memory-editor textarea,\n .dsh-partner-graph-toolbar select\n):focus {\n border-color: var(--partner-focus-ring);\n background-color: var(--partner-raised);\n box-shadow:\n 0 0 0 3px color-mix(in srgb, var(--partner-focus-ring) 16%, transparent),\n inset 0 1px 0 color-mix(in srgb, var(--partner-card-highlight) 66%, transparent);\n}\n\n.dsh-partner-concern-decision {\n background: color-mix(in srgb, var(--partner-card-surface) 76%, transparent);\n box-shadow: inset 0 1px 0 color-mix(in srgb, var(--partner-card-highlight) 68%, transparent);\n}\n\n.dsh-partner-capabilities button.is-active {\n border-color: color-mix(in srgb, var(--partner-text) 24%, var(--partner-border));\n background:\n linear-gradient(145deg, color-mix(in srgb, var(--partner-card-highlight) 46%, transparent), transparent 58%),\n color-mix(in srgb, var(--partner-card-surface) 90%, var(--partner-card-highlight) 10%);\n box-shadow: var(--partner-card-shadow), inset 2px 0 var(--partner-text-secondary);\n}\n\n/* Shared motion and material contract. Business components keep their own\n layout while interactive surfaces receive one consistent physical response. */\n:is(\n .dsh-partner-home-channel-actions button,\n .dsh-partner-form-actions > button,\n .dsh-partner-state > button,\n .dsh-partner-weixin-connect > button,\n .dsh-partner-pairings button.is-primary,\n .dsh-partner-automation-actions button.is-primary,\n .dsh-partner-concern-compose button.is-primary,\n .dsh-partner-memory-editor button.is-primary\n) {\n position: relative;\n isolation: isolate;\n overflow: hidden;\n}\n\n:is(\n .dsh-partner-home-channel-actions button,\n .dsh-partner-form-actions > button,\n .dsh-partner-state > button,\n .dsh-partner-weixin-connect > button,\n .dsh-partner-pairings button.is-primary,\n .dsh-partner-automation-actions button.is-primary,\n .dsh-partner-concern-compose button.is-primary,\n .dsh-partner-memory-editor button.is-primary\n)::after {\n position: absolute;\n z-index: -1;\n top: -75%;\n bottom: -75%;\n left: -70%;\n width: 48%;\n border-radius: 45%;\n background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .24), transparent);\n opacity: 0;\n transform: skewX(-18deg) translate3d(0, 0, 0);\n pointer-events: none;\n transition: opacity 140ms ease, transform 680ms var(--partner-ease-out);\n content: \"\";\n}\n\n:is(\n .dsh-partner-home-channel-actions button,\n .dsh-partner-form-actions > button,\n .dsh-partner-state > button,\n .dsh-partner-weixin-connect > button,\n .dsh-partner-pairings button.is-primary,\n .dsh-partner-automation-actions button.is-primary,\n .dsh-partner-concern-compose button.is-primary,\n .dsh-partner-memory-editor button.is-primary\n):hover:not(:disabled)::after {\n opacity: 1;\n transform: skewX(-18deg) translate3d(360%, 0, 0);\n}\n\n:is(\n .dsh-partner-roster-title button,\n .dsh-partner-home-details header button,\n .dsh-partner-qr button,\n .dsh-partner-pairings button,\n .dsh-partner-session-list button,\n .dsh-partner-review-policy > button:last-child,\n .dsh-partner-automation-actions button,\n .dsh-partner-section-heading button,\n .dsh-partner-concern-actions button,\n .dsh-partner-concern-resolved button,\n .dsh-partner-memory-editor button,\n .dsh-partner-graph-pair > section button\n) {\n transition:\n color 140ms ease,\n border-color 140ms ease,\n background-color 140ms ease,\n box-shadow 180ms ease,\n transform 160ms var(--partner-ease-out);\n}\n\n:is(\n .dsh-partner-home-channel-actions button,\n .dsh-partner-form-actions > button,\n .dsh-partner-state > button,\n .dsh-partner-weixin-connect > button,\n .dsh-partner-pairings button,\n .dsh-partner-session-list button,\n .dsh-partner-review-policy > button:last-child,\n .dsh-partner-automation-actions button,\n .dsh-partner-section-heading button,\n .dsh-partner-concern-actions button,\n .dsh-partner-concern-resolved button,\n .dsh-partner-memory-editor button,\n .dsh-partner-graph-pair > section button\n):active:not(:disabled) {\n transform: scale(.97);\n}\n\n:is(.dsh-partner-library-list > button, .dsh-partner-graph-index > button):hover {\n border-color: var(--partner-border);\n background: var(--partner-hover);\n}\n\n.dsh-partner-home-details > section,\n.dsh-partner-metrics > article,\n.dsh-partner-automation-grid > section {\n animation: dsh-partner-item-enter 300ms var(--partner-ease-out) both;\n}\n.dsh-partner-home-details > section:nth-child(2),\n.dsh-partner-metrics > article:nth-child(2),\n.dsh-partner-automation-grid > section:nth-child(2) { animation-delay: 36ms; }\n.dsh-partner-home-details > section:nth-child(3),\n.dsh-partner-metrics > article:nth-child(3) { animation-delay: 72ms; }\n\n@keyframes dsh-partner-content-enter {\n from { opacity: 0; transform: translate3d(0, 6px, 0); }\n to { opacity: 1; transform: translate3d(0, 0, 0); }\n}\n@keyframes dsh-partner-item-enter {\n from { opacity: 0; transform: translate3d(0, 8px, 0) scale(.99); }\n to { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }\n}\n\n@media (prefers-reduced-transparency: reduce) {\n :is(.dsh-partner-sidebar, .dsh-partner-workspace) {\n --partner-canvas: var(--partner-solid-canvas);\n --partner-surface: var(--partner-solid-panel);\n --partner-pane: var(--partner-solid-panel);\n --partner-raised: var(--partner-solid-raised);\n --partner-control: var(--partner-solid-control);\n --partner-card-surface: var(--partner-solid-raised);\n }\n .dsh-partner-topbar,\n .dsh-partner-roster,\n .dsh-partner-stage,\n .dsh-partner-home-channel,\n .dsh-partner-home-details > section,\n .dsh-partner-capabilities button,\n .dsh-partner-weixin-connect,\n .dsh-partner-qr,\n .dsh-partner-channel-card,\n .dsh-partner-metrics article,\n .dsh-partner-automation,\n .dsh-partner-concern-board,\n .dsh-partner-memory-library,\n .dsh-partner-graph-pair > section { -webkit-backdrop-filter: none; backdrop-filter: none; }\n .dsh-partner-glass-surface { -webkit-backdrop-filter: none; backdrop-filter: none; }\n}\n\n@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {\n :is(.dsh-partner-sidebar, .dsh-partner-workspace) {\n --partner-canvas: var(--partner-solid-canvas);\n --partner-surface: var(--partner-solid-panel);\n --partner-pane: var(--partner-solid-panel);\n --partner-raised: var(--partner-solid-raised);\n --partner-control: var(--partner-solid-control);\n --partner-card-surface: var(--partner-solid-raised);\n }\n}\n\n@container partner-memory (max-width: 980px) {\n .dsh-partner-automation-grid { grid-template-columns: minmax(0, 1fr); }\n}\n\n@container partner-memory (max-width: 640px) {\n .dsh-partner-automation-fields.is-heartbeat { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n .dsh-partner-automation-fields.is-memory-model { grid-template-columns: minmax(0, 1fr); }\n .dsh-partner-review-policy { grid-template-columns: auto minmax(0, 1fr); }\n .dsh-partner-review-policy > label,\n .dsh-partner-review-policy > button:last-child { grid-column: span 1; }\n .dsh-partner-concern-board > header p { display: none; }\n .dsh-partner-concern-row { grid-template-columns: minmax(0, 1fr) auto 14px; gap: 7px; }\n .dsh-partner-concern-state { grid-column: 1; }\n .dsh-partner-concern-copy { grid-row: 2; grid-column: 1 / -1; padding-left: 13px; }\n .dsh-partner-concern-time { grid-row: 1; grid-column: 2; }\n .dsh-partner-concern-row > svg { grid-row: 1; grid-column: 3; }\n .dsh-partner-concern-detail { padding: 0 12px 11px 25px; }\n .dsh-partner-concern-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n\n@media (max-width: 1080px) {\n .dsh-partner-grid { grid-template-columns: 190px minmax(400px, 1fr); }\n .dsh-partner-home-channel { grid-template-columns: minmax(190px, .7fr) minmax(300px, 1.3fr); }\n .dsh-partner-home-channel-copy { padding-right: 26px; }\n}\n@media (max-width: 760px) {\n .dsh-partner-grid { grid-template-columns: 1fr; }\n .dsh-partner-roster { display: none; }\n .dsh-partner-identity { padding-inline: 16px; }\n .dsh-partner-tabs { margin-inline: 12px; overflow-x: auto; }\n .dsh-partner-tabs button { flex: none; }\n .dsh-partner-stage-scroll { padding: 19px 16px 38px; }\n .dsh-partner-fields.two,\n .dsh-partner-capabilities,\n .dsh-partner-metrics { grid-template-columns: 1fr; }\n .dsh-partner-home-heading { display: grid; gap: 8px; }\n .dsh-partner-home-heading p { text-align: left; }\n .dsh-partner-home-channel { grid-template-columns: 1fr; }\n .dsh-partner-home-route { min-height: 128px; padding-bottom: 10px; }\n .dsh-partner-home-channel-copy { padding: 12px 22px 24px; }\n .dsh-partner-home-details { grid-template-columns: 1fr; }\n .dsh-partner-home-profile { grid-row: auto; }\n .dsh-partner-weixin-connect { grid-template-columns: 52px 1fr; }\n .dsh-partner-weixin-connect > button { grid-column: 1 / -1; }\n .dsh-partner-qr { grid-template-columns: 1fr; justify-items: center; text-align: center; }\n .dsh-partner-qr > span { justify-items: center; }\n .dsh-partner-channel-card { grid-template-columns: 45px minmax(0, 1fr) auto; }\n .dsh-partner-channel-card > .dsh-partner-status { display: none; }\n .dsh-partner-library-header { display: grid; gap: 0; }\n .dsh-partner-library-header nav { min-height: 38px; }\n .dsh-partner-library-tools { display: grid; }\n .dsh-partner-library-tools > label { width: 100%; }\n .dsh-partner-library-browser { grid-template-columns: 1fr; height: auto; overflow: visible; }\n .dsh-partner-library-list { max-height: 300px; border-right: 0; border-bottom: 1px solid var(--partner-border); }\n .dsh-partner-library-detail { min-height: 280px; }\n .dsh-partner-profile-browser { grid-template-columns: 1fr; height: auto; overflow: visible; }\n .dsh-partner-profile-people { max-height: 240px; border-right: 0; border-bottom: 1px solid var(--partner-border); }\n .dsh-partner-profile-stage { min-height: 330px; }\n .dsh-partner-profile-heading { display: grid; }\n .dsh-partner-profile-heading > div { width: max-content; }\n .dsh-partner-profile-meta { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n .dsh-partner-profile-meta > span:nth-child(3) { padding-left: 0; border-left: 0; }\n .dsh-partner-graph-toolbar { display: grid; min-height: 0; gap: 12px; }\n .dsh-partner-graph-toolbar > label { width: 100%; }\n .dsh-partner-graph-browser { grid-template-columns: 1fr; height: auto; }\n .dsh-partner-graph-index { max-height: 280px; border-right: 0; border-bottom: 1px solid var(--partner-border); }\n .dsh-partner-graph-stage { min-height: 320px; }\n .dsh-partner-graph-pair { grid-template-columns: 1fr; gap: 9px; }\n .dsh-partner-graph-pair > div { min-height: 20px; grid-template-columns: 1fr auto 1fr; }\n .dsh-partner-graph-stage > article > footer { display: grid; gap: 4px; }\n}\n@media (prefers-reduced-motion: reduce) {\n .dsh-partner-workspace *,\n .dsh-partner-sidebar * { scroll-behavior: auto !important; transition-duration: .01ms !important; animation-duration: .01ms !important; }\n}\n", "export const PARTNER_API = '/partner-local/v1'\n\nexport type Capability = 'knowledge' | 'skills' | 'ssh' | 'git'\nexport interface AutomationView {\n memory: { enabled: boolean; retentionDays: number; provider?: string; model?: string; dailyReviewEnabled: boolean; dailyReviewHour: number }\n heartbeat: { enabled: boolean; intervalMinutes: number; quietStartHour: number; quietEndHour: number; dailyLimit: number }\n}\nexport interface CompanionView {\n id: string; name: string; role: string; description: string; instructions: string\n presetId?: string; provider?: string; model?: string; capabilities: Capability[]\n createdAt: number; updatedAt: number\n automation: AutomationView\n}\nexport interface ChannelView {\n id: string; companionId: string; accountId: string; name: string; enabled: boolean\n createdAt: number; updatedAt: number; runtimeStatus: 'stopped' | 'starting' | 'running' | 'error'\n lastError?: string; credentialConfigured: boolean\n}\nexport interface PairingView {\n id: string; channelId: string; userId: string; displayName: string\n status: 'pending' | 'approved' | 'blocked'; createdAt: number; updatedAt: number\n}\nexport interface ChannelSessionView {\n id: string; channelId: string; userId: string; companionId: string; sessionId: string; cwd?: string; lastMessageAt: number; archived: boolean\n}\nexport interface HeartbeatStateView {\n companionId: string; lastCheckedAt?: number; lastSentAt?: number; nextCheckAt: number\n sentDay: string; sentCount: number; consecutiveFailures: number; lastError?: string\n}\nexport type MemoryKindView = 'profile' | 'preference' | 'task' | 'event' | 'relationship' | 'emotion'\nexport interface MemoryEvidenceView { turnId: string; at: number; excerpt: string }\nexport interface MemoryView { id: string; scopeId: string; kind: MemoryKindView; subject: string; content: string; status: 'active' | 'completed' | 'superseded' | 'expired'; confidence: number; importance: number; updatedAt: number; locked?: boolean; evidence: MemoryEvidenceView[] }\nexport interface UserProfileSnapshotView { scopeId: string; label: string; version: string; updatedAt?: number; entries: MemoryView[]; evidenceCount: number; lockedCount: number }\nexport interface MemoryRelationView { id: string; scopeId: string; sourceMemoryId: string; targetMemoryId: string; kind: 'supports' | 'depends_on' | 'about' | 'conflicts_with' | 'follows'; label: string; confidence: number; updatedAt: number }\nexport interface MemoryGraphView { memories: MemoryView[]; relations: MemoryRelationView[] }\nexport interface DailyReflectionView { date: string; summary: string; events: string[]; openTasks: string[]; completedTasks: string[]; learnings: string[]; updatedAt: number; turnCount: number }\nexport interface ConcernView {\n id: string; subject: string; reason: string; origin: 'explicit' | 'implicit'; state: 'active' | 'watching' | 'snoozed' | 'resolved' | 'archived'\n priority: number; confidence: number; score: number; watchKind: 'auto' | 'knowledge' | 'workspace' | 'web'; updatedAt: number; nextCheckAt: number; lastCheckedAt?: number\n resources: Array<{ kind: 'file' | 'knowledge'; locator: string; label: string }>\n}\nexport interface ConcernObservationView {\n id: string; concernId: string; event: string; evidence: string; source: string; interruptScore: number\n decision: 'drop' | 'remember' | 'defer' | 'feed' | 'notify'; notificationRuleEffect: 'auto' | 'notify' | 'suppress'\n notificationRuleReason: string; decisionReason: string; createdAt: number; mentionedAt?: number\n}\nexport interface ConcernActivityView { concerns: ConcernView[]; observations: ConcernObservationView[] }\nexport interface ConcernSourceView { kind: 'file' | 'knowledge'; label: string; detail: string; token: string }\nexport interface PresetView { id: string; name: string; broken?: string }\nexport interface ModelCatalogView { providers: Array<{ id: string; name: string; models: Array<{ id: string; name: string }> }>; defaultSelection: { provider: string; model: string } }\nexport interface PartnerSnapshot {\n companions: CompanionView[]; channels: ChannelView[]; pairings: PairingView[]; sessions: ChannelSessionView[]; heartbeatStates: HeartbeatStateView[]; presets: PresetView[]\n}\nexport interface LoginView {\n id: string; companionId: string; phase: 'waiting' | 'scanned' | 'confirmed' | 'expired' | 'error'\n qrContent?: string; accountId?: string; baseUrl?: string; error?: string; expiresAt: number\n}\n\nexport async function api<T>(path = '', init: RequestInit = {}): Promise<T> {\n const method = init.method ?? 'GET'\n const response = await fetch(`${PARTNER_API}${path}`, {\n ...init,\n headers: {\n Accept: 'application/json',\n ...(method === 'GET' ? {} : { 'Content-Type': 'application/json', 'X-DSH-Partner-Request': '1' }),\n ...init.headers,\n },\n })\n if (response.status === 204) return undefined as T\n const body = await response.json().catch(() => ({})) as Record<string, unknown>\n if (!response.ok) throw new Error(typeof body.error === 'string' ? body.error : `HTTP ${response.status}`)\n return body as T\n}\n\nexport function loadPartner(): Promise<PartnerSnapshot> { return api() }\n", "import { useEffect, type RefObject } from 'react'\n\nexport function useWorkspaceTopAnchor(ref: RefObject<HTMLElement>): void {\n useEffect(() => {\n const element = ref.current\n const originalParent = element?.parentElement\n if (!element || !originalParent) return\n let moved = false\n let observer: MutationObserver | undefined\n const place = (): boolean => {\n let ancestor: HTMLElement | null = element.parentElement\n while (ancestor && ancestor !== document.body) {\n const candidate = ancestor.previousElementSibling\n if (candidate instanceof HTMLElement) {\n const style = getComputedStyle(candidate)\n if (style.display === 'flex' && style.flexDirection === 'column' && Number.parseFloat(style.flexGrow) > 0) {\n candidate.insertBefore(element, candidate.firstChild)\n moved = true\n return true\n }\n }\n ancestor = ancestor.parentElement\n }\n return false\n }\n if (!place()) {\n observer = new MutationObserver(() => { if (place()) observer?.disconnect() })\n observer.observe(document.body, { childList: true, subtree: true })\n }\n return () => {\n observer?.disconnect()\n if (moved && originalParent.isConnected) originalParent.append(element)\n }\n }, [ref])\n}\n", "export function futureTime(value: number, now = Date.now()): string {\n const minutes = Math.ceil((value - now) / 60_000)\n if (minutes <= 0) return '\u5373\u5C06\u68C0\u67E5'\n if (minutes < 60) return `${minutes} \u5206\u949F\u540E`\n const hours = Math.ceil(minutes / 60)\n if (hours < 24) return `${hours} \u5C0F\u65F6\u540E`\n const days = Math.ceil(hours / 24)\n if (days <= 7) return `${days} \u5929\u540E`\n const date = new Date(value)\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n const hour = String(date.getHours()).padStart(2, '0')\n const minute = String(date.getMinutes()).padStart(2, '0')\n return `${month}/${day} ${hour}:${minute}`\n}\n", "import {\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\n\ntype GlassElement = 'header' | 'aside' | 'section' | 'article' | 'div' | 'button'\n\ninterface GlassSurfaceProps extends Omit<HTMLAttributes<HTMLElement>, 'children' | 'className'> {\n as: GlassElement\n children: ReactNode\n className: string\n borderRadius: number\n borderWidth?: number\n brightness?: number\n blur?: number\n distortionScale?: number\n interactive?: boolean\n opacity?: number\n saturation?: number\n type?: 'button' | 'submit' | 'reset'\n disabled?: boolean\n}\n\ninterface GlassStyle extends CSSProperties {\n '--partner-glass-filter-id': string\n '--partner-glass-saturation': number\n '--partner-glare-x': string\n '--partner-glare-y': string\n}\n\nfunction supportsSvgBackdropFilter(filterId: string): boolean {\n if (typeof window === 'undefined' || typeof document === 'undefined') return false\n if (window.matchMedia('(prefers-reduced-transparency: reduce)').matches) return false\n const userAgent = navigator.userAgent\n if (/Firefox/i.test(userAgent) || (/Safari/i.test(userAgent) && !/(Chrome|Chromium|CriOS)/i.test(userAgent))) return false\n const probe = document.createElement('div')\n probe.style.backdropFilter = `url(#${filterId})`\n return probe.style.backdropFilter !== ''\n}\n\nfunction displacementMap(\n width: number,\n height: number,\n radius: number,\n borderWidth: number,\n brightness: number,\n opacity: number,\n blur: number,\n redGradientId: string,\n blueGradientId: string,\n): string {\n const edge = Math.max(1, Math.min(width, height) * borderWidth * .5)\n const innerWidth = Math.max(1, width - edge * 2)\n const innerHeight = Math.max(1, height - edge * 2)\n const svg = `<svg viewBox=\"0 0 ${width} ${height}\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <linearGradient id=\"${redGradientId}\" x1=\"100%\" y1=\"0%\" x2=\"0%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"#0000\"/><stop offset=\"100%\" stop-color=\"red\"/></linearGradient>\n <linearGradient id=\"${blueGradientId}\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\"><stop offset=\"0%\" stop-color=\"#0000\"/><stop offset=\"100%\" stop-color=\"blue\"/></linearGradient>\n </defs>\n <rect width=\"${width}\" height=\"${height}\" fill=\"black\"/>\n <rect width=\"${width}\" height=\"${height}\" rx=\"${radius}\" fill=\"url(#${redGradientId})\"/>\n <rect width=\"${width}\" height=\"${height}\" rx=\"${radius}\" fill=\"url(#${blueGradientId})\" style=\"mix-blend-mode:difference\"/>\n <rect x=\"${edge}\" y=\"${edge}\" width=\"${innerWidth}\" height=\"${innerHeight}\" rx=\"${radius}\" fill=\"hsl(0 0% ${brightness}% / ${opacity})\" style=\"filter:blur(${blur}px)\"/>\n </svg>`\n return `data:image/svg+xml,${encodeURIComponent(svg)}`\n}\n\nexport function GlassSurface({\n as: Element,\n children,\n className,\n borderRadius,\n borderWidth = .07,\n brightness = 50,\n blur = 11,\n distortionScale = -26,\n interactive = false,\n opacity = .93,\n saturation = 1.16,\n ...elementProps\n}: GlassSurfaceProps): JSX.Element {\n const uniqueId = useId().replace(/:/g, '-')\n const filterId = `partner-glass-filter-${uniqueId}`\n const redGradientId = `partner-glass-red-${uniqueId}`\n const blueGradientId = `partner-glass-blue-${uniqueId}`\n const containerRef = useRef<HTMLElement>(null)\n const imageRef = useRef<SVGFEImageElement>(null)\n const redRef = useRef<SVGFEDisplacementMapElement>(null)\n const greenRef = useRef<SVGFEDisplacementMapElement>(null)\n const blueRef = useRef<SVGFEDisplacementMapElement>(null)\n const glareFrameRef = useRef(0)\n const glarePositionRef = useRef({ x: 50, y: 50 })\n const [svgSupported, setSvgSupported] = useState(false)\n\n useEffect(() => {\n setSvgSupported(supportsSvgBackdropFilter(filterId))\n }, [filterId])\n\n useEffect(() => {\n const element = containerRef.current\n const image = imageRef.current\n if (element === null || image === null) return\n let frame = 0\n const update = (): void => {\n frame = 0\n const rect = element.getBoundingClientRect()\n const width = Math.max(1, Math.round(rect.width))\n const height = Math.max(1, Math.round(rect.height))\n image.setAttribute('href', displacementMap(\n width,\n height,\n Math.min(borderRadius, Math.min(width, height) / 2),\n borderWidth,\n brightness,\n opacity,\n blur,\n redGradientId,\n blueGradientId,\n ))\n }\n const schedule = (): void => {\n if (frame === 0) frame = requestAnimationFrame(update)\n }\n const observer = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(schedule)\n observer?.observe(element)\n schedule()\n return () => {\n if (frame !== 0) cancelAnimationFrame(frame)\n observer?.disconnect()\n }\n }, [blueGradientId, blur, borderRadius, borderWidth, brightness, opacity, redGradientId])\n\n useEffect(() => {\n const channels = [redRef.current, greenRef.current, blueRef.current]\n const offsets = [0, 5, 10]\n channels.forEach((channel, index) => channel?.setAttribute('scale', String(distortionScale + (offsets[index] ?? 0))))\n }, [distortionScale])\n\n useEffect(() => () => {\n if (glareFrameRef.current !== 0) cancelAnimationFrame(glareFrameRef.current)\n }, [])\n\n const renderGlare = (): void => {\n glareFrameRef.current = 0\n const element = containerRef.current\n if (element === null) return\n element.style.setProperty('--partner-glare-x', `${glarePositionRef.current.x}%`)\n element.style.setProperty('--partner-glare-y', `${glarePositionRef.current.y}%`)\n }\n const scheduleGlare = (): void => {\n if (glareFrameRef.current === 0) glareFrameRef.current = requestAnimationFrame(renderGlare)\n }\n const moveGlare = (clientX: number, clientY: number): void => {\n const element = containerRef.current\n if (!interactive || element === null) return\n const rect = element.getBoundingClientRect()\n glarePositionRef.current = {\n x: Math.max(0, Math.min(100, (clientX - rect.left) / rect.width * 100)),\n y: Math.max(0, Math.min(100, (clientY - rect.top) / rect.height * 100)),\n }\n scheduleGlare()\n }\n const resetGlare = (): void => {\n if (!interactive) return\n glarePositionRef.current = { x: 50, y: 50 }\n scheduleGlare()\n }\n\n const style: GlassStyle = {\n '--partner-glass-filter-id': `url(#${filterId})`,\n '--partner-glass-saturation': saturation,\n '--partner-glare-x': '50%',\n '--partner-glare-y': '50%',\n }\n\n return <Element\n {...elementProps}\n ref={containerRef as never}\n className={`dsh-partner-glass-surface ${svgSupported ? 'is-svg' : 'is-fallback'}${interactive ? ' is-interactive' : ''} ${className}`}\n style={style}\n onPointerMove={interactive ? event => moveGlare(event.clientX, event.clientY) : undefined}\n onPointerLeave={interactive ? resetGlare : undefined}\n >\n <svg className=\"dsh-partner-glass-filter\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\">\n <defs>\n <filter id={filterId} colorInterpolationFilters=\"sRGB\" x=\"0%\" y=\"0%\" width=\"100%\" height=\"100%\">\n <feImage ref={imageRef} x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\" result=\"map\" />\n <feDisplacementMap ref={redRef} in=\"SourceGraphic\" in2=\"map\" result=\"displaced-red\" />\n <feColorMatrix in=\"displaced-red\" type=\"matrix\" values=\"1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0\" result=\"red\" />\n <feDisplacementMap ref={greenRef} in=\"SourceGraphic\" in2=\"map\" result=\"displaced-green\" />\n <feColorMatrix in=\"displaced-green\" type=\"matrix\" values=\"0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0\" result=\"green\" />\n <feDisplacementMap ref={blueRef} in=\"SourceGraphic\" in2=\"map\" result=\"displaced-blue\" />\n <feColorMatrix in=\"displaced-blue\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\" result=\"blue\" />\n <feBlend in=\"red\" in2=\"green\" mode=\"screen\" result=\"red-green\" />\n <feBlend in=\"red-green\" in2=\"blue\" mode=\"screen\" result=\"output\" />\n <feGaussianBlur in=\"output\" stdDeviation=\".45\" />\n </filter>\n </defs>\n </svg>\n {children}\n </Element>\n}\n"],
5
- "mappings": "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CtG;AAAA,IACF;AAAA,EACF;AACF;AACA,UAAU,cAAc;;;AC5mCxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
4
+ "sourcesContent": ["import { useCallback, useEffect, useId, useMemo, useRef, useState, type FormEvent, type ReactNode } from 'react'\nimport type { ClientContext, ISessions, SessionId } from '@deepseek-ai/dsh-client-runtime/client'\nimport type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-layout/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-sidebar/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-theme/client'\nimport { activatePluginWorkspace, observePluginWorkspace } from './workspace-ownership.js'\nimport {\n IconAgentPresetOutline16, IconCheckOutline14, IconChevronDownOutline14, IconChevronLeftOutline14,\n IconDataOutline16, IconEditOutline16, IconLinkOutline16, IconPlusOutline16,\n IconRefreshOutline16, IconTrashOutline16, IconUserOutline16,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport { QRCodeSVG } from 'qrcode.react'\nimport cssText from './client.css'\nimport { api, loadPartner, type AutomationView, type Capability, type ChannelView, type CompanionView, type ConcernActivityView, type ConcernObservationView, type ConcernSourceView, type ConcernView, type DailyReflectionView, type LoginView, type MemoryGraphView, type MemoryRelationView, type MemoryView, type ModelCatalogView, type PartnerSnapshot, type UserProfileSnapshotView } from './client-api.js'\nimport { useWorkspaceTopAnchor } from './sidebar-anchor.js'\nimport { futureTime } from './time-format.js'\nimport { GlassSurface } from './glass-surface.js'\n\nconst PLUGIN_ID = '@lemoncat7/dsh-partner'\nconst STYLE_ID = `${PLUGIN_ID}/client`\ntype SidebarProps = PropsRuntime<'sidebar.footer.action'>\ntype ConversationProps = PropsRuntime<'conversation'>\ntype Tab = 'home' | 'identity' | 'capabilities' | 'weixin' | 'memory'\n\ninterface Controller {\n open(companionId?: string): void\n close(): void\n toggle(): void\n isOpen(): boolean\n selected(): string | undefined\n openSession(routeId: string, sessionId: string): Promise<void>\n renewSession(routeId: string): Promise<void>\n subscribe(listener: () => void): () => void\n}\n\nexport const inject = ['slots', 'layout', 'sessions']\n\nexport function apply(ctx: ClientContext): void {\n ctx.effect(installStyles, 'dsh-partner: styles')\n const controller = createController(ctx)\n ctx.effect(() => observePluginWorkspace(PLUGIN_ID, controller.close), 'dsh-partner: exclusive workspace')\n ctx.effect(() => () => controller.close(), 'dsh-partner: workspace lifecycle')\n ctx.slots.inject('sidebar.footer.action', () => ctx.slots.register({\n name: 'sidebar.footer.action', id: 'partner', order: -120,\n }, props => <PartnerSidebar {...props} controller={controller} collapse={() => ctx.layout.toggleSidebar()} />))\n}\n\nfunction createController(ctx: ClientContext): Controller {\n const listeners = new Set<() => void>()\n let selected: string | undefined\n let dispose: (() => void) | undefined\n const notify = (): void => { for (const listener of listeners) listener() }\n const controller: Controller = {\n open(companionId) {\n if (companionId !== undefined) selected = companionId\n if (dispose === undefined) {\n activatePluginWorkspace(PLUGIN_ID)\n dispose = ctx.slots.register({ name: 'conversation', priority: -3 }, props => <PartnerWorkspace {...props} controller={controller} />)\n }\n notify()\n },\n close() { const current = dispose; dispose = undefined; current?.(); notify() },\n toggle() { if (dispose === undefined) controller.open(); else controller.close() },\n isOpen: () => dispose !== undefined,\n selected: () => selected,\n async openSession(routeId, sessionId) {\n const prepared = await api<{ sessionId: string }>(`/sessions/${encodeURIComponent(routeId)}/prepare`, { method: 'POST' })\n if (prepared.sessionId !== sessionId) throw new Error('\u4F19\u4F34\u4F1A\u8BDD\u6807\u8BC6\u4E0D\u4E00\u81F4')\n await waitForClientSession(ctx, sessionId)\n controller.close()\n clientSessions(ctx).open(sessionId as SessionId)\n },\n async renewSession(routeId) {\n const renewed = await api<{ routeId: string; sessionId: string }>(`/sessions/${encodeURIComponent(routeId)}/renew`, { method: 'POST' })\n await waitForClientSession(ctx, renewed.sessionId)\n controller.close()\n clientSessions(ctx).open(renewed.sessionId as SessionId)\n },\n subscribe(listener) { listeners.add(listener); return () => listeners.delete(listener) },\n }\n return controller\n}\n\nfunction PartnerSidebar(props: SidebarProps & { controller: Controller; collapse(): void }): JSX.Element {\n const ref = useRef<HTMLElement>(null)\n useWorkspaceTopAnchor(ref)\n const [open, setOpen] = useState(true)\n const [snapshot, setSnapshot] = useState<PartnerSnapshot>()\n const [, update] = useState(0)\n useEffect(() => props.controller.subscribe(() => update(value => value + 1)), [props.controller])\n useEffect(() => { void loadPartner().then(setSnapshot).catch(() => {}) }, [props.controller.isOpen()])\n const launch = (id?: string): void => {\n props.controller.open(id)\n if (props.wide && window.matchMedia('(max-width: 820px)').matches) props.collapse()\n }\n if (!props.wide) return <section ref={ref} className=\"dsh-partner-sidebar is-rail\"><button type=\"button\" className={`dsh-partner-rail${props.controller.isOpen() ? ' is-active' : ''}`} title=\"\u4F19\u4F34\" onClick={() => props.controller.toggle()}><IconAgentPresetOutline16 size={18} /></button></section>\n return <section ref={ref} className=\"dsh-partner-sidebar\">\n <div className=\"dsh-partner-sidebar-heading\">\n <button type=\"button\" className=\"dsh-partner-sidebar-title\" aria-expanded={open} onClick={() => setOpen(value => !value)}><span data-open={open}><IconChevronDownOutline14 size={14} /></span>\u4F19\u4F34</button>\n <button type=\"button\" className=\"dsh-partner-sidebar-open\" onClick={() => launch()} aria-label=\"\u6253\u5F00\u4F19\u4F34\u9762\u677F\"><IconPlusOutline16 size={16} /></button>\n </div>\n <div className={`dsh-partner-sidebar-list${open ? ' is-open' : ''}`} aria-hidden={!open}>\n <div className=\"dsh-partner-sidebar-list-inner\">\n <button type=\"button\" tabIndex={open ? 0 : -1} className={`dsh-partner-sidebar-row${props.controller.isOpen() ? ' is-active' : ''}`} onClick={() => launch()}>\n <span className=\"dsh-partner-sidebar-symbol\"><IconAgentPresetOutline16 size={16} /></span><span><strong>\u4F19\u4F34\u9762\u677F</strong><small>{snapshot ? `${snapshot.companions.length} \u4F4D\u4F19\u4F34 \u00B7 ${snapshot.channels.filter(item => item.runtimeStatus === 'running').length} \u4E2A\u5FAE\u4FE1\u5728\u7EBF` : '\u8EAB\u4EFD\u3001\u80FD\u529B\u4E0E\u6E20\u9053'}</small></span><i className={snapshot?.channels.some(item => item.runtimeStatus === 'running') ? 'is-online' : ''} />\n </button>\n </div>\n </div>\n </section>\n}\n\nfunction PartnerWorkspace({ controller }: ConversationProps & { controller: Controller }): JSX.Element {\n const [snapshot, setSnapshot] = useState<PartnerSnapshot>()\n const [selectedId, setSelectedId] = useState(controller.selected())\n const [tab, setTab] = useState<Tab>('home')\n const [error, setError] = useState<string>()\n const [loading, setLoading] = useState(true)\n const refresh = useCallback(async () => {\n try {\n const next = await loadPartner()\n setSnapshot(next)\n setSelectedId(current => next.companions.some(item => item.id === current) ? current : next.companions[0]?.id)\n setError(undefined)\n } catch (reason) { setError(message(reason)) } finally { setLoading(false) }\n }, [])\n useEffect(() => { void refresh() }, [refresh])\n useEffect(() => controller.subscribe(() => { const next = controller.selected(); if (next) setSelectedId(next) }), [controller])\n const selected = snapshot?.companions.find(item => item.id === selectedId)\n const create = async (): Promise<void> => {\n try {\n const companion = await api<CompanionView>('/companions', { method: 'POST', body: JSON.stringify({ companion: {\n name: '\u65B0\u4F19\u4F34', role: '\u957F\u671F AI \u5DE5\u4F5C\u4F19\u4F34', description: '', instructions: '', capabilities: ['knowledge', 'skills'],\n } }) })\n await refresh(); setSelectedId(companion.id); setTab('identity')\n } catch (reason) { setError(message(reason)) }\n }\n const openSession = async (routeId: string, sessionId: string): Promise<void> => {\n try { setError(undefined); await controller.openSession(routeId, sessionId) }\n catch (reason) { setError(message(reason)) }\n }\n const renewSession = async (routeId: string): Promise<void> => {\n try { setError(undefined); await controller.renewSession(routeId) }\n catch (reason) { setError(message(reason)) }\n }\n return <main className=\"dsh-partner-workspace\">\n <header className=\"dsh-partner-topbar\"><div><button type=\"button\" data-xiaohei-workspace-close onClick={controller.close} aria-label=\"\u8FD4\u56DE\u4F1A\u8BDD\" title=\"\u8FD4\u56DE\u4F1A\u8BDD\"><IconChevronLeftOutline14 size={15} /></button><IconAgentPresetOutline16 size={18} /><span><strong>\u4F19\u4F34</strong><small>\u957F\u671F\u8EAB\u4EFD\u4E0E\u5FAE\u4FE1\u6E20\u9053</small></span></div></header>\n <div className=\"dsh-partner-grid\">\n <aside className=\"dsh-partner-roster\">\n <div className=\"dsh-partner-roster-title\"><span><small>COMPANIONS</small><strong>\u4F19\u4F34\u540D\u518C</strong></span><button type=\"button\" onClick={() => { void create() }} aria-label=\"\u65B0\u5EFA\u4F19\u4F34\"><IconPlusOutline16 size={16} /></button></div>\n <div className=\"dsh-partner-roster-list\">{snapshot?.companions.map(companion => {\n const channel = snapshot.channels.find(item => item.companionId === companion.id)\n return <button type=\"button\" key={companion.id} className={selectedId === companion.id ? 'is-active' : ''} onClick={() => { setSelectedId(companion.id); setTab('home') }}>\n <Avatar name={companion.name} /><span><strong>{companion.name}</strong><small>{companion.role}</small></span><i className={channel?.runtimeStatus === 'running' ? 'is-online' : ''} title={channel ? channel.runtimeStatus : '\u672A\u8FDE\u63A5\u6E20\u9053'} />\n </button>\n })}</div>\n <div className=\"dsh-partner-roster-note\"><IconLinkOutline16 size={16} /><span><strong>\u8EAB\u4EFD\u4E0E\u6E20\u9053\u5206\u79BB</strong><small>\u5FAE\u4FE1\u53EA\u8D1F\u8D23\u6536\u53D1\uFF0C\u6743\u9650\u4ECD\u7531 DSH \u5DE5\u5177\u51B3\u5B9A\u3002</small></span></div>\n </aside>\n <section className=\"dsh-partner-stage\">\n {loading ? <State title=\"\u6B63\u5728\u8BFB\u53D6\u4F19\u4F34\u2026\" /> : selected === undefined ? <State title=\"\u521B\u5EFA\u7B2C\u4E00\u4E2A\u4F19\u4F34\" detail=\"\u4F19\u4F34\u4F1A\u4FDD\u5B58\u72EC\u7ACB\u8EAB\u4EFD\u3001\u80FD\u529B\u548C\u5FAE\u4FE1\u4F1A\u8BDD\u3002\" action={<button onClick={() => { void create() }}>\u65B0\u5EFA\u4F19\u4F34</button>} /> : <>\n <div className=\"dsh-partner-identity\"><Avatar name={selected.name} /><span><small>ACTIVE COMPANION</small><h1>{selected.name}</h1><p>{selected.description || selected.role}</p></span><Status channel={snapshot?.channels.find(item => item.companionId === selected.id)} /></div>\n <nav className=\"dsh-partner-tabs\" aria-label=\"\u4F19\u4F34\u914D\u7F6E\">\n <TabButton active={tab === 'home'} onClick={() => setTab('home')} icon={<IconAgentPresetOutline16 size={16} />}>\u603B\u89C8</TabButton>\n <TabButton active={tab === 'identity'} onClick={() => setTab('identity')} icon={<IconEditOutline16 size={16} />}>\u8EAB\u4EFD</TabButton>\n <TabButton active={tab === 'capabilities'} onClick={() => setTab('capabilities')} icon={<IconAgentPresetOutline16 size={16} />}>\u80FD\u529B</TabButton>\n <TabButton active={tab === 'weixin'} onClick={() => setTab('weixin')} icon={<WeixinGlyph />}>\u5FAE\u4FE1</TabButton>\n <TabButton active={tab === 'memory'} onClick={() => setTab('memory')} icon={<IconDataOutline16 size={16} />}>\u8BB0\u5FC6</TabButton>\n </nav>\n <div className=\"dsh-partner-stage-scroll\">\n {tab === 'home' && <HomePanel companion={selected} snapshot={snapshot!} navigate={setTab} openSession={openSession} renewSession={renewSession} />}\n {tab === 'identity' && <IdentityEditor companion={selected} count={snapshot?.companions.length ?? 1} onChanged={refresh} />}\n {tab === 'capabilities' && <CapabilityEditor companion={selected} presets={snapshot?.presets ?? []} onChanged={refresh} />}\n {tab === 'weixin' && <WeixinPanel companion={selected} snapshot={snapshot!} onChanged={refresh} />}\n {tab === 'memory' && <MemoryPanel companion={selected} snapshot={snapshot!} openSession={openSession} renewSession={renewSession} onChanged={refresh} />}\n </div>\n </>}\n {error && <p className=\"dsh-partner-error\" role=\"alert\">{error}</p>}\n </section>\n </div>\n </main>\n}\n\nfunction HomePanel({ companion, snapshot, navigate, openSession, renewSession }: { companion: CompanionView; snapshot: PartnerSnapshot; navigate(tab: Tab): void; openSession(routeId: string, sessionId: string): Promise<void>; renewSession(routeId: string): Promise<void> }): JSX.Element {\n const channel = snapshot.channels.find(item => item.companionId === companion.id)\n const sessions = snapshot.sessions.filter(item => item.companionId === companion.id)\n const pending = channel ? snapshot.pairings.filter(item => item.channelId === channel.id && item.status === 'pending').length : 0\n const approved = channel ? snapshot.pairings.filter(item => item.channelId === channel.id && item.status === 'approved').length : 0\n const capabilities = companion.capabilities.map(item => ({ knowledge: '\u77E5\u8BC6\u5E93', skills: '\u6280\u80FD', ssh: 'SSH', git: 'Git' })[item])\n const online = channel?.runtimeStatus === 'running'\n const latestSession = sessions.reduce<(typeof sessions)[number] | undefined>((latest, item) => latest === undefined || item.lastMessageAt > latest.lastMessageAt ? item : latest, undefined)\n return <div className=\"dsh-partner-home\">\n <header className=\"dsh-partner-home-heading\">\n <span><small>\u5DE5\u4F5C\u53F0</small><h2>{online ? `${companion.name} \u6B63\u5728\u5FAE\u4FE1\u5F85\u547D` : `\u8FDE\u63A5 ${companion.name} \u7684\u7B2C\u4E00\u6761\u6E20\u9053`}</h2></span>\n <p>{online ? '\u6D88\u606F\u3001\u6388\u6743\u4E0E\u4E0A\u4E0B\u6587\u8FB9\u754C\u90FD\u5728\u8FD9\u91CC\u6C47\u603B\u3002' : '\u4F19\u4F34\u8EAB\u4EFD\u5DF2\u7ECF\u5C31\u7EEA\uFF0C\u8FDE\u63A5\u5FAE\u4FE1\u540E\u5373\u53EF\u5F00\u59CB\u6301\u7EED\u5DE5\u4F5C\u3002'}</p>\n </header>\n\n <GlassSurface as=\"section\" interactive className={`dsh-partner-home-channel${online ? ' is-online' : ''}`} borderRadius={20} distortionScale={-16} saturation={1.08}>\n <div className=\"dsh-partner-home-route\" aria-hidden=\"true\">\n <Avatar name={companion.name} />\n <span className=\"dsh-partner-route-line\"><i /></span>\n <span className=\"dsh-partner-route-weixin\"><WeixinGlyph large /></span>\n </div>\n <div className=\"dsh-partner-home-channel-copy\">\n <span className=\"dsh-partner-home-kicker\"><i />\u4E3B\u8981\u6E20\u9053 \u00B7 \u5FAE\u4FE1</span>\n <h3>{!channel ? '\u7B49\u5F85\u626B\u7801\u8FDE\u63A5' : online ? '\u8FDE\u63A5\u6B63\u5E38\uFF0C\u6B63\u5728\u63A5\u6536\u6D88\u606F' : channel.runtimeStatus === 'error' ? '\u6E20\u9053\u8FDE\u63A5\u9700\u8981\u5904\u7406' : '\u6E20\u9053\u5F53\u524D\u5DF2\u505C\u7528'}</h3>\n <p>{!channel ? '\u901A\u8FC7\u5FAE\u4FE1 iLink Bot \u63A5\u5165\u3002\u51ED\u636E\u53EA\u8FDB\u5165 DSH \u51ED\u636E\u5E93\uFF0C\u8054\u7CFB\u4EBA\u9996\u6B21\u53D1\u6D88\u606F\u4ECD\u9700\u4F60\u7684\u6279\u51C6\u3002' : online ? '\u6BCF\u4F4D\u8054\u7CFB\u4EBA\u62E5\u6709\u72EC\u7ACB DSH \u4F1A\u8BDD\uFF0C\u4F19\u4F34\u8EAB\u4EFD\u4E00\u81F4\uFF0C\u4F46\u4E0A\u4E0B\u6587\u4E0D\u4F1A\u4E92\u76F8\u6DF7\u5408\u3002' : channel.lastError || '\u6E20\u9053\u914D\u7F6E\u4ECD\u7136\u4FDD\u7559\uFF0C\u53EF\u4EE5\u968F\u65F6\u91CD\u65B0\u542F\u7528\u3002'}</p>\n <div className=\"dsh-partner-home-channel-actions\">\n <button type=\"button\" className=\"is-primary\" onClick={() => navigate('weixin')}>{!channel ? '\u8FDE\u63A5\u5FAE\u4FE1' : pending > 0 ? `\u5904\u7406 ${pending} \u4E2A\u8BF7\u6C42` : '\u7BA1\u7406\u6E20\u9053'}</button>\n <span>{!channel ? '\u626B\u7801\u5B8C\u6210\uFF0C\u65E0\u9700\u7C98\u8D34 Token' : `${approved} \u4F4D\u8054\u7CFB\u4EBA \u00B7 ${sessions.length} \u4E2A\u72EC\u7ACB\u4F1A\u8BDD`}</span>\n </div>\n </div>\n </GlassSurface>\n\n <div className=\"dsh-partner-home-details\">\n <GlassSurface as=\"section\" interactive className=\"dsh-partner-home-profile\" borderRadius={15} distortionScale={-11} saturation={1.06}>\n <header><span><IconUserOutline16 size={16} /></span><div><small>\u4F19\u4F34\u5E95\u7A3F</small><strong>{companion.role}</strong></div><button type=\"button\" onClick={() => navigate('identity')}>\u7F16\u8F91</button></header>\n <blockquote>{companion.instructions || companion.description || '\u5C1A\u672A\u8BBE\u7F6E\u957F\u671F\u884C\u4E3A\u51C6\u5219\u3002'}</blockquote>\n </GlassSurface>\n <GlassSurface as=\"section\" interactive className=\"dsh-partner-home-runtime\" borderRadius={15} distortionScale={-11} saturation={1.06}>\n <header><span><IconAgentPresetOutline16 size={16} /></span><div><small>\u8FD0\u884C\u80FD\u529B</small><strong>{companion.presetId || 'DSH \u9ED8\u8BA4 Preset'}</strong></div><button type=\"button\" onClick={() => navigate('capabilities')}>\u8C03\u6574</button></header>\n <div className=\"dsh-partner-home-capability-list\">{capabilities.length ? capabilities.map(item => <em key={item}>{item}</em>) : <small>\u5C1A\u672A\u58F0\u660E\u80FD\u529B\u8303\u56F4</small>}</div>\n </GlassSurface>\n <GlassSurface as=\"section\" interactive className=\"dsh-partner-home-continuity\" borderRadius={15} distortionScale={-11} saturation={1.06}>\n <header><span><IconDataOutline16 size={16} /></span><div><small>\u4F1A\u8BDD\u8FDE\u7EED\u6027</small><strong>{sessions.length ? `${sessions.length} \u4E2A\u5171\u4EAB\u4F1A\u8BDD` : '\u7B49\u5F85\u7B2C\u4E00\u6761\u6D88\u606F'}</strong></div><button type=\"button\" onClick={() => latestSession === undefined ? navigate('memory') : latestSession.archived ? void renewSession(latestSession.id) : void openSession(latestSession.id, latestSession.sessionId)}>{latestSession === undefined ? '\u67E5\u770B' : latestSession.archived ? '\u5F00\u59CB\u65B0\u4F1A\u8BDD' : '\u6253\u5F00\u4F1A\u8BDD'}</button></header>\n <p>{sessions.length ? `\u6700\u8FD1\u6D3B\u52A8\u4E8E ${relativeTime(Math.max(...sessions.map(item => item.lastMessageAt)))}` : '\u5FAE\u4FE1\u8054\u7CFB\u4EBA\u901A\u8FC7\u914D\u5BF9\u540E\uFF0C\u5C06\u5728\u8FD9\u91CC\u5EFA\u7ACB\u72EC\u7ACB\u4E0A\u4E0B\u6587\u3002'}</p>\n </GlassSurface>\n </div>\n </div>\n}\n\nfunction IdentityEditor({ companion, count, onChanged }: { companion: CompanionView; count: number; onChanged(): Promise<void> }): JSX.Element {\n const [form, setForm] = useState(() => companionDraft(companion))\n const [saving, setSaving] = useState(false)\n const [saved, setSaved] = useState(false)\n const [error, setError] = useState<string>()\n useEffect(() => { setForm(companionDraft(companion)); setSaved(false) }, [companion.id, companion.updatedAt])\n const submit = async (event: FormEvent): Promise<void> => {\n event.preventDefault(); setSaving(true); setError(undefined)\n try { await api(`/companions/${companion.id}`, { method: 'PUT', body: JSON.stringify({ companion: form }) }); setSaved(true); await onChanged() }\n catch (reason) { setError(message(reason)) } finally { setSaving(false) }\n }\n const remove = async (): Promise<void> => {\n if (!window.confirm(`\u5220\u9664\u4F19\u4F34\u300C${companion.name}\u300D\uFF1F\u6B64\u64CD\u4F5C\u8981\u6C42\u5148\u79FB\u9664\u5DF2\u7ED1\u5B9A\u6E20\u9053\u3002`)) return\n try { await api(`/companions/${companion.id}`, { method: 'DELETE' }); await onChanged() } catch (reason) { setError(message(reason)) }\n }\n return <form className=\"dsh-partner-form is-identity\" onSubmit={event => { void submit(event) }}>\n <Section eyebrow=\"IDENTITY\" title=\"\u5DE5\u4F5C\u8EAB\u4EFD\" detail=\"\u5B83\u4E0D\u662F\u4E00\u6B21\u5BF9\u8BDD\u7684\u63D0\u793A\u8BCD\uFF0C\u800C\u662F\u8FD9\u4E2A\u4F19\u4F34\u5728\u684C\u9762\u548C\u5FAE\u4FE1\u4E2D\u7684\u957F\u671F\u884C\u4E3A\u57FA\u7EBF\u3002\" />\n <div className=\"dsh-partner-fields two\"><Field label=\"\u540D\u5B57\"><input required maxLength={60} value={form.name} onChange={event => setForm({ ...form, name: event.target.value })} /></Field><Field label=\"\u89D2\u8272\"><input required maxLength={120} value={form.role} onChange={event => setForm({ ...form, role: event.target.value })} /></Field></div>\n <Field label=\"\u4E00\u53E5\u8BDD\u5B9A\u4F4D\" hint=\"\u7528\u4E8E\u540D\u518C\u8BC6\u522B\uFF0C\u4E0D\u4F1A\u66FF\u4EE3\u5B8C\u6574\u884C\u4E3A\u51C6\u5219\u3002\"><textarea rows={2} maxLength={500} value={form.description} onChange={event => setForm({ ...form, description: event.target.value })} /></Field>\n <Field label=\"\u957F\u671F\u884C\u4E3A\u51C6\u5219\" hint=\"\u5EFA\u8BAE\u5199\u804C\u8D23\u3001\u8868\u8FBE\u65B9\u5F0F\u4E0E\u8FB9\u754C\uFF1B\u6E20\u9053\u3001\u5DE5\u5177\u548C\u6388\u6743\u7531\u7CFB\u7EDF\u5355\u72EC\u63A7\u5236\u3002\"><textarea rows={9} maxLength={12000} value={form.instructions} onChange={event => setForm({ ...form, instructions: event.target.value })} /></Field>\n {error && <p className=\"dsh-partner-inline-error\">{error}</p>}\n <div className=\"dsh-partner-form-actions\"><span>{saved && <><IconCheckOutline14 size={14} />\u5DF2\u4FDD\u5B58\uFF0C\u540E\u7EED\u5FAE\u4FE1\u6D88\u606F\u5C06\u4F7F\u7528\u65B0\u8EAB\u4EFD</>}</span><button disabled={saving}>{saving ? '\u6B63\u5728\u4FDD\u5B58\u2026' : '\u4FDD\u5B58\u8EAB\u4EFD'}</button></div>\n <div className=\"dsh-partner-identity-danger\"><span><strong>\u5220\u9664\u4F19\u4F34</strong><small>\u5FC5\u987B\u5148\u79FB\u9664\u5DF2\u7ED1\u5B9A\u5FAE\u4FE1\u6E20\u9053\uFF1B\u4E0D\u4F1A\u81EA\u52A8\u628A\u8054\u7CFB\u4EBA\u8F6C\u4EA4\u7ED9\u5176\u4ED6\u4F19\u4F34\u3002</small></span><button type=\"button\" disabled={count <= 1} onClick={() => { void remove() }}><IconTrashOutline16 size={16} />\u5220\u9664</button></div>\n </form>\n}\n\nfunction CapabilityEditor({ companion, presets, onChanged }: { companion: CompanionView; presets: PartnerSnapshot['presets']; onChanged(): Promise<void> }): JSX.Element {\n const [form, setForm] = useState(() => companionDraft(companion))\n const [modelCatalog, setModelCatalog] = useState<ModelCatalogView>()\n const [saving, setSaving] = useState(false)\n const [error, setError] = useState<string>()\n useEffect(() => setForm(companionDraft(companion)), [companion.id, companion.updatedAt])\n useEffect(() => { void api<ModelCatalogView>('/models').then(setModelCatalog).catch(reason => setError(message(reason))) }, [])\n const toggle = (capability: Capability): void => setForm(current => ({ ...current, capabilities: current.capabilities.includes(capability) ? current.capabilities.filter(item => item !== capability) : [...current.capabilities, capability] }))\n const save = async (): Promise<void> => {\n setSaving(true); setError(undefined)\n try { await api(`/companions/${companion.id}`, { method: 'PUT', body: JSON.stringify({ companion: form }) }); await onChanged() }\n catch (reason) { setError(message(reason)) } finally { setSaving(false) }\n }\n const choices: { id: Capability; title: string; detail: string }[] = [\n { id: 'knowledge', title: '\u77E5\u8BC6\u5E93', detail: '\u5141\u8BB8\u4F19\u4F34\u5728\u5DF2\u6302\u8F7D\u8303\u56F4\u5185\u68C0\u7D22\u4E0E\u56DE\u5199\u77E5\u8BC6\u3002' },\n { id: 'skills', title: '\u6280\u80FD', detail: '\u4F7F\u7528\u5F53\u524D Agent Preset \u63D0\u4F9B\u7684\u6280\u80FD\u4E0E\u5DE5\u4F5C\u6D41\u7A0B\u3002' },\n { id: 'ssh', title: 'SSH', detail: '\u901A\u8FC7 SSH \u63D2\u4EF6\u6388\u6743\u7684\u4E3B\u673A\u4E0E\u547D\u4EE4\u8FB9\u754C\u5DE5\u4F5C\u3002' },\n { id: 'git', title: 'Git', detail: '\u9884\u7559 Git \u5DE5\u5177\u80FD\u529B\uFF0C\u4ECD\u9700\u5BF9\u5E94\u63D2\u4EF6\u5B9E\u9645\u5B89\u88C5\u3002' },\n ]\n const selectedProvider = form.provider || modelCatalog?.defaultSelection.provider || ''\n const modelOptions = modelCatalog?.providers.find(item => item.id === selectedProvider)?.models ?? []\n const currentModelMissing = Boolean(form.model) && !modelOptions.some(item => item.id === form.model)\n return <div className=\"dsh-partner-form is-capabilities\"><Section eyebrow=\"COMPOSITION\" title=\"\u80FD\u529B\u7EC4\u5408\" detail=\"\u4F19\u4F34\u58F0\u660E\u610F\u56FE\u8303\u56F4\uFF1B\u771F\u6B63\u53EF\u8C03\u7528\u7684\u5DE5\u5177\u4ECD\u6765\u81EA\u6240\u9009 Agent Preset\uFF0C\u5E76\u7EE7\u7EED\u6267\u884C\u5404\u63D2\u4EF6\u6743\u9650\u3002\" />\n <Field label=\"Agent Preset\" hint=\"\u51B3\u5B9A\u8FD9\u4E2A\u4F19\u4F34\u5B9E\u9645\u52A0\u8F7D\u54EA\u4E9B\u5DE5\u5177\u3001\u6280\u80FD\u548C\u7CFB\u7EDF\u63D0\u793A\u3002\"><select value={form.presetId} onChange={event => setForm({ ...form, presetId: event.target.value })}><option value=\"\">\u8DDF\u968F DSH \u9ED8\u8BA4 Preset</option>{presets.filter(item => !item.broken).map(item => <option value={item.id} key={item.id}>{item.name}</option>)}</select></Field>\n <div className=\"dsh-partner-capabilities\">{choices.map(choice => <GlassSurface as=\"button\" interactive type=\"button\" key={choice.id} className={form.capabilities.includes(choice.id) ? 'is-active' : ''} borderRadius={12} distortionScale={-9} saturation={1.05} aria-pressed={form.capabilities.includes(choice.id)} onClick={() => toggle(choice.id)}><span>{form.capabilities.includes(choice.id) && <IconCheckOutline14 size={14} />}</span><strong>{choice.title}</strong><small>{choice.detail}</small></GlassSurface>)}</div>\n <div className=\"dsh-partner-fields two\"><Field label=\"\u6A21\u578B\u63D0\u4F9B\u65B9\" hint=\"\u6A21\u578B\u76EE\u5F55\u6765\u81EA\u5F53\u524D\u5BA2\u6237\u7AEF\"><select value={form.provider} onChange={event => setForm({ ...form, provider: event.target.value, model: '' })}><option value=\"\">\u8DDF\u968F DSH \u9ED8\u8BA4 \u00B7 {modelCatalog?.defaultSelection.provider || '\u6B63\u5728\u8BFB\u53D6'}</option>{modelCatalog?.providers.map(provider => <option value={provider.id} key={provider.id}>{provider.name || provider.id}</option>)}</select></Field><Field label=\"\u6A21\u578B\" hint=\"\u968F\u63D0\u4F9B\u65B9\u8054\u52A8\"><select value={form.model} onChange={event => setForm({ ...form, model: event.target.value })}><option value=\"\">\u8DDF\u968F DSH \u9ED8\u8BA4 \u00B7 {modelCatalog?.defaultSelection.model || '\u6B63\u5728\u8BFB\u53D6'}</option>{currentModelMissing && <option value={form.model}>\u5F53\u524D\u914D\u7F6E \u00B7 {form.model}</option>}{modelOptions.map(model => <option value={model.id} key={model.id}>{model.name || model.id}</option>)}</select></Field></div>\n {error && <p className=\"dsh-partner-inline-error\">{error}</p>}<div className=\"dsh-partner-form-actions\"><span /><button type=\"button\" disabled={saving} onClick={() => { void save() }}>{saving ? '\u6B63\u5728\u5E94\u7528\u2026' : '\u5E94\u7528\u80FD\u529B\u7EC4\u5408'}</button></div>\n </div>\n}\n\nfunction WeixinPanel({ companion, snapshot, onChanged }: { companion: CompanionView; snapshot: PartnerSnapshot; onChanged(): Promise<void> }): JSX.Element {\n const channel = snapshot.channels.find(item => item.companionId === companion.id)\n const [login, setLogin] = useState<LoginView>()\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string>()\n useEffect(() => {\n if (!login || login.phase === 'confirmed' || login.phase === 'expired' || login.phase === 'error') return\n const timer = window.setInterval(() => {\n void api<{ login: LoginView; channel?: ChannelView }>(`/weixin/login/${login.id}`).then(async result => {\n setLogin(result.login)\n if (result.channel) { setLogin(undefined); await onChanged() }\n }).catch(reason => setError(message(reason)))\n }, 2_000)\n return () => clearInterval(timer)\n }, [login?.id, login?.phase, onChanged])\n const begin = async (): Promise<void> => {\n setBusy(true); setError(undefined)\n try { setLogin(await api('/weixin/login', { method: 'POST', body: JSON.stringify({ companionId: companion.id }) })) }\n catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const toggle = async (): Promise<void> => {\n if (!channel) return\n setBusy(true); setError(undefined)\n try { await api(`/channels/${channel.id}/enabled`, { method: 'POST', body: JSON.stringify({ enabled: !channel.enabled }) }); await onChanged() }\n catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const pairings = channel ? snapshot.pairings.filter(item => item.channelId === channel.id) : []\n const actPairing = async (id: string, status: 'approved' | 'blocked'): Promise<void> => {\n try { await api(`/pairings/${id}/status`, { method: 'POST', body: JSON.stringify({ status }) }); await onChanged() } catch (reason) { setError(message(reason)) }\n }\n return <div className=\"dsh-partner-form is-channel\"><Section eyebrow=\"PRIMARY CHANNEL\" title=\"\u5FAE\u4FE1\u6E20\u9053\" detail=\"\u4F7F\u7528\u5FAE\u4FE1 iLink Bot \u626B\u7801\u63A5\u5165\u3002\u6BCF\u4E2A\u673A\u5668\u4EBA\u53EA\u7ED1\u5B9A\u4E00\u4E2A\u4F19\u4F34\uFF0C\u6BCF\u4F4D\u8054\u7CFB\u4EBA\u4FDD\u6301\u72EC\u7ACB DSH \u4F1A\u8BDD\u3002\" />\n {!channel && !login && <GlassSurface as=\"div\" interactive className=\"dsh-partner-weixin-connect\" borderRadius={15} distortionScale={-10} saturation={1.06}><div className=\"dsh-partner-weixin-mark\"><WeixinGlyph large /></div><span><strong>\u628A {companion.name} \u5E26\u5230\u5FAE\u4FE1</strong><p>\u626B\u7801\u540E\uFF0C\u673A\u5668\u4EBA\u51ED\u636E\u76F4\u63A5\u4FDD\u5B58\u8FDB DSH \u51ED\u636E\u5E93\uFF0C\u4E0D\u4F1A\u663E\u793A\u5728\u6D4F\u89C8\u5668\u6216\u666E\u901A\u914D\u7F6E\u6587\u4EF6\u4E2D\u3002</p><ul><li>\u79C1\u804A\u9996\u6B21\u8054\u7CFB\u5FC5\u987B\u5BA1\u6279</li><li>\u8054\u7CFB\u4EBA\u4E4B\u95F4\u4E0A\u4E0B\u6587\u5B8C\u5168\u9694\u79BB</li><li>\u5DE5\u5177\u6743\u9650\u4E0D\u4F1A\u56E0\u5FAE\u4FE1\u8EAB\u4EFD\u81EA\u52A8\u6269\u5927</li></ul></span><button type=\"button\" disabled={busy} onClick={() => { void begin() }}>{busy ? '\u6B63\u5728\u7533\u8BF7\u4E8C\u7EF4\u7801\u2026' : '\u626B\u7801\u8FDE\u63A5\u5FAE\u4FE1'}</button></GlassSurface>}\n {login && <GlassSurface as=\"div\" interactive className=\"dsh-partner-qr\" borderRadius={16} distortionScale={-10} saturation={1.06}><div className=\"dsh-partner-qr-code\">{login.qrContent && <QRCodeSVG value={login.qrContent} size={176} level=\"M\" />}</div><span><small>WECHAT ILINK BOT</small><strong>{login.phase === 'scanned' ? '\u5DF2\u626B\u7801\uFF0C\u8BF7\u5728\u5FAE\u4FE1\u786E\u8BA4' : login.phase === 'expired' ? '\u4E8C\u7EF4\u7801\u5DF2\u8FC7\u671F' : login.phase === 'error' ? '\u8FDE\u63A5\u5931\u8D25' : '\u4F7F\u7528\u5FAE\u4FE1\u626B\u7801'}</strong><p>{login.error || (login.phase === 'scanned' ? '\u786E\u8BA4\u540E\u4F1A\u81EA\u52A8\u542F\u52A8\u6E20\u9053\uFF0C\u4E0D\u9700\u8981\u590D\u5236 Token\u3002' : '\u4E8C\u7EF4\u7801\u7EA6 5 \u5206\u949F\u6709\u6548\u3002\u6B64\u9875\u9762\u53EF\u4EE5\u5B89\u5168\u5730\u4FDD\u6301\u6253\u5F00\u3002')}</p>{(login.phase === 'expired' || login.phase === 'error') && <button type=\"button\" onClick={() => { setLogin(undefined); void begin() }}><IconRefreshOutline16 size={16} />\u91CD\u65B0\u751F\u6210</button>}</span></GlassSurface>}\n {channel && <>\n <GlassSurface as=\"div\" interactive className=\"dsh-partner-channel-card\" borderRadius={14} distortionScale={-10} saturation={1.06}><div className=\"dsh-partner-weixin-mark\"><WeixinGlyph large /></div><span><small>WECHAT CHANNEL</small><strong>{channel.name}</strong><p>{channel.accountId}</p></span><Status channel={channel} /><button type=\"button\" className=\"dsh-partner-switch\" data-on={channel.enabled} disabled={busy} aria-label={channel.enabled ? '\u505C\u7528\u5FAE\u4FE1\u6E20\u9053' : '\u542F\u7528\u5FAE\u4FE1\u6E20\u9053'} onClick={() => { void toggle() }}><i /></button></GlassSurface>\n {channel.lastError && <p className=\"dsh-partner-inline-error\">{channel.lastError}</p>}\n <div className=\"dsh-partner-pairing-heading\"><span><small>ACCESS</small><strong>\u79C1\u804A\u914D\u5BF9</strong></span><em>{pairings.filter(item => item.status === 'pending').length} \u4E2A\u5F85\u5904\u7406</em></div>\n <div className=\"dsh-partner-pairings\">{pairings.length === 0 ? <State title=\"\u8FD8\u6CA1\u6709\u8054\u7CFB\u4EBA\" detail=\"\u6709\u4EBA\u9996\u6B21\u5411\u673A\u5668\u4EBA\u53D1\u6D88\u606F\u540E\uFF0C\u914D\u5BF9\u8BF7\u6C42\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002\" compact /> : pairings.map(pairing => <article key={pairing.id}><span className={`is-${pairing.status}`}><IconUserOutline16 size={16} /></span><div><strong>{pairing.displayName}</strong><small>{pairing.status === 'pending' ? '\u7B49\u5F85\u5BA1\u6279' : pairing.status === 'approved' ? '\u5DF2\u6388\u6743\u72EC\u7ACB\u4F1A\u8BDD' : '\u5DF2\u963B\u6B62'} \u00B7 {new Date(pairing.updatedAt).toLocaleString()}</small></div>{pairing.status === 'pending' && <><button onClick={() => { void actPairing(pairing.id, 'blocked') }}>\u62D2\u7EDD</button><button className=\"is-primary\" onClick={() => { void actPairing(pairing.id, 'approved') }}>\u6279\u51C6</button></>}{pairing.status === 'approved' && <button onClick={() => { void actPairing(pairing.id, 'blocked') }}>\u64A4\u9500</button>}{pairing.status === 'blocked' && <button onClick={() => { void actPairing(pairing.id, 'approved') }}>\u91CD\u65B0\u6279\u51C6</button>}</article>)}</div>\n </>}\n {error && <p className=\"dsh-partner-inline-error\">{error}</p>}\n </div>\n}\n\nfunction MemoryPanel({ companion, snapshot, openSession, renewSession, onChanged }: { companion: CompanionView; snapshot: PartnerSnapshot; openSession(routeId: string, sessionId: string): Promise<void>; renewSession(routeId: string): Promise<void>; onChanged(): Promise<void> }): JSX.Element {\n const sessions = snapshot.sessions.filter(item => item.companionId === companion.id)\n const heartbeat = snapshot.heartbeatStates.find(item => item.companionId === companion.id)\n const [automation, setAutomation] = useState<AutomationView>(() => structuredClone(companion.automation))\n const [memories, setMemories] = useState<MemoryView[]>([])\n const [reflections, setReflections] = useState<DailyReflectionView[]>([])\n const [profiles, setProfiles] = useState<UserProfileSnapshotView[]>([])\n const [concernActivity, setConcernActivity] = useState<ConcernActivityView>({ concerns: [], observations: [] })\n const [newConcern, setNewConcern] = useState('')\n const [memoryRevision, setMemoryRevision] = useState(0)\n const [editing, setEditing] = useState<MemoryView>()\n const [busy, setBusy] = useState(false)\n const [notice, setNotice] = useState<string>()\n const [error, setError] = useState<string>()\n const [modelCatalog, setModelCatalog] = useState<ModelCatalogView>()\n const loadMemory = useCallback(async () => {\n const [result, activity] = await Promise.all([api<{ memories: MemoryView[]; reflections: DailyReflectionView[]; profiles: UserProfileSnapshotView[] }>(`/companions/${companion.id}/memory`), api<ConcernActivityView>(`/companions/${companion.id}/concerns`)])\n setMemories(result.memories); setReflections(result.reflections); setProfiles(result.profiles); setConcernActivity(activity); setMemoryRevision(value => value + 1)\n }, [companion.id])\n useEffect(() => { setAutomation(structuredClone(companion.automation)); void loadMemory().catch(reason => setError(message(reason))) }, [companion.id, companion.updatedAt, loadMemory])\n useEffect(() => { void api<ModelCatalogView>('/models').then(setModelCatalog).catch(reason => setError(message(reason))) }, [])\n const inheritedProvider = companion.provider || modelCatalog?.defaultSelection.provider || ''\n const selectedProvider = automation.memory.provider || inheritedProvider\n const modelOptions = modelCatalog?.providers.find(item => item.id === selectedProvider)?.models ?? []\n const save = async (): Promise<void> => {\n setBusy(true); setError(undefined); setNotice(undefined)\n try {\n await api(`/companions/${companion.id}/automation`, { method: 'PUT', body: JSON.stringify({ automation }) })\n setNotice('\u8BB0\u5FC6\u4E0E\u5FC3\u8DF3\u8BBE\u7F6E\u5DF2\u4FDD\u5B58')\n await onChanged()\n } catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const trigger = async (concernId?: string): Promise<void> => {\n setBusy(true); setError(undefined); setNotice(undefined)\n try {\n const result = await api<{ checked: boolean; sent: boolean; reason?: string }>(`/companions/${companion.id}/heartbeat/trigger`, {\n method: 'POST', body: JSON.stringify(concernId ? { concernId } : {}),\n })\n setNotice(result.sent ? '\u5FC3\u8DF3\u5DF2\u5B8C\u6210\u5E76\u53D1\u9001\u5FAE\u4FE1\u63D0\u9192' : result.reason ?? '\u5FC3\u8DF3\u68C0\u67E5\u5B8C\u6210')\n await Promise.all([onChanged(), loadMemory()])\n } catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const review = async (): Promise<void> => {\n setBusy(true); setError(undefined); setNotice(undefined)\n try {\n const result = await api<{ reviewed: number; failed: number; reason?: string }>(`/companions/${companion.id}/memory/review`, { method: 'POST' })\n setNotice(result.reason ?? `\u7EC8\u5BA1\u5B8C\u6210 ${result.reviewed} \u7BC7${result.failed ? `\uFF0C\u5931\u8D25 ${result.failed} \u7BC7` : ''}`); await loadMemory()\n } catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const saveMemory = async (): Promise<void> => {\n if (!editing) return\n setBusy(true); setError(undefined)\n try {\n await api(`/companions/${companion.id}/memory/${editing.id}`, { method: 'PUT', body: JSON.stringify({ subject: editing.subject, content: editing.content }) })\n setEditing(undefined); setNotice('\u8BB0\u5FC6\u5DF2\u4FEE\u6B63'); await loadMemory()\n } catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const deleteMemory = async (item: MemoryView): Promise<void> => {\n if (!window.confirm(`\u5220\u9664\u8BB0\u5FC6\u300C${item.subject}\u300D\uFF1F`)) return\n setBusy(true); setError(undefined)\n try { await api(`/companions/${companion.id}/memory/${item.id}`, { method: 'DELETE' }); if (editing?.id === item.id) setEditing(undefined); await loadMemory() }\n catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const addConcern = async (): Promise<void> => {\n const subject = newConcern.trim()\n if (!subject) return\n setBusy(true); setError(undefined); setNotice(undefined)\n try {\n await api(`/companions/${companion.id}/concerns`, { method: 'POST', body: JSON.stringify({ subject }) })\n setNewConcern(''); setNotice('\u4F19\u4F34\u4F1A\u7EE7\u7EED\u7559\u610F\u8FD9\u4EF6\u4E8B')\n await loadMemory()\n } catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n const actConcern = async (item: ConcernView, action: 'watch' | 'ignore' | 'prioritize' | 'resolve'): Promise<void> => {\n setBusy(true); setError(undefined); setNotice(undefined)\n try {\n await api(`/companions/${companion.id}/concerns/${encodeURIComponent(item.id)}/action`, { method: 'POST', body: JSON.stringify({ action }) })\n setNotice(action === 'ignore' ? '\u4F19\u4F34\u4E0D\u518D\u5173\u6CE8\u8FD9\u4EF6\u4E8B' : action === 'resolve' ? '\u5DF2\u6807\u8BB0\u4E3A\u89E3\u51B3' : action === 'prioritize' ? '\u5DF2\u63D0\u9AD8\u5173\u6CE8' : '\u4F1A\u7EE7\u7EED\u7559\u610F')\n await loadMemory()\n } catch (reason) { setError(message(reason)) } finally { setBusy(false) }\n }\n return <div className=\"dsh-partner-form is-memory\"><Section eyebrow=\"CONTINUITY\" title=\"\u4F1A\u8BDD\u8BB0\u5FC6\" detail=\"\u8FD9\u91CC\u5C55\u793A\u6E20\u9053\u4F1A\u8BDD\u8FB9\u754C\u3002\u77E5\u8BC6\u5E93\u4ECD\u7531\u77E5\u8BC6\u5E93\u63D2\u4EF6\u7BA1\u7406\uFF0C\u4F19\u4F34\u4E0D\u4F1A\u628A\u4E0D\u540C\u5FAE\u4FE1\u8054\u7CFB\u4EBA\u7684\u539F\u59CB\u4E0A\u4E0B\u6587\u6DF7\u5728\u4E00\u8D77\u3002\" />\n <div className=\"dsh-partner-metrics\"><article><small>\u6E20\u9053\u4F1A\u8BDD</small><strong>{sessions.length}</strong><p>\u6BCF\u4F4D\u8054\u7CFB\u4EBA\u72EC\u7ACB</p></article><article><small>\u957F\u671F\u8BB0\u5FC6</small><strong>{memories.filter(item => item.status === 'active').length}</strong><p>{reflections.length} \u7BC7\u6BCF\u65E5\u56DE\u987E</p></article><article><small>\u6700\u8FD1\u5FC3\u8DF3</small><strong>{heartbeat?.lastCheckedAt ? relativeTime(heartbeat.lastCheckedAt) : '\u5C1A\u672A'}</strong><p>{heartbeat?.lastError ? '\u4E0A\u6B21\u6267\u884C\u5F02\u5E38' : `\u4ECA\u65E5\u53D1\u9001 ${heartbeat?.sentCount ?? 0} \u6B21`}</p></article></div>\n\n <div className=\"dsh-partner-automation-grid\"><section className=\"dsh-partner-automation\">\n <header><span><strong>\u5B66\u4E60\u4E0E\u957F\u671F\u8BB0\u5FC6</strong><small>\u6309\u8054\u7CFB\u4EBA\u5F52\u6863\u5B8C\u6574\u5BF9\u8BDD\uFF0C\u63D0\u70BC\u6BCF\u65E5\u56DE\u987E\u548C\u7ED3\u6784\u5316\u8BB0\u5FC6\uFF0C\u5E76\u5728\u76F8\u5173\u8BDD\u9898\u51FA\u73B0\u65F6\u53EC\u56DE\u3002</small></span><button type=\"button\" className=\"dsh-partner-switch\" data-on={automation.memory.enabled} aria-label=\"\u542F\u7528\u4F19\u4F34\u5B66\u4E60\" onClick={() => setAutomation(current => ({ ...current, memory: { ...current.memory, enabled: !current.memory.enabled } }))}><i /></button></header>\n <div className=\"dsh-partner-automation-fields is-memory-model\"><Field label=\"\u4FDD\u7559\u671F\u9650\"><select value={automation.memory.retentionDays} onChange={event => setAutomation(current => ({ ...current, memory: { ...current.memory, retentionDays: Number(event.target.value) } }))}><option value={0}>\u6C38\u4E45\u4FDD\u7559</option><option value={30}>30 \u5929</option><option value={90}>90 \u5929</option><option value={180}>180 \u5929</option><option value={365}>1 \u5E74</option><option value={1095}>3 \u5E74</option></select></Field><Field label=\"\u63D0\u70BC Provider\" hint=\"\u9ED8\u8BA4\u7EE7\u627F\u4F19\u4F34\"><select value={automation.memory.provider ?? ''} onChange={event => setAutomation(current => ({ ...current, memory: { ...current.memory, provider: event.target.value, model: '' } }))}><option value=\"\">\u8DDF\u968F\u4F19\u4F34 \u00B7 {inheritedProvider || 'DSH \u9ED8\u8BA4'}</option>{modelCatalog?.providers.map(provider => <option value={provider.id} key={provider.id}>{provider.name || provider.id}</option>)}</select></Field><Field label=\"\u63D0\u70BC\u6A21\u578B\" hint=\"\u9ED8\u8BA4\u7EE7\u627F\u4F19\u4F34\"><select value={automation.memory.model ?? ''} onChange={event => setAutomation(current => ({ ...current, memory: { ...current.memory, model: event.target.value } }))}><option value=\"\">\u8DDF\u968F\u4F19\u4F34 \u00B7 {companion.model || modelCatalog?.defaultSelection.model || 'DSH \u9ED8\u8BA4'}</option>{modelOptions.map(model => <option value={model.id} key={model.id}>{model.name || model.id}</option>)}</select></Field></div>\n <div className=\"dsh-partner-review-policy\"><button type=\"button\" className=\"dsh-partner-switch\" data-on={automation.memory.dailyReviewEnabled} aria-label=\"\u542F\u7528\u6BCF\u65E5\u7EC8\u5BA1\" onClick={() => setAutomation(current => ({ ...current, memory: { ...current.memory, dailyReviewEnabled: !current.memory.dailyReviewEnabled } }))}><i /></button><span><strong>\u6BCF\u65E5\u7EC8\u5BA1</strong><small>\u6B21\u65E5\u81EA\u52A8\u5408\u5E76\u91CD\u590D\u3001\u7EA0\u6B63\u504F\u5DEE\u5E76\u5EFA\u7ACB\u8BB0\u5FC6\u5173\u7CFB</small></span><label><select aria-label=\"\u6BCF\u65E5\u7EC8\u5BA1\u65F6\u95F4\" value={automation.memory.dailyReviewHour} onChange={event => setAutomation(current => ({ ...current, memory: { ...current.memory, dailyReviewHour: Number(event.target.value) } }))}>{Array.from({ length: 24 }, (_, hour) => <option value={hour} key={hour}>{String(hour).padStart(2, '0')}:00</option>)}</select></label><button type=\"button\" disabled={busy || reflections.length === 0} onClick={() => { void review() }}>\u7ACB\u5373\u7EC8\u5BA1</button></div>\n </section>\n\n <section className=\"dsh-partner-automation\">\n <header><span><strong>\u6301\u7EED\u611F\u77E5</strong><small>\u4F19\u4F34\u53EA\u89C2\u5BDF\u5C1A\u672A\u95ED\u73AF\u7684\u4E8B\u60C5\u662F\u5426\u51FA\u73B0\u65B0\u53D8\u5316\uFF0C\u5E76\u7531\u514B\u5236\u7684\u6253\u6270\u7B56\u7565\u51B3\u5B9A\u4F55\u65F6\u544A\u8BC9\u4F60\u3002</small></span><button type=\"button\" className=\"dsh-partner-switch\" data-on={automation.heartbeat.enabled} aria-label=\"\u542F\u7528\u4F19\u4F34\u5FC3\u8DF3\" onClick={() => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, enabled: !current.heartbeat.enabled } }))}><i /></button></header>\n <div className=\"dsh-partner-automation-fields is-heartbeat\">\n <Field label=\"\u68C0\u67E5\u95F4\u9694\"><select value={automation.heartbeat.intervalMinutes} onChange={event => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, intervalMinutes: Number(event.target.value) } }))}><option value={30}>30 \u5206\u949F</option><option value={60}>1 \u5C0F\u65F6</option><option value={180}>3 \u5C0F\u65F6</option><option value={360}>6 \u5C0F\u65F6</option><option value={720}>12 \u5C0F\u65F6</option><option value={1440}>24 \u5C0F\u65F6</option></select></Field>\n <Field label=\"\u514D\u6253\u6270\u5F00\u59CB\"><input type=\"number\" min={0} max={23} value={automation.heartbeat.quietStartHour} onChange={event => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, quietStartHour: Number(event.target.value) } }))} /></Field>\n <Field label=\"\u514D\u6253\u6270\u7ED3\u675F\"><input type=\"number\" min={0} max={23} value={automation.heartbeat.quietEndHour} onChange={event => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, quietEndHour: Number(event.target.value) } }))} /></Field>\n <Field label=\"\u6BCF\u65E5\u4E0A\u9650\"><select value={automation.heartbeat.dailyLimit} onChange={event => setAutomation(current => ({ ...current, heartbeat: { ...current.heartbeat, dailyLimit: Number(event.target.value) } }))}><option value={0}>\u4E0D\u9650</option><option value={1}>1 \u6B21</option><option value={2}>2 \u6B21</option><option value={3}>3 \u6B21</option><option value={5}>5 \u6B21</option><option value={8}>8 \u6B21</option></select></Field>\n </div>\n <ConcernBoard companionId={companion.id} activity={concernActivity} value={newConcern} busy={busy} onValue={setNewConcern} onAdd={() => { void addConcern() }} onCheck={item => { void trigger(item.id) }} onAct={(item, action) => { void actConcern(item, action) }} />\n {heartbeat?.lastError && <p className=\"dsh-partner-inline-error\">{heartbeat.lastError}</p>}\n <div className=\"dsh-partner-automation-actions\"><button type=\"button\" disabled={busy || sessions.length === 0} onClick={() => { void trigger() }}>\u68C0\u67E5\u5230\u671F\u9879</button><button type=\"button\" className=\"is-primary\" disabled={busy} onClick={() => { void save() }}>{busy ? '\u6B63\u5728\u5904\u7406\u2026' : '\u4FDD\u5B58\u8BBE\u7F6E'}</button></div>\n </section></div>\n\n {notice && <p className=\"dsh-partner-inline-notice\"><IconCheckOutline14 size={14} />{notice}</p>}\n {error && <p className=\"dsh-partner-inline-error\">{error}</p>}\n\n <MemoryLibrary companionId={companion.id} revision={memoryRevision} profiles={profiles} memories={memories} reflections={reflections} editing={editing} busy={busy} setEditing={setEditing} save={() => { void saveMemory() }} remove={item => { void deleteMemory(item) }} />\n\n <div className=\"dsh-partner-section-heading\"><span><small>SESSIONS</small><strong>\u5171\u4EAB\u4F1A\u8BDD</strong></span></div>\n <div className=\"dsh-partner-session-list\">{sessions.map(item => <article key={item.id} data-archived={item.archived}><span><IconDataOutline16 size={16} /></span><div><strong>\u5FAE\u4FE1\u8054\u7CFB\u4EBA \u00B7 {item.userId.slice(-6)}</strong><small>{item.archived ? '\u5DF2\u5F52\u6863 \u00B7 \u957F\u671F\u8BB0\u5FC6\u4FDD\u7559' : `${item.sessionId} \u00B7 ${new Date(item.lastMessageAt).toLocaleString()}`}</small></div><button type=\"button\" className={item.archived ? 'is-primary' : undefined} onClick={() => { if (item.archived) void renewSession(item.id); else void openSession(item.id, item.sessionId) }}>{item.archived ? '\u5F00\u59CB\u65B0\u4F1A\u8BDD' : '\u6253\u5F00\u4F1A\u8BDD'}</button></article>)}{sessions.length === 0 && <State title=\"\u8FD8\u6CA1\u6709\u5171\u4EAB\u4F1A\u8BDD\" detail=\"\u8054\u7CFB\u4EBA\u5B8C\u6210\u914D\u5BF9\u5E76\u53D1\u6765\u7B2C\u4E00\u6761\u6D88\u606F\u540E\uFF0C\u4F19\u4F34\u4F1A\u521B\u5EFA\u7F51\u9875\u4E0E\u5FAE\u4FE1\u5171\u7528\u7684\u4F1A\u8BDD\u3002\" compact />}</div>\n </div>\n}\n\nfunction ConcernBoard({ companionId, activity, value, busy, onValue, onAdd, onCheck, onAct }: {\n companionId: string; activity: ConcernActivityView; value: string; busy: boolean; onValue(value: string): void; onAdd(): void\n onCheck(item: ConcernView): void\n onAct(item: ConcernView, action: 'watch' | 'ignore' | 'prioritize' | 'resolve'): void\n}): JSX.Element {\n const visible = activity.concerns.filter(item => item.state !== 'archived')\n const active = visible.filter(item => item.state !== 'resolved')\n const resolved = visible.filter(item => item.state === 'resolved')\n const latest = new Map([...activity.observations].reverse().map(item => [item.concernId, item]))\n const [composing, setComposing] = useState(false)\n const [expandedId, setExpandedId] = useState<string>()\n const [visibleCount, setVisibleCount] = useState(5)\n const [mention, setMention] = useState<{ start: number; end: number; query: string }>()\n const [sources, setSources] = useState<ConcernSourceView[]>([])\n const [sourcesLoading, setSourcesLoading] = useState(false)\n const [sourceError, setSourceError] = useState<string>()\n const [activeSource, setActiveSource] = useState(0)\n const inputRef = useRef<HTMLInputElement>(null)\n const listboxId = useId()\n const shown = active.slice(0, visibleCount)\n const suggestionsOpen = composing && mention !== undefined\n useEffect(() => {\n if (!suggestionsOpen || mention === undefined) {\n setSources([]); setSourcesLoading(false); setSourceError(undefined); return\n }\n const controller = new AbortController()\n const timer = window.setTimeout(() => {\n setSourcesLoading(true); setSourceError(undefined)\n const params = new URLSearchParams({ q: mention.query })\n void api<{ items: ConcernSourceView[] }>(`/companions/${encodeURIComponent(companionId)}/concern-sources?${params}`).then(result => {\n if (!controller.signal.aborted) { setSources(result.items); setActiveSource(0) }\n }).catch(reason => {\n if (!controller.signal.aborted) { setSources([]); setSourceError(message(reason)) }\n }).finally(() => { if (!controller.signal.aborted) setSourcesLoading(false) })\n }, 150)\n return () => { window.clearTimeout(timer); controller.abort() }\n }, [companionId, mention?.query, suggestionsOpen])\n const submit = (event: FormEvent): void => { event.preventDefault(); onAdd(); setComposing(false); setMention(undefined) }\n const chooseSource = (source: ConcernSourceView): void => {\n if (mention === undefined) return\n const next = `${value.slice(0, mention.start)}${source.token} ${value.slice(mention.end)}`\n const cursor = mention.start + source.token.length + 1\n onValue(next); setMention(undefined); setSources([])\n window.requestAnimationFrame(() => { inputRef.current?.focus(); inputRef.current?.setSelectionRange(cursor, cursor) })\n }\n return <section className=\"dsh-partner-concern-board\" aria-labelledby=\"partner-concerns-title\">\n <header><span><strong id=\"partner-concerns-title\">\u4F19\u4F34\u5728\u610F\u7684\u4E8B <b>{active.length}</b></strong><p>\u5C1A\u672A\u95ED\u73AF\u3001\u503C\u5F97\u7EE7\u7EED\u7559\u610F\u7684\u4E8B\u60C5</p></span><button type=\"button\" aria-expanded={composing} onClick={() => setComposing(current => !current)}><IconPlusOutline16 size={14} />\u4EA4\u4EE3\u4E00\u4EF6\u4E8B</button></header>\n {composing && <form className=\"dsh-partner-concern-compose\" onSubmit={submit}><label><span>\u9700\u8981\u7559\u610F\u7684\u4E8B</span><div className=\"dsh-partner-concern-input-wrap\"><input\n ref={inputRef} autoFocus value={value} maxLength={300} placeholder=\"\u8F93\u5165 @ \u9009\u62E9\u6587\u4EF6\u6216\u77E5\u8BC6\u6587\u6863\"\n role=\"combobox\" aria-autocomplete=\"list\" aria-expanded={suggestionsOpen} aria-controls={suggestionsOpen ? listboxId : undefined}\n aria-activedescendant={suggestionsOpen && sources[activeSource] ? `${listboxId}-option-${activeSource}` : undefined}\n onChange={event => { onValue(event.target.value); setMention(activeMention(event.target.value, event.target.selectionStart ?? event.target.value.length)) }}\n onClick={event => setMention(activeMention(event.currentTarget.value, event.currentTarget.selectionStart ?? event.currentTarget.value.length))}\n onKeyDown={event => {\n if (!suggestionsOpen) return\n if (event.key === 'ArrowDown') { event.preventDefault(); setActiveSource(index => sources.length === 0 ? 0 : (index + 1) % sources.length) }\n else if (event.key === 'ArrowUp') { event.preventDefault(); setActiveSource(index => sources.length === 0 ? 0 : (index - 1 + sources.length) % sources.length) }\n else if (event.key === 'Enter' && sources[activeSource]) { event.preventDefault(); chooseSource(sources[activeSource]) }\n else if (event.key === 'Escape') { event.preventDefault(); setMention(undefined) }\n }}\n />{suggestionsOpen && <div id={listboxId} className=\"dsh-partner-concern-sources\" role=\"listbox\" aria-label=\"\u53EF\u5F15\u7528\u7684\u6587\u4EF6\u4E0E\u77E5\u8BC6\u6587\u6863\">\n {sourcesLoading ? <p role=\"status\">\u6B63\u5728\u67E5\u627E\u53EF\u5F15\u7528\u5185\u5BB9\u2026</p> : sourceError ? <p role=\"status\">\u5019\u9009\u52A0\u8F7D\u5931\u8D25\uFF1A{sourceError}</p> : sources.length === 0 ? <p role=\"status\">\u6CA1\u6709\u627E\u5230\u5339\u914D\u7684\u6587\u4EF6\u6216\u5DF2\u6302\u8F7D\u77E5\u8BC6\u6587\u6863</p> : <>\n {sources.map((source, index) => <button\n type=\"button\" role=\"option\" id={`${listboxId}-option-${index}`} key={`${source.kind}:${source.token}`}\n aria-selected={index === activeSource} data-kind={source.kind} onMouseDown={event => event.preventDefault()}\n onMouseEnter={() => setActiveSource(index)} onClick={() => chooseSource(source)}\n ><span>{source.kind === 'file' ? <IconDataOutline16 size={15} /> : <IconLinkOutline16 size={15} />}</span><strong>{source.label}</strong><small>{source.detail}</small></button>)}\n </>}\n </div>}</div><small className=\"dsh-partner-concern-compose-hint\">\u8F93\u5165 <b>@</b> \u4F1A\u5217\u51FA\u5F53\u524D\u4F1A\u8BDD\u6587\u4EF6\u548C\u5DF2\u6302\u8F7D\u7684\u77E5\u8BC6\u6587\u6863\uFF0C\u4E5F\u53EF\u4EE5\u7EE7\u7EED\u8F93\u5165\u5173\u952E\u8BCD\u7B5B\u9009\u3002</small></label><div><button type=\"button\" onClick={() => { setComposing(false); setMention(undefined); onValue('') }}>\u53D6\u6D88</button><button type=\"submit\" className=\"is-primary\" disabled={busy || !value.trim()}>\u8BA9\u4F19\u4F34\u8BB0\u7740</button></div></form>}\n <div className=\"dsh-partner-concern-list\" role=\"list\">\n {active.length === 0 ? <p className=\"dsh-partner-concern-empty\">\u6700\u8FD1\u6CA1\u6709\u672A\u95ED\u73AF\u7684\u4E8B\u3002\u4F60\u4E5F\u53EF\u4EE5\u76F4\u63A5\u5BF9\u4F19\u4F34\u8BF4\u201C\u8FD9\u4E2A\u5E2E\u6211\u7559\u610F\u201D\u3002</p> : shown.map(item => {\n const observation = latest.get(item.id)\n const expanded = expandedId === item.id\n const status = observation ? concernObservationStatus(observation) : item.state === 'active' ? '\u6B63\u5728\u7559\u610F' : '\u6682\u65F6\u8BB0\u7740'\n return <article key={item.id} role=\"listitem\" data-state={item.state} data-expanded={expanded}>\n <button type=\"button\" className=\"dsh-partner-concern-row\" aria-expanded={expanded} onClick={() => setExpandedId(current => current === item.id ? undefined : item.id)}>\n <span className=\"dsh-partner-concern-state\"><i />{status}</span><span className=\"dsh-partner-concern-copy\"><strong>{item.subject}</strong><small>{observation ? observation.event : item.reason}</small></span><span className=\"dsh-partner-concern-time\" title={`\u8BA1\u5212\u4E8E ${new Date(item.nextCheckAt).toLocaleString()} \u518D\u6B21\u7559\u610F`}><small>\u4E0B\u6B21\u7559\u610F</small><strong>{futureTime(item.nextCheckAt)}</strong></span><IconChevronDownOutline14 size={14} />\n </button>\n {expanded && <div className=\"dsh-partner-concern-detail\"><p>{item.reason}</p>{observation && <><blockquote>{observation.event}</blockquote><div className=\"dsh-partner-concern-decision\" data-decision={observation.decision}><strong>{concernObservationStatus(observation)}</strong><span>{observation.decisionReason || concernObservationExplanation(observation)}</span><small>\u6253\u6270\u5206\u6570 {Math.round(observation.interruptScore * 100)}{observation.notificationRuleEffect !== 'auto' && observation.notificationRuleReason ? ` \u00B7 \u77E5\u8BC6\u89C4\u5219\uFF1A${observation.notificationRuleReason}` : ''}</small></div></>}{item.resources.length > 0 && <div className=\"dsh-partner-concern-resources\">{item.resources.map(resource => <span key={`${resource.kind}:${resource.locator}`}>{resource.kind === 'file' ? '\u6587\u4EF6' : '\u77E5\u8BC6'} \u00B7 {resource.label}</span>)}</div>}<small>{item.origin === 'explicit' ? '\u4F60\u660E\u786E\u4EA4\u4EE3' : '\u4F19\u4F34\u4ECE\u5BF9\u8BDD\u4E2D\u6CE8\u610F\u5230'} \u00B7 {watchKindLabel(item.watchKind)}</small><div className=\"dsh-partner-concern-actions\" aria-label={`${item.subject} \u7684\u64CD\u4F5C`}><button type=\"button\" disabled={busy} onClick={() => onCheck(item)}>\u7ACB\u5373\u68C0\u67E5\u8FD9\u6761</button><button type=\"button\" disabled={busy} onClick={() => onAct(item, 'watch')}>\u7EE7\u7EED\u7559\u610F</button><button type=\"button\" disabled={busy} onClick={() => onAct(item, 'prioritize')}>\u63D0\u9AD8\u5173\u6CE8</button><button type=\"button\" disabled={busy} onClick={() => onAct(item, 'resolve')}>\u5DF2\u7ECF\u89E3\u51B3</button><button type=\"button\" className=\"is-danger\" disabled={busy} onClick={() => onAct(item, 'ignore')}>\u522B\u7BA1\u8FD9\u4E2A</button></div></div>}\n </article>\n })}\n </div>\n {(active.length > shown.length || visibleCount > 5) && <div className=\"dsh-partner-concern-more\">{active.length > shown.length ? <button type=\"button\" onClick={() => setVisibleCount(count => Math.min(active.length, count + 20))}>\u518D\u663E\u793A {Math.min(20, active.length - shown.length)} \u6761</button> : <button type=\"button\" onClick={() => setVisibleCount(5)}>\u6536\u8D77\u5217\u8868</button>}</div>}\n {resolved.length > 0 && <details className=\"dsh-partner-concern-resolved\"><summary>\u5DF2\u7ECF\u89E3\u51B3 <b>{resolved.length}</b></summary><div>{resolved.slice(0, 30).map(item => <article key={item.id}><span><IconCheckOutline14 size={13} /></span><strong>{item.subject}</strong><button type=\"button\" disabled={busy} onClick={() => onAct(item, 'watch')}>\u91CD\u65B0\u7559\u610F</button></article>)}</div></details>}\n </section>\n}\n\nfunction activeMention(value: string, cursor: number): { start: number; end: number; query: string } | undefined {\n const prefix = value.slice(0, cursor)\n const start = prefix.lastIndexOf('@')\n if (start < 0 || (start > 0 && !/\\s/u.test(prefix[start - 1] ?? ''))) return undefined\n const fragment = prefix.slice(start + 1)\n if (fragment.startsWith('\u77E5\u8BC6\u5E93[')) {\n if (fragment.includes(']')) return undefined\n return { start, end: cursor, query: fragment.slice(4) }\n }\n if (fragment.startsWith('\"')) {\n if (fragment.slice(1).includes('\"')) return undefined\n return { start, end: cursor, query: fragment.slice(1) }\n }\n if (/\\s/u.test(fragment)) return undefined\n return { start, end: cursor, query: fragment }\n}\n\nfunction watchKindLabel(value: ConcernView['watchKind']): string {\n return value === 'knowledge' ? '\u77E5\u8BC6\u5E93\u53D8\u5316' : value === 'workspace' ? '\u9879\u76EE\u53D8\u5316' : value === 'web' ? '\u5916\u90E8\u53D8\u5316' : '\u6309\u4E8B\u60C5\u5224\u65AD\u6765\u6E90'\n}\n\ntype MemoryLibraryMode = 'profile' | 'memory' | 'reflection' | 'graph'\nconst MEMORY_KINDS: Array<MemoryView['kind'] | 'all'> = ['all', 'preference', 'task', 'event', 'relationship', 'emotion']\n\nfunction MemoryLibrary({ companionId, revision, profiles, memories, reflections, editing, busy, setEditing, save, remove }: {\n companionId: string; revision: number; profiles: UserProfileSnapshotView[]; memories: MemoryView[]; reflections: DailyReflectionView[]; editing: MemoryView | undefined; busy: boolean\n setEditing(value?: MemoryView): void; save(): void; remove(item: MemoryView): void\n}): JSX.Element {\n const activeMemories = useMemo(() => memories.filter(item => item.status === 'active' && item.kind !== 'profile'), [memories])\n const profileMemories = useMemo(() => memories.filter(item => item.status === 'active' && item.kind === 'profile'), [memories])\n const [mode, setMode] = useState<MemoryLibraryMode>('profile')\n const [kind, setKind] = useState<MemoryView['kind'] | 'all'>('all')\n const [query, setQuery] = useState('')\n const [selectedMemoryId, setSelectedMemoryId] = useState<string>()\n const [selectedDate, setSelectedDate] = useState<string>()\n const [graph, setGraph] = useState<MemoryGraphView>()\n const [graphLoading, setGraphLoading] = useState(false)\n const [graphError, setGraphError] = useState<string>()\n const [graphRequest, setGraphRequest] = useState(0)\n useEffect(() => {\n setGraph(undefined); setGraphError(undefined); setGraphLoading(false)\n }, [companionId, revision])\n useEffect(() => {\n if (mode !== 'graph' || graph !== undefined) return\n const controller = new AbortController()\n setGraphLoading(true); setGraphError(undefined)\n void api<MemoryGraphView>(`/companions/${companionId}/memory/graph`, { signal: controller.signal })\n .then(result => { if (!controller.signal.aborted) setGraph(result) })\n .catch(reason => { if (!controller.signal.aborted) setGraphError(message(reason)) })\n .finally(() => { if (!controller.signal.aborted) setGraphLoading(false) })\n return () => controller.abort()\n }, [companionId, graph, graphRequest, mode, revision])\n const normalized = query.trim().toLocaleLowerCase()\n const filteredMemories = useMemo(() => activeMemories.filter(item =>\n (kind === 'all' || item.kind === kind) && (!normalized || `${item.subject} ${item.content}`.toLocaleLowerCase().includes(normalized)),\n ), [activeMemories, kind, normalized])\n const filteredReflections = useMemo(() => reflections.filter(item => !normalized ||\n `${item.date} ${item.summary} ${item.events.join(' ')} ${item.openTasks.join(' ')} ${item.learnings.join(' ')}`.toLocaleLowerCase().includes(normalized),\n ), [reflections, normalized])\n const selectedMemory = filteredMemories.find(item => item.id === selectedMemoryId) ?? filteredMemories[0]\n const selectedReflection = filteredReflections.find(item => item.date === selectedDate) ?? filteredReflections[0]\n\n return <section className=\"dsh-partner-memory-library\">\n <header className=\"dsh-partner-library-header\"><span><small>MEMORY LIBRARY</small><strong>\u4F19\u4F34\u8BB0\u5FC6\u5E93</strong><p>\u67E5\u770B\u4F19\u4F34\u5982\u4F55\u4ECE\u957F\u671F\u5BF9\u8BDD\u4E2D\u8BA4\u8BC6\u4F60\uFF0C\u4EE5\u53CA\u8FD9\u4E9B\u7406\u89E3\u600E\u6837\u968F\u8BC1\u636E\u53D8\u5316\u3002</p></span><nav aria-label=\"\u8BB0\u5FC6\u5185\u5BB9\"><button type=\"button\" className={mode === 'profile' ? 'is-active' : ''} onClick={() => setMode('profile')}>\u4EBA\u7269\u753B\u50CF <b>{profiles.length}</b></button><button type=\"button\" className={mode === 'memory' ? 'is-active' : ''} onClick={() => setMode('memory')}>\u8BDD\u9898\u8BB0\u5FC6 <b>{activeMemories.length}</b></button><button type=\"button\" className={mode === 'reflection' ? 'is-active' : ''} onClick={() => setMode('reflection')}>\u6BCF\u65E5\u56DE\u987E <b>{reflections.length}</b></button><button type=\"button\" className={mode === 'graph' ? 'is-active' : ''} onClick={() => setMode('graph')}>\u5173\u7CFB\u56FE\u8C31 <b>{graph?.relations.length ?? '\u2014'}</b></button></nav></header>\n {mode !== 'profile' && <div className=\"dsh-partner-library-tools\"><label><span className=\"sr-only\">\u641C\u7D22\u8BB0\u5FC6</span><input value={query} onChange={event => setQuery(event.target.value)} placeholder={mode === 'memory' ? '\u641C\u7D22\u4E3B\u9898\u6216\u8BB0\u5FC6\u5185\u5BB9' : '\u641C\u7D22\u65E5\u671F\u3001\u603B\u7ED3\u6216\u5F85\u529E'} /></label>{mode === 'memory' && <div className=\"dsh-partner-memory-kinds\">{MEMORY_KINDS.map(value => <button type=\"button\" key={value} className={kind === value ? 'is-active' : ''} onClick={() => setKind(value)}>{value === 'all' ? '\u5168\u90E8' : memoryKind(value)}</button>)}</div>}</div>}\n {mode === 'profile' ? <ProfileLibrary profiles={profiles} memories={profileMemories} editing={editing} busy={busy} setEditing={setEditing} save={save} remove={remove} /> : mode === 'memory' ? <div className=\"dsh-partner-library-browser\">\n <div className=\"dsh-partner-library-list\" role=\"list\">{filteredMemories.length === 0 ? <State title={activeMemories.length === 0 ? '\u8FD8\u6CA1\u6709\u957F\u671F\u8BB0\u5FC6' : '\u6CA1\u6709\u5339\u914D\u7684\u8BB0\u5FC6'} detail={activeMemories.length === 0 ? '\u4F19\u4F34\u5B8C\u6210\u5BF9\u8BDD\u540E\u4F1A\u81EA\u52A8\u63D0\u70BC\u503C\u5F97\u957F\u671F\u4FDD\u7559\u7684\u4FE1\u606F\u3002' : '\u6362\u4E2A\u5173\u952E\u8BCD\u6216\u7C7B\u578B\u8BD5\u8BD5\u3002'} compact /> : filteredMemories.map(item => <button type=\"button\" role=\"listitem\" key={item.id} className={selectedMemory?.id === item.id ? 'is-active' : ''} onClick={() => { setSelectedMemoryId(item.id); setEditing(undefined) }}><span data-kind={item.kind}>{memoryKind(item.kind)}</span><strong>{item.subject}</strong><p>{item.content}</p><small>{relativeTime(item.updatedAt)}</small></button>)}</div>\n <div className=\"dsh-partner-library-detail\">{selectedMemory ? <MemoryCard item={selectedMemory} editing={editing?.id === selectedMemory.id ? editing : undefined} busy={busy} setEditing={setEditing} save={save} remove={() => remove(selectedMemory)} /> : <State title=\"\u9009\u62E9\u4E00\u6761\u8BB0\u5FC6\" detail=\"\u8BB0\u5FC6\u8BE6\u60C5\u4F1A\u663E\u793A\u5728\u8FD9\u91CC\u3002\" compact />}</div>\n </div> : mode === 'reflection' ? <div className=\"dsh-partner-library-browser\">\n <div className=\"dsh-partner-library-list is-diary\" role=\"list\">{filteredReflections.length === 0 ? <State title={reflections.length === 0 ? '\u8FD8\u6CA1\u6709\u6BCF\u65E5\u56DE\u987E' : '\u6CA1\u6709\u5339\u914D\u7684\u56DE\u987E'} detail={reflections.length === 0 ? '\u6BCF\u65E5\u56DE\u987E\u4F1A\u5728\u6BCF\u8F6E\u5B8C\u6574\u5BF9\u8BDD\u540E\u6301\u7EED\u66F4\u65B0\u3002' : '\u6362\u4E2A\u5173\u952E\u8BCD\u6216\u65E5\u671F\u8BD5\u8BD5\u3002'} compact /> : filteredReflections.map(entry => <button type=\"button\" role=\"listitem\" key={entry.date} className={selectedReflection?.date === entry.date ? 'is-active' : ''} onClick={() => setSelectedDate(entry.date)}><time>{entry.date}</time><strong>{entry.turnCount} \u8F6E\u4EA4\u6D41</strong><p>{entry.summary}</p><small>{entry.openTasks.length} \u9879\u5F85\u8DDF\u8FDB \u00B7 {entry.learnings.length} \u9879\u7406\u89E3</small></button>)}</div>\n <div className=\"dsh-partner-library-detail\">{selectedReflection ? <DailyReflectionDetail entry={selectedReflection} /> : <State title=\"\u9009\u62E9\u4E00\u5929\" detail=\"\u5F53\u5929\u7684\u603B\u7ED3\u4E0E\u5F85\u529E\u4F1A\u663E\u793A\u5728\u8FD9\u91CC\u3002\" compact />}</div>\n </div> : graphError ? <State title=\"\u5173\u7CFB\u56FE\u8C31\u52A0\u8F7D\u5931\u8D25\" detail={graphError} action={<button type=\"button\" onClick={() => setGraphRequest(value => value + 1)}>\u91CD\u65B0\u52A0\u8F7D</button>} /> : graphLoading || graph === undefined ? <State title=\"\u6B63\u5728\u52A0\u8F7D\u5173\u7CFB\u56FE\u8C31\" detail=\"\u53EA\u5728\u9700\u8981\u67E5\u770B\u5173\u7CFB\u65F6\u8BFB\u53D6\u5BA1\u8BA1\u6570\u636E\u3002\" /> : <MemoryGraph graph={graph} profiles={profiles} query={normalized} inspect={item => { setEditing(undefined); if (item.kind === 'profile') setMode('profile'); else { setSelectedMemoryId(item.id); setMode('memory') } }} />}\n </section>\n}\n\nfunction ProfileLibrary({ profiles, memories, editing, busy, setEditing, save, remove }: {\n profiles: UserProfileSnapshotView[]; memories: MemoryView[]; editing: MemoryView | undefined; busy: boolean\n setEditing(value?: MemoryView): void; save(): void; remove(item: MemoryView): void\n}): JSX.Element {\n const [selectedScopeId, setSelectedScopeId] = useState<string>()\n const selected = profiles.find(item => item.scopeId === selectedScopeId) ?? profiles[0]\n if (!selected) return <State title=\"\u8FD8\u6CA1\u6709\u8054\u7CFB\u4EBA\u753B\u50CF\" detail=\"\u8054\u7CFB\u4EBA\u5F00\u59CB\u548C\u4F19\u4F34\u4EA4\u6D41\u540E\uFF0C\u8FD9\u91CC\u4F1A\u9010\u6B65\u5C55\u793A\u4F19\u4F34\u4ECE\u660E\u786E\u5BF9\u8BDD\u4E2D\u5F62\u6210\u7684\u957F\u671F\u7406\u89E3\u3002\" />\n const activeIds = new Set(selected.entries.map(item => item.id))\n const pending = memories.filter(item => item.scopeId === selected.scopeId && !activeIds.has(item.id))\n return <div className=\"dsh-partner-profile-browser\">\n <div className=\"dsh-partner-profile-people\" role=\"list\" aria-label=\"\u8054\u7CFB\u4EBA\u753B\u50CF\">\n {profiles.map(profile => <button type=\"button\" role=\"listitem\" key={profile.scopeId} className={profile.scopeId === selected.scopeId ? 'is-active' : ''} onClick={() => { setSelectedScopeId(profile.scopeId); setEditing(undefined) }}>\n <span><IconUserOutline16 size={16} /></span><div><strong>{profile.label}</strong><small>{profile.entries.length > 0 ? `${profile.entries.length} \u9879\u7A33\u5B9A\u7406\u89E3` : '\u8FD8\u5728\u8BA4\u8BC6\u4E2D'}</small></div><i aria-hidden=\"true\" />\n </button>)}\n </div>\n <div className=\"dsh-partner-profile-stage\">\n <header className=\"dsh-partner-profile-heading\"><span><small>PARTNER UNDERSTANDING</small><strong>\u4F19\u4F34\u773C\u4E2D\u7684 {selected.label}</strong><p>\u8FD9\u4E9B\u5185\u5BB9\u6765\u81EA\u4F60\u5728\u5BF9\u8BDD\u4E2D\u7684\u660E\u786E\u8868\u8FBE\u3002\u4F19\u4F34\u4F1A\u7528\u5B83\u4FDD\u6301\u7406\u89E3\u8FDE\u7EED\uFF0C\u4F46\u4E0D\u4F1A\u628A\u753B\u50CF\u5F53\u6210\u6807\u7B7E\u53CD\u590D\u590D\u8FF0\u3002</p></span><div data-ready={selected.entries.length > 0}><i />{selected.entries.length > 0 ? '\u4E0A\u4E0B\u6587\u57FA\u7EBF\u5DF2\u5C31\u7EEA' : '\u7B49\u5F85\u53EF\u9760\u8BC1\u636E'}</div></header>\n {selected.entries.length > 0 ? <>\n <div className=\"dsh-partner-profile-meta\"><span><small>\u753B\u50CF\u7248\u672C</small><strong>{selected.version}</strong></span><span><small>\u5BF9\u8BDD\u4F9D\u636E</small><strong>{selected.evidenceCount} \u5904</strong></span><span><small>\u7528\u6237\u786E\u8BA4</small><strong>{selected.lockedCount} \u9879</strong></span><span><small>\u6700\u8FD1\u4F9D\u636E</small><strong>{selected.updatedAt ? relativeTime(selected.updatedAt) : '\u5C1A\u672A'}</strong></span></div>\n <div className=\"dsh-partner-profile-entries\">{selected.entries.map(item => <MemoryCard key={item.id} item={item} editing={editing?.id === item.id ? editing : undefined} busy={busy} setEditing={setEditing} save={save} remove={() => remove(item)} />)}</div>\n </> : <State title=\"\u4F19\u4F34\u8FD8\u5728\u8BA4\u8BC6\u4F60\" detail=\"\u53EA\u6709\u660E\u786E\u3001\u7A33\u5B9A\u5E76\u8FBE\u5230\u53EF\u9760\u6807\u51C6\u7684\u957F\u671F\u4FE1\u606F\u624D\u4F1A\u8FDB\u5165\u753B\u50CF\uFF1B\u666E\u901A\u504F\u597D\u3001\u4E34\u65F6\u4EFB\u52A1\u548C\u4E00\u6B21\u6027\u60C5\u7EEA\u4E0D\u4F1A\u653E\u5728\u8FD9\u91CC\u3002\" compact />}\n {pending.length > 0 && <details className=\"dsh-partner-profile-pending\"><summary>\u5F85\u786E\u8BA4\u7684\u7406\u89E3 <b>{pending.length}</b></summary><div>{pending.map(item => <MemoryCard key={item.id} item={item} editing={editing?.id === item.id ? editing : undefined} busy={busy} setEditing={setEditing} save={save} remove={() => remove(item)} />)}</div></details>}\n </div>\n </div>\n}\n\ntype RelationFilter = MemoryRelationView['kind'] | 'all'\nconst RELATION_FILTERS: RelationFilter[] = ['all', 'conflicts_with', 'depends_on', 'supports', 'follows', 'about']\n\nfunction MemoryGraph({ graph, profiles, query, inspect }: { graph: MemoryGraphView; profiles: UserProfileSnapshotView[]; query: string; inspect(item: MemoryView): void }): JSX.Element {\n const byId = new Map(graph.memories.map(item => [item.id, item]))\n const scopeIds = [...new Set(graph.relations.map(item => item.scopeId))]\n const [requestedScopeId, setRequestedScopeId] = useState<string>()\n const scopeId = scopeIds.includes(requestedScopeId ?? '') ? requestedScopeId! : scopeIds[0]\n const [filter, setFilter] = useState<RelationFilter>('all')\n const scoped = graph.relations.filter(item => item.scopeId === scopeId)\n const visible = scoped.filter(item => {\n if (filter !== 'all' && item.kind !== filter) return false\n const source = byId.get(item.sourceMemoryId); const target = byId.get(item.targetMemoryId)\n return !query || `${source?.subject ?? ''} ${source?.content ?? ''} ${target?.subject ?? ''} ${target?.content ?? ''} ${item.label}`.toLocaleLowerCase().includes(query)\n }).sort((left, right) => Number(right.kind === 'conflicts_with') - Number(left.kind === 'conflicts_with') || right.confidence - left.confidence)\n const [selectedRelationId, setSelectedRelationId] = useState<string>()\n const selected = visible.find(item => item.id === selectedRelationId) ?? visible[0]\n const source = selected ? byId.get(selected.sourceMemoryId) : undefined\n const target = selected ? byId.get(selected.targetMemoryId) : undefined\n const label = profiles.find(item => item.scopeId === scopeId)?.label ?? (scopeId ? `\u8054\u7CFB\u4EBA ${scopeId.slice(-6)}` : '\u5F53\u524D\u8054\u7CFB\u4EBA')\n const conflictCount = scoped.filter(item => item.kind === 'conflicts_with').length\n if (graph.relations.length === 0) return <State title=\"\u8FD8\u6CA1\u6709\u53EF\u9760\u5173\u7CFB\" detail=\"\u6BCF\u65E5\u7EC8\u5BA1\u53EA\u4F1A\u4FDD\u5B58\u6709\u660E\u786E\u8BC1\u636E\u7684\u8BB0\u5FC6\u8054\u7CFB\uFF0C\u4E0D\u4F1A\u4E3A\u4E86\u586B\u6EE1\u56FE\u8C31\u800C\u731C\u6D4B\u3002\" />\n return <div className=\"dsh-partner-graph-audit\">\n <header className=\"dsh-partner-graph-toolbar\"><span><small>\u5173\u7CFB\u5BA1\u8BA1</small><strong>{label} \u7684\u7406\u89E3\u5173\u7CFB</strong><p>{scoped.length} \u6761\u53EF\u9760\u8054\u7CFB{conflictCount > 0 ? `\uFF0C\u5176\u4E2D ${conflictCount} \u6761\u9700\u8981\u786E\u8BA4` : '\uFF0C\u6682\u65E0\u5F85\u786E\u8BA4\u51B2\u7A81'}</p></span>{scopeIds.length > 1 && <label><span>\u8054\u7CFB\u4EBA</span><select value={scopeId} onChange={event => { setRequestedScopeId(event.target.value); setSelectedRelationId(undefined) }}>{scopeIds.map(value => <option value={value} key={value}>{profiles.find(item => item.scopeId === value)?.label ?? `\u8054\u7CFB\u4EBA ${value.slice(-6)}`}</option>)}</select></label>}</header>\n <nav className=\"dsh-partner-graph-filters\" aria-label=\"\u5173\u7CFB\u7C7B\u578B\">{RELATION_FILTERS.map(value => { const count = value === 'all' ? scoped.length : scoped.filter(item => item.kind === value).length; return <button type=\"button\" key={value} className={filter === value ? 'is-active' : ''} aria-pressed={filter === value} onClick={() => { setFilter(value); setSelectedRelationId(undefined) }}>{value === 'all' ? '\u5168\u90E8' : relationLabel(value)} <b>{count}</b></button> })}</nav>\n <div className=\"dsh-partner-graph-browser\"><div className=\"dsh-partner-graph-index\" role=\"list\">{visible.length === 0 ? <State title=\"\u6CA1\u6709\u5339\u914D\u7684\u5173\u7CFB\" detail=\"\u8C03\u6574\u5173\u7CFB\u7C7B\u578B\u6216\u641C\u7D22\u5173\u952E\u8BCD\u540E\u518D\u8BD5\u3002\" compact /> : visible.map(item => { const from = byId.get(item.sourceMemoryId); const to = byId.get(item.targetMemoryId); return <button type=\"button\" role=\"listitem\" key={item.id} data-kind={item.kind} className={selected?.id === item.id ? 'is-active' : ''} onClick={() => setSelectedRelationId(item.id)}><span>{relationLabel(item.kind)}</span><strong>{from?.subject ?? '\u5DF2\u5220\u9664\u8BB0\u5FC6'} <i aria-hidden=\"true\">\u2192</i> {to?.subject ?? '\u5DF2\u5220\u9664\u8BB0\u5FC6'}</strong><p>{item.label}</p><small>{Math.round(item.confidence * 100)}% \u53EF\u4FE1</small></button> })}</div>\n <div className=\"dsh-partner-graph-stage\">{selected && source && target ? <article data-kind={selected.kind}><header><span>{relationLabel(selected.kind)}</span><strong>{source.subject} <i aria-hidden=\"true\">\u2192</i> {target.subject}</strong><p>{selected.label}</p><small>{relationGuidance(selected.kind)}</small></header><div className=\"dsh-partner-graph-pair\"><GraphMemory item={source} side=\"\u8D77\u70B9\" inspect={inspect} /><div aria-hidden=\"true\"><i /><span>{relationLabel(selected.kind)}</span><i /></div><GraphMemory item={target} side=\"\u5173\u8054\u9879\" inspect={inspect} /></div><footer><small>\u6700\u8FD1\u7EC8\u5BA1\u4E8E {new Date(selected.updatedAt).toLocaleString()}</small><strong>\u5173\u7CFB\u7F6E\u4FE1\u5EA6 {Math.round(selected.confidence * 100)}%</strong></footer></article> : <State title=\"\u9009\u62E9\u4E00\u6761\u5173\u7CFB\" detail=\"\u5173\u7CFB\u4E24\u7AEF\u7684\u8BB0\u5FC6\u4E0E\u4F7F\u7528\u65B9\u5F0F\u4F1A\u663E\u793A\u5728\u8FD9\u91CC\u3002\" compact />}</div>\n </div>\n </div>\n}\n\nfunction GraphMemory({ item, side, inspect }: { item: MemoryView; side: string; inspect(item: MemoryView): void }): JSX.Element {\n return <section><header><small>{side} \u00B7 {memoryKind(item.kind)}</small><strong>{item.subject}</strong></header><p>{item.content}</p><button type=\"button\" onClick={() => inspect(item)}>\u67E5\u770B\u5E76\u4FEE\u6B63</button></section>\n}\n\nfunction relationLabel(kind: MemoryRelationView['kind']): string { return ({ supports: '\u652F\u6301', depends_on: '\u4F9D\u8D56', about: '\u5173\u4E8E', conflicts_with: '\u51B2\u7A81', follows: '\u540E\u7EED' })[kind] }\nfunction relationGuidance(kind: MemoryRelationView['kind']): string {\n return ({\n supports: '\u56DE\u7B54\u6D89\u53CA\u76EE\u6807\u8BB0\u5FC6\u65F6\uFF0C\u53EF\u628A\u8D77\u70B9\u4F5C\u4E3A\u660E\u786E\u652F\u6301\u4F9D\u636E\uFF0C\u4F46\u4E0D\u80FD\u636E\u6B64\u8865\u5199\u65B0\u4E8B\u5B9E\u3002',\n depends_on: '\u5904\u7406\u8D77\u70B9\u4E8B\u9879\u65F6\uFF0C\u5E94\u540C\u65F6\u68C0\u67E5\u5173\u8054\u9879\u662F\u5426\u6210\u7ACB\u6216\u5DF2\u7ECF\u5B8C\u6210\u3002',\n about: '\u4E24\u6761\u8BB0\u5FC6\u5C5E\u4E8E\u540C\u4E00\u4E0A\u4E0B\u6587\uFF0C\u53EC\u56DE\u5176\u4E2D\u4E00\u6761\u65F6\u53EF\u4EE5\u8865\u5145\u53E6\u4E00\u6761\u5E2E\u52A9\u7406\u89E3\u3002',\n conflicts_with: '\u4E24\u6761\u7406\u89E3\u6682\u65F6\u4E0D\u80FD\u540C\u65F6\u4F5C\u4E3A\u4E8B\u5B9E\uFF1B\u4F19\u4F34\u5E94\u5728\u76F8\u5173\u8BDD\u9898\u51FA\u73B0\u65F6\u6307\u51FA\u5DEE\u5F02\u5E76\u8BF7\u6C42\u786E\u8BA4\u3002',\n follows: '\u5B83\u4EEC\u5B58\u5728\u660E\u786E\u5148\u540E\u5173\u7CFB\uFF0C\u540E\u7EED\u5224\u65AD\u9700\u8981\u4FDD\u7559\u8FD9\u4E2A\u987A\u5E8F\u3002',\n })[kind]\n}\n\nfunction DailyReflectionDetail({ entry }: { entry: DailyReflectionView }): JSX.Element {\n return <article className=\"dsh-partner-diary-detail\"><header><time>{entry.date}</time><strong>{entry.turnCount} \u8F6E\u4EA4\u6D41\u540E\u7684\u7406\u89E3</strong><small>\u66F4\u65B0\u4E8E {new Date(entry.updatedAt).toLocaleString()}</small></header><p>{entry.summary}</p><ReflectionGroup title=\"\u5F85\u8DDF\u8FDB\" items={entry.openTasks} /><ReflectionGroup title=\"\u5F53\u5929\u4E8B\u4EF6\" items={entry.events} /><ReflectionGroup title=\"\u65B0\u7406\u89E3\" items={entry.learnings} /><ReflectionGroup title=\"\u5DF2\u5B8C\u6210\" items={entry.completedTasks} /></article>\n}\n\nfunction ReflectionGroup({ title, items }: { title: string; items: string[] }): JSX.Element | null {\n if (items.length === 0) return null\n return <section><strong>{title}</strong><ul>{items.map(item => <li key={item}>{item}</li>)}</ul></section>\n}\n\nfunction MemoryCard({ item, editing, busy, setEditing, save, remove }: { item: MemoryView; editing: MemoryView | undefined; busy: boolean; setEditing(value?: MemoryView): void; save(): void; remove(): void }): JSX.Element {\n return <article data-kind={item.kind}>{editing ? <div className=\"dsh-partner-memory-editor\">\n <input aria-label=\"\u8BB0\u5FC6\u4E3B\u9898\" value={editing.subject} onChange={event => setEditing({ ...editing, subject: event.target.value })} />\n <textarea aria-label=\"\u8BB0\u5FC6\u5185\u5BB9\" value={editing.content} onChange={event => setEditing({ ...editing, content: event.target.value })} />\n <footer><button type=\"button\" onClick={() => setEditing(undefined)}>\u53D6\u6D88</button><button type=\"button\" className=\"is-primary\" disabled={busy || !editing.subject.trim() || !editing.content.trim()} onClick={save}>\u4FDD\u5B58\u4FEE\u6B63</button></footer>\n </div> : <>\n <header><span>{memoryKind(item.kind)}</span><div><button type=\"button\" onClick={() => setEditing({ ...item })}>\u7F16\u8F91</button><button type=\"button\" onClick={remove}>\u5220\u9664</button></div></header>\n <strong>{item.subject}</strong><p>{item.content}</p>\n <footer><progress max={1} value={item.confidence} aria-label={`\u7F6E\u4FE1\u5EA6 ${Math.round(item.confidence * 100)}%`} /><small>{item.locked ? '\u624B\u52A8\u786E\u8BA4' : `${Math.round(item.confidence * 100)}% \u53EF\u4FE1`} \u00B7 {relativeTime(item.updatedAt)}</small></footer>\n {item.evidence.length > 0 && <details className=\"dsh-partner-memory-evidence\"><summary>\u67E5\u770B\u5BF9\u8BDD\u4F9D\u636E <b>{item.evidence.length}</b></summary><div>{[...item.evidence].reverse().map(evidence => <blockquote key={`${evidence.turnId}:${evidence.at}`}><p>{evidence.excerpt}</p><time>{new Date(evidence.at).toLocaleString()}</time></blockquote>)}</div></details>}\n </>}</article>\n}\n\nfunction Status({ channel }: { channel: ChannelView | undefined }): JSX.Element {\n const status = !channel ? 'unbound' : channel.runtimeStatus\n return <span className={`dsh-partner-status is-${status}`}><i />{!channel ? '\u672A\u8FDE\u63A5' : statusLabel(channel.runtimeStatus)}</span>\n}\nfunction statusLabel(status: ChannelView['runtimeStatus']): string { return status === 'running' ? '\u5FAE\u4FE1\u5728\u7EBF' : status === 'starting' ? '\u8FDE\u63A5\u4E2D' : status === 'error' ? '\u8FDE\u63A5\u5F02\u5E38' : '\u5DF2\u505C\u7528' }\n\nfunction Avatar({ name, small = false }: { name: string; small?: boolean }): JSX.Element { return <span className={`dsh-partner-avatar${small ? ' is-small' : ''}`} aria-hidden=\"true\">{[...name][0] ?? '\u4F34'}</span> }\nfunction WeixinGlyph({ large = false }: { large?: boolean }): JSX.Element { return <span className={`dsh-partner-weixin-glyph${large ? ' is-large' : ''}`} aria-hidden=\"true\"><i /><b /></span> }\nfunction TabButton({ active, onClick, icon, children }: { active: boolean; onClick(): void; icon: ReactNode; children: ReactNode }): JSX.Element { return <button type=\"button\" className={active ? 'is-active' : ''} onClick={onClick}>{icon}<span>{children}</span></button> }\nfunction Field({ label, hint, children }: { label: string; hint?: string; children: ReactNode }): JSX.Element { return <label className=\"dsh-partner-field\"><span><strong>{label}</strong>{hint && <small>{hint}</small>}</span>{children}</label> }\nfunction Section({ eyebrow, title, detail }: { eyebrow: string; title: string; detail: string }): JSX.Element { return <header className=\"dsh-partner-section\"><small>{eyebrow}</small><h2>{title}</h2><p>{detail}</p></header> }\nfunction State({ title, detail, action, compact = false }: { title: string; detail?: string; action?: ReactNode; compact?: boolean }): JSX.Element { return <div className={`dsh-partner-state${compact ? ' is-compact' : ''}`}><IconAgentPresetOutline16 size={20} /><strong>{title}</strong>{detail && <p>{detail}</p>}{action}</div> }\nfunction companionDraft(companion: CompanionView): { name: string; role: string; description: string; instructions: string; presetId: string; provider: string; model: string; capabilities: Capability[] } { return { name: companion.name, role: companion.role, description: companion.description, instructions: companion.instructions, presetId: companion.presetId ?? '', provider: companion.provider ?? '', model: companion.model ?? '', capabilities: [...companion.capabilities] } }\nfunction relativeTime(value: number): string { const minutes = Math.floor((Date.now() - value) / 60_000); return minutes < 1 ? '\u521A\u521A' : minutes < 60 ? `${minutes} \u5206\u949F\u524D` : minutes < 1440 ? `${Math.floor(minutes / 60)} \u5C0F\u65F6\u524D` : `${Math.floor(minutes / 1440)} \u5929\u524D` }\nfunction concernObservationStatus(item: ConcernObservationView): string {\n if (item.decision === 'notify') return item.mentionedAt === undefined ? '\u5F85\u63D0\u9192' : '\u5DF2\u63D0\u9192'\n if (item.decision === 'feed') return '\u4F19\u4F34\u52A8\u6001'\n if (item.decision === 'defer') return item.mentionedAt === undefined ? '\u5F85\u987A\u5E26\u63D0' : '\u5DF2\u987A\u5E26\u63D0'\n return '\u9759\u9ED8\u8BB0\u4E0B'\n}\nfunction concernObservationExplanation(item: ConcernObservationView): string {\n if (item.decision === 'notify') return item.mentionedAt === undefined ? '\u8FBE\u5230\u4E3B\u52A8\u63D0\u9192\u6761\u4EF6\uFF0C\u7B49\u5F85\u6E20\u9053\u6295\u9012' : '\u5DF2\u7ECF\u901A\u8FC7\u6279\u51C6\u7684\u6E20\u9053\u4E3B\u52A8\u63D0\u9192'\n if (item.decision === 'feed') return '\u53EA\u663E\u793A\u5728\u4F19\u4F34\u52A8\u6001\uFF0C\u4E0D\u4F1A\u81EA\u52A8\u8F6C\u6210\u4E3B\u52A8\u63D0\u9192'\n if (item.decision === 'defer') return item.mentionedAt === undefined ? '\u4E0B\u6B21\u51FA\u73B0\u76F8\u5173\u5BF9\u8BDD\u65F6\u987A\u5E26\u63D0\u53CA' : '\u5DF2\u7ECF\u5728\u76F8\u5173\u5BF9\u8BDD\u4E2D\u987A\u5E26\u63D0\u53CA'\n return '\u4EC5\u4FDD\u7559\u4E3A\u89C2\u5BDF\u8BB0\u5F55\uFF0C\u4E0D\u6253\u6270\u4F60'\n}\nfunction memoryKind(value: MemoryView['kind']): string { return ({ profile: '\u753B\u50CF', preference: '\u504F\u597D', task: '\u4EFB\u52A1', event: '\u4E8B\u4EF6', relationship: '\u5173\u7CFB', emotion: '\u60C5\u7EEA\u4FE1\u53F7' })[value] }\nfunction message(reason: unknown): string { return reason instanceof Error ? reason.message : String(reason) }\nfunction waitForClientSession(ctx: ClientContext, sessionId: string): Promise<void> {\n const id = sessionId as SessionId\n const sessions = clientSessions(ctx)\n if (sessions.list.getSnapshot().byId[id] !== undefined) return Promise.resolve()\n return new Promise((resolve, reject) => {\n let stop = (): void => {}\n const timeout = window.setTimeout(() => { stop(); reject(new Error('\u4F19\u4F34\u4F1A\u8BDD\u5C1A\u672A\u540C\u6B65\u5230\u7F51\u9875\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5')) }, 5_000)\n stop = sessions.list.subscribe(() => {\n if (sessions.list.getSnapshot().byId[id] === undefined) return\n window.clearTimeout(timeout)\n stop()\n resolve()\n })\n })\n}\nfunction clientSessions(ctx: ClientContext): ISessions { return ctx.sessions as unknown as ISessions }\nfunction installStyles(): () => void { let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null; if (!style) { style = document.createElement('style'); style.id = STYLE_ID; style.textContent = cssText; document.head.append(style) } return () => style?.remove() }\n", "const WORKSPACE_ACTIVATE_EVENT = '@lemoncat7/dsh-plugin-ui/workspace-activate'\n\ninterface WorkspaceActivateDetail {\n pluginId: string\n}\n\n/** Claim the conversation workspace while remaining compatible with installed plugin versions. */\nexport function activatePluginWorkspace(pluginId: string): void {\n window.dispatchEvent(new CustomEvent<WorkspaceActivateDetail>(WORKSPACE_ACTIVATE_EVENT, {\n detail: { pluginId },\n }))\n}\n\n/** Close this workspace when another plugin claims the conversation area. */\nexport function observePluginWorkspace(pluginId: string, close: () => void): () => void {\n const onActivate = (event: Event): void => {\n const detail = (event as CustomEvent<WorkspaceActivateDetail>).detail\n if (detail?.pluginId !== pluginId) close()\n }\n window.addEventListener(WORKSPACE_ACTIVATE_EVENT, onActivate)\n return () => window.removeEventListener(WORKSPACE_ACTIVATE_EVENT, onActivate)\n}\n", "var __defProp = Object.defineProperty;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __objRest = (source, exclude) => {\n var target = {};\n for (var prop in source)\n if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n target[prop] = source[prop];\n if (source != null && __getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(source)) {\n if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n target[prop] = source[prop];\n }\n return target;\n};\n\n// src/index.tsx\nimport React from \"react\";\n\n// src/third-party/qrcodegen/index.ts\n/**\n * @license QR Code generator library (TypeScript)\n * Copyright (c) Project Nayuki.\n * SPDX-License-Identifier: MIT\n */\nvar qrcodegen;\n((qrcodegen2) => {\n const _QrCode = class _QrCode {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code with the given version number,\n // error correction level, data codeword bytes, and mask number.\n // This is a low-level API that most users should not use directly.\n // A mid-level API is the encodeSegments() function.\n constructor(version, errorCorrectionLevel, dataCodewords, msk) {\n this.version = version;\n this.errorCorrectionLevel = errorCorrectionLevel;\n // The modules of this QR Code (false = light, true = dark).\n // Immutable after constructor finishes. Accessed through getModule().\n this.modules = [];\n // Indicates function modules that are not subjected to masking. Discarded when constructor finishes.\n this.isFunction = [];\n if (version < _QrCode.MIN_VERSION || version > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version value out of range\");\n if (msk < -1 || msk > 7)\n throw new RangeError(\"Mask value out of range\");\n this.size = version * 4 + 17;\n let row = [];\n for (let i = 0; i < this.size; i++)\n row.push(false);\n for (let i = 0; i < this.size; i++) {\n this.modules.push(row.slice());\n this.isFunction.push(row.slice());\n }\n this.drawFunctionPatterns();\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n this.drawCodewords(allCodewords);\n if (msk == -1) {\n let minPenalty = 1e9;\n for (let i = 0; i < 8; i++) {\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n if (penalty < minPenalty) {\n msk = i;\n minPenalty = penalty;\n }\n this.applyMask(i);\n }\n }\n assert(0 <= msk && msk <= 7);\n this.mask = msk;\n this.applyMask(msk);\n this.drawFormatBits(msk);\n this.isFunction = [];\n }\n /*-- Static factory functions (high level) --*/\n // Returns a QR Code representing the given Unicode text string at the given error correction level.\n // As a conservative upper bound, this function is guaranteed to succeed for strings that have 738 or fewer\n // Unicode code points (not UTF-16 code units) if the low error correction level is used. The smallest possible\n // QR Code version is automatically chosen for the output. The ECC level of the result may be higher than the\n // ecl argument if it can be done without increasing the version.\n static encodeText(text, ecl) {\n const segs = qrcodegen2.QrSegment.makeSegments(text);\n return _QrCode.encodeSegments(segs, ecl);\n }\n // Returns a QR Code representing the given binary data at the given error correction level.\n // This function always encodes using the binary segment mode, not any text mode. The maximum number of\n // bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output.\n // The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version.\n static encodeBinary(data, ecl) {\n const seg = qrcodegen2.QrSegment.makeBytes(data);\n return _QrCode.encodeSegments([seg], ecl);\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a QR Code representing the given segments with the given encoding parameters.\n // The smallest possible QR Code version within the given range is automatically\n // chosen for the output. Iff boostEcl is true, then the ECC level of the result\n // may be higher than the ecl argument if it can be done without increasing the\n // version. The mask number is either between 0 to 7 (inclusive) to force that\n // mask, or -1 to automatically choose an appropriate mask (which may be slow).\n // This function allows the user to create a custom sequence of segments that switches\n // between modes (such as alphanumeric and byte) to encode text in less space.\n // This is a mid-level API; the high-level API is encodeText() and encodeBinary().\n static encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {\n if (!(_QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= _QrCode.MAX_VERSION) || mask < -1 || mask > 7)\n throw new RangeError(\"Invalid value\");\n let version;\n let dataUsedBits;\n for (version = minVersion; ; version++) {\n const dataCapacityBits2 = _QrCode.getNumDataCodewords(version, ecl) * 8;\n const usedBits = QrSegment.getTotalBits(segs, version);\n if (usedBits <= dataCapacityBits2) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion)\n throw new RangeError(\"Data too long\");\n }\n for (const newEcl of [_QrCode.Ecc.MEDIUM, _QrCode.Ecc.QUARTILE, _QrCode.Ecc.HIGH]) {\n if (boostEcl && dataUsedBits <= _QrCode.getNumDataCodewords(version, newEcl) * 8)\n ecl = newEcl;\n }\n let bb = [];\n for (const seg of segs) {\n appendBits(seg.mode.modeBits, 4, bb);\n appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);\n for (const b of seg.getData())\n bb.push(b);\n }\n assert(bb.length == dataUsedBits);\n const dataCapacityBits = _QrCode.getNumDataCodewords(version, ecl) * 8;\n assert(bb.length <= dataCapacityBits);\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - bb.length % 8) % 8, bb);\n assert(bb.length % 8 == 0);\n for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 236 ^ 17)\n appendBits(padByte, 8, bb);\n let dataCodewords = [];\n while (dataCodewords.length * 8 < bb.length)\n dataCodewords.push(0);\n bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));\n return new _QrCode(version, ecl, dataCodewords, mask);\n }\n /*-- Accessor methods --*/\n // Returns the color of the module (pixel) at the given coordinates, which is false\n // for light or true for dark. The top left corner has the coordinates (x=0, y=0).\n // If the given coordinates are out of bounds, then false (light) is returned.\n getModule(x, y) {\n return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x];\n }\n // Modified to expose modules for easy access\n getModules() {\n return this.modules;\n }\n /*-- Private helper methods for constructor: Drawing function modules --*/\n // Reads this object's version field, and draws and marks all function modules.\n drawFunctionPatterns() {\n for (let i = 0; i < this.size; i++) {\n this.setFunctionModule(6, i, i % 2 == 0);\n this.setFunctionModule(i, 6, i % 2 == 0);\n }\n this.drawFinderPattern(3, 3);\n this.drawFinderPattern(this.size - 4, 3);\n this.drawFinderPattern(3, this.size - 4);\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n if (!(i == 0 && j == 0 || i == 0 && j == numAlign - 1 || i == numAlign - 1 && j == 0))\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n this.drawFormatBits(0);\n this.drawVersion();\n }\n // Draws two copies of the format bits (with its own error correction code)\n // based on the given mask and this object's error correction level field.\n drawFormatBits(mask) {\n const data = this.errorCorrectionLevel.formatBits << 3 | mask;\n let rem = data;\n for (let i = 0; i < 10; i++)\n rem = rem << 1 ^ (rem >>> 9) * 1335;\n const bits = (data << 10 | rem) ^ 21522;\n assert(bits >>> 15 == 0);\n for (let i = 0; i <= 5; i++)\n this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++)\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n for (let i = 0; i < 8; i++)\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n for (let i = 8; i < 15; i++)\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n this.setFunctionModule(8, this.size - 8, true);\n }\n // Draws two copies of the version bits (with its own error correction code),\n // based on this object's version field, iff 7 <= version <= 40.\n drawVersion() {\n if (this.version < 7)\n return;\n let rem = this.version;\n for (let i = 0; i < 12; i++)\n rem = rem << 1 ^ (rem >>> 11) * 7973;\n const bits = this.version << 12 | rem;\n assert(bits >>> 18 == 0);\n for (let i = 0; i < 18; i++) {\n const color = getBit(bits, i);\n const a = this.size - 11 + i % 3;\n const b = Math.floor(i / 3);\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n // Draws a 9*9 finder pattern including the border separator,\n // with the center module at (x, y). Modules can be out of bounds.\n drawFinderPattern(x, y) {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\n const xx = x + dx;\n const yy = y + dy;\n if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size)\n this.setFunctionModule(xx, yy, dist != 2 && dist != 4);\n }\n }\n }\n // Draws a 5*5 alignment pattern, with the center module\n // at (x, y). All modules must be in bounds.\n drawAlignmentPattern(x, y) {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++)\n this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1);\n }\n }\n // Sets the color of a module and marks it as a function module.\n // Only used by the constructor. Coordinates must be in bounds.\n setFunctionModule(x, y, isDark) {\n this.modules[y][x] = isDark;\n this.isFunction[y][x] = true;\n }\n /*-- Private helper methods for constructor: Codewords and masking --*/\n // Returns a new byte string representing the given data with the appropriate error correction\n // codewords appended to it, based on this object's version and error correction level.\n addEccAndInterleave(data) {\n const ver = this.version;\n const ecl = this.errorCorrectionLevel;\n if (data.length != _QrCode.getNumDataCodewords(ver, ecl))\n throw new RangeError(\"Invalid argument\");\n const numBlocks = _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n const blockEccLen = _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver];\n const rawCodewords = Math.floor(_QrCode.getNumRawDataModules(ver) / 8);\n const numShortBlocks = numBlocks - rawCodewords % numBlocks;\n const shortBlockLen = Math.floor(rawCodewords / numBlocks);\n let blocks = [];\n const rsDiv = _QrCode.reedSolomonComputeDivisor(blockEccLen);\n for (let i = 0, k = 0; i < numBlocks; i++) {\n let dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n k += dat.length;\n const ecc = _QrCode.reedSolomonComputeRemainder(dat, rsDiv);\n if (i < numShortBlocks)\n dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n let result = [];\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n if (i != shortBlockLen - blockEccLen || j >= numShortBlocks)\n result.push(block[i]);\n });\n }\n assert(result.length == rawCodewords);\n return result;\n }\n // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n // data area of this QR Code. Function modules need to be marked off before this is called.\n drawCodewords(data) {\n if (data.length != Math.floor(_QrCode.getNumRawDataModules(this.version) / 8))\n throw new RangeError(\"Invalid argument\");\n let i = 0;\n for (let right = this.size - 1; right >= 1; right -= 2) {\n if (right == 6)\n right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n for (let j = 0; j < 2; j++) {\n const x = right - j;\n const upward = (right + 1 & 2) == 0;\n const y = upward ? this.size - 1 - vert : vert;\n if (!this.isFunction[y][x] && i < data.length * 8) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n }\n }\n }\n assert(i == data.length * 8);\n }\n // XORs the codeword modules in this QR Code with the given mask pattern.\n // The function modules must be marked and the codeword bits must be drawn\n // before masking. Due to the arithmetic of XOR, calling applyMask() with\n // the same mask value a second time will undo the mask. A final well-formed\n // QR Code needs exactly one (not zero, two, etc.) mask applied.\n applyMask(mask) {\n if (mask < 0 || mask > 7)\n throw new RangeError(\"Mask value out of range\");\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n let invert;\n switch (mask) {\n case 0:\n invert = (x + y) % 2 == 0;\n break;\n case 1:\n invert = y % 2 == 0;\n break;\n case 2:\n invert = x % 3 == 0;\n break;\n case 3:\n invert = (x + y) % 3 == 0;\n break;\n case 4:\n invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0;\n break;\n case 5:\n invert = x * y % 2 + x * y % 3 == 0;\n break;\n case 6:\n invert = (x * y % 2 + x * y % 3) % 2 == 0;\n break;\n case 7:\n invert = ((x + y) % 2 + x * y % 3) % 2 == 0;\n break;\n default:\n throw new Error(\"Unreachable\");\n }\n if (!this.isFunction[y][x] && invert)\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n // Calculates and returns the penalty score based on state of this QR Code's current modules.\n // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n getPenaltyScore() {\n let result = 0;\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] == runColor) {\n runX++;\n if (runX == 5)\n result += _QrCode.PENALTY_N1;\n else if (runX > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n let runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] == runColor) {\n runY++;\n if (runY == 5)\n result += _QrCode.PENALTY_N1;\n else if (runY > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * _QrCode.PENALTY_N3;\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * _QrCode.PENALTY_N3;\n }\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n if (color == this.modules[y][x + 1] && color == this.modules[y + 1][x] && color == this.modules[y + 1][x + 1])\n result += _QrCode.PENALTY_N2;\n }\n }\n let dark = 0;\n for (const row of this.modules)\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n const total = this.size * this.size;\n const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n assert(0 <= k && k <= 9);\n result += k * _QrCode.PENALTY_N4;\n assert(0 <= result && result <= 2568888);\n return result;\n }\n /*-- Private helper functions --*/\n // Returns an ascending list of positions of alignment patterns for this version number.\n // Each position is in the range [0,177), and are used on both the x and y axes.\n // This could be implemented as lookup table of 40 variable-length lists of integers.\n getAlignmentPatternPositions() {\n if (this.version == 1)\n return [];\n else {\n const numAlign = Math.floor(this.version / 7) + 2;\n const step = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n let result = [6];\n for (let pos = this.size - 7; result.length < numAlign; pos -= step)\n result.splice(1, 0, pos);\n return result;\n }\n }\n // Returns the number of data bits that can be stored in a QR Code of the given version number, after\n // all function modules are excluded. This includes remainder bits, so it might not be a multiple of 8.\n // The result is in the range [208, 29648]. This could be implemented as a 40-entry lookup table.\n static getNumRawDataModules(ver) {\n if (ver < _QrCode.MIN_VERSION || ver > _QrCode.MAX_VERSION)\n throw new RangeError(\"Version number out of range\");\n let result = (16 * ver + 128) * ver + 64;\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7)\n result -= 36;\n }\n assert(208 <= result && result <= 29648);\n return result;\n }\n // Returns the number of 8-bit data (i.e. not error correction) codewords contained in any\n // QR Code of the given version number and error correction level, with remainder bits discarded.\n // This stateless pure function could be implemented as a (40*4)-cell lookup table.\n static getNumDataCodewords(ver, ecl) {\n return Math.floor(_QrCode.getNumRawDataModules(ver) / 8) - _QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * _QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];\n }\n // Returns a Reed-Solomon ECC generator polynomial for the given degree. This could be\n // implemented as a lookup table over all possible parameter values, instead of as an algorithm.\n static reedSolomonComputeDivisor(degree) {\n if (degree < 1 || degree > 255)\n throw new RangeError(\"Degree out of range\");\n let result = [];\n for (let i = 0; i < degree - 1; i++)\n result.push(0);\n result.push(1);\n let root = 1;\n for (let i = 0; i < degree; i++) {\n for (let j = 0; j < result.length; j++) {\n result[j] = _QrCode.reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length)\n result[j] ^= result[j + 1];\n }\n root = _QrCode.reedSolomonMultiply(root, 2);\n }\n return result;\n }\n // Returns the Reed-Solomon error correction codeword for the given data and divisor polynomials.\n static reedSolomonComputeRemainder(data, divisor) {\n let result = divisor.map((_) => 0);\n for (const b of data) {\n const factor = b ^ result.shift();\n result.push(0);\n divisor.forEach((coef, i) => result[i] ^= _QrCode.reedSolomonMultiply(coef, factor));\n }\n return result;\n }\n // Returns the product of the two given field elements modulo GF(2^8/0x11D). The arguments and result\n // are unsigned 8-bit integers. This could be implemented as a lookup table of 256*256 entries of uint8.\n static reedSolomonMultiply(x, y) {\n if (x >>> 8 != 0 || y >>> 8 != 0)\n throw new RangeError(\"Byte out of range\");\n let z = 0;\n for (let i = 7; i >= 0; i--) {\n z = z << 1 ^ (z >>> 7) * 285;\n z ^= (y >>> i & 1) * x;\n }\n assert(z >>> 8 == 0);\n return z;\n }\n // Can only be called immediately after a light run is added, and\n // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n finderPenaltyCountPatterns(runHistory) {\n const n = runHistory[1];\n assert(n <= this.size * 3);\n const core = n > 0 && runHistory[2] == n && runHistory[3] == n * 3 && runHistory[4] == n && runHistory[5] == n;\n return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);\n }\n // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {\n if (currentRunColor) {\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n currentRunLength = 0;\n }\n currentRunLength += this.size;\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n finderPenaltyAddHistory(currentRunLength, runHistory) {\n if (runHistory[0] == 0)\n currentRunLength += this.size;\n runHistory.pop();\n runHistory.unshift(currentRunLength);\n }\n };\n /*-- Constants and tables --*/\n // The minimum version number supported in the QR Code Model 2 standard.\n _QrCode.MIN_VERSION = 1;\n // The maximum version number supported in the QR Code Model 2 standard.\n _QrCode.MAX_VERSION = 40;\n // For use in getPenaltyScore(), when evaluating which mask is best.\n _QrCode.PENALTY_N1 = 3;\n _QrCode.PENALTY_N2 = 3;\n _QrCode.PENALTY_N3 = 40;\n _QrCode.PENALTY_N4 = 10;\n _QrCode.ECC_CODEWORDS_PER_BLOCK = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Low\n [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n // Medium\n [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Quartile\n [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]\n // High\n ];\n _QrCode.NUM_ERROR_CORRECTION_BLOCKS = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n // Low\n [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n // Medium\n [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n // Quartile\n [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]\n // High\n ];\n let QrCode = _QrCode;\n qrcodegen2.QrCode = _QrCode;\n function appendBits(val, len, bb) {\n if (len < 0 || len > 31 || val >>> len != 0)\n throw new RangeError(\"Value out of range\");\n for (let i = len - 1; i >= 0; i--)\n bb.push(val >>> i & 1);\n }\n function getBit(x, i) {\n return (x >>> i & 1) != 0;\n }\n function assert(cond) {\n if (!cond)\n throw new Error(\"Assertion error\");\n }\n const _QrSegment = class _QrSegment {\n /*-- Constructor (low level) and fields --*/\n // Creates a new QR Code segment with the given attributes and data.\n // The character count (numChars) must agree with the mode and the bit buffer length,\n // but the constraint isn't checked. The given bit buffer is cloned and stored.\n constructor(mode, numChars, bitData) {\n this.mode = mode;\n this.numChars = numChars;\n this.bitData = bitData;\n if (numChars < 0)\n throw new RangeError(\"Invalid argument\");\n this.bitData = bitData.slice();\n }\n /*-- Static factory functions (mid level) --*/\n // Returns a segment representing the given binary data encoded in\n // byte mode. All input byte arrays are acceptable. Any text string\n // can be converted to UTF-8 bytes and encoded as a byte mode segment.\n static makeBytes(data) {\n let bb = [];\n for (const b of data)\n appendBits(b, 8, bb);\n return new _QrSegment(_QrSegment.Mode.BYTE, data.length, bb);\n }\n // Returns a segment representing the given string of decimal digits encoded in numeric mode.\n static makeNumeric(digits) {\n if (!_QrSegment.isNumeric(digits))\n throw new RangeError(\"String contains non-numeric characters\");\n let bb = [];\n for (let i = 0; i < digits.length; ) {\n const n = Math.min(digits.length - i, 3);\n appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new _QrSegment(_QrSegment.Mode.NUMERIC, digits.length, bb);\n }\n // Returns a segment representing the given text string encoded in alphanumeric mode.\n // The characters allowed are: 0 to 9, A to Z (uppercase only), space,\n // dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static makeAlphanumeric(text) {\n if (!_QrSegment.isAlphanumeric(text))\n throw new RangeError(\"String contains unencodable characters in alphanumeric mode\");\n let bb = [];\n let i;\n for (i = 0; i + 2 <= text.length; i += 2) {\n let temp = _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n temp += _QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n if (i < text.length)\n appendBits(_QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n return new _QrSegment(_QrSegment.Mode.ALPHANUMERIC, text.length, bb);\n }\n // Returns a new mutable list of zero or more segments to represent the given Unicode text string.\n // The result may use various segment modes and switch modes to optimize the length of the bit stream.\n static makeSegments(text) {\n if (text == \"\")\n return [];\n else if (_QrSegment.isNumeric(text))\n return [_QrSegment.makeNumeric(text)];\n else if (_QrSegment.isAlphanumeric(text))\n return [_QrSegment.makeAlphanumeric(text)];\n else\n return [_QrSegment.makeBytes(_QrSegment.toUtf8ByteArray(text))];\n }\n // Returns a segment representing an Extended Channel Interpretation\n // (ECI) designator with the given assignment value.\n static makeEci(assignVal) {\n let bb = [];\n if (assignVal < 0)\n throw new RangeError(\"ECI assignment value out of range\");\n else if (assignVal < 1 << 7)\n appendBits(assignVal, 8, bb);\n else if (assignVal < 1 << 14) {\n appendBits(2, 2, bb);\n appendBits(assignVal, 14, bb);\n } else if (assignVal < 1e6) {\n appendBits(6, 3, bb);\n appendBits(assignVal, 21, bb);\n } else\n throw new RangeError(\"ECI assignment value out of range\");\n return new _QrSegment(_QrSegment.Mode.ECI, 0, bb);\n }\n // Tests whether the given string can be encoded as a segment in numeric mode.\n // A string is encodable iff each character is in the range 0 to 9.\n static isNumeric(text) {\n return _QrSegment.NUMERIC_REGEX.test(text);\n }\n // Tests whether the given string can be encoded as a segment in alphanumeric mode.\n // A string is encodable iff each character is in the following set: 0 to 9, A to Z\n // (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon.\n static isAlphanumeric(text) {\n return _QrSegment.ALPHANUMERIC_REGEX.test(text);\n }\n /*-- Methods --*/\n // Returns a new copy of the data bits of this segment.\n getData() {\n return this.bitData.slice();\n }\n // (Package-private) Calculates and returns the number of bits needed to encode the given segments at\n // the given version. The result is infinity if a segment has too many characters to fit its length field.\n static getTotalBits(segs, version) {\n let result = 0;\n for (const seg of segs) {\n const ccbits = seg.mode.numCharCountBits(version);\n if (seg.numChars >= 1 << ccbits)\n return Infinity;\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n }\n // Returns a new array of bytes representing the given string encoded in UTF-8.\n static toUtf8ByteArray(str) {\n str = encodeURI(str);\n let result = [];\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) != \"%\")\n result.push(str.charCodeAt(i));\n else {\n result.push(parseInt(str.substring(i + 1, i + 3), 16));\n i += 2;\n }\n }\n return result;\n }\n };\n /*-- Constants --*/\n // Describes precisely all strings that are encodable in numeric mode.\n _QrSegment.NUMERIC_REGEX = /^[0-9]*$/;\n // Describes precisely all strings that are encodable in alphanumeric mode.\n _QrSegment.ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+.\\/:-]*$/;\n // The set of all legal characters in alphanumeric mode,\n // where each character value maps to the index in the string.\n _QrSegment.ALPHANUMERIC_CHARSET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\n let QrSegment = _QrSegment;\n qrcodegen2.QrSegment = _QrSegment;\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrCode;\n ((QrCode2) => {\n const _Ecc = class _Ecc {\n // The QR Code can tolerate about 30% erroneous codewords\n /*-- Constructor and fields --*/\n constructor(ordinal, formatBits) {\n this.ordinal = ordinal;\n this.formatBits = formatBits;\n }\n };\n /*-- Constants --*/\n _Ecc.LOW = new _Ecc(0, 1);\n // The QR Code can tolerate about 7% erroneous codewords\n _Ecc.MEDIUM = new _Ecc(1, 0);\n // The QR Code can tolerate about 15% erroneous codewords\n _Ecc.QUARTILE = new _Ecc(2, 3);\n // The QR Code can tolerate about 25% erroneous codewords\n _Ecc.HIGH = new _Ecc(3, 2);\n let Ecc = _Ecc;\n QrCode2.Ecc = _Ecc;\n })(QrCode = qrcodegen2.QrCode || (qrcodegen2.QrCode = {}));\n})(qrcodegen || (qrcodegen = {}));\n((qrcodegen2) => {\n let QrSegment;\n ((QrSegment2) => {\n const _Mode = class _Mode {\n /*-- Constructor and fields --*/\n constructor(modeBits, numBitsCharCount) {\n this.modeBits = modeBits;\n this.numBitsCharCount = numBitsCharCount;\n }\n /*-- Method --*/\n // (Package-private) Returns the bit width of the character count field for a segment in\n // this mode in a QR Code at the given version number. The result is in the range [0, 16].\n numCharCountBits(ver) {\n return this.numBitsCharCount[Math.floor((ver + 7) / 17)];\n }\n };\n /*-- Constants --*/\n _Mode.NUMERIC = new _Mode(1, [10, 12, 14]);\n _Mode.ALPHANUMERIC = new _Mode(2, [9, 11, 13]);\n _Mode.BYTE = new _Mode(4, [8, 16, 16]);\n _Mode.KANJI = new _Mode(8, [8, 10, 12]);\n _Mode.ECI = new _Mode(7, [0, 0, 0]);\n let Mode = _Mode;\n QrSegment2.Mode = _Mode;\n })(QrSegment = qrcodegen2.QrSegment || (qrcodegen2.QrSegment = {}));\n})(qrcodegen || (qrcodegen = {}));\nvar qrcodegen_default = qrcodegen;\n\n// src/index.tsx\n/**\n * @license qrcode.react\n * Copyright (c) Paul O'Shannessy\n * SPDX-License-Identifier: ISC\n */\nvar ERROR_LEVEL_MAP = {\n L: qrcodegen_default.QrCode.Ecc.LOW,\n M: qrcodegen_default.QrCode.Ecc.MEDIUM,\n Q: qrcodegen_default.QrCode.Ecc.QUARTILE,\n H: qrcodegen_default.QrCode.Ecc.HIGH\n};\nvar DEFAULT_SIZE = 128;\nvar DEFAULT_LEVEL = \"L\";\nvar DEFAULT_BGCOLOR = \"#FFFFFF\";\nvar DEFAULT_FGCOLOR = \"#000000\";\nvar DEFAULT_INCLUDEMARGIN = false;\nvar DEFAULT_MINVERSION = 1;\nvar SPEC_MARGIN_SIZE = 4;\nvar DEFAULT_MARGIN_SIZE = 0;\nvar DEFAULT_IMG_SCALE = 0.1;\nfunction generatePath(modules, margin = 0) {\n const ops = [];\n modules.forEach(function(row, y) {\n let start = null;\n row.forEach(function(cell, x) {\n if (!cell && start !== null) {\n ops.push(\n `M${start + margin} ${y + margin}h${x - start}v1H${start + margin}z`\n );\n start = null;\n return;\n }\n if (x === row.length - 1) {\n if (!cell) {\n return;\n }\n if (start === null) {\n ops.push(`M${x + margin},${y + margin} h1v1H${x + margin}z`);\n } else {\n ops.push(\n `M${start + margin},${y + margin} h${x + 1 - start}v1H${start + margin}z`\n );\n }\n return;\n }\n if (cell && start === null) {\n start = x;\n }\n });\n });\n return ops.join(\"\");\n}\nfunction excavateModules(modules, excavation) {\n return modules.slice().map((row, y) => {\n if (y < excavation.y || y >= excavation.y + excavation.h) {\n return row;\n }\n return row.map((cell, x) => {\n if (x < excavation.x || x >= excavation.x + excavation.w) {\n return cell;\n }\n return false;\n });\n });\n}\nfunction getImageSettings(cells, size, margin, imageSettings) {\n if (imageSettings == null) {\n return null;\n }\n const numCells = cells.length + margin * 2;\n const defaultSize = Math.floor(size * DEFAULT_IMG_SCALE);\n const scale = numCells / size;\n const w = (imageSettings.width || defaultSize) * scale;\n const h = (imageSettings.height || defaultSize) * scale;\n const x = imageSettings.x == null ? cells.length / 2 - w / 2 : imageSettings.x * scale;\n const y = imageSettings.y == null ? cells.length / 2 - h / 2 : imageSettings.y * scale;\n const opacity = imageSettings.opacity == null ? 1 : imageSettings.opacity;\n let excavation = null;\n if (imageSettings.excavate) {\n let floorX = Math.floor(x);\n let floorY = Math.floor(y);\n let ceilW = Math.ceil(w + x - floorX);\n let ceilH = Math.ceil(h + y - floorY);\n excavation = { x: floorX, y: floorY, w: ceilW, h: ceilH };\n }\n const crossOrigin = imageSettings.crossOrigin;\n return { x, y, h, w, excavation, opacity, crossOrigin };\n}\nfunction getMarginSize(includeMargin, marginSize) {\n if (marginSize != null) {\n return Math.max(Math.floor(marginSize), 0);\n }\n return includeMargin ? SPEC_MARGIN_SIZE : DEFAULT_MARGIN_SIZE;\n}\nfunction useQRCode({\n value,\n level,\n minVersion,\n includeMargin,\n marginSize,\n imageSettings,\n size,\n boostLevel\n}) {\n let qrcode = React.useMemo(() => {\n const values = Array.isArray(value) ? value : [value];\n const segments = values.reduce((accum, v) => {\n accum.push(...qrcodegen_default.QrSegment.makeSegments(v));\n return accum;\n }, []);\n return qrcodegen_default.QrCode.encodeSegments(\n segments,\n ERROR_LEVEL_MAP[level],\n minVersion,\n void 0,\n void 0,\n boostLevel\n );\n }, [value, level, minVersion, boostLevel]);\n const { cells, margin, numCells, calculatedImageSettings } = React.useMemo(() => {\n let cells2 = qrcode.getModules();\n const margin2 = getMarginSize(includeMargin, marginSize);\n const numCells2 = cells2.length + margin2 * 2;\n const calculatedImageSettings2 = getImageSettings(\n cells2,\n size,\n margin2,\n imageSettings\n );\n return {\n cells: cells2,\n margin: margin2,\n numCells: numCells2,\n calculatedImageSettings: calculatedImageSettings2\n };\n }, [qrcode, size, imageSettings, includeMargin, marginSize]);\n return {\n qrcode,\n margin,\n cells,\n numCells,\n calculatedImageSettings\n };\n}\nvar SUPPORTS_PATH2D = function() {\n try {\n new Path2D().addPath(new Path2D());\n } catch (e) {\n return false;\n }\n return true;\n}();\nvar QRCodeCanvas = React.forwardRef(\n function QRCodeCanvas2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n marginSize,\n imageSettings\n } = _a, extraProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const _b = extraProps, { style } = _b, otherProps = __objRest(_b, [\"style\"]);\n const imgSrc = imageSettings == null ? void 0 : imageSettings.src;\n const _canvas = React.useRef(null);\n const _image = React.useRef(null);\n const setCanvasRef = React.useCallback(\n (node) => {\n _canvas.current = node;\n if (typeof forwardedRef === \"function\") {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef]\n );\n const [isImgLoaded, setIsImageLoaded] = React.useState(false);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n React.useEffect(() => {\n if (_canvas.current != null) {\n const canvas = _canvas.current;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return;\n }\n let cellsToDraw = cells;\n const image = _image.current;\n const haveImageToRender = calculatedImageSettings != null && image !== null && image.complete && image.naturalHeight !== 0 && image.naturalWidth !== 0;\n if (haveImageToRender) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n }\n const pixelRatio = window.devicePixelRatio || 1;\n canvas.height = canvas.width = size * pixelRatio;\n const scale = size / numCells * pixelRatio;\n ctx.scale(scale, scale);\n ctx.fillStyle = bgColor;\n ctx.fillRect(0, 0, numCells, numCells);\n ctx.fillStyle = fgColor;\n if (SUPPORTS_PATH2D) {\n ctx.fill(new Path2D(generatePath(cellsToDraw, margin)));\n } else {\n cells.forEach(function(row, rdx) {\n row.forEach(function(cell, cdx) {\n if (cell) {\n ctx.fillRect(cdx + margin, rdx + margin, 1, 1);\n }\n });\n });\n }\n if (calculatedImageSettings) {\n ctx.globalAlpha = calculatedImageSettings.opacity;\n }\n if (haveImageToRender) {\n ctx.drawImage(\n image,\n calculatedImageSettings.x + margin,\n calculatedImageSettings.y + margin,\n calculatedImageSettings.w,\n calculatedImageSettings.h\n );\n }\n }\n });\n React.useEffect(() => {\n setIsImageLoaded(false);\n }, [imgSrc]);\n const canvasStyle = __spreadValues({ height: size, width: size }, style);\n let img = null;\n if (imgSrc != null) {\n img = /* @__PURE__ */ React.createElement(\n \"img\",\n {\n src: imgSrc,\n key: imgSrc,\n style: { display: \"none\" },\n onLoad: () => {\n setIsImageLoaded(true);\n },\n ref: _image,\n crossOrigin: calculatedImageSettings == null ? void 0 : calculatedImageSettings.crossOrigin\n }\n );\n }\n return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\n \"canvas\",\n __spreadValues({\n style: canvasStyle,\n height: size,\n width: size,\n ref: setCanvasRef,\n role: \"img\"\n }, otherProps)\n ), img);\n }\n);\nQRCodeCanvas.displayName = \"QRCodeCanvas\";\nvar QRCodeSVG = React.forwardRef(\n function QRCodeSVG2(props, forwardedRef) {\n const _a = props, {\n value,\n size = DEFAULT_SIZE,\n level = DEFAULT_LEVEL,\n bgColor = DEFAULT_BGCOLOR,\n fgColor = DEFAULT_FGCOLOR,\n includeMargin = DEFAULT_INCLUDEMARGIN,\n minVersion = DEFAULT_MINVERSION,\n boostLevel,\n title,\n marginSize,\n imageSettings\n } = _a, otherProps = __objRest(_a, [\n \"value\",\n \"size\",\n \"level\",\n \"bgColor\",\n \"fgColor\",\n \"includeMargin\",\n \"minVersion\",\n \"boostLevel\",\n \"title\",\n \"marginSize\",\n \"imageSettings\"\n ]);\n const { margin, cells, numCells, calculatedImageSettings } = useQRCode({\n value,\n level,\n minVersion,\n boostLevel,\n includeMargin,\n marginSize,\n imageSettings,\n size\n });\n let cellsToDraw = cells;\n let image = null;\n if (imageSettings != null && calculatedImageSettings != null) {\n if (calculatedImageSettings.excavation != null) {\n cellsToDraw = excavateModules(\n cells,\n calculatedImageSettings.excavation\n );\n }\n image = /* @__PURE__ */ React.createElement(\n \"image\",\n {\n href: imageSettings.src,\n height: calculatedImageSettings.h,\n width: calculatedImageSettings.w,\n x: calculatedImageSettings.x + margin,\n y: calculatedImageSettings.y + margin,\n preserveAspectRatio: \"none\",\n opacity: calculatedImageSettings.opacity,\n crossOrigin: calculatedImageSettings.crossOrigin\n }\n );\n }\n const fgPath = generatePath(cellsToDraw, margin);\n return /* @__PURE__ */ React.createElement(\n \"svg\",\n __spreadValues({\n height: size,\n width: size,\n viewBox: `0 0 ${numCells} ${numCells}`,\n ref: forwardedRef,\n role: \"img\"\n }, otherProps),\n !!title && /* @__PURE__ */ React.createElement(\"title\", null, title),\n /* @__PURE__ */ React.createElement(\n \"path\",\n {\n fill: bgColor,\n d: `M0,0 h${numCells}v${numCells}H0z`,\n shapeRendering: \"crispEdges\"\n }\n ),\n /* @__PURE__ */ React.createElement(\"path\", { fill: fgColor, d: fgPath, shapeRendering: \"crispEdges\" }),\n image\n );\n }\n);\nQRCodeSVG.displayName = \"QRCodeSVG\";\nexport {\n QRCodeCanvas,\n QRCodeSVG\n};\n", ".dsh-partner-sidebar,\n.dsh-partner-workspace {\n color-scheme: light;\n --partner-canvas: transparent;\n --partner-surface: rgba(246, 247, 250, .17);\n --partner-pane: rgba(255, 255, 255, .16);\n --partner-raised: rgba(255, 255, 255, .38);\n --partner-control: rgba(255, 255, 255, .27);\n --partner-card-surface: rgba(255, 255, 255, .16);\n --partner-card-highlight: rgba(255, 255, 255, .58);\n --partner-solid-canvas: #e9e9ed;\n --partner-solid-panel: #f2f3f7;\n --partner-solid-raised: #f8f8fa;\n --partner-solid-control: #ffffff;\n --partner-card-shadow:\n inset 0 1px 0 var(--partner-card-highlight),\n inset 0 -1px 0 rgba(60, 60, 67, .08),\n 0 9px 24px rgba(31, 31, 35, .075),\n 0 2px 6px rgba(31, 31, 35, .04);\n --partner-text: #1d1d1f;\n --partner-text-secondary: #515154;\n --partner-text-tertiary: #747478;\n --partner-accent: #6e6e73;\n --partner-accent-strong: #2c2c2e;\n --partner-on-accent: #ffffff;\n --partner-success: #248a3d;\n --partner-weixin: #248a52;\n --partner-warning: #c93400;\n --partner-danger: #d70015;\n --partner-border: rgba(60, 60, 67, .14);\n --partner-separator: rgba(60, 60, 67, .11);\n --partner-hover: rgba(118, 118, 128, .09);\n --partner-selected: rgba(60, 60, 67, .085);\n --partner-focus-ring: rgba(60, 60, 67, .46);\n --partner-glass-clear: rgba(255, 255, 255, .11);\n --partner-glass-regular: rgba(255, 255, 255, .24);\n --partner-glass-thick: rgba(255, 255, 255, .42);\n --partner-glass-highlight: rgba(255, 255, 255, .7);\n --partner-glass-rim-shadow: rgba(60, 60, 67, .11);\n --partner-glass-filter: saturate(1.22) contrast(1.03) blur(32px);\n --partner-frosted-filter: blur(18px) saturate(.84) contrast(1.025);\n --partner-shadow-sm: 0 1px 2px rgba(0, 0, 0, .055);\n --partner-shadow-md: 0 10px 28px rgba(31, 31, 35, .085);\n --partner-shadow-lg: 0 24px 64px rgba(31, 31, 35, .14);\n --partner-glass-shadow:\n inset 0 1px 0 var(--partner-glass-highlight),\n inset 0 -1px 0 var(--partner-glass-rim-shadow),\n var(--partner-shadow-sm);\n --partner-ease-out: cubic-bezier(.22, 1, .36, 1);\n --partner-font-family: ui-sans-serif, -apple-system, BlinkMacSystemFont, \"SF Pro Text\", \"PingFang SC\", \"Microsoft YaHei\", sans-serif;\n --partner-font-caption: 12px;\n --partner-font-body: 13px;\n --partner-font-label: 14px;\n --partner-font-title: 18px;\n --partner-font-heading: 22px;\n --partner-font-display: clamp(24px, 2.2vw, 28px);\n color: var(--partner-text);\n font-family: var(--partner-font-family);\n font-size: var(--partner-font-body);\n line-height: 1.5;\n}\n\nbody[data-ds-dark-theme] :is(.dsh-partner-sidebar, .dsh-partner-workspace) {\n color-scheme: dark;\n --partner-canvas: transparent;\n --partner-surface: rgba(8, 10, 12, .19);\n --partner-pane: rgba(8, 10, 12, .18);\n --partner-raised: rgba(8, 10, 12, .42);\n --partner-control: rgba(8, 10, 12, .3);\n --partner-card-surface: rgba(7, 9, 11, .22);\n --partner-card-highlight: rgba(255, 255, 255, .11);\n --partner-solid-canvas: #1c1c1e;\n --partner-solid-panel: #2c2c2e;\n --partner-solid-raised: #323235;\n --partner-solid-control: #3a3a3c;\n --partner-card-shadow:\n inset 0 1px 0 var(--partner-card-highlight),\n inset 0 -1px 0 rgba(0, 0, 0, .28),\n 0 12px 30px rgba(0, 0, 0, .28),\n 0 2px 7px rgba(0, 0, 0, .2);\n --partner-text: #f5f5f7;\n --partner-text-secondary: #d1d1d6;\n --partner-text-tertiary: #98989d;\n --partner-accent: #aeaeb2;\n --partner-accent-strong: #f5f5f7;\n --partner-on-accent: #1d1d1f;\n --partner-success: #30d158;\n --partner-weixin: #30c96b;\n --partner-warning: #ff9f0a;\n --partner-danger: #ff453a;\n --partner-border: rgba(255, 255, 255, .105);\n --partner-separator: rgba(255, 255, 255, .08);\n --partner-hover: rgba(255, 255, 255, .075);\n --partner-selected: rgba(255, 255, 255, .09);\n --partner-focus-ring: rgba(255, 255, 255, .52);\n --partner-glass-clear: rgba(0, 0, 0, .1);\n --partner-glass-regular: rgba(0, 0, 0, .16);\n --partner-glass-thick: rgba(0, 0, 0, .26);\n --partner-glass-highlight: rgba(255, 255, 255, .16);\n --partner-glass-rim-shadow: rgba(0, 0, 0, .3);\n --partner-shadow-sm: 0 1px 2px rgba(0, 0, 0, .28);\n --partner-shadow-md: 0 12px 32px rgba(0, 0, 0, .34);\n --partner-shadow-lg: 0 28px 72px rgba(0, 0, 0, .48);\n}\n\n.dsh-partner-sidebar,\n.dsh-partner-sidebar *,\n.dsh-partner-workspace,\n.dsh-partner-workspace * { box-sizing: border-box; }\n\n.dsh-partner-sidebar :where(button, input, textarea, select),\n.dsh-partner-workspace :where(button, input, textarea, select) {\n margin: 0;\n border-radius: 0;\n appearance: none;\n color: inherit;\n font-family: var(--partner-font-family);\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n letter-spacing: inherit;\n}\n\n.dsh-partner-sidebar :where(button, input, textarea, select):focus,\n.dsh-partner-workspace :where(button, input, textarea, select):focus { outline: none; }\n\n.dsh-partner-sidebar :where(button, input, textarea, select):focus-visible,\n.dsh-partner-workspace :where(button, input, textarea, select):focus-visible {\n outline: 2px solid var(--partner-focus-ring);\n outline-offset: 2px;\n}\n\n.dsh-partner-sidebar :where(button, input, textarea, select):disabled,\n.dsh-partner-workspace :where(button, input, textarea, select):disabled {\n opacity: .45;\n cursor: default;\n}\n\n.dsh-partner-workspace select {\n padding-right: 32px;\n background-image:\n linear-gradient(45deg, transparent 50%, currentColor 50%),\n linear-gradient(135deg, currentColor 50%, transparent 50%);\n background-position:\n calc(100% - 15px) calc(50% - 1px),\n calc(100% - 11px) calc(50% - 1px);\n background-repeat: no-repeat;\n background-size: 4px 4px, 4px 4px;\n}\n\n.dsh-partner-workspace input[type=\"number\"] { appearance: textfield; }\n.dsh-partner-workspace input[type=\"number\"]::-webkit-inner-spin-button,\n.dsh-partner-workspace input[type=\"number\"]::-webkit-outer-spin-button { margin: 0; appearance: none; }\n\n.dsh-partner-workspace :where(.dsh-partner-roster-list, .dsh-partner-stage-scroll, .dsh-partner-library-list, .dsh-partner-library-detail, .dsh-partner-profile-people, .dsh-partner-profile-stage, .dsh-partner-graph-index, .dsh-partner-graph-stage, .dsh-partner-concern-sources, .dsh-partner-memory-kinds) {\n scrollbar-width: thin;\n scrollbar-color: color-mix(in srgb, var(--partner-text) 20%, transparent) transparent;\n}\n\n.dsh-partner-workspace :where(.dsh-partner-roster-list, .dsh-partner-stage-scroll, .dsh-partner-library-list, .dsh-partner-library-detail, .dsh-partner-profile-people, .dsh-partner-profile-stage, .dsh-partner-graph-index, .dsh-partner-graph-stage, .dsh-partner-concern-sources, .dsh-partner-memory-kinds)::-webkit-scrollbar { width: 6px; height: 6px; }\n.dsh-partner-workspace :where(.dsh-partner-roster-list, .dsh-partner-stage-scroll, .dsh-partner-library-list, .dsh-partner-library-detail, .dsh-partner-profile-people, .dsh-partner-profile-stage, .dsh-partner-graph-index, .dsh-partner-graph-stage, .dsh-partner-concern-sources, .dsh-partner-memory-kinds)::-webkit-scrollbar-track { background: transparent; }\n.dsh-partner-workspace :where(.dsh-partner-roster-list, .dsh-partner-stage-scroll, .dsh-partner-library-list, .dsh-partner-library-detail, .dsh-partner-profile-people, .dsh-partner-profile-stage, .dsh-partner-graph-index, .dsh-partner-graph-stage, .dsh-partner-concern-sources, .dsh-partner-memory-kinds)::-webkit-scrollbar-thumb {\n border: 1px solid transparent;\n border-radius: 999px;\n background: color-mix(in srgb, var(--partner-text) 20%, transparent);\n background-clip: padding-box;\n}\n\n.dsh-partner-sidebar { box-sizing: border-box; flex: none; margin: 0 8px 8px 2px; padding: 4px 0 7px; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 62%, transparent); }\n.dsh-partner-sidebar.is-rail { width: 36px; margin: 0 0 8px; padding: 0; border: 0; }\n.dsh-partner-sidebar-heading { display: flex; align-items: center; justify-content: space-between; height: 32px; padding: 0 4px 0 5px; }\n.dsh-partner-sidebar-title { display: flex; min-width: 0; align-items: center; gap: 5px; height: 28px; padding: 0 5px; border: 0; border-radius: 7px; color: var(--partner-text-secondary); background: transparent; font: 600 var(--partner-font-body)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-sidebar-title > span { display: grid; place-items: center; transition: transform .16s ease; }\n.dsh-partner-sidebar-title > span[data-open=\"false\"] { transform: rotate(-90deg); }\n.dsh-partner-sidebar-title:hover,\n.dsh-partner-sidebar-open:hover,\n.dsh-partner-rail:hover { color: var(--partner-text); background: var(--partner-hover); }\n.dsh-partner-sidebar-open { display: grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 0; border-radius: 8px; color: var(--partner-text-secondary); background: transparent; cursor: pointer; }\n.dsh-partner-sidebar-list { display: grid; grid-template-rows: 0fr; opacity: 0; transition: grid-template-rows 220ms var(--partner-ease-out), opacity 150ms ease; }\n.dsh-partner-sidebar-list.is-open { grid-template-rows: 1fr; opacity: 1; }\n.dsh-partner-sidebar-list-inner { display: grid; min-height: 0; gap: 2px; overflow: hidden; padding: 2px 1px 0; }\n.dsh-partner-sidebar-row { position: relative; isolation: isolate; display: grid; grid-template-columns: 26px minmax(0, 1fr) 7px; align-items: center; gap: 8px; width: 100%; min-height: 40px; padding: 4px 7px; overflow: hidden; border: 1px solid transparent; border-radius: 10px; color: inherit; background: transparent; text-align: left; cursor: pointer; transition: color 140ms ease, background-color 140ms ease, box-shadow 180ms ease, transform 180ms var(--partner-ease-out); }\n.dsh-partner-sidebar-row:hover { background: var(--partner-hover); transform: translateX(1px); }\n.dsh-partner-sidebar-row.is-active { border-color: transparent; background: var(--partner-selected); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-sm); }\n.dsh-partner-sidebar-row > span:nth-child(2) { display: grid; min-width: 0; gap: 2px; }\n.dsh-partner-sidebar-row strong,\n.dsh-partner-sidebar-row small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-sidebar-row strong { font-size: var(--partner-font-label); font-weight: 520; }\n.dsh-partner-sidebar-row small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-sidebar-row > i,\n.dsh-partner-roster-list button > i { width: 6px; height: 6px; border: 1px solid var(--partner-text-tertiary); border-radius: 50%; }\n.dsh-partner-sidebar-row > i.is-online,\n.dsh-partner-roster-list button > i.is-online { border-color: var(--partner-success); background: var(--partner-success); box-shadow: 0 0 0 2px color-mix(in srgb, var(--partner-success) 12%, transparent); }\n.dsh-partner-sidebar-symbol { display: grid !important; place-items: center; width: 25px; height: 25px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: var(--partner-glass-clear); box-shadow: inset 0 1px 0 var(--partner-glass-highlight); }\n.dsh-partner-sidebar-empty { margin: 5px 9px; color: var(--partner-text-tertiary); font-size: var(--partner-font-body); }\n.dsh-partner-rail { display: grid; place-items: center; width: 36px; height: 36px; padding: 0; border: 0; border-radius: 10px; color: var(--partner-text); background: transparent; cursor: pointer; }\n.dsh-partner-rail.is-active { background: var(--partner-hover); }\n\n.dsh-partner-avatar { display: grid; place-items: center; flex: none; width: 36px; height: 36px; border: 1px solid var(--partner-border); border-radius: 12px; color: var(--partner-text); background: linear-gradient(145deg, var(--partner-glass-thick), var(--partner-control)); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-sm); font-size: var(--partner-font-label); font-weight: 650; }\n.dsh-partner-avatar.is-small { width: 25px; height: 25px; border-radius: 8px; font-size: var(--partner-font-caption); }\n\n.dsh-partner-workspace { position: relative; isolation: isolate; display: grid; grid-template-rows: 64px minmax(0, 1fr); width: 100%; height: 100%; min-width: 0; overflow: hidden; background: var(--partner-canvas); }\n.dsh-partner-glass-surface { position: relative; isolation: isolate; transition: opacity 180ms ease-out, border-color 180ms ease, box-shadow 220ms var(--partner-ease-out), transform 220ms var(--partner-ease-out); }\n.dsh-partner-glass-surface.is-svg { -webkit-backdrop-filter: var(--partner-glass-filter-id) saturate(var(--partner-glass-saturation)); backdrop-filter: var(--partner-glass-filter-id) saturate(var(--partner-glass-saturation)); }\n.dsh-partner-glass-surface.is-fallback { -webkit-backdrop-filter: var(--partner-glass-filter); backdrop-filter: var(--partner-glass-filter); }\n.dsh-partner-glass-filter { position: absolute; z-index: -1; inset: 0; width: 100%; height: 100%; opacity: 0; pointer-events: none; }\n.dsh-partner-glass-surface.is-interactive::after {\n position: absolute;\n z-index: 2;\n inset: 1px;\n border-radius: inherit;\n background: linear-gradient(112deg, transparent 20%, color-mix(in srgb, var(--partner-glass-highlight) 86%, transparent) 48%, transparent 76%);\n -webkit-mask-image: radial-gradient(circle 180px at var(--partner-glare-x) var(--partner-glare-y), #000 0, rgba(0, 0, 0, .72) 38%, transparent 74%);\n mask-image: radial-gradient(circle 180px at var(--partner-glare-x) var(--partner-glare-y), #000 0, rgba(0, 0, 0, .72) 38%, transparent 74%);\n opacity: 0;\n pointer-events: none;\n transition: opacity 180ms ease-out;\n content: \"\";\n}\n.dsh-partner-glass-surface.is-interactive > :not(.dsh-partner-glass-filter) { position: relative; z-index: 1; }\n@media (hover: hover) {\n .dsh-partner-glass-surface.is-interactive:hover {\n border-color: color-mix(in srgb, var(--partner-border) 70%, var(--partner-text-tertiary));\n box-shadow:\n inset 0 1px 0 var(--partner-card-highlight),\n inset 0 -1px 0 var(--partner-glass-rim-shadow),\n 0 14px 32px color-mix(in srgb, var(--partner-text) 9%, transparent);\n transform: translateY(-1px);\n }\n .dsh-partner-glass-surface.is-interactive:hover::after { opacity: .72; }\n}\n.dsh-partner-topbar { position: relative; z-index: 3; display: flex; align-items: center; justify-content: space-between; min-height: 52px; margin: 8px 10px 0; padding: 7px 14px; border: 1px solid var(--partner-border); border-radius: 14px 14px 11px 11px; background: linear-gradient(145deg, color-mix(in srgb, var(--partner-glass-highlight) 20%, transparent), transparent 58%), var(--partner-pane); -webkit-backdrop-filter: var(--partner-frosted-filter); backdrop-filter: var(--partner-frosted-filter); box-shadow: var(--partner-glass-shadow); }\n.dsh-partner-topbar > div { display: flex; align-items: center; gap: 10px; }\n.dsh-partner-topbar > div > span:last-child { display: grid; gap: 2px; }\n.dsh-partner-topbar strong { font-size: var(--partner-font-label); font-weight: 620; }\n.dsh-partner-topbar small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-topbar [data-xiaohei-workspace-close] {\n display: grid;\n place-items: center;\n flex: none;\n width: 30px;\n height: 30px;\n padding: 0;\n border: 1px solid transparent;\n border-radius: 9px;\n color: var(--partner-text-secondary);\n background: transparent;\n line-height: 1;\n cursor: pointer;\n transition: color 140ms ease, background 140ms ease, border-color 140ms ease, transform 140ms ease;\n}\n.dsh-partner-topbar [data-xiaohei-workspace-close]:hover {\n border-color: var(--partner-border);\n color: var(--partner-text);\n background: var(--partner-hover);\n}\n.dsh-partner-topbar [data-xiaohei-workspace-close]:active { transform: scale(.96); }\n.dsh-partner-topbar [data-xiaohei-workspace-close] > svg { display: block; pointer-events: none; }\n.dsh-partner-grid { display: grid; grid-template-columns: 214px minmax(520px, 1fr); min-width: 0; min-height: 0; padding: 8px 10px 10px; gap: 8px; }\n\n.dsh-partner-roster { position: relative; display: flex; min-width: 0; min-height: 0; flex-direction: column; padding: 17px 10px 13px; overflow: hidden; border: 1px solid var(--partner-border); border-radius: 15px; background: linear-gradient(145deg, color-mix(in srgb, var(--partner-glass-highlight) 20%, transparent), transparent 56%), var(--partner-pane); -webkit-backdrop-filter: var(--partner-frosted-filter); backdrop-filter: var(--partner-frosted-filter); box-shadow: var(--partner-glass-shadow); }\n.dsh-partner-roster-title { display: flex; align-items: flex-start; justify-content: space-between; padding: 0 5px 13px; }\n.dsh-partner-roster-title > span { display: grid; gap: 5px; }\n.dsh-partner-roster-title small,\n.dsh-partner-section > small,\n.dsh-partner-identity small,\n.dsh-partner-channel-card small,\n.dsh-partner-pairing-heading small,\n.dsh-partner-qr small { color: var(--partner-accent); font-size: var(--partner-font-caption); font-weight: 700; letter-spacing: .12em; }\n.dsh-partner-roster-title strong { font-size: var(--partner-font-label); font-weight: 640; }\n.dsh-partner-roster-title button { display: grid; place-items: center; width: 30px; height: 30px; padding: 0; border: 1px solid var(--partner-border); border-radius: 10px; color: var(--partner-text-secondary); background: var(--partner-glass-clear); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-sm); cursor: pointer; transition: color 140ms ease, background-color 140ms ease, transform 160ms var(--partner-ease-out), box-shadow 180ms ease; }\n.dsh-partner-roster-title button:hover { color: var(--partner-text); border-color: var(--partner-border); background: var(--partner-glass-thick); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-md); transform: translateY(-1px); }\n.dsh-partner-roster-list { display: grid; width: 100%; min-width: 0; gap: 3px; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; }\n.dsh-partner-roster-list button { display: grid; grid-template-columns: 36px minmax(0, 1fr) 7px; align-items: center; gap: 9px; width: 100%; min-height: 58px; padding: 9px 8px; border: 1px solid transparent; border-radius: 12px; color: inherit; background: transparent; text-align: left; cursor: pointer; transition: transform .17s cubic-bezier(.2,.8,.2,1), background .15s ease, border-color .15s ease; }\n.dsh-partner-roster-list button:hover { background: var(--partner-hover); transform: translateX(1px); }\n.dsh-partner-roster-list button.is-active { transform: translateX(2px); border-color: transparent; background: var(--partner-selected); box-shadow: inset 2px 0 var(--partner-text-secondary), inset 0 1px 0 var(--partner-glass-highlight); }\n.dsh-partner-roster-list button > span:nth-child(2) { display: grid; min-width: 0; gap: 3px; }\n.dsh-partner-roster-list strong,\n.dsh-partner-roster-list small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-roster-list strong { font-size: var(--partner-font-label); font-weight: 580; }\n.dsh-partner-roster-list small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-roster-note { display: flex; align-items: flex-start; gap: 9px; margin-top: auto; padding: 12px 8px 2px; color: var(--partner-text-tertiary); }\n.dsh-partner-roster-note > svg { flex: none; margin-top: 1px; color: var(--partner-accent); }\n.dsh-partner-roster-note > span { display: grid; gap: 4px; }\n.dsh-partner-roster-note strong { color: var(--partner-text-secondary); font-size: var(--partner-font-body); font-weight: 580; }\n.dsh-partner-roster-note small { font-size: var(--partner-font-caption); line-height: 1.5; }\n\n.dsh-partner-stage { position: relative; display: grid; grid-template-rows: auto auto minmax(0, 1fr); min-width: 0; min-height: 0; overflow: hidden; border: 1px solid var(--partner-border); border-radius: 15px; background: linear-gradient(145deg, color-mix(in srgb, var(--partner-glass-highlight) 16%, transparent), transparent 52%), var(--partner-surface); -webkit-backdrop-filter: var(--partner-frosted-filter); backdrop-filter: var(--partner-frosted-filter); box-shadow: inset 0 1px 0 color-mix(in srgb, var(--partner-glass-highlight) 72%, transparent), inset 0 -1px 0 var(--partner-glass-rim-shadow), var(--partner-shadow-sm); }\n.dsh-partner-identity { display: flex; align-items: center; gap: 12px; min-height: 86px; padding: 18px clamp(20px, 4vw, 46px) 13px; }\n.dsh-partner-identity > span:nth-child(2) { display: grid; min-width: 0; flex: 1; gap: 3px; }\n.dsh-partner-identity h1 { margin: 0; font-size: var(--partner-font-heading); line-height: 1.15; font-weight: 650; letter-spacing: -.025em; }\n.dsh-partner-identity p { margin: 0; overflow: hidden; color: var(--partner-text-secondary); font-size: var(--partner-font-body); text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-status { display: inline-flex; align-items: center; flex: none; gap: 6px; padding: 5px 8px; border: 1px solid var(--partner-border); border-radius: 999px; color: var(--partner-text-secondary); background: color-mix(in srgb, var(--partner-raised) 76%, transparent); font-size: var(--partner-font-caption); }\n.dsh-partner-status > i { width: 6px; height: 6px; border-radius: 50%; background: var(--partner-text-tertiary); }\n.dsh-partner-status.is-running > i { background: var(--partner-success); box-shadow: 0 0 0 2px color-mix(in srgb, var(--partner-success) 13%, transparent); }\n.dsh-partner-status.is-starting > i { background: var(--partner-warning); }\n.dsh-partner-status.is-error > i { background: var(--partner-danger); }\n.dsh-partner-tabs { display: flex; align-items: center; gap: 3px; margin: 0 clamp(20px, 4vw, 46px); border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-tabs button { position: relative; display: inline-flex; align-items: center; gap: 6px; min-height: 37px; padding: 0 10px; border: 0; color: var(--partner-text-tertiary); background: transparent; font-size: var(--partner-font-body); cursor: pointer; }\n.dsh-partner-tabs button::after { content: \"\"; position: absolute; right: 9px; bottom: -1px; left: 9px; height: 2px; border-radius: 99px; background: var(--partner-text); opacity: 0; transform: scaleX(.45); transition: opacity 150ms ease, transform 210ms var(--partner-ease-out); }\n.dsh-partner-tabs button:hover { color: var(--partner-text); }\n.dsh-partner-tabs button.is-active { color: var(--partner-accent-strong); }\n.dsh-partner-tabs button.is-active::after { opacity: 1; transform: scaleX(1); }\n.dsh-partner-stage-scroll { min-width: 0; min-height: 0; overflow: auto; padding: 26px clamp(22px, 4vw, 52px) 52px; overscroll-behavior: contain; }\n.dsh-partner-stage-scroll > * { animation: dsh-partner-content-enter 260ms var(--partner-ease-out) both; }\n\n.dsh-partner-home { width: min(100%, 1160px); margin: 0 auto; }\n.dsh-partner-home-heading { display: flex; align-items: end; justify-content: space-between; gap: 28px; margin: 0 2px 22px; }\n.dsh-partner-home-heading > span { display: grid; gap: 6px; }\n.dsh-partner-home-heading small { color: var(--partner-accent); font-size: var(--partner-font-caption); font-weight: 700; letter-spacing: .08em; }\n.dsh-partner-home-heading h2 { margin: 0; font-size: var(--partner-font-display); line-height: 1.18; font-weight: 660; letter-spacing: -.035em; }\n.dsh-partner-home-heading p { max-width: 320px; margin: 0 0 2px; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.55; text-align: right; }\n.dsh-partner-home-channel { display: grid; grid-template-columns: minmax(230px, .8fr) minmax(330px, 1.2fr); align-items: center; min-height: 238px; overflow: hidden; border: 1px solid var(--partner-border); border-radius: 20px; background: linear-gradient(118deg, color-mix(in srgb, var(--partner-glass-highlight) 18%, transparent), transparent 56%), var(--partner-pane); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-md); transition: transform 240ms var(--partner-ease-out), box-shadow 240ms ease, border-color 180ms ease; }\n.dsh-partner-home-channel:hover { transform: translateY(-1px); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-lg); }\n.dsh-partner-home-route { position: relative; display: flex; align-items: center; justify-content: center; min-height: 100%; padding: 28px; background: radial-gradient(circle at 42% 50%, color-mix(in srgb, var(--partner-glass-highlight) 44%, transparent), transparent 58%); }\n.dsh-partner-home-route > .dsh-partner-avatar { position: relative; z-index: 1; width: 58px; height: 58px; border-radius: 18px; background: var(--partner-raised); box-shadow: 0 9px 28px color-mix(in srgb, var(--partner-accent-strong) 10%, transparent); font-size: var(--partner-font-title); }\n.dsh-partner-route-line { position: relative; width: clamp(58px, 7vw, 94px); height: 1px; margin: 0 10px; overflow: hidden; background: repeating-linear-gradient(90deg, color-mix(in srgb, var(--partner-accent) 25%, transparent) 0 4px, transparent 4px 9px); }\n.dsh-partner-route-line > i { position: absolute; left: 0; top: -2px; width: 5px; height: 5px; border-radius: 50%; background: var(--partner-accent); opacity: 0; transform: translateX(0); }\n.dsh-partner-home-channel.is-online .dsh-partner-route-line > i { animation: dsh-partner-route-pulse 2.4s ease-in-out infinite; }\n.dsh-partner-route-weixin { position: relative; z-index: 1; display: grid; place-items: center; width: 58px; height: 58px; border: 1px solid color-mix(in srgb, var(--partner-weixin) 18%, var(--partner-border)); border-radius: 18px; color: var(--partner-weixin); background: var(--partner-raised); box-shadow: inset 0 1px 0 var(--partner-glass-highlight), var(--partner-shadow-md); }\n.dsh-partner-home-channel-copy { position: relative; z-index: 1; display: grid; justify-items: start; gap: 8px; padding: 32px 36px 32px 12px; }\n.dsh-partner-home-kicker { display: inline-flex; align-items: center; gap: 7px; color: var(--partner-accent-strong); font-size: var(--partner-font-caption); font-weight: 680; letter-spacing: .06em; }\n.dsh-partner-home-kicker > i { width: 6px; height: 6px; border-radius: 50%; background: var(--partner-text-tertiary); }\n.dsh-partner-home-channel.is-online .dsh-partner-home-kicker > i { background: var(--partner-success); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-success) 11%, transparent); }\n.dsh-partner-home-channel-copy h3 { margin: 1px 0 0; font-size: var(--partner-font-title); line-height: 1.28; font-weight: 650; letter-spacing: -.025em; }\n.dsh-partner-home-channel-copy p { max-width: 510px; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.65; }\n.dsh-partner-home-channel-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; margin-top: 7px; }\n.dsh-partner-home-channel-actions button { min-height: 36px; padding: 0 16px; border: 1px solid color-mix(in srgb, var(--partner-accent-strong) 78%, var(--partner-glass-highlight)); border-radius: 10px; color: var(--partner-on-accent); background: var(--partner-accent-strong); box-shadow: inset 0 1px 0 color-mix(in srgb, var(--partner-glass-highlight) 45%, transparent), var(--partner-shadow-sm); font: 600 var(--partner-font-body)/1 var(--partner-font-family); cursor: pointer; transition: transform 160ms var(--partner-ease-out), background-color 160ms ease, box-shadow 180ms ease; }\n.dsh-partner-home-channel-actions button:hover { background: color-mix(in srgb, var(--partner-accent-strong) 88%, #000); transform: translateY(-1px); }\n.dsh-partner-home-channel-actions button:active { transform: translateY(0) scale(.98); }\n.dsh-partner-home-channel-actions span { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-home-details { display: grid; grid-template-columns: minmax(0, 1.18fr) minmax(260px, .82fr); gap: 12px; margin-top: 18px; }\n.dsh-partner-home-details > section {\n position: relative;\n min-width: 0;\n padding: 19px 18px 21px;\n overflow: hidden;\n border: 1px solid var(--partner-border);\n border-radius: 15px;\n background:\n linear-gradient(145deg, color-mix(in srgb, var(--partner-glass-thick) 88%, transparent), var(--partner-glass-clear)),\n var(--partner-glass-regular);\n box-shadow:\n inset 0 1px 0 var(--partner-glass-highlight),\n inset 0 -1px 0 var(--partner-glass-rim-shadow),\n 0 8px 22px rgba(31, 31, 35, .075),\n 0 2px 5px rgba(31, 31, 35, .045);\n transition: transform 220ms var(--partner-ease-out), border-color 180ms ease, box-shadow 220ms ease;\n}\n.dsh-partner-home-details > section::after {\n position: absolute;\n top: 0;\n right: 16px;\n left: 16px;\n height: 1px;\n background: linear-gradient(90deg, transparent, var(--partner-glass-highlight), transparent);\n opacity: .72;\n pointer-events: none;\n content: \"\";\n}\n.dsh-partner-home-profile { grid-row: span 2; }\n.dsh-partner-home-details header { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; align-items: center; gap: 10px; }\n.dsh-partner-home-details header > span { display: grid; place-items: center; width: 32px; height: 32px; border-radius: 10px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 7%, transparent); }\n.dsh-partner-home-details header > div { display: grid; min-width: 0; gap: 3px; }\n.dsh-partner-home-details header small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-home-details header strong { overflow: hidden; font-size: var(--partner-font-label); font-weight: 620; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-home-details header button { padding: 5px 7px; border: 0; border-radius: 7px; color: var(--partner-text-tertiary); background: transparent; font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-home-details header button:hover { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 6%, transparent); }\n.dsh-partner-home-profile blockquote { display: -webkit-box; margin: 17px 2px 0 44px; overflow: hidden; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.7; -webkit-box-orient: vertical; -webkit-line-clamp: 5; }\n.dsh-partner-home-capability-list { display: flex; flex-wrap: wrap; gap: 6px; margin: 14px 0 0 44px; }\n.dsh-partner-home-capability-list em { padding: 5px 8px; border-radius: 7px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 7%, transparent); font-size: var(--partner-font-caption); font-style: normal; }\n.dsh-partner-home-capability-list small,\n.dsh-partner-home-continuity > p { margin: 13px 0 0 44px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.55; }\n@keyframes dsh-partner-route-pulse { 0% { opacity: 0; transform: translateX(0); } 18% { opacity: .8; } 82% { opacity: .8; } 100% { opacity: 0; transform: translateX(clamp(58px, 7vw, 94px)); } }\n\n.dsh-partner-form { width: min(100%, 1120px); margin: 0 auto; }\n.dsh-partner-form.is-identity { width: min(100%, 980px); }\n.dsh-partner-form.is-capabilities,\n.dsh-partner-form.is-channel,\n.dsh-partner-form.is-memory { width: min(100%, 1180px); }\n.dsh-partner-form.is-memory { container: partner-memory / inline-size; }\n.dsh-partner-section { position: relative; margin-bottom: 27px; padding-left: 14px; }\n.dsh-partner-section::before { position: absolute; top: 3px; bottom: 2px; left: 0; width: 2px; border-radius: 2px; background: linear-gradient(var(--partner-text-secondary), transparent 92%); content: ''; }\n.dsh-partner-section h2 { margin: 5px 0 7px; font-size: var(--partner-font-display); font-weight: 650; letter-spacing: -.035em; }\n.dsh-partner-section p { max-width: 640px; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.65; }\n.dsh-partner-fields { display: grid; gap: 14px; }\n.dsh-partner-fields.two { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n.dsh-partner-field { display: grid; min-width: 0; gap: 8px; margin-bottom: 16px; }\n.dsh-partner-field > span { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }\n.dsh-partner-field strong { font-size: var(--partner-font-body); font-weight: 610; }\n.dsh-partner-field small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.35; text-align: right; }\n.dsh-partner-field input,\n.dsh-partner-field textarea,\n.dsh-partner-field select { box-sizing: border-box; width: 100%; min-height: 38px; padding: 8px 10px; border: 1px solid var(--partner-border); border-radius: 10px; outline: none; color: var(--partner-text); background: var(--partner-control); font: var(--partner-font-label)/1.5 var(--partner-font-family); transition: border-color .15s ease, box-shadow .15s ease, background .15s ease; }\n.dsh-partner-field textarea { resize: vertical; }\n.dsh-partner-field input:focus,\n.dsh-partner-field textarea:focus,\n.dsh-partner-field select:focus { border-color: var(--partner-focus-ring); background: var(--partner-raised); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-focus-ring) 18%, transparent), inset 0 1px 0 var(--partner-glass-highlight); }\n.dsh-partner-form-actions { display: flex; align-items: center; justify-content: space-between; min-height: 40px; padding-top: 5px; }\n.dsh-partner-form-actions > span { display: inline-flex; align-items: center; gap: 5px; color: var(--partner-accent-strong); font-size: var(--partner-font-body); }\n.dsh-partner-form-actions > button,\n.dsh-partner-state > button,\n.dsh-partner-weixin-connect > button { min-height: 34px; padding: 0 15px; border: 1px solid color-mix(in srgb, var(--partner-accent) 60%, transparent); border-radius: 10px; color: var(--partner-on-accent); background: var(--partner-accent-strong); font: 600 var(--partner-font-body)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-form-actions > button:hover,\n.dsh-partner-state > button:hover,\n.dsh-partner-weixin-connect > button:hover { background: color-mix(in srgb, var(--partner-accent-strong) 88%, #000); }\n.dsh-partner-form-actions > button:disabled,\n.dsh-partner-weixin-connect > button:disabled { opacity: .55; cursor: default; }\n.dsh-partner-identity-danger { display: flex; align-items: center; justify-content: space-between; gap: 20px; margin-top: 34px; padding-top: 17px; border-top: 1px solid var(--partner-border); }\n.dsh-partner-identity-danger > span { display: grid; gap: 4px; }\n.dsh-partner-identity-danger strong { font-size: var(--partner-font-body); font-weight: 600; }\n.dsh-partner-identity-danger small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-identity-danger button { display: inline-flex; align-items: center; gap: 6px; min-height: 30px; padding: 0 10px; border: 1px solid color-mix(in srgb, var(--partner-danger) 24%, transparent); border-radius: 8px; color: var(--partner-danger); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-identity-danger button:disabled { opacity: .4; cursor: default; }\n.dsh-partner-inline-error,\n.dsh-partner-error { padding: 9px 11px; border: 1px solid color-mix(in srgb, var(--partner-danger) 20%, transparent); border-radius: 9px; color: var(--partner-danger); background: color-mix(in srgb, var(--partner-danger) 6%, transparent); font-size: var(--partner-font-body); }\n.dsh-partner-error { position: absolute; right: 18px; bottom: 14px; left: 18px; margin: 0; }\n\n.dsh-partner-capabilities { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 9px; margin: 3px 0 22px; }\n.dsh-partner-capabilities button { position: relative; display: grid; grid-template-columns: 22px minmax(0, 1fr); gap: 3px 9px; min-height: 78px; padding: 13px; border: 1px solid var(--partner-border); border-radius: 12px; color: inherit; background: color-mix(in srgb, var(--partner-raised) 70%, transparent); text-align: left; cursor: pointer; }\n.dsh-partner-capabilities button.is-active { border-color: color-mix(in srgb, var(--partner-accent) 30%, transparent); background: color-mix(in srgb, var(--partner-accent) 7%, var(--partner-raised)); }\n.dsh-partner-capabilities button > span { display: grid; place-items: center; grid-row: 1 / span 2; width: 19px; height: 19px; margin-top: 1px; border: 1px solid var(--partner-border); border-radius: 6px; color: var(--partner-on-accent); }\n.dsh-partner-capabilities button.is-active > span { border-color: var(--partner-accent); background: var(--partner-accent); }\n.dsh-partner-capabilities strong { font-size: var(--partner-font-body); font-weight: 610; }\n.dsh-partner-capabilities small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.5; }\n\n.dsh-partner-weixin-connect { display: grid; grid-template-columns: 54px minmax(0, 1fr) auto; align-items: center; gap: 17px; padding: 19px; border: 1px solid var(--partner-border); border-radius: 15px; background: color-mix(in srgb, var(--partner-raised) 72%, transparent); }\n.dsh-partner-weixin-connect > span { display: grid; gap: 4px; }\n.dsh-partner-weixin-connect strong { font-size: var(--partner-font-label); }\n.dsh-partner-weixin-connect p { margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.55; }\n.dsh-partner-weixin-connect ul { display: flex; flex-wrap: wrap; gap: 6px 15px; margin: 7px 0 0; padding: 0; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); list-style: none; }\n.dsh-partner-weixin-connect li::before { content: \"\u00B7\"; margin-right: 4px; color: var(--partner-accent); }\n.dsh-partner-weixin-mark { display: grid; place-items: center; width: 52px; height: 52px; border: 1px solid color-mix(in srgb, var(--partner-weixin) 18%, var(--partner-border)); border-radius: 16px; color: var(--partner-weixin); background: color-mix(in srgb, var(--partner-weixin) 7%, var(--partner-raised)); }\n.dsh-partner-weixin-glyph { position: relative; display: inline-block; width: 16px; height: 14px; }\n.dsh-partner-weixin-glyph::before,\n.dsh-partner-weixin-glyph::after { content: \"\"; position: absolute; border: 1.5px solid currentColor; border-radius: 48%; }\n.dsh-partner-weixin-glyph::before { left: 0; top: 0; width: 10px; height: 8px; }\n.dsh-partner-weixin-glyph::after { right: 0; bottom: 0; width: 9px; height: 7px; background: inherit; }\n.dsh-partner-weixin-glyph i,\n.dsh-partner-weixin-glyph b { position: absolute; z-index: 1; top: 4px; width: 1.5px; height: 1.5px; border-radius: 50%; background: currentColor; }\n.dsh-partner-weixin-glyph i { left: 3px; }\n.dsh-partner-weixin-glyph b { left: 7px; }\n.dsh-partner-weixin-glyph.is-large { transform: scale(1.55); }\n.dsh-partner-qr { display: grid; grid-template-columns: 206px minmax(0, 1fr); align-items: center; gap: 27px; padding: 22px; border: 1px solid var(--partner-border); border-radius: 16px; background: color-mix(in srgb, var(--partner-raised) 74%, transparent); }\n.dsh-partner-qr-code { display: grid; place-items: center; width: 196px; height: 196px; border-radius: 14px; background: #fff; box-shadow: 0 9px 28px color-mix(in srgb, #000 7%, transparent); }\n.dsh-partner-qr > span { display: grid; justify-items: start; gap: 7px; }\n.dsh-partner-qr strong { font-size: var(--partner-font-title); }\n.dsh-partner-qr p { max-width: 300px; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.6; }\n.dsh-partner-qr button { display: inline-flex; align-items: center; gap: 6px; min-height: 32px; padding: 0 11px; border: 1px solid var(--partner-border); border-radius: 9px; color: inherit; background: var(--partner-raised); cursor: pointer; }\n.dsh-partner-channel-card { display: grid; grid-template-columns: 52px minmax(0, 1fr) auto auto; align-items: center; gap: 14px; padding: 15px; border: 1px solid var(--partner-border); border-radius: 14px; background: color-mix(in srgb, var(--partner-raised) 72%, transparent); }\n.dsh-partner-channel-card > span:nth-child(2) { display: grid; gap: 3px; }\n.dsh-partner-channel-card strong { font-size: var(--partner-font-label); }\n.dsh-partner-channel-card p { margin: 0; color: var(--partner-text-tertiary); font: var(--partner-font-caption)/1.4 ui-monospace, monospace; }\n.dsh-partner-switch { position: relative; width: 38px; height: 22px; padding: 0; border: 1px solid var(--partner-border); border-radius: 999px; background: color-mix(in srgb, var(--partner-text) 9%, transparent); cursor: pointer; transition: background .16s ease; }\n.dsh-partner-switch i { position: absolute; left: 3px; top: 3px; width: 14px; height: 14px; border-radius: 50%; background: var(--partner-raised); box-shadow: 0 1px 3px color-mix(in srgb, #000 16%, transparent); transition: transform .18s cubic-bezier(.2,.8,.2,1); }\n.dsh-partner-switch[data-on=\"true\"] { border-color: var(--partner-accent-strong); background: var(--partner-accent-strong); }\n.dsh-partner-switch[data-on=\"true\"] i { transform: translateX(16px); }\n.dsh-partner-pairing-heading { display: flex; align-items: end; justify-content: space-between; margin: 25px 1px 10px; }\n.dsh-partner-pairing-heading > span { display: grid; gap: 4px; }\n.dsh-partner-pairing-heading strong { font-size: var(--partner-font-label); }\n.dsh-partner-pairing-heading em { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-style: normal; }\n.dsh-partner-pairings { display: grid; gap: 5px; }\n.dsh-partner-pairings article { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto auto; align-items: center; gap: 9px; min-height: 52px; padding: 8px 9px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-pairings article > span { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 9px; color: var(--partner-text-tertiary); background: var(--partner-hover); }\n.dsh-partner-pairings article > span.is-approved { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 9%, transparent); }\n.dsh-partner-pairings article > div { display: grid; gap: 3px; }\n.dsh-partner-pairings strong { font-size: var(--partner-font-body); }\n.dsh-partner-pairings small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-pairings button { min-height: 29px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-pairings button.is-primary { color: var(--partner-on-accent); border-color: var(--partner-accent-strong); background: var(--partner-accent-strong); }\n\n.dsh-partner-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }\n.dsh-partner-metrics article { padding: 14px; border: 1px solid var(--partner-border); border-radius: 12px; background: color-mix(in srgb, var(--partner-raised) 66%, transparent); }\n.dsh-partner-metrics small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-metrics strong { display: block; margin: 8px 0 4px; font-size: var(--partner-font-title); font-weight: 640; }\n.dsh-partner-metrics p { margin: 0; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-session-list { display: grid; gap: 4px; margin-top: 20px; }\n.dsh-partner-session-list article { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 7px 5px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-session-list article > span { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 9px; color: var(--partner-accent); background: color-mix(in srgb, var(--partner-accent) 7%, transparent); }\n.dsh-partner-session-list article > div { display: grid; min-width: 0; flex: 1; gap: 3px; }\n.dsh-partner-session-list strong { font-size: var(--partner-font-body); }\n.dsh-partner-session-list small { overflow: hidden; color: var(--partner-text-tertiary); font: var(--partner-font-caption)/1.4 ui-monospace, monospace; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-session-list button { flex: none; min-height: 30px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-session-list button:hover { color: var(--partner-accent-strong); border-color: color-mix(in srgb, var(--partner-accent) 24%, var(--partner-border)); }\n.dsh-partner-automation { display: grid; min-width: 0; max-width: 100%; gap: 14px; margin-top: 16px; padding: 16px; border: 1px solid var(--partner-border); border-radius: 14px; background: color-mix(in srgb, var(--partner-raised) 72%, transparent); }\n.dsh-partner-automation-grid { display: grid; min-width: 0; grid-template-columns: minmax(480px, .95fr) minmax(430px, 1.05fr); align-items: stretch; gap: 12px; margin-top: 17px; }\n.dsh-partner-automation-grid .dsh-partner-automation { align-content: start; margin-top: 0; }\n.dsh-partner-automation-grid .dsh-partner-automation:last-child .dsh-partner-automation-actions { margin-top: auto; }\n.dsh-partner-review-policy { display: grid; grid-template-columns: auto minmax(0, 1fr) 90px auto; align-items: center; gap: 10px; padding-top: 12px; border-top: 1px solid var(--partner-border); }\n.dsh-partner-review-policy > span { display: grid; gap: 2px; }\n.dsh-partner-review-policy > span strong { font-size: var(--partner-font-body); }\n.dsh-partner-review-policy > span small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.4; }\n.dsh-partner-review-policy select { width: 100%; height: 32px; padding: 0 26px 0 9px; border: 1px solid var(--partner-border); border-radius: 8px; background-color: var(--partner-control); font-size: var(--partner-font-caption); }\n.dsh-partner-review-policy > button:last-child { height: 32px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: var(--partner-control); font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-automation > header { display: flex; align-items: center; justify-content: space-between; gap: 16px; }\n.dsh-partner-automation > header > span { display: grid; gap: 4px; }\n.dsh-partner-automation > header strong { font-size: var(--partner-font-body); }\n.dsh-partner-automation > header small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.55; }\n.dsh-partner-automation-fields { display: grid; min-width: 0; grid-template-columns: minmax(120px, 180px); gap: 10px; }\n.dsh-partner-automation-fields.is-memory-model { grid-template-columns: minmax(110px, .7fr) minmax(130px, 1fr) minmax(150px, 1.25fr); }\n.dsh-partner-automation-fields.is-heartbeat { grid-template-columns: repeat(4, minmax(100px, 1fr)); }\n.dsh-partner-concern-board { position: relative; display: grid; min-width: 0; max-width: 100%; overflow: visible; border: 1px solid var(--partner-border); border-radius: 11px; background: color-mix(in srgb, var(--partner-raised) 42%, transparent); }\n.dsh-partner-concern-board > header { display: flex; min-height: 46px; align-items: center; justify-content: space-between; gap: 14px; padding: 7px 10px 7px 12px; }\n.dsh-partner-concern-board > header > span { display: flex; min-width: 0; align-items: baseline; gap: 8px; }\n.dsh-partner-concern-board > header strong { display: flex; align-items: center; gap: 6px; font-size: var(--partner-font-body); font-weight: 640; white-space: nowrap; }\n.dsh-partner-concern-board > header strong b { display: grid; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 999px; place-items: center; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 9%, transparent); font-size: var(--partner-font-caption); font-variant-numeric: tabular-nums; }\n.dsh-partner-concern-board > header p { min-width: 0; margin: 0; overflow: hidden; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-concern-board > header > button { display: inline-flex; flex: none; height: 30px; align-items: center; gap: 5px; padding: 0 9px; border: 1px solid transparent; border-radius: 8px; color: var(--partner-text-secondary); background: transparent; font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-concern-board > header > button:hover,\n.dsh-partner-concern-board > header > button[aria-expanded=\"true\"] { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }\n.dsh-partner-concern-compose { display: grid; gap: 8px; padding: 10px 12px 11px; border-top: 1px solid var(--partner-border); background: color-mix(in srgb, var(--partner-control) 60%, transparent); animation: dsh-partner-reveal .16s ease-out; }\n.dsh-partner-concern-compose label { display: grid; gap: 6px; }\n.dsh-partner-concern-compose label > span { color: var(--partner-text-secondary); font-size: var(--partner-font-caption); font-weight: 600; }\n.dsh-partner-concern-compose input { width: 100%; height: 36px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text); background: var(--partner-raised); font: var(--partner-font-body)/1 var(--partner-font-family); transition: border-color .15s ease, box-shadow .15s ease; }\n.dsh-partner-concern-compose input:focus-visible { border-color: color-mix(in srgb, var(--partner-accent) 55%, var(--partner-border)); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-accent) 9%, transparent); }\n.dsh-partner-concern-input-wrap { position: relative; min-width: 0; }\n.dsh-partner-concern-compose-hint { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 400; line-height: 1.45; }\n.dsh-partner-concern-compose-hint b { color: var(--partner-accent-strong); font-weight: 700; }\n.dsh-partner-concern-sources {\n position: absolute;\n z-index: 40;\n top: calc(100% + 6px);\n right: 0;\n left: 0;\n display: grid;\n max-height: 264px;\n overflow-y: auto;\n padding: 5px;\n border: 1px solid color-mix(in srgb, var(--partner-border) 88%, var(--partner-text) 12%);\n border-radius: 10px;\n background: var(--partner-raised);\n box-shadow: 0 14px 34px color-mix(in srgb, var(--partner-text) 15%, transparent);\n scrollbar-width: thin;\n}\n.dsh-partner-concern-sources > p { margin: 0; padding: 14px 12px; color: var(--partner-text-secondary); font-size: var(--partner-font-caption); line-height: 1.45; }\n.dsh-partner-concern-sources > button {\n display: grid;\n min-height: 46px;\n grid-template-columns: 28px minmax(0, 1fr);\n grid-template-rows: auto auto;\n align-items: center;\n column-gap: 8px;\n padding: 6px 8px;\n border: 1px solid transparent;\n border-radius: 8px;\n color: var(--partner-text);\n background: transparent;\n text-align: left;\n cursor: pointer;\n}\n.dsh-partner-concern-sources > button > span { display: grid; grid-row: 1 / 3; width: 28px; height: 28px; place-items: center; border-radius: 8px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 9%, var(--partner-control)); }\n.dsh-partner-concern-sources > button > strong { min-width: 0; overflow: hidden; font-size: var(--partner-font-body); font-weight: 610; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-concern-sources > button > small { min-width: 0; overflow: hidden; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 400; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-concern-sources > button:hover,\n.dsh-partner-concern-sources > button[aria-selected=\"true\"] { border-color: color-mix(in srgb, var(--partner-accent) 22%, var(--partner-border)); background: color-mix(in srgb, var(--partner-accent) 8%, var(--partner-raised)); }\n.dsh-partner-concern-compose > div { display: flex; justify-content: flex-end; gap: 6px; }\n.dsh-partner-concern-compose button { min-height: 30px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: var(--partner-raised); font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-concern-compose button.is-primary { border-color: transparent; color: var(--partner-on-accent); background: var(--partner-accent-strong); }\n.dsh-partner-concern-list { display: grid; min-height: 0; border-top: 1px solid var(--partner-border); }\n.dsh-partner-concern-list > article { min-width: 0; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 72%, transparent); background: transparent; transition: background .15s ease; }\n.dsh-partner-concern-list > article:last-child { border-bottom: 0; }\n.dsh-partner-concern-list > article:hover,\n.dsh-partner-concern-list > article[data-expanded=\"true\"] { background: color-mix(in srgb, var(--partner-accent) 4.5%, transparent); }\n.dsh-partner-concern-row { display: grid; width: 100%; min-height: 49px; grid-template-columns: 76px minmax(0, 1fr) auto 14px; align-items: center; gap: 9px; padding: 6px 11px 6px 12px; border: 0; color: inherit; background: transparent; text-align: left; cursor: pointer; }\n.dsh-partner-concern-state { display: flex; align-items: center; gap: 7px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); white-space: nowrap; }\n.dsh-partner-concern-state i { width: 6px; height: 6px; border-radius: 50%; background: var(--partner-accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-accent) 9%, transparent); }\n.dsh-partner-concern-copy { display: grid; min-width: 0; gap: 3px; }\n.dsh-partner-concern-copy strong,\n.dsh-partner-concern-copy small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-concern-copy strong { font-size: var(--partner-font-body); font-weight: 610; }\n.dsh-partner-concern-copy small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-concern-time { display: grid; justify-items: end; gap: 2px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-variant-numeric: tabular-nums; line-height: 1.1; white-space: nowrap; }\n.dsh-partner-concern-time small { font: inherit; }\n.dsh-partner-concern-time strong { color: var(--partner-text-secondary); font: 590 var(--partner-font-caption)/1.1 var(--partner-font-family); }\n.dsh-partner-concern-row > svg { color: var(--partner-text-tertiary); transition: transform .16s ease, color .16s ease; }\n.dsh-partner-concern-list > article[data-expanded=\"true\"] .dsh-partner-concern-row > svg { color: var(--partner-accent); transform: rotate(180deg); }\n.dsh-partner-concern-detail { display: grid; gap: 7px; padding: 0 34px 11px 97px; animation: dsh-partner-reveal .16s ease-out; }\n.dsh-partner-concern-detail p,\n.dsh-partner-concern-detail blockquote { margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-caption); line-height: 1.55; }\n.dsh-partner-concern-detail blockquote { padding-left: 9px; border-left: 2px solid color-mix(in srgb, var(--partner-accent) 40%, transparent); }\n.dsh-partner-concern-detail > small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-concern-decision { display: grid; min-width: 0; grid-template-columns: auto minmax(0, 1fr); align-items: baseline; gap: 3px 8px; padding: 7px 9px; border: 1px solid var(--partner-border); border-radius: 8px; background: var(--partner-control); font-size: var(--partner-font-caption); }\n.dsh-partner-concern-decision strong { color: var(--partner-accent-strong); font-weight: 620; white-space: nowrap; }\n.dsh-partner-concern-decision span { min-width: 0; color: var(--partner-text-secondary); line-height: 1.45; }\n.dsh-partner-concern-decision small { grid-column: 1 / -1; color: var(--partner-text-tertiary); line-height: 1.45; overflow-wrap: anywhere; }\n.dsh-partner-concern-resources { display: flex; flex-wrap: wrap; gap: 5px; }\n.dsh-partner-concern-resources span { max-width: 100%; overflow: hidden; padding: 4px 7px; border-radius: 6px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); font-size: var(--partner-font-caption); text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-concern-actions { display: flex; flex-wrap: wrap; gap: 5px; padding-top: 2px; }\n.dsh-partner-concern-actions button,\n.dsh-partner-concern-resolved button { min-height: 28px; padding: 0 8px; border: 1px solid var(--partner-border); border-radius: 7px; color: var(--partner-text-secondary); background: var(--partner-control); font: 540 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-concern-actions button:hover,\n.dsh-partner-concern-resolved button:hover { color: var(--partner-accent-strong); border-color: color-mix(in srgb, var(--partner-accent) 32%, var(--partner-border)); background: color-mix(in srgb, var(--partner-accent) 7%, var(--partner-control)); }\n.dsh-partner-concern-actions button.is-danger:hover { color: var(--partner-danger); border-color: color-mix(in srgb, var(--partner-danger) 35%, var(--partner-border)); background: color-mix(in srgb, var(--partner-danger) 7%, var(--partner-control)); }\n.dsh-partner-concern-more { display: flex; justify-content: center; padding: 5px; border-top: 1px solid var(--partner-border); }\n.dsh-partner-concern-more button { min-height: 26px; padding: 0 9px; border: 0; border-radius: 7px; color: var(--partner-text-tertiary); background: transparent; font: 540 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-concern-more button:hover { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 7%, transparent); }\n.dsh-partner-concern-empty { margin: 0; padding: 13px 12px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.5; }\n.dsh-partner-concern-resolved { border-top: 1px solid var(--partner-border); }\n.dsh-partner-concern-resolved summary { min-height: 34px; padding: 9px 12px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); cursor: pointer; list-style: none; }\n.dsh-partner-concern-resolved summary::-webkit-details-marker { display: none; }\n.dsh-partner-concern-resolved summary::before { display: inline-block; margin-right: 7px; content: '\\203A'; transition: transform .15s ease; }\n.dsh-partner-concern-resolved[open] summary::before { transform: rotate(90deg); }\n.dsh-partner-concern-resolved summary b { margin-left: 4px; color: var(--partner-accent); font-variant-numeric: tabular-nums; }\n.dsh-partner-concern-resolved > div { display: grid; max-height: 170px; overflow-y: auto; border-top: 1px solid color-mix(in srgb, var(--partner-border) 72%, transparent); }\n.dsh-partner-concern-resolved article { display: grid; min-height: 38px; grid-template-columns: 22px minmax(0, 1fr) auto; align-items: center; gap: 7px; padding: 4px 10px; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 60%, transparent); }\n.dsh-partner-concern-resolved article > span { display: grid; width: 20px; height: 20px; border-radius: 7px; place-items: center; color: var(--partner-accent); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }\n.dsh-partner-concern-resolved article strong { overflow: hidden; font-size: var(--partner-font-caption); font-weight: 560; text-overflow: ellipsis; white-space: nowrap; }\n@keyframes dsh-partner-reveal { from { opacity: 0; transform: translateY(-3px); } to { opacity: 1; transform: translateY(0); } }\n.dsh-partner-automation-actions { display: flex; justify-content: flex-end; gap: 8px; padding-top: 12px; border-top: 1px solid var(--partner-border); }\n.dsh-partner-automation-actions button, .dsh-partner-section-heading button { min-height: 32px; padding: 0 12px; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--partner-text-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-automation-actions button.is-primary { color: var(--partner-raised); border-color: transparent; background: var(--partner-accent-strong); }\n.dsh-partner-automation-actions button:disabled, .dsh-partner-section-heading button:disabled { opacity: .45; cursor: default; }\n.dsh-partner-inline-notice { display: flex; align-items: center; gap: 6px; margin: 12px 0 0; color: var(--partner-accent-strong); font-size: var(--partner-font-caption); }\n.dsh-partner-section-heading { display: flex; align-items: end; justify-content: space-between; gap: 12px; margin-top: 24px; padding-bottom: 8px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-section-heading span { display: grid; gap: 3px; }\n.dsh-partner-section-heading small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); letter-spacing: .12em; }\n.dsh-partner-section-heading strong { font-size: var(--partner-font-body); }\n.dsh-partner-memory-library { margin-top: 28px; overflow: hidden; border: 1px solid var(--partner-border); border-radius: 17px; background: color-mix(in srgb, var(--partner-raised) 58%, transparent); box-shadow: 0 22px 64px color-mix(in srgb, var(--partner-accent-strong) 5%, transparent), inset 0 1px color-mix(in srgb, white 6%, transparent); }\n.dsh-partner-library-header { display: flex; align-items: end; justify-content: space-between; gap: 24px; padding: 19px 20px 0; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-library-header > span { display: grid; gap: 4px; padding-bottom: 15px; }\n.dsh-partner-library-header > span small { color: var(--partner-accent); font-size: var(--partner-font-caption); font-weight: 700; letter-spacing: .12em; }\n.dsh-partner-library-header > span strong { font-size: var(--partner-font-title); font-weight: 650; letter-spacing: -.02em; }\n.dsh-partner-library-header > span p { margin: 0; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-library-header nav { display: flex; align-self: stretch; gap: 4px; }\n.dsh-partner-library-header nav button { position: relative; padding: 0 8px; border: 0; color: var(--partner-text-tertiary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-library-header nav button::after { position: absolute; right: 7px; bottom: -1px; left: 7px; height: 2px; border-radius: 2px; background: var(--partner-accent); opacity: 0; content: ''; }\n.dsh-partner-library-header nav button.is-active { color: var(--partner-text); }\n.dsh-partner-library-header nav button.is-active::after { opacity: 1; }\n.dsh-partner-library-header nav b { margin-left: 4px; color: var(--partner-accent); font-size: var(--partner-font-caption); font-variant-numeric: tabular-nums; }\n.dsh-partner-library-tools { display: flex; align-items: center; gap: 12px; min-height: 53px; padding: 9px 12px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-library-tools > label { flex: 0 1 230px; }\n.dsh-partner-library-tools input { width: 100%; height: 34px; padding: 0 11px; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--partner-text); background: var(--partner-control); font-size: var(--partner-font-caption); }\n.dsh-partner-library-tools input::placeholder { color: var(--partner-text-tertiary); }\n.dsh-partner-memory-kinds { display: flex; min-width: 0; gap: 3px; overflow-x: auto; }\n.dsh-partner-memory-kinds button { flex: none; height: 28px; padding: 0 8px; border: 0; border-radius: 7px; color: var(--partner-text-tertiary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-memory-kinds button:hover { color: var(--partner-text); background: var(--partner-hover); }\n.dsh-partner-memory-kinds button.is-active { color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 10%, transparent); }\n.dsh-partner-library-browser { display: grid; grid-template-columns: minmax(270px, 31%) minmax(0, 1fr); height: clamp(430px, 58vh, 640px); min-height: 0; overflow: hidden; }\n.dsh-partner-library-list { min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior-x: contain; overscroll-behavior-y: auto; border-right: 1px solid var(--partner-border); scrollbar-gutter: stable; }\n.dsh-partner-library-list > button { display: grid; width: 100%; gap: 5px; padding: 12px 14px; border: 0; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 70%, transparent); color: inherit; background: transparent; text-align: left; cursor: pointer; }\n.dsh-partner-library-list > button:hover { background: color-mix(in srgb, var(--partner-accent) 4%, transparent); }\n.dsh-partner-library-list > button.is-active { background: color-mix(in srgb, var(--partner-accent) 8%, transparent); box-shadow: inset 2px 0 var(--partner-accent); }\n.dsh-partner-library-list > button > span { width: max-content; color: var(--partner-accent); font-size: var(--partner-font-caption); font-weight: 650; letter-spacing: .06em; }\n.dsh-partner-library-list > button > strong { overflow: hidden; font-size: var(--partner-font-body); font-weight: 610; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-library-list > button > p { display: -webkit-box; margin: 0; overflow: hidden; color: var(--partner-text-secondary); font-size: var(--partner-font-caption); line-height: 1.5; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }\n.dsh-partner-library-list > button > small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-library-list.is-diary time { color: var(--partner-accent); font: 600 var(--partner-font-caption)/1.2 var(--partner-font-family); font-variant-numeric: tabular-nums; }\n.dsh-partner-library-detail { min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior-x: contain; overscroll-behavior-y: auto; padding: 24px clamp(20px, 3vw, 34px) 40px; background: radial-gradient(circle at 92% 4%, color-mix(in srgb, var(--partner-accent) 6%, transparent), transparent 34%); scrollbar-gutter: stable; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) { display: grid; align-content: start; gap: 13px; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > header,\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > header span { color: var(--partner-accent); font-size: var(--partner-font-caption); font-weight: 650; letter-spacing: .08em; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > header > div { display: flex; gap: 10px; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > header button { min-width: 28px; min-height: 28px; padding: 0 6px; border: 0; border-radius: 7px; color: var(--partner-text-tertiary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > header button:hover { color: var(--partner-accent); }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > strong { font-size: var(--partner-font-title); font-weight: 650; letter-spacing: -.025em; }\n.dsh-partner-library-detail > article:not(.dsh-partner-diary-detail) > p { max-width: 64ch; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.75; text-wrap: pretty; }\n.dsh-partner-library-detail progress { width: min(100px, 45%); height: 3px; overflow: hidden; border: 0; border-radius: 2px; appearance: none; background: var(--partner-border); }\n.dsh-partner-library-detail progress::-webkit-progress-bar { background: transparent; }\n.dsh-partner-library-detail progress::-webkit-progress-value { background: var(--partner-accent); }\n.dsh-partner-library-detail progress::-moz-progress-bar { background: var(--partner-accent); }\n.dsh-partner-library-detail footer small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-profile-browser { display: grid; grid-template-columns: minmax(220px, 25%) minmax(0, 1fr); height: clamp(450px, 61vh, 660px); min-height: 0; overflow: hidden; }\n.dsh-partner-profile-people { min-height: 0; overflow-x: hidden; overflow-y: auto; border-right: 1px solid var(--partner-border); scrollbar-gutter: stable; }\n.dsh-partner-profile-people > button { display: grid; grid-template-columns: 32px minmax(0, 1fr) 7px; align-items: center; gap: 10px; width: 100%; min-height: 58px; padding: 9px 13px; border: 0; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 70%, transparent); color: inherit; background: transparent; text-align: left; cursor: pointer; transition: background-color 150ms ease, box-shadow 180ms var(--partner-ease-out); }\n.dsh-partner-profile-people > button:hover { background: var(--partner-hover); }\n.dsh-partner-profile-people > button.is-active { background: var(--partner-selected); box-shadow: inset 2px 0 var(--partner-accent-strong); }\n.dsh-partner-profile-people > button > span { display: grid; place-items: center; width: 32px; height: 32px; border: 1px solid var(--partner-border); border-radius: 10px; color: var(--partner-text-secondary); background: var(--partner-glass-clear); box-shadow: inset 0 1px 0 var(--partner-glass-highlight); }\n.dsh-partner-profile-people > button > div { display: grid; min-width: 0; gap: 2px; }\n.dsh-partner-profile-people strong, .dsh-partner-profile-people small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-profile-people strong { font-size: var(--partner-font-body); font-weight: 610; }\n.dsh-partner-profile-people small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-profile-people > button > i { width: 6px; height: 6px; border: 1px solid var(--partner-text-tertiary); border-radius: 50%; }\n.dsh-partner-profile-people > button.is-active > i { border-color: var(--partner-accent-strong); background: var(--partner-accent-strong); }\n.dsh-partner-profile-stage { min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior-x: contain; overscroll-behavior-y: auto; padding: 25px clamp(20px, 3vw, 36px) 42px; scrollbar-gutter: stable; }\n.dsh-partner-profile-heading { display: flex; align-items: start; justify-content: space-between; gap: 24px; padding-bottom: 21px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-profile-heading > span { display: grid; max-width: 66ch; gap: 5px; }\n.dsh-partner-profile-heading > span small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 650; letter-spacing: .1em; }\n.dsh-partner-profile-heading > span strong { font-size: var(--partner-font-title); font-weight: 660; letter-spacing: -.025em; }\n.dsh-partner-profile-heading > span p { margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.6; }\n.dsh-partner-profile-heading > div { display: flex; flex: none; align-items: center; gap: 6px; min-height: 28px; padding: 0 9px; border: 1px solid var(--partner-border); border-radius: 999px; color: var(--partner-text-tertiary); background: var(--partner-glass-clear); font-size: var(--partner-font-caption); box-shadow: inset 0 1px 0 var(--partner-glass-highlight); }\n.dsh-partner-profile-heading > div > i { width: 6px; height: 6px; border: 1px solid currentColor; border-radius: 50%; }\n.dsh-partner-profile-heading > div[data-ready=\"true\"] { color: var(--partner-text-secondary); }\n.dsh-partner-profile-heading > div[data-ready=\"true\"] > i { background: currentColor; }\n.dsh-partner-profile-meta { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: 17px 0 8px; padding: 13px 0; border-block: 1px solid var(--partner-separator); }\n.dsh-partner-profile-meta > span { display: grid; min-width: 0; gap: 3px; padding: 0 14px; border-left: 1px solid var(--partner-separator); }\n.dsh-partner-profile-meta > span:first-child { padding-left: 0; border-left: 0; }\n.dsh-partner-profile-meta small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-profile-meta strong { overflow: hidden; font-size: var(--partner-font-body); font-weight: 620; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-profile-entries { display: grid; }\n.dsh-partner-profile-entries > article, .dsh-partner-profile-pending > div > article { display: grid; gap: 11px; padding: 18px 0; border-bottom: 1px solid var(--partner-separator); }\n.dsh-partner-profile-entries > article > header, .dsh-partner-profile-entries > article > footer,\n.dsh-partner-profile-pending > div > article > header, .dsh-partner-profile-pending > div > article > footer { display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n.dsh-partner-profile-entries article > header > span, .dsh-partner-profile-pending article > header > span { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 650; letter-spacing: .07em; }\n.dsh-partner-profile-entries article > header > div, .dsh-partner-profile-pending article > header > div { display: flex; gap: 11px; }\n.dsh-partner-profile-entries article > header button, .dsh-partner-profile-pending article > header button { min-width: 28px; min-height: 28px; padding: 0 6px; border: 0; border-radius: 7px; color: var(--partner-text-tertiary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-profile-entries article > header button:hover, .dsh-partner-profile-pending article > header button:hover { color: var(--partner-text); }\n.dsh-partner-profile-entries article > strong, .dsh-partner-profile-pending article > strong { font-size: var(--partner-font-label); font-weight: 640; }\n.dsh-partner-profile-entries article > p, .dsh-partner-profile-pending article > p { max-width: 68ch; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.65; text-wrap: pretty; }\n.dsh-partner-profile-entries progress, .dsh-partner-profile-pending progress { width: min(100px, 45%); height: 3px; overflow: hidden; border: 0; border-radius: 2px; appearance: none; background: var(--partner-border); }\n.dsh-partner-profile-entries progress::-webkit-progress-bar, .dsh-partner-profile-pending progress::-webkit-progress-bar { background: transparent; }\n.dsh-partner-profile-entries progress::-webkit-progress-value, .dsh-partner-profile-pending progress::-webkit-progress-value { background: var(--partner-accent); }\n.dsh-partner-profile-entries progress::-moz-progress-bar, .dsh-partner-profile-pending progress::-moz-progress-bar { background: var(--partner-accent); }\n.dsh-partner-profile-entries footer small, .dsh-partner-profile-pending footer small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-profile-pending { margin-top: 18px; border-top: 1px solid var(--partner-border); }\n.dsh-partner-profile-pending > summary { display: flex; min-height: 40px; align-items: center; gap: 6px; padding: 8px 0 2px; color: var(--partner-text-secondary); font-size: var(--partner-font-body); font-weight: 610; list-style: none; cursor: pointer; }\n.dsh-partner-profile-pending > summary::-webkit-details-marker, .dsh-partner-memory-evidence > summary::-webkit-details-marker { display: none; }\n.dsh-partner-profile-pending > summary::before, .dsh-partner-memory-evidence > summary::before { display: inline-block; color: var(--partner-text-tertiary); font-size: 10px; content: '\u203A'; transform: rotate(0); transition: transform 160ms var(--partner-ease-out); }\n.dsh-partner-profile-pending[open] > summary::before, .dsh-partner-memory-evidence[open] > summary::before { transform: rotate(90deg); }\n.dsh-partner-profile-pending > summary b { margin-left: 4px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-memory-evidence { margin-top: 2px; border-top: 1px solid var(--partner-separator); }\n.dsh-partner-memory-evidence > summary { display: flex; min-height: 34px; align-items: center; gap: 5px; padding-top: 6px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); list-style: none; cursor: pointer; }\n.dsh-partner-memory-evidence > summary b { margin-left: 3px; font-weight: 620; }\n.dsh-partner-memory-evidence > div { display: grid; gap: 7px; padding-top: 9px; }\n.dsh-partner-memory-evidence blockquote { margin: 0; padding: 9px 11px; border-left: 2px solid var(--partner-border); color: var(--partner-text-secondary); background: color-mix(in srgb, var(--partner-control) 50%, transparent); }\n.dsh-partner-memory-evidence blockquote p { margin: 0; font-size: var(--partner-font-caption); line-height: 1.55; }\n.dsh-partner-memory-evidence blockquote time { display: block; margin-top: 5px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-memory-editor { display: grid; gap: 9px; }\n.dsh-partner-memory-editor input, .dsh-partner-memory-editor textarea { box-sizing: border-box; width: 100%; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--partner-text); outline: none; background: var(--partner-control); font: 500 var(--partner-font-caption)/1.5 var(--partner-font-family); }\n.dsh-partner-memory-editor input { min-height: 32px; padding: 0 10px; }\n.dsh-partner-memory-editor textarea { min-height: 76px; padding: 8px 10px; resize: vertical; }\n.dsh-partner-memory-editor input:focus, .dsh-partner-memory-editor textarea:focus { border-color: color-mix(in srgb, var(--partner-accent) 48%, var(--partner-border)); box-shadow: 0 0 0 2px color-mix(in srgb, var(--partner-accent) 8%, transparent); }\n.dsh-partner-memory-editor footer { display: flex; justify-content: flex-end; gap: 7px; }\n.dsh-partner-memory-editor button { min-height: 28px; padding: 0 10px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--partner-font-family); cursor: pointer; }\n.dsh-partner-memory-editor button.is-primary { border-color: transparent; color: var(--partner-on-accent); background: var(--partner-accent-strong); }\n.dsh-partner-diary-detail { display: grid; align-content: start; gap: 20px; }\n.dsh-partner-diary-detail > header { display: grid; gap: 5px; padding-bottom: 16px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-diary-detail > header time { color: var(--partner-accent); font: 600 var(--partner-font-caption)/1 var(--partner-font-family); font-variant-numeric: tabular-nums; }\n.dsh-partner-diary-detail > header strong { font-size: var(--partner-font-title); letter-spacing: -.02em; }\n.dsh-partner-diary-detail > header small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-diary-detail > p { margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.75; text-wrap: pretty; }\n.dsh-partner-diary-detail > section { display: grid; gap: 8px; }\n.dsh-partner-diary-detail > section > strong { color: var(--partner-accent-strong); font-size: var(--partner-font-caption); }\n.dsh-partner-diary-detail ul { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }\n.dsh-partner-diary-detail li { position: relative; padding-left: 12px; color: var(--partner-text-secondary); font-size: var(--partner-font-caption); line-height: 1.55; }\n.dsh-partner-diary-detail li::before { position: absolute; top: .62em; left: 1px; width: 3px; height: 3px; border-radius: 50%; background: var(--partner-accent); content: ''; }\n.dsh-partner-graph-audit { min-height: 0; }\n.dsh-partner-graph-toolbar { display: flex; min-height: 78px; align-items: center; justify-content: space-between; gap: 20px; padding: 13px 18px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-graph-toolbar > span { display: grid; min-width: 0; gap: 3px; }\n.dsh-partner-graph-toolbar > span small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 650; letter-spacing: .1em; }\n.dsh-partner-graph-toolbar > span strong { overflow: hidden; font-size: var(--partner-font-label); font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-graph-toolbar > span p { margin: 0; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-toolbar > label { display: grid; flex: 0 1 220px; gap: 4px; }\n.dsh-partner-graph-toolbar > label > span { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-toolbar select { width: 100%; height: 34px; padding: 0 30px 0 10px; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--partner-text); background-color: var(--partner-control); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-filters { display: flex; min-width: 0; gap: 4px; min-height: 45px; align-items: center; padding: 7px 12px; overflow-x: auto; border-bottom: 1px solid var(--partner-border); scrollbar-width: none; }\n.dsh-partner-graph-filters::-webkit-scrollbar { display: none; }\n.dsh-partner-graph-filters button { flex: none; min-height: 30px; padding: 0 9px; border: 1px solid transparent; border-radius: 8px; color: var(--partner-text-tertiary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; transition: color 140ms ease, background-color 140ms ease, border-color 140ms ease; }\n.dsh-partner-graph-filters button:hover { color: var(--partner-text); background: var(--partner-hover); }\n.dsh-partner-graph-filters button.is-active { border-color: var(--partner-border); color: var(--partner-text); background: var(--partner-selected); box-shadow: inset 0 1px 0 var(--partner-glass-highlight); }\n.dsh-partner-graph-filters b { margin-left: 3px; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-variant-numeric: tabular-nums; }\n.dsh-partner-graph-browser { display: grid; grid-template-columns: minmax(270px, 33%) minmax(0, 1fr); height: clamp(430px, 56vh, 620px); min-height: 0; overflow: hidden; }\n.dsh-partner-graph-index { min-height: 0; overflow-x: hidden; overflow-y: auto; border-right: 1px solid var(--partner-border); scrollbar-gutter: stable; }\n.dsh-partner-graph-index > button { display: grid; width: 100%; gap: 5px; padding: 12px 14px; border: 0; border-bottom: 1px solid color-mix(in srgb, var(--partner-border) 70%, transparent); color: inherit; background: transparent; text-align: left; cursor: pointer; transition: background-color 150ms ease, box-shadow 180ms var(--partner-ease-out); }\n.dsh-partner-graph-index > button:hover { background: var(--partner-hover); }\n.dsh-partner-graph-index > button.is-active { background: var(--partner-selected); box-shadow: inset 2px 0 var(--partner-accent-strong); }\n.dsh-partner-graph-index > button > span { width: max-content; padding: 3px 6px; border: 1px solid var(--partner-border); border-radius: 6px; color: var(--partner-text-secondary); background: var(--partner-glass-clear); font-size: var(--partner-font-caption); font-weight: 630; }\n.dsh-partner-graph-index > button[data-kind=\"conflicts_with\"] > span { color: var(--partner-danger); border-color: color-mix(in srgb, var(--partner-danger) 26%, var(--partner-border)); }\n.dsh-partner-graph-index strong { overflow: hidden; font-size: var(--partner-font-body); font-weight: 620; text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-graph-index strong i { color: var(--partner-text-tertiary); font-style: normal; }\n.dsh-partner-graph-index p { display: -webkit-box; margin: 0; overflow: hidden; color: var(--partner-text-secondary); font-size: var(--partner-font-caption); line-height: 1.5; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }\n.dsh-partner-graph-index small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-stage { min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; padding: 24px clamp(20px, 3vw, 36px) 40px; scrollbar-gutter: stable; }\n.dsh-partner-graph-stage > article { display: grid; gap: 20px; animation: dsh-partner-content-enter 220ms var(--partner-ease-out) both; }\n.dsh-partner-graph-stage > article > header { display: grid; gap: 6px; padding-bottom: 18px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-graph-stage > article > header > span { width: max-content; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); font-weight: 650; letter-spacing: .06em; }\n.dsh-partner-graph-stage > article[data-kind=\"conflicts_with\"] > header > span { color: var(--partner-danger); }\n.dsh-partner-graph-stage > article > header > strong { font-size: var(--partner-font-title); font-weight: 650; letter-spacing: -.025em; }\n.dsh-partner-graph-stage > article > header > strong i { color: var(--partner-text-tertiary); font-style: normal; font-weight: 450; }\n.dsh-partner-graph-stage > article > header > p { max-width: 68ch; margin: 0; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.65; }\n.dsh-partner-graph-stage > article > header > small { max-width: 72ch; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); line-height: 1.55; }\n.dsh-partner-graph-pair { display: grid; grid-template-columns: minmax(0, 1fr) 64px minmax(0, 1fr); align-items: stretch; }\n.dsh-partner-graph-pair > section { display: grid; align-content: start; gap: 9px; min-height: 170px; padding: 15px; border: 1px solid var(--partner-border); border-radius: 13px; }\n.dsh-partner-graph-pair > section > header { display: grid; gap: 3px; }\n.dsh-partner-graph-pair > section small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-pair > section strong { font-size: var(--partner-font-label); font-weight: 640; }\n.dsh-partner-graph-pair > section p { margin: 0 0 8px; color: var(--partner-text-secondary); font-size: var(--partner-font-body); line-height: 1.6; overflow-wrap: anywhere; }\n.dsh-partner-graph-pair > section button { width: max-content; min-height: 30px; margin-top: auto; padding: 0 9px; border: 1px solid var(--partner-border); border-radius: 8px; color: var(--partner-text-secondary); background: var(--partner-control); font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-graph-pair > section button:hover { color: var(--partner-text); background: var(--partner-hover); }\n.dsh-partner-graph-pair > div { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-pair > div i { height: 1px; background: var(--partner-border); }\n.dsh-partner-graph-pair > div span { padding: 0 5px; white-space: nowrap; }\n.dsh-partner-graph-stage > article > footer { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; padding-top: 2px; }\n.dsh-partner-graph-stage > article > footer small { color: var(--partner-text-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-stage > article > footer > strong { color: var(--partner-text-secondary); font-size: var(--partner-font-body); font-variant-numeric: tabular-nums; }\n.dsh-partner-state { display: grid; place-items: center; align-content: center; min-height: 280px; padding: 30px; color: var(--partner-text-tertiary); text-align: center; }\n.dsh-partner-state > svg { margin-bottom: 10px; color: var(--partner-accent); }\n.dsh-partner-state strong { color: var(--partner-text-secondary); font-size: var(--partner-font-label); }\n.dsh-partner-state p { max-width: 330px; margin: 7px 0 14px; font-size: var(--partner-font-body); line-height: 1.55; }\n.dsh-partner-state.is-compact { min-height: 130px; }\n\n/* One material contract for every card surface in the partner workspace.\n Individual components own layout and state; this layer owns glass, edge\n refraction and elevation so visual treatment cannot drift between tabs. */\n:is(\n .dsh-partner-home-details > section,\n .dsh-partner-capabilities button,\n .dsh-partner-weixin-connect,\n .dsh-partner-qr,\n .dsh-partner-channel-card,\n .dsh-partner-metrics article,\n .dsh-partner-automation,\n .dsh-partner-concern-board,\n .dsh-partner-memory-library,\n .dsh-partner-graph-pair > section\n) {\n border-color: var(--partner-border);\n background:\n linear-gradient(118deg, color-mix(in srgb, var(--partner-card-highlight) 18%, transparent), transparent 56%),\n var(--partner-card-surface);\n box-shadow: var(--partner-card-shadow);\n}\n\n/* Editable controls share one compact translucent material. Keeping this\n separate from cards preserves hierarchy while preventing theme defaults or\n platform form colors from leaking into the workspace. */\n:is(\n .dsh-partner-field input,\n .dsh-partner-field textarea,\n .dsh-partner-field select,\n .dsh-partner-review-policy select,\n .dsh-partner-concern-compose input,\n .dsh-partner-library-tools input,\n .dsh-partner-memory-editor input,\n .dsh-partner-memory-editor textarea,\n .dsh-partner-graph-toolbar select\n) {\n background-color: var(--partner-control);\n box-shadow:\n inset 0 1px 0 color-mix(in srgb, var(--partner-card-highlight) 54%, transparent),\n inset 0 -1px 0 var(--partner-glass-rim-shadow);\n}\n\n:is(\n .dsh-partner-field input,\n .dsh-partner-field textarea,\n .dsh-partner-field select,\n .dsh-partner-review-policy select,\n .dsh-partner-concern-compose input,\n .dsh-partner-library-tools input,\n .dsh-partner-memory-editor input,\n .dsh-partner-memory-editor textarea,\n .dsh-partner-graph-toolbar select\n):focus {\n border-color: var(--partner-focus-ring);\n background-color: var(--partner-raised);\n box-shadow:\n 0 0 0 3px color-mix(in srgb, var(--partner-focus-ring) 16%, transparent),\n inset 0 1px 0 color-mix(in srgb, var(--partner-card-highlight) 66%, transparent);\n}\n\n.dsh-partner-concern-decision {\n background: color-mix(in srgb, var(--partner-card-surface) 76%, transparent);\n box-shadow: inset 0 1px 0 color-mix(in srgb, var(--partner-card-highlight) 68%, transparent);\n}\n\n.dsh-partner-capabilities button.is-active {\n border-color: color-mix(in srgb, var(--partner-text) 24%, var(--partner-border));\n background:\n linear-gradient(145deg, color-mix(in srgb, var(--partner-card-highlight) 46%, transparent), transparent 58%),\n color-mix(in srgb, var(--partner-card-surface) 90%, var(--partner-card-highlight) 10%);\n box-shadow: var(--partner-card-shadow), inset 2px 0 var(--partner-text-secondary);\n}\n\n/* Shared motion and material contract. Business components keep their own\n layout while interactive surfaces receive one consistent physical response. */\n:is(\n .dsh-partner-home-channel-actions button,\n .dsh-partner-form-actions > button,\n .dsh-partner-state > button,\n .dsh-partner-weixin-connect > button,\n .dsh-partner-pairings button.is-primary,\n .dsh-partner-automation-actions button.is-primary,\n .dsh-partner-concern-compose button.is-primary,\n .dsh-partner-memory-editor button.is-primary\n) {\n position: relative;\n isolation: isolate;\n overflow: hidden;\n}\n\n:is(\n .dsh-partner-home-channel-actions button,\n .dsh-partner-form-actions > button,\n .dsh-partner-state > button,\n .dsh-partner-weixin-connect > button,\n .dsh-partner-pairings button.is-primary,\n .dsh-partner-automation-actions button.is-primary,\n .dsh-partner-concern-compose button.is-primary,\n .dsh-partner-memory-editor button.is-primary\n)::after {\n position: absolute;\n z-index: -1;\n top: -75%;\n bottom: -75%;\n left: -70%;\n width: 48%;\n border-radius: 45%;\n background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .24), transparent);\n opacity: 0;\n transform: skewX(-18deg) translate3d(0, 0, 0);\n pointer-events: none;\n transition: opacity 140ms ease, transform 680ms var(--partner-ease-out);\n content: \"\";\n}\n\n:is(\n .dsh-partner-home-channel-actions button,\n .dsh-partner-form-actions > button,\n .dsh-partner-state > button,\n .dsh-partner-weixin-connect > button,\n .dsh-partner-pairings button.is-primary,\n .dsh-partner-automation-actions button.is-primary,\n .dsh-partner-concern-compose button.is-primary,\n .dsh-partner-memory-editor button.is-primary\n):hover:not(:disabled)::after {\n opacity: 1;\n transform: skewX(-18deg) translate3d(360%, 0, 0);\n}\n\n:is(\n .dsh-partner-roster-title button,\n .dsh-partner-home-details header button,\n .dsh-partner-qr button,\n .dsh-partner-pairings button,\n .dsh-partner-session-list button,\n .dsh-partner-review-policy > button:last-child,\n .dsh-partner-automation-actions button,\n .dsh-partner-section-heading button,\n .dsh-partner-concern-actions button,\n .dsh-partner-concern-resolved button,\n .dsh-partner-memory-editor button,\n .dsh-partner-graph-pair > section button\n) {\n transition:\n color 140ms ease,\n border-color 140ms ease,\n background-color 140ms ease,\n box-shadow 180ms ease,\n transform 160ms var(--partner-ease-out);\n}\n\n:is(\n .dsh-partner-home-channel-actions button,\n .dsh-partner-form-actions > button,\n .dsh-partner-state > button,\n .dsh-partner-weixin-connect > button,\n .dsh-partner-pairings button,\n .dsh-partner-session-list button,\n .dsh-partner-review-policy > button:last-child,\n .dsh-partner-automation-actions button,\n .dsh-partner-section-heading button,\n .dsh-partner-concern-actions button,\n .dsh-partner-concern-resolved button,\n .dsh-partner-memory-editor button,\n .dsh-partner-graph-pair > section button\n):active:not(:disabled) {\n transform: scale(.97);\n}\n\n:is(.dsh-partner-library-list > button, .dsh-partner-graph-index > button):hover {\n border-color: var(--partner-border);\n background: var(--partner-hover);\n}\n\n.dsh-partner-home-details > section,\n.dsh-partner-metrics > article,\n.dsh-partner-automation-grid > section {\n animation: dsh-partner-item-enter 300ms var(--partner-ease-out) both;\n}\n.dsh-partner-home-details > section:nth-child(2),\n.dsh-partner-metrics > article:nth-child(2),\n.dsh-partner-automation-grid > section:nth-child(2) { animation-delay: 36ms; }\n.dsh-partner-home-details > section:nth-child(3),\n.dsh-partner-metrics > article:nth-child(3) { animation-delay: 72ms; }\n\n@keyframes dsh-partner-content-enter {\n from { opacity: 0; transform: translate3d(0, 6px, 0); }\n to { opacity: 1; transform: translate3d(0, 0, 0); }\n}\n@keyframes dsh-partner-item-enter {\n from { opacity: 0; transform: translate3d(0, 8px, 0) scale(.99); }\n to { opacity: 1; transform: translate3d(0, 0, 0) scale(1); }\n}\n\n@media (prefers-reduced-transparency: reduce) {\n :is(.dsh-partner-sidebar, .dsh-partner-workspace) {\n --partner-canvas: var(--partner-solid-canvas);\n --partner-surface: var(--partner-solid-panel);\n --partner-pane: var(--partner-solid-panel);\n --partner-raised: var(--partner-solid-raised);\n --partner-control: var(--partner-solid-control);\n --partner-card-surface: var(--partner-solid-raised);\n }\n .dsh-partner-topbar,\n .dsh-partner-roster,\n .dsh-partner-stage,\n .dsh-partner-home-channel,\n .dsh-partner-home-details > section,\n .dsh-partner-capabilities button,\n .dsh-partner-weixin-connect,\n .dsh-partner-qr,\n .dsh-partner-channel-card,\n .dsh-partner-metrics article,\n .dsh-partner-automation,\n .dsh-partner-concern-board,\n .dsh-partner-memory-library,\n .dsh-partner-graph-pair > section { -webkit-backdrop-filter: none; backdrop-filter: none; }\n .dsh-partner-glass-surface { -webkit-backdrop-filter: none; backdrop-filter: none; }\n}\n\n@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {\n :is(.dsh-partner-sidebar, .dsh-partner-workspace) {\n --partner-canvas: var(--partner-solid-canvas);\n --partner-surface: var(--partner-solid-panel);\n --partner-pane: var(--partner-solid-panel);\n --partner-raised: var(--partner-solid-raised);\n --partner-control: var(--partner-solid-control);\n --partner-card-surface: var(--partner-solid-raised);\n }\n}\n\n@container partner-memory (max-width: 980px) {\n .dsh-partner-automation-grid { grid-template-columns: minmax(0, 1fr); }\n}\n\n@container partner-memory (max-width: 640px) {\n .dsh-partner-automation-fields.is-heartbeat { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n .dsh-partner-automation-fields.is-memory-model { grid-template-columns: minmax(0, 1fr); }\n .dsh-partner-review-policy { grid-template-columns: auto minmax(0, 1fr); }\n .dsh-partner-review-policy > label,\n .dsh-partner-review-policy > button:last-child { grid-column: span 1; }\n .dsh-partner-concern-board > header p { display: none; }\n .dsh-partner-concern-row { grid-template-columns: minmax(0, 1fr) auto 14px; gap: 7px; }\n .dsh-partner-concern-state { grid-column: 1; }\n .dsh-partner-concern-copy { grid-row: 2; grid-column: 1 / -1; padding-left: 13px; }\n .dsh-partner-concern-time { grid-row: 1; grid-column: 2; }\n .dsh-partner-concern-row > svg { grid-row: 1; grid-column: 3; }\n .dsh-partner-concern-detail { padding: 0 12px 11px 25px; }\n .dsh-partner-concern-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }\n}\n\n@media (max-width: 1080px) {\n .dsh-partner-grid { grid-template-columns: 190px minmax(400px, 1fr); }\n .dsh-partner-home-channel { grid-template-columns: minmax(190px, .7fr) minmax(300px, 1.3fr); }\n .dsh-partner-home-channel-copy { padding-right: 26px; }\n}\n@media (max-width: 760px) {\n .dsh-partner-grid { grid-template-columns: 1fr; }\n .dsh-partner-roster { display: none; }\n .dsh-partner-identity { padding-inline: 16px; }\n .dsh-partner-tabs { margin-inline: 12px; overflow-x: auto; }\n .dsh-partner-tabs button { flex: none; }\n .dsh-partner-stage-scroll { padding: 19px 16px 38px; }\n .dsh-partner-fields.two,\n .dsh-partner-capabilities,\n .dsh-partner-metrics { grid-template-columns: 1fr; }\n .dsh-partner-home-heading { display: grid; gap: 8px; }\n .dsh-partner-home-heading p { text-align: left; }\n .dsh-partner-home-channel { grid-template-columns: 1fr; }\n .dsh-partner-home-route { min-height: 128px; padding-bottom: 10px; }\n .dsh-partner-home-channel-copy { padding: 12px 22px 24px; }\n .dsh-partner-home-details { grid-template-columns: 1fr; }\n .dsh-partner-home-profile { grid-row: auto; }\n .dsh-partner-weixin-connect { grid-template-columns: 52px 1fr; }\n .dsh-partner-weixin-connect > button { grid-column: 1 / -1; }\n .dsh-partner-qr { grid-template-columns: 1fr; justify-items: center; text-align: center; }\n .dsh-partner-qr > span { justify-items: center; }\n .dsh-partner-channel-card { grid-template-columns: 45px minmax(0, 1fr) auto; }\n .dsh-partner-channel-card > .dsh-partner-status { display: none; }\n .dsh-partner-library-header { display: grid; gap: 0; }\n .dsh-partner-library-header nav { min-height: 38px; }\n .dsh-partner-library-tools { display: grid; }\n .dsh-partner-library-tools > label { width: 100%; }\n .dsh-partner-library-browser { grid-template-columns: 1fr; height: auto; overflow: visible; }\n .dsh-partner-library-list { max-height: 300px; border-right: 0; border-bottom: 1px solid var(--partner-border); }\n .dsh-partner-library-detail { min-height: 280px; }\n .dsh-partner-profile-browser { grid-template-columns: 1fr; height: auto; overflow: visible; }\n .dsh-partner-profile-people { max-height: 240px; border-right: 0; border-bottom: 1px solid var(--partner-border); }\n .dsh-partner-profile-stage { min-height: 330px; }\n .dsh-partner-profile-heading { display: grid; }\n .dsh-partner-profile-heading > div { width: max-content; }\n .dsh-partner-profile-meta { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n .dsh-partner-profile-meta > span:nth-child(3) { padding-left: 0; border-left: 0; }\n .dsh-partner-graph-toolbar { display: grid; min-height: 0; gap: 12px; }\n .dsh-partner-graph-toolbar > label { width: 100%; }\n .dsh-partner-graph-browser { grid-template-columns: 1fr; height: auto; }\n .dsh-partner-graph-index { max-height: 280px; border-right: 0; border-bottom: 1px solid var(--partner-border); }\n .dsh-partner-graph-stage { min-height: 320px; }\n .dsh-partner-graph-pair { grid-template-columns: 1fr; gap: 9px; }\n .dsh-partner-graph-pair > div { min-height: 20px; grid-template-columns: 1fr auto 1fr; }\n .dsh-partner-graph-stage > article > footer { display: grid; gap: 4px; }\n}\n@media (prefers-reduced-motion: reduce) {\n .dsh-partner-workspace *,\n .dsh-partner-sidebar * { scroll-behavior: auto !important; transition-duration: .01ms !important; animation-duration: .01ms !important; }\n}\n", "export const PARTNER_API = '/partner-local/v1'\n\nexport type Capability = 'knowledge' | 'skills' | 'ssh' | 'git'\nexport interface AutomationView {\n memory: { enabled: boolean; retentionDays: number; provider?: string; model?: string; dailyReviewEnabled: boolean; dailyReviewHour: number }\n heartbeat: { enabled: boolean; intervalMinutes: number; quietStartHour: number; quietEndHour: number; dailyLimit: number }\n}\nexport interface CompanionView {\n id: string; name: string; role: string; description: string; instructions: string\n presetId?: string; provider?: string; model?: string; capabilities: Capability[]\n createdAt: number; updatedAt: number\n automation: AutomationView\n}\nexport interface ChannelView {\n id: string; companionId: string; accountId: string; name: string; enabled: boolean\n createdAt: number; updatedAt: number; runtimeStatus: 'stopped' | 'starting' | 'running' | 'error'\n lastError?: string; credentialConfigured: boolean\n}\nexport interface PairingView {\n id: string; channelId: string; userId: string; displayName: string\n status: 'pending' | 'approved' | 'blocked'; createdAt: number; updatedAt: number\n}\nexport interface ChannelSessionView {\n id: string; channelId: string; userId: string; companionId: string; sessionId: string; cwd?: string; lastMessageAt: number; archived: boolean\n}\nexport interface HeartbeatStateView {\n companionId: string; lastCheckedAt?: number; lastSentAt?: number; nextCheckAt: number\n sentDay: string; sentCount: number; consecutiveFailures: number; lastError?: string\n}\nexport type MemoryKindView = 'profile' | 'preference' | 'task' | 'event' | 'relationship' | 'emotion'\nexport interface MemoryEvidenceView { turnId: string; at: number; excerpt: string }\nexport interface MemoryView { id: string; scopeId: string; kind: MemoryKindView; subject: string; content: string; status: 'active' | 'completed' | 'superseded' | 'expired'; confidence: number; importance: number; updatedAt: number; locked?: boolean; evidence: MemoryEvidenceView[] }\nexport interface UserProfileSnapshotView { scopeId: string; label: string; version: string; updatedAt?: number; entries: MemoryView[]; evidenceCount: number; lockedCount: number }\nexport interface MemoryRelationView { id: string; scopeId: string; sourceMemoryId: string; targetMemoryId: string; kind: 'supports' | 'depends_on' | 'about' | 'conflicts_with' | 'follows'; label: string; confidence: number; updatedAt: number }\nexport interface MemoryGraphView { memories: MemoryView[]; relations: MemoryRelationView[] }\nexport interface DailyReflectionView { date: string; summary: string; events: string[]; openTasks: string[]; completedTasks: string[]; learnings: string[]; updatedAt: number; turnCount: number }\nexport interface ConcernView {\n id: string; subject: string; reason: string; origin: 'explicit' | 'implicit'; state: 'active' | 'watching' | 'snoozed' | 'resolved' | 'archived'\n priority: number; confidence: number; score: number; watchKind: 'auto' | 'knowledge' | 'workspace' | 'web'; updatedAt: number; nextCheckAt: number; lastCheckedAt?: number\n resources: Array<{ kind: 'file' | 'knowledge'; locator: string; label: string }>\n}\nexport interface ConcernObservationView {\n id: string; concernId: string; event: string; evidence: string; source: string; interruptScore: number\n decision: 'drop' | 'remember' | 'defer' | 'feed' | 'notify'; notificationRuleEffect: 'auto' | 'notify' | 'suppress'\n notificationRuleReason: string; decisionReason: string; createdAt: number; mentionedAt?: number\n}\nexport interface ConcernActivityView { concerns: ConcernView[]; observations: ConcernObservationView[] }\nexport interface ConcernSourceView { kind: 'file' | 'knowledge'; label: string; detail: string; token: string }\nexport interface PresetView { id: string; name: string; broken?: string }\nexport interface ModelCatalogView { providers: Array<{ id: string; name: string; models: Array<{ id: string; name: string }> }>; defaultSelection: { provider: string; model: string } }\nexport interface PartnerSnapshot {\n companions: CompanionView[]; channels: ChannelView[]; pairings: PairingView[]; sessions: ChannelSessionView[]; heartbeatStates: HeartbeatStateView[]; presets: PresetView[]\n}\nexport interface LoginView {\n id: string; companionId: string; phase: 'waiting' | 'scanned' | 'confirmed' | 'expired' | 'error'\n qrContent?: string; accountId?: string; baseUrl?: string; error?: string; expiresAt: number\n}\n\nexport async function api<T>(path = '', init: RequestInit = {}): Promise<T> {\n const method = init.method ?? 'GET'\n const response = await fetch(`${PARTNER_API}${path}`, {\n ...init,\n headers: {\n Accept: 'application/json',\n ...(method === 'GET' ? {} : { 'Content-Type': 'application/json', 'X-DSH-Partner-Request': '1' }),\n ...init.headers,\n },\n })\n if (response.status === 204) return undefined as T\n const body = await response.json().catch(() => ({})) as Record<string, unknown>\n if (!response.ok) throw new Error(typeof body.error === 'string' ? body.error : `HTTP ${response.status}`)\n return body as T\n}\n\nexport function loadPartner(): Promise<PartnerSnapshot> { return api() }\n", "import { useEffect, type RefObject } from 'react'\n\nexport function useWorkspaceTopAnchor(ref: RefObject<HTMLElement>): void {\n useEffect(() => {\n const element = ref.current\n const originalParent = element?.parentElement\n if (!element || !originalParent) return\n let moved = false\n let observer: MutationObserver | undefined\n const place = (): boolean => {\n let ancestor: HTMLElement | null = element.parentElement\n while (ancestor && ancestor !== document.body) {\n const candidate = ancestor.previousElementSibling\n if (candidate instanceof HTMLElement) {\n const style = getComputedStyle(candidate)\n if (style.display === 'flex' && style.flexDirection === 'column' && Number.parseFloat(style.flexGrow) > 0) {\n candidate.insertBefore(element, candidate.firstChild)\n moved = true\n return true\n }\n }\n ancestor = ancestor.parentElement\n }\n return false\n }\n if (!place()) {\n observer = new MutationObserver(() => { if (place()) observer?.disconnect() })\n observer.observe(document.body, { childList: true, subtree: true })\n }\n return () => {\n observer?.disconnect()\n if (moved && originalParent.isConnected) originalParent.append(element)\n }\n }, [ref])\n}\n", "export function futureTime(value: number, now = Date.now()): string {\n const minutes = Math.ceil((value - now) / 60_000)\n if (minutes <= 0) return '\u5373\u5C06\u68C0\u67E5'\n if (minutes < 60) return `${minutes} \u5206\u949F\u540E`\n const hours = Math.ceil(minutes / 60)\n if (hours < 24) return `${hours} \u5C0F\u65F6\u540E`\n const days = Math.ceil(hours / 24)\n if (days <= 7) return `${days} \u5929\u540E`\n const date = new Date(value)\n const month = String(date.getMonth() + 1).padStart(2, '0')\n const day = String(date.getDate()).padStart(2, '0')\n const hour = String(date.getHours()).padStart(2, '0')\n const minute = String(date.getMinutes()).padStart(2, '0')\n return `${month}/${day} ${hour}:${minute}`\n}\n", "import {\n useEffect,\n useId,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactNode,\n} from 'react'\n\ntype GlassElement = 'header' | 'aside' | 'section' | 'article' | 'div' | 'button'\n\ninterface GlassSurfaceProps extends Omit<HTMLAttributes<HTMLElement>, 'children' | 'className'> {\n as: GlassElement\n children: ReactNode\n className: string\n borderRadius: number\n borderWidth?: number\n brightness?: number\n blur?: number\n distortionScale?: number\n interactive?: boolean\n opacity?: number\n saturation?: number\n type?: 'button' | 'submit' | 'reset'\n disabled?: boolean\n}\n\ninterface GlassStyle extends CSSProperties {\n '--partner-glass-filter-id': string\n '--partner-glass-saturation': number\n '--partner-glare-x': string\n '--partner-glare-y': string\n}\n\nfunction supportsSvgBackdropFilter(filterId: string): boolean {\n if (typeof window === 'undefined' || typeof document === 'undefined') return false\n if (window.matchMedia('(prefers-reduced-transparency: reduce)').matches) return false\n const userAgent = navigator.userAgent\n if (/Firefox/i.test(userAgent) || (/Safari/i.test(userAgent) && !/(Chrome|Chromium|CriOS)/i.test(userAgent))) return false\n const probe = document.createElement('div')\n probe.style.backdropFilter = `url(#${filterId})`\n return probe.style.backdropFilter !== ''\n}\n\nfunction displacementMap(\n width: number,\n height: number,\n radius: number,\n borderWidth: number,\n brightness: number,\n opacity: number,\n blur: number,\n redGradientId: string,\n blueGradientId: string,\n): string {\n const edge = Math.max(1, Math.min(width, height) * borderWidth * .5)\n const innerWidth = Math.max(1, width - edge * 2)\n const innerHeight = Math.max(1, height - edge * 2)\n const svg = `<svg viewBox=\"0 0 ${width} ${height}\" xmlns=\"http://www.w3.org/2000/svg\">\n <defs>\n <linearGradient id=\"${redGradientId}\" x1=\"100%\" y1=\"0%\" x2=\"0%\" y2=\"0%\"><stop offset=\"0%\" stop-color=\"#0000\"/><stop offset=\"100%\" stop-color=\"red\"/></linearGradient>\n <linearGradient id=\"${blueGradientId}\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\"><stop offset=\"0%\" stop-color=\"#0000\"/><stop offset=\"100%\" stop-color=\"blue\"/></linearGradient>\n </defs>\n <rect width=\"${width}\" height=\"${height}\" fill=\"black\"/>\n <rect width=\"${width}\" height=\"${height}\" rx=\"${radius}\" fill=\"url(#${redGradientId})\"/>\n <rect width=\"${width}\" height=\"${height}\" rx=\"${radius}\" fill=\"url(#${blueGradientId})\" style=\"mix-blend-mode:difference\"/>\n <rect x=\"${edge}\" y=\"${edge}\" width=\"${innerWidth}\" height=\"${innerHeight}\" rx=\"${radius}\" fill=\"hsl(0 0% ${brightness}% / ${opacity})\" style=\"filter:blur(${blur}px)\"/>\n </svg>`\n return `data:image/svg+xml,${encodeURIComponent(svg)}`\n}\n\nexport function GlassSurface({\n as: Element,\n children,\n className,\n borderRadius,\n borderWidth = .07,\n brightness = 50,\n blur = 11,\n distortionScale = -26,\n interactive = false,\n opacity = .93,\n saturation = 1.16,\n ...elementProps\n}: GlassSurfaceProps): JSX.Element {\n const uniqueId = useId().replace(/:/g, '-')\n const filterId = `partner-glass-filter-${uniqueId}`\n const redGradientId = `partner-glass-red-${uniqueId}`\n const blueGradientId = `partner-glass-blue-${uniqueId}`\n const containerRef = useRef<HTMLElement>(null)\n const imageRef = useRef<SVGFEImageElement>(null)\n const redRef = useRef<SVGFEDisplacementMapElement>(null)\n const greenRef = useRef<SVGFEDisplacementMapElement>(null)\n const blueRef = useRef<SVGFEDisplacementMapElement>(null)\n const glareFrameRef = useRef(0)\n const glarePointerRef = useRef<{ clientX: number; clientY: number }>()\n const [svgSupported, setSvgSupported] = useState(false)\n\n useEffect(() => {\n setSvgSupported(supportsSvgBackdropFilter(filterId))\n }, [filterId])\n\n useEffect(() => {\n if (!svgSupported) return\n const element = containerRef.current\n const image = imageRef.current\n if (element === null || image === null) return\n let frame = 0\n let previousWidth = 0\n let previousHeight = 0\n const update = (): void => {\n frame = 0\n const rect = element.getBoundingClientRect()\n const width = Math.max(1, Math.round(rect.width))\n const height = Math.max(1, Math.round(rect.height))\n if (width === previousWidth && height === previousHeight) return\n previousWidth = width\n previousHeight = height\n image.setAttribute('href', displacementMap(\n width,\n height,\n Math.min(borderRadius, Math.min(width, height) / 2),\n borderWidth,\n brightness,\n opacity,\n blur,\n redGradientId,\n blueGradientId,\n ))\n }\n const schedule = (): void => {\n if (frame === 0) frame = requestAnimationFrame(update)\n }\n const observer = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(schedule)\n observer?.observe(element)\n schedule()\n return () => {\n if (frame !== 0) cancelAnimationFrame(frame)\n observer?.disconnect()\n }\n }, [blueGradientId, blur, borderRadius, borderWidth, brightness, opacity, redGradientId, svgSupported])\n\n useEffect(() => {\n if (!svgSupported) return\n const channels = [redRef.current, greenRef.current, blueRef.current]\n const offsets = [0, 5, 10]\n channels.forEach((channel, index) => channel?.setAttribute('scale', String(distortionScale + (offsets[index] ?? 0))))\n }, [distortionScale, svgSupported])\n\n useEffect(() => () => {\n if (glareFrameRef.current !== 0) cancelAnimationFrame(glareFrameRef.current)\n }, [])\n\n const renderGlare = (): void => {\n glareFrameRef.current = 0\n const element = containerRef.current\n if (element === null) return\n const pointer = glarePointerRef.current\n if (pointer === undefined) {\n element.style.setProperty('--partner-glare-x', '50%')\n element.style.setProperty('--partner-glare-y', '50%')\n return\n }\n const rect = element.getBoundingClientRect()\n if (rect.width === 0 || rect.height === 0) return\n const x = Math.max(0, Math.min(100, (pointer.clientX - rect.left) / rect.width * 100))\n const y = Math.max(0, Math.min(100, (pointer.clientY - rect.top) / rect.height * 100))\n element.style.setProperty('--partner-glare-x', `${x}%`)\n element.style.setProperty('--partner-glare-y', `${y}%`)\n }\n const scheduleGlare = (): void => {\n if (glareFrameRef.current === 0) glareFrameRef.current = requestAnimationFrame(renderGlare)\n }\n const moveGlare = (clientX: number, clientY: number): void => {\n if (!interactive) return\n glarePointerRef.current = { clientX, clientY }\n scheduleGlare()\n }\n const resetGlare = (): void => {\n if (!interactive) return\n glarePointerRef.current = undefined\n scheduleGlare()\n }\n\n const style: GlassStyle = {\n '--partner-glass-filter-id': `url(#${filterId})`,\n '--partner-glass-saturation': saturation,\n '--partner-glare-x': '50%',\n '--partner-glare-y': '50%',\n }\n\n return <Element\n {...elementProps}\n ref={containerRef as never}\n className={`dsh-partner-glass-surface ${svgSupported ? 'is-svg' : 'is-fallback'}${interactive ? ' is-interactive' : ''} ${className}`}\n style={style}\n onPointerMove={interactive ? event => moveGlare(event.clientX, event.clientY) : undefined}\n onPointerLeave={interactive ? resetGlare : undefined}\n >\n {svgSupported && <svg className=\"dsh-partner-glass-filter\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\" focusable=\"false\">\n <defs>\n <filter id={filterId} colorInterpolationFilters=\"sRGB\" x=\"0%\" y=\"0%\" width=\"100%\" height=\"100%\">\n <feImage ref={imageRef} x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" preserveAspectRatio=\"none\" result=\"map\" />\n <feDisplacementMap ref={redRef} in=\"SourceGraphic\" in2=\"map\" result=\"displaced-red\" />\n <feColorMatrix in=\"displaced-red\" type=\"matrix\" values=\"1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0\" result=\"red\" />\n <feDisplacementMap ref={greenRef} in=\"SourceGraphic\" in2=\"map\" result=\"displaced-green\" />\n <feColorMatrix in=\"displaced-green\" type=\"matrix\" values=\"0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0\" result=\"green\" />\n <feDisplacementMap ref={blueRef} in=\"SourceGraphic\" in2=\"map\" result=\"displaced-blue\" />\n <feColorMatrix in=\"displaced-blue\" type=\"matrix\" values=\"0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0\" result=\"blue\" />\n <feBlend in=\"red\" in2=\"green\" mode=\"screen\" result=\"red-green\" />\n <feBlend in=\"red-green\" in2=\"blue\" mode=\"screen\" result=\"output\" />\n <feGaussianBlur in=\"output\" stdDeviation=\".45\" />\n </filter>\n </defs>\n </svg>}\n {children}\n </Element>\n}\n"],
5
+ "mappings": "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CtG;AAAA,IACF;AAAA,EACF;AACF;AACA,UAAU,cAAc;;;AC5mCxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
6
6
  "names": ["import_react", "__defProp", "__hasOwnProp", "_QrCode", "_QrSegment", "React", "import_react", "import_react", "import_jsx_runtime", "source", "target"]
7
7
  }