@lemoncat7/dsh-partner 1.1.6 → 1.3.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -5
- package/lib/agent-runtime.d.ts +42 -3
- package/lib/agent-runtime.d.ts.map +1 -1
- package/lib/agent-runtime.js +523 -40
- package/lib/agent-runtime.js.map +1 -1
- package/lib/api.d.ts +2 -0
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +29 -2
- package/lib/api.js.map +1 -1
- package/lib/autonomy.d.ts +2 -7
- package/lib/autonomy.d.ts.map +1 -1
- package/lib/autonomy.js +40 -28
- package/lib/autonomy.js.map +1 -1
- package/lib/channels/manager.d.ts +1 -0
- package/lib/channels/manager.d.ts.map +1 -1
- package/lib/channels/manager.js +11 -3
- package/lib/channels/manager.js.map +1 -1
- package/lib/client-api.d.ts +43 -0
- package/lib/client-api.d.ts.map +1 -1
- package/lib/client-api.js.map +1 -1
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +461 -20
- package/lib/client.js.map +3 -3
- package/lib/concern-domain.d.ts +121 -0
- package/lib/concern-domain.d.ts.map +1 -0
- package/lib/concern-domain.js +182 -0
- package/lib/concern-domain.js.map +1 -0
- package/lib/concern-notification.d.ts +6 -0
- package/lib/concern-notification.d.ts.map +1 -0
- package/lib/concern-notification.js +27 -0
- package/lib/concern-notification.js.map +1 -0
- package/lib/concern-sources.d.ts +10 -0
- package/lib/concern-sources.d.ts.map +1 -0
- package/lib/concern-sources.js +81 -0
- package/lib/concern-sources.js.map +1 -0
- package/lib/concern-store.d.ts +41 -0
- package/lib/concern-store.d.ts.map +1 -0
- package/lib/concern-store.js +527 -0
- package/lib/concern-store.js.map +1 -0
- package/lib/daily-review.d.ts +3 -1
- package/lib/daily-review.d.ts.map +1 -1
- package/lib/daily-review.js +8 -2
- package/lib/daily-review.js.map +1 -1
- package/lib/domain.d.ts +4 -1
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js +23 -0
- package/lib/domain.js.map +1 -1
- package/lib/heartbeat.d.ts +10 -2
- package/lib/heartbeat.d.ts.map +1 -1
- package/lib/heartbeat.js +81 -17
- package/lib/heartbeat.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +33 -5
- package/lib/index.js.map +1 -1
- package/lib/memory-domain.d.ts +3 -0
- package/lib/memory-domain.d.ts.map +1 -1
- package/lib/memory-reflection.d.ts +8 -3
- package/lib/memory-reflection.d.ts.map +1 -1
- package/lib/memory-reflection.js +66 -13
- package/lib/memory-reflection.js.map +1 -1
- package/lib/memory-store.d.ts +8 -0
- package/lib/memory-store.d.ts.map +1 -1
- package/lib/memory-store.js +27 -0
- package/lib/memory-store.js.map +1 -1
- package/lib/store.d.ts.map +1 -1
- package/lib/store.js +39 -3
- package/lib/store.js.map +1 -1
- package/lib/time-format.d.ts +2 -0
- package/lib/time-format.d.ts.map +1 -0
- package/lib/time-format.js +20 -0
- package/lib/time-format.js.map +1 -0
- package/package.json +3 -1
package/lib/client.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 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"],
|
|
4
|
-
"sourcesContent": ["import { useCallback, useEffect, 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 DailyReflectionView, type LoginView, type MemoryGraphView, type MemoryRelationView, type MemoryView, type ModelCatalogView, type PartnerSnapshot } from './client-api.js'\nimport { useWorkspaceTopAnchor } from './sidebar-anchor.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 {open && <div className=\"dsh-partner-sidebar-list\">\n <button type=\"button\" 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 </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\" data-xiaohei-surface=\"plugin-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 <section className={`dsh-partner-home-channel${online ? ' is-online' : ''}`}>\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 </section>\n\n <div className=\"dsh-partner-home-details\">\n <section className=\"dsh-partner-home-profile\">\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 </section>\n <section className=\"dsh-partner-home-runtime\">\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 </section>\n <section className=\"dsh-partner-home-continuity\">\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 </section>\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 => <button type=\"button\" key={choice.id} className={form.capabilities.includes(choice.id) ? 'is-active' : ''} onClick={() => toggle(choice.id)}><span>{form.capabilities.includes(choice.id) && <IconCheckOutline14 size={14} />}</span><strong>{choice.title}</strong><small>{choice.detail}</small></button>)}</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 && <div className=\"dsh-partner-weixin-connect\"><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></div>}\n {login && <div className=\"dsh-partner-qr\"><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></div>}\n {channel && <>\n <div className=\"dsh-partner-channel-card\"><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></div>\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 [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] = await Promise.all([api<{ memories: MemoryView[]; reflections: DailyReflectionView[] }>(`/companions/${companion.id}/memory`), api<MemoryGraphView>(`/companions/${companion.id}/memory/graph`)])\n setMemories(result.memories); setReflections(result.reflections); setGraph(relations)\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 (): 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`, { method: 'POST' })\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 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>\u4E3B\u52A8\u5DE1\u5BDF</strong><small>\u5468\u671F\u5524\u9192\u540E\u5728\u6709\u9650\u9884\u7B97\u5185\u53D1\u73B0\u5E76\u6838\u5B9E\u591A\u4E2A\u7EBF\u7D22\uFF1B\u53EA\u6709\u503C\u5F97\u544A\u8BC9\u4F60\u7684\u5185\u5BB9\u624D\u4F1A\u53D1\u9001\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 {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() }}>\u7ACB\u5373\u68C0\u67E5\u4E00\u6B21</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 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\ntype MemoryLibraryMode = 'memory' | 'reflection' | 'graph'\nconst MEMORY_KINDS: Array<MemoryView['kind'] | 'all'> = ['all', 'profile', 'preference', 'task', 'event', 'relationship', 'emotion']\n\nfunction MemoryLibrary({ memories, reflections, graph, editing, busy, setEditing, save, remove }: {\n 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'), [memories])\n const [mode, setMode] = useState<MemoryLibraryMode>('memory')\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 <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>\u6309\u7C7B\u578B\u68C0\u7D22\u957F\u671F\u7406\u89E3\uFF0C\u6216\u6309\u65E5\u671F\u56DE\u770B\u6BCF\u5929\u7684\u8BA4\u8BC6\u53D8\u5316\u3002</p></span><nav aria-label=\"\u8BB0\u5FC6\u5185\u5BB9\"><button type=\"button\" className={mode === 'memory' ? 'is-active' : ''} onClick={() => setMode('memory')}>\u957F\u671F\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 <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 === '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} query={normalized} />}\n </section>\n}\n\nfunction MemoryGraph({ graph, query }: { graph: MemoryGraphView; query: string }): JSX.Element {\n const visible = graph.memories.filter(item => !query || `${item.subject} ${item.content}`.toLocaleLowerCase().includes(query))\n const [selectedId, setSelectedId] = useState<string>()\n const selected = visible.find(item => item.id === selectedId) ?? visible[0]\n const related = selected ? graph.relations.filter(item => item.sourceMemoryId === selected.id || item.targetMemoryId === selected.id) : []\n const byId = new Map(graph.memories.map(item => [item.id, item]))\n return <div className=\"dsh-partner-graph-browser\"><div className=\"dsh-partner-graph-index\">{visible.length === 0 ? <State title=\"\u8FD8\u6CA1\u6709\u5173\u7CFB\u56FE\u8C31\" detail=\"\u5B8C\u6210\u6BCF\u65E5\u7EC8\u5BA1\u540E\uFF0C\u4F1A\u628A\u6709\u53EF\u9760\u8BC1\u636E\u7684\u8BB0\u5FC6\u5173\u7CFB\u6574\u7406\u5230\u8FD9\u91CC\u3002\" compact /> : visible.map(item => <button type=\"button\" key={item.id} className={selected?.id === item.id ? 'is-active' : ''} onClick={() => setSelectedId(item.id)}><span data-kind={item.kind}>{memoryKind(item.kind)}</span><strong>{item.subject}</strong><small>{graph.relations.filter(edge => edge.sourceMemoryId === item.id || edge.targetMemoryId === item.id).length} \u6761\u5173\u7CFB</small></button>)}</div><div className=\"dsh-partner-graph-stage\">{selected ? <><header><span data-kind={selected.kind}>{memoryKind(selected.kind)}</span><strong>{selected.subject}</strong><p>{selected.content}</p></header><div className=\"dsh-partner-graph-links\">{related.length === 0 ? <State title=\"\u6682\u65E0\u53EF\u9760\u5173\u7CFB\" detail=\"\u7EC8\u5BA1\u4E0D\u4F1A\u4E3A\u4E86\u586B\u6EE1\u56FE\u8C31\u800C\u731C\u6D4B\u5173\u7CFB\u3002\" compact /> : related.map(edge => { const outgoing = edge.sourceMemoryId === selected.id; const target = byId.get(outgoing ? edge.targetMemoryId : edge.sourceMemoryId); return target ? <button type=\"button\" key={edge.id} onClick={() => setSelectedId(target.id)}><i /><span><small>{outgoing ? relationLabel(edge.kind) : `\u88AB${relationLabel(edge.kind)}`}</small><strong>{target.subject}</strong><p>{edge.label}</p></span><b>{Math.round(edge.confidence * 100)}%</b></button> : null })}</div></> : null}</div></div>\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] }\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 </>}</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 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 --partner-accent: #547d78;\n --partner-accent-strong: #3f6964;\n --partner-danger: #9a5752;\n --partner-border: color-mix(in srgb, var(--dsw-alias-label-primary) 10%, transparent);\n --partner-surface: var(--xiaohei-plugin-pane-fill, transparent);\n --partner-pane: var(--xiaohei-plugin-pane-fill, var(--partner-surface));\n --partner-raised: var(--xiaohei-plugin-raised-fill, color-mix(in srgb, var(--dsw-alias-bg-layer-2, #fff) 76%, transparent));\n --partner-control: var(--xiaohei-plugin-control-fill, var(--partner-raised));\n --partner-font-caption: 11px;\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(--dsw-alias-label-primary);\n font-family: var(--ds-font-family);\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: 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 color-mix(in srgb, var(--partner-accent) 58%, transparent);\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) {\n scrollbar-width: thin;\n scrollbar-color: color-mix(in srgb, var(--dsw-alias-label-primary) 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)::-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)::-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)::-webkit-scrollbar-thumb {\n border: 1px solid transparent;\n border-radius: 999px;\n background: color-mix(in srgb, var(--dsw-alias-label-primary) 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(--dsw-alias-border-l2) 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(--dsw-alias-label-secondary); background: transparent; font: 600 var(--partner-font-body)/1 var(--ds-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(--dsw-alias-label-primary); background: var(--dsw-alias-interactive-bg-hover); }\n.dsh-partner-sidebar-open { display: grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 0; border-radius: 8px; color: var(--dsw-alias-label-secondary); background: transparent; cursor: pointer; }\n.dsh-partner-sidebar-list { display: grid; gap: 2px; padding: 2px 1px 0; }\n.dsh-partner-sidebar-row { display: grid; grid-template-columns: 26px minmax(0, 1fr) 7px; align-items: center; gap: 8px; width: 100%; min-height: 40px; padding: 4px 7px; border: 1px solid transparent; border-radius: 9px; color: inherit; background: transparent; text-align: left; cursor: pointer; }\n.dsh-partner-sidebar-row:hover { background: color-mix(in srgb, var(--dsw-alias-interactive-bg-hover) 70%, transparent); }\n.dsh-partner-sidebar-row.is-active { border-color: color-mix(in srgb, var(--partner-accent) 10%, transparent); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }\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(--dsw-alias-label-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(--dsw-alias-label-tertiary); border-radius: 50%; }\n.dsh-partner-sidebar-row > i.is-online,\n.dsh-partner-roster-list button > i.is-online { border-color: #5c9184; background: #5c9184; box-shadow: 0 0 0 2px color-mix(in srgb, #5c9184 12%, transparent); }\n.dsh-partner-sidebar-symbol { display: grid !important; place-items: center; width: 25px; height: 25px; border-radius: 8px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }\n.dsh-partner-sidebar-empty { margin: 5px 9px; color: var(--dsw-alias-label-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(--dsw-alias-label-primary); background: transparent; cursor: pointer; }\n.dsh-partner-rail.is-active { background: var(--dsw-alias-interactive-bg-hover); }\n\n.dsh-partner-avatar { display: grid; place-items: center; flex: none; width: 36px; height: 36px; border: 1px solid color-mix(in srgb, var(--partner-accent) 18%, var(--partner-border)); border-radius: 12px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 9%, var(--partner-raised)); 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; display: grid; grid-template-rows: 52px minmax(0, 1fr); width: 100%; height: 100%; min-width: 0; overflow: hidden; background: var(--partner-surface); }\n.dsh-partner-topbar { display: flex; align-items: center; justify-content: space-between; padding: 0 16px 0 18px; border-bottom: 1px solid var(--partner-border); background: var(--partner-pane, var(--partner-surface)); }\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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-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: 206px minmax(520px, 1fr); min-width: 0; min-height: 0; }\n\n.dsh-partner-roster { display: flex; min-width: 0; min-height: 0; flex-direction: column; padding: 20px 10px 14px; border-right: 1px solid var(--partner-border); background: color-mix(in srgb, var(--partner-raised) 94%, var(--partner-surface)); }\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: 28px; height: 28px; padding: 0; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--dsw-alias-label-secondary); background: var(--partner-control); cursor: pointer; }\n.dsh-partner-roster-title button:hover { color: var(--partner-accent-strong); border-color: color-mix(in srgb, var(--partner-accent) 28%, transparent); }\n.dsh-partner-roster-list { display: grid; gap: 3px; overflow: auto; }\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(--dsw-alias-interactive-bg-hover); }\n.dsh-partner-roster-list button.is-active { transform: translateX(2px); border-color: color-mix(in srgb, var(--partner-accent) 13%, transparent); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }\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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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; background: radial-gradient(circle at 92% 3%, color-mix(in srgb, var(--partner-accent) 4%, transparent), transparent 30%), var(--partner-surface); }\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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-tertiary); }\n.dsh-partner-status.is-running > i { background: #5c9184; box-shadow: 0 0 0 2px color-mix(in srgb, #5c9184 13%, transparent); }\n.dsh-partner-status.is-starting > i { background: #9a8158; }\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(--dsw-alias-label-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-accent); opacity: 0; transform: scaleX(.5); transition: opacity .15s ease, transform .18s cubic-bezier(.2,.8,.2,1); }\n.dsh-partner-tabs button:hover { color: var(--dsw-alias-label-primary); }\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; }\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(--dsw-alias-label-secondary); font-size: var(--partner-font-body); line-height: 1.55; text-align: right; }\n.dsh-partner-home-channel { position: relative; display: grid; grid-template-columns: minmax(230px, .8fr) minmax(330px, 1.2fr); align-items: center; min-height: 238px; overflow: hidden; border: 1px solid color-mix(in srgb, var(--partner-accent) 13%, var(--partner-border)); border-radius: 20px; background: linear-gradient(110deg, color-mix(in srgb, var(--partner-accent) 7%, var(--partner-raised)) 0%, var(--partner-raised) 53%, color-mix(in srgb, var(--partner-raised) 96%, transparent) 100%); box-shadow: 0 18px 50px color-mix(in srgb, var(--partner-accent-strong) 5%, transparent); }\n.dsh-partner-home-channel::after { content: \"\"; position: absolute; right: -84px; bottom: -118px; width: 260px; height: 260px; border: 1px solid color-mix(in srgb, var(--partner-accent) 8%, transparent); border-radius: 50%; box-shadow: 0 0 0 34px color-mix(in srgb, var(--partner-accent) 2.5%, transparent), 0 0 0 78px color-mix(in srgb, var(--partner-accent) 1.5%, transparent); pointer-events: none; }\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-accent) 9%, transparent), transparent 56%); }\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, #538b72 20%, var(--partner-border)); border-radius: 18px; color: #4f836b; background: var(--partner-raised); box-shadow: 0 9px 28px color-mix(in srgb, #46735f 9%, transparent); }\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(--dsw-alias-label-tertiary); }\n.dsh-partner-home-channel.is-online .dsh-partner-home-kicker > i { background: #5c9184; box-shadow: 0 0 0 3px color-mix(in srgb, #5c9184 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(--dsw-alias-label-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 15px; border: 1px solid var(--partner-accent-strong); border-radius: 10px; color: #fff; background: var(--partner-accent-strong); font: 600 var(--partner-font-body)/1 var(--ds-font-family); cursor: pointer; transition: transform .16s ease, background .16s 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(--dsw-alias-label-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: 0 28px; margin-top: 20px; }\n.dsh-partner-home-details > section { min-width: 0; padding: 20px 2px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-home-profile { grid-row: span 2; padding-right: 28px !important; border-right: 1px solid var(--partner-border); }\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(--dsw-alias-label-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(--dsw-alias-label-tertiary); background: transparent; font: 560 var(--partner-font-caption)/1 var(--ds-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(--dsw-alias-label-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(--dsw-alias-label-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-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-accent), transparent); 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(--dsw-alias-label-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; 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(--dsw-alias-label-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(--dsw-alias-label-primary); background: var(--partner-control); font: var(--partner-font-label)/1.5 var(--ds-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: color-mix(in srgb, var(--partner-accent) 54%, transparent); background: var(--partner-raised); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-accent) 8%, transparent); }\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: #fff; background: var(--partner-accent-strong); font: 600 var(--partner-font-body)/1 var(--ds-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(--dsw-alias-label-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:hover { border-color: color-mix(in srgb, var(--partner-accent) 24%, transparent); background: var(--partner-raised); }\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: #fff; }\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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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, #5a9176 18%, var(--partner-border)); border-radius: 16px; color: #568b72; background: color-mix(in srgb, #5a9176 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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-primary) 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\"] { background: var(--partner-accent); }\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(--dsw-alias-label-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(--dsw-alias-label-tertiary); background: var(--dsw-alias-interactive-bg-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(--dsw-alias-label-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(--dsw-alias-label-secondary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-pairings button.is-primary { color: #fff; border-color: var(--partner-accent); 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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--ds-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; 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; 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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); line-height: 1.55; }\n.dsh-partner-automation-fields { display: grid; 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-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(--dsw-alias-label-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--ds-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-primary); }\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(--dsw-alias-label-primary); background: var(--partner-control); font-size: var(--partner-font-caption); }\n.dsh-partner-library-tools input::placeholder { color: var(--dsw-alias-label-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(--dsw-alias-label-tertiary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-memory-kinds button:hover { color: var(--dsw-alias-label-primary); background: var(--dsw-alias-interactive-bg-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: contain; 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(--dsw-alias-label-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(--dsw-alias-label-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 ui-monospace, monospace; }\n.dsh-partner-library-detail { min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; 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 { padding: 0; border: 0; color: var(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-primary); outline: none; background: var(--partner-control); font: 500 var(--partner-font-caption)/1.5 var(--ds-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(--dsw-alias-label-secondary); background: var(--partner-control); font: 560 var(--partner-font-caption)/1 var(--ds-font-family); cursor: pointer; }\n.dsh-partner-memory-editor button.is-primary { border-color: transparent; color: #fff; 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 ui-monospace, monospace; }\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(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-diary-detail > p { margin: 0; color: var(--dsw-alias-label-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(--dsw-alias-label-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-browser { display: grid; grid-template-columns: minmax(240px, 28%) minmax(0, 1fr); height: clamp(430px, 58vh, 640px); min-height: 0; overflow: hidden; }\n.dsh-partner-graph-index { min-height: 0; overflow-y: auto; border-right: 1px solid var(--partner-border); }\n.dsh-partner-graph-index > button { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 5px 9px; width: 100%; 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-graph-index > button:hover { background: color-mix(in srgb, var(--partner-accent) 4%, transparent); }\n.dsh-partner-graph-index > button.is-active { background: color-mix(in srgb, var(--partner-accent) 8%, transparent); box-shadow: inset 2px 0 var(--partner-accent); }\n.dsh-partner-graph-index span { grid-row: span 2; padding: 4px 6px; border-radius: 6px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-index strong { overflow: hidden; font-size: var(--partner-font-body); text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-graph-index small { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-stage { min-width: 0; min-height: 0; overflow-y: auto; padding: 26px clamp(22px, 4vw, 42px) 40px; background: radial-gradient(circle at 78% 14%, color-mix(in srgb, var(--partner-accent) 7%, transparent), transparent 38%); }\n.dsh-partner-graph-stage > header { display: grid; gap: 7px; max-width: 66ch; padding-bottom: 20px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-graph-stage > header span { width: max-content; color: var(--partner-accent); font-size: var(--partner-font-caption); font-weight: 650; }\n.dsh-partner-graph-stage > header strong { font-size: var(--partner-font-title); letter-spacing: -.025em; }\n.dsh-partner-graph-stage > header p { margin: 0; color: var(--dsw-alias-label-secondary); font-size: var(--partner-font-body); line-height: 1.7; }\n.dsh-partner-graph-links { position: relative; display: grid; gap: 8px; margin: 21px 0 0 16px; padding-left: 24px; }\n.dsh-partner-graph-links::before { position: absolute; top: 0; bottom: 0; left: 3px; width: 1px; background: linear-gradient(var(--partner-accent), color-mix(in srgb, var(--partner-accent) 8%, transparent)); content: ''; }\n.dsh-partner-graph-links > button { position: relative; display: grid; grid-template-columns: 8px minmax(0, 1fr) auto; align-items: center; gap: 11px; padding: 12px 13px; border: 1px solid var(--partner-border); border-radius: 11px; color: inherit; background: color-mix(in srgb, var(--partner-control) 82%, transparent); text-align: left; cursor: pointer; }\n.dsh-partner-graph-links > button::before { position: absolute; top: 50%; right: 100%; width: 25px; height: 1px; background: color-mix(in srgb, var(--partner-accent) 42%, transparent); content: ''; }\n.dsh-partner-graph-links > button > i { width: 7px; height: 7px; border-radius: 50%; background: var(--partner-accent); }\n.dsh-partner-graph-links > button > span { display: grid; gap: 3px; }\n.dsh-partner-graph-links small { color: var(--partner-accent); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-links strong { font-size: var(--partner-font-body); }\n.dsh-partner-graph-links p { margin: 0; color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-links b { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); font-weight: 560; font-variant-numeric: tabular-nums; }\n.dsh-partner-state { display: grid; place-items: center; align-content: center; min-height: 280px; padding: 30px; color: var(--dsw-alias-label-tertiary); text-align: center; }\n.dsh-partner-state > svg { margin-bottom: 10px; color: var(--partner-accent); }\n.dsh-partner-state strong { color: var(--dsw-alias-label-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@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 .dsh-partner-automation-grid { grid-template-columns: 1fr; }\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-automation-fields.is-heartbeat { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n .dsh-partner-automation-fields.is-memory-model { 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; padding-right: 2px !important; border-right: 0; }\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-review-policy { grid-template-columns: auto minmax(0, 1fr); }\n .dsh-partner-review-policy > label, .dsh-partner-review-policy > button:last-child { grid-column: span 1; }\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}\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 MemoryView { id: string; kind: MemoryKindView; subject: string; content: string; status: 'active' | 'completed' | 'superseded' | 'expired'; confidence: number; importance: number; updatedAt: number; locked?: boolean }\nexport interface MemoryRelationView { id: 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 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"],
|
|
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;A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",
|
|
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"],
|
|
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 } from './client-api.js'\nimport { useWorkspaceTopAnchor } from './sidebar-anchor.js'\nimport { futureTime } from './time-format.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 {open && <div className=\"dsh-partner-sidebar-list\">\n <button type=\"button\" 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 </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\" data-xiaohei-surface=\"plugin-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 <section className={`dsh-partner-home-channel${online ? ' is-online' : ''}`}>\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 </section>\n\n <div className=\"dsh-partner-home-details\">\n <section className=\"dsh-partner-home-profile\">\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 </section>\n <section className=\"dsh-partner-home-runtime\">\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 </section>\n <section className=\"dsh-partner-home-continuity\">\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 </section>\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 => <button type=\"button\" key={choice.id} className={form.capabilities.includes(choice.id) ? 'is-active' : ''} onClick={() => toggle(choice.id)}><span>{form.capabilities.includes(choice.id) && <IconCheckOutline14 size={14} />}</span><strong>{choice.title}</strong><small>{choice.detail}</small></button>)}</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 && <div className=\"dsh-partner-weixin-connect\"><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></div>}\n {login && <div className=\"dsh-partner-qr\"><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></div>}\n {channel && <>\n <div className=\"dsh-partner-channel-card\"><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></div>\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 [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[] }>(`/companions/${companion.id}/memory`), api<MemoryGraphView>(`/companions/${companion.id}/memory/graph`), api<ConcernActivityView>(`/companions/${companion.id}/concerns`)])\n setMemories(result.memories); setReflections(result.reflections); 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\"><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 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 <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 = 'memory' | 'reflection' | 'graph'\nconst MEMORY_KINDS: Array<MemoryView['kind'] | 'all'> = ['all', 'profile', 'preference', 'task', 'event', 'relationship', 'emotion']\n\nfunction MemoryLibrary({ memories, reflections, graph, editing, busy, setEditing, save, remove }: {\n 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'), [memories])\n const [mode, setMode] = useState<MemoryLibraryMode>('memory')\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 <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>\u6309\u7C7B\u578B\u68C0\u7D22\u957F\u671F\u7406\u89E3\uFF0C\u6216\u6309\u65E5\u671F\u56DE\u770B\u6BCF\u5929\u7684\u8BA4\u8BC6\u53D8\u5316\u3002</p></span><nav aria-label=\"\u8BB0\u5FC6\u5185\u5BB9\"><button type=\"button\" className={mode === 'memory' ? 'is-active' : ''} onClick={() => setMode('memory')}>\u957F\u671F\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 <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 === '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} query={normalized} />}\n </section>\n}\n\nfunction MemoryGraph({ graph, query }: { graph: MemoryGraphView; query: string }): JSX.Element {\n const visible = graph.memories.filter(item => !query || `${item.subject} ${item.content}`.toLocaleLowerCase().includes(query))\n const [selectedId, setSelectedId] = useState<string>()\n const selected = visible.find(item => item.id === selectedId) ?? visible[0]\n const related = selected ? graph.relations.filter(item => item.sourceMemoryId === selected.id || item.targetMemoryId === selected.id) : []\n const byId = new Map(graph.memories.map(item => [item.id, item]))\n return <div className=\"dsh-partner-graph-browser\"><div className=\"dsh-partner-graph-index\">{visible.length === 0 ? <State title=\"\u8FD8\u6CA1\u6709\u5173\u7CFB\u56FE\u8C31\" detail=\"\u5B8C\u6210\u6BCF\u65E5\u7EC8\u5BA1\u540E\uFF0C\u4F1A\u628A\u6709\u53EF\u9760\u8BC1\u636E\u7684\u8BB0\u5FC6\u5173\u7CFB\u6574\u7406\u5230\u8FD9\u91CC\u3002\" compact /> : visible.map(item => <button type=\"button\" key={item.id} className={selected?.id === item.id ? 'is-active' : ''} onClick={() => setSelectedId(item.id)}><span data-kind={item.kind}>{memoryKind(item.kind)}</span><strong>{item.subject}</strong><small>{graph.relations.filter(edge => edge.sourceMemoryId === item.id || edge.targetMemoryId === item.id).length} \u6761\u5173\u7CFB</small></button>)}</div><div className=\"dsh-partner-graph-stage\">{selected ? <><header><span data-kind={selected.kind}>{memoryKind(selected.kind)}</span><strong>{selected.subject}</strong><p>{selected.content}</p></header><div className=\"dsh-partner-graph-links\">{related.length === 0 ? <State title=\"\u6682\u65E0\u53EF\u9760\u5173\u7CFB\" detail=\"\u7EC8\u5BA1\u4E0D\u4F1A\u4E3A\u4E86\u586B\u6EE1\u56FE\u8C31\u800C\u731C\u6D4B\u5173\u7CFB\u3002\" compact /> : related.map(edge => { const outgoing = edge.sourceMemoryId === selected.id; const target = byId.get(outgoing ? edge.targetMemoryId : edge.sourceMemoryId); return target ? <button type=\"button\" key={edge.id} onClick={() => setSelectedId(target.id)}><i /><span><small>{outgoing ? relationLabel(edge.kind) : `\u88AB${relationLabel(edge.kind)}`}</small><strong>{target.subject}</strong><p>{edge.label}</p></span><b>{Math.round(edge.confidence * 100)}%</b></button> : null })}</div></> : null}</div></div>\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] }\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 </>}</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 --partner-accent: #547d78;\n --partner-accent-strong: #3f6964;\n --partner-danger: #9a5752;\n --partner-border: color-mix(in srgb, var(--dsw-alias-label-primary) 10%, transparent);\n --partner-surface: var(--xiaohei-plugin-pane-fill, transparent);\n --partner-pane: var(--xiaohei-plugin-pane-fill, var(--partner-surface));\n --partner-raised: var(--xiaohei-plugin-raised-fill, color-mix(in srgb, var(--dsw-alias-bg-layer-2, #fff) 76%, transparent));\n --partner-control: var(--xiaohei-plugin-control-fill, var(--partner-raised));\n --partner-font-family: var(--ds-font-family, -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(--dsw-alias-label-primary);\n font-family: var(--partner-font-family);\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 color-mix(in srgb, var(--partner-accent) 58%, transparent);\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) {\n scrollbar-width: thin;\n scrollbar-color: color-mix(in srgb, var(--dsw-alias-label-primary) 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)::-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)::-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)::-webkit-scrollbar-thumb {\n border: 1px solid transparent;\n border-radius: 999px;\n background: color-mix(in srgb, var(--dsw-alias-label-primary) 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(--dsw-alias-border-l2) 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(--dsw-alias-label-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(--dsw-alias-label-primary); background: var(--dsw-alias-interactive-bg-hover); }\n.dsh-partner-sidebar-open { display: grid; place-items: center; width: 28px; height: 28px; padding: 0; border: 0; border-radius: 8px; color: var(--dsw-alias-label-secondary); background: transparent; cursor: pointer; }\n.dsh-partner-sidebar-list { display: grid; gap: 2px; padding: 2px 1px 0; }\n.dsh-partner-sidebar-row { display: grid; grid-template-columns: 26px minmax(0, 1fr) 7px; align-items: center; gap: 8px; width: 100%; min-height: 40px; padding: 4px 7px; border: 1px solid transparent; border-radius: 9px; color: inherit; background: transparent; text-align: left; cursor: pointer; }\n.dsh-partner-sidebar-row:hover { background: color-mix(in srgb, var(--dsw-alias-interactive-bg-hover) 70%, transparent); }\n.dsh-partner-sidebar-row.is-active { border-color: color-mix(in srgb, var(--partner-accent) 10%, transparent); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }\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(--dsw-alias-label-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(--dsw-alias-label-tertiary); border-radius: 50%; }\n.dsh-partner-sidebar-row > i.is-online,\n.dsh-partner-roster-list button > i.is-online { border-color: #5c9184; background: #5c9184; box-shadow: 0 0 0 2px color-mix(in srgb, #5c9184 12%, transparent); }\n.dsh-partner-sidebar-symbol { display: grid !important; place-items: center; width: 25px; height: 25px; border-radius: 8px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }\n.dsh-partner-sidebar-empty { margin: 5px 9px; color: var(--dsw-alias-label-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(--dsw-alias-label-primary); background: transparent; cursor: pointer; }\n.dsh-partner-rail.is-active { background: var(--dsw-alias-interactive-bg-hover); }\n\n.dsh-partner-avatar { display: grid; place-items: center; flex: none; width: 36px; height: 36px; border: 1px solid color-mix(in srgb, var(--partner-accent) 18%, var(--partner-border)); border-radius: 12px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 9%, var(--partner-raised)); 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; display: grid; grid-template-rows: 52px minmax(0, 1fr); width: 100%; height: 100%; min-width: 0; overflow: hidden; background: var(--partner-surface); }\n.dsh-partner-topbar { display: flex; align-items: center; justify-content: space-between; padding: 0 16px 0 18px; border-bottom: 1px solid var(--partner-border); background: var(--partner-pane, var(--partner-surface)); }\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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-primary);\n background: var(--dsw-alias-interactive-bg-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: 206px minmax(520px, 1fr); min-width: 0; min-height: 0; }\n\n.dsh-partner-roster { display: flex; min-width: 0; min-height: 0; flex-direction: column; padding: 20px 10px 14px; border-right: 1px solid var(--partner-border); background: color-mix(in srgb, var(--partner-raised) 94%, var(--partner-surface)); }\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: 28px; height: 28px; padding: 0; border: 1px solid var(--partner-border); border-radius: 9px; color: var(--dsw-alias-label-secondary); background: var(--partner-control); cursor: pointer; }\n.dsh-partner-roster-title button:hover { color: var(--partner-accent-strong); border-color: color-mix(in srgb, var(--partner-accent) 28%, transparent); }\n.dsh-partner-roster-list { display: grid; gap: 3px; overflow: auto; }\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(--dsw-alias-interactive-bg-hover); }\n.dsh-partner-roster-list button.is-active { transform: translateX(2px); border-color: color-mix(in srgb, var(--partner-accent) 13%, transparent); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); }\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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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; background: radial-gradient(circle at 92% 3%, color-mix(in srgb, var(--partner-accent) 4%, transparent), transparent 30%), var(--partner-surface); }\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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-tertiary); }\n.dsh-partner-status.is-running > i { background: #5c9184; box-shadow: 0 0 0 2px color-mix(in srgb, #5c9184 13%, transparent); }\n.dsh-partner-status.is-starting > i { background: #9a8158; }\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(--dsw-alias-label-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-accent); opacity: 0; transform: scaleX(.5); transition: opacity .15s ease, transform .18s cubic-bezier(.2,.8,.2,1); }\n.dsh-partner-tabs button:hover { color: var(--dsw-alias-label-primary); }\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; }\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(--dsw-alias-label-secondary); font-size: var(--partner-font-body); line-height: 1.55; text-align: right; }\n.dsh-partner-home-channel { position: relative; display: grid; grid-template-columns: minmax(230px, .8fr) minmax(330px, 1.2fr); align-items: center; min-height: 238px; overflow: hidden; border: 1px solid color-mix(in srgb, var(--partner-accent) 13%, var(--partner-border)); border-radius: 20px; background: linear-gradient(110deg, color-mix(in srgb, var(--partner-accent) 7%, var(--partner-raised)) 0%, var(--partner-raised) 53%, color-mix(in srgb, var(--partner-raised) 96%, transparent) 100%); box-shadow: 0 18px 50px color-mix(in srgb, var(--partner-accent-strong) 5%, transparent); }\n.dsh-partner-home-channel::after { content: \"\"; position: absolute; right: -84px; bottom: -118px; width: 260px; height: 260px; border: 1px solid color-mix(in srgb, var(--partner-accent) 8%, transparent); border-radius: 50%; box-shadow: 0 0 0 34px color-mix(in srgb, var(--partner-accent) 2.5%, transparent), 0 0 0 78px color-mix(in srgb, var(--partner-accent) 1.5%, transparent); pointer-events: none; }\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-accent) 9%, transparent), transparent 56%); }\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, #538b72 20%, var(--partner-border)); border-radius: 18px; color: #4f836b; background: var(--partner-raised); box-shadow: 0 9px 28px color-mix(in srgb, #46735f 9%, transparent); }\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(--dsw-alias-label-tertiary); }\n.dsh-partner-home-channel.is-online .dsh-partner-home-kicker > i { background: #5c9184; box-shadow: 0 0 0 3px color-mix(in srgb, #5c9184 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(--dsw-alias-label-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 15px; border: 1px solid var(--partner-accent-strong); border-radius: 10px; color: #fff; background: var(--partner-accent-strong); font: 600 var(--partner-font-body)/1 var(--partner-font-family); cursor: pointer; transition: transform .16s ease, background .16s 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(--dsw-alias-label-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: 0 28px; margin-top: 20px; }\n.dsh-partner-home-details > section { min-width: 0; padding: 20px 2px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-home-profile { grid-row: span 2; padding-right: 28px !important; border-right: 1px solid var(--partner-border); }\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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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-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-accent), transparent); 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(--dsw-alias-label-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; 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(--dsw-alias-label-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(--dsw-alias-label-primary); 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: color-mix(in srgb, var(--partner-accent) 54%, transparent); background: var(--partner-raised); box-shadow: 0 0 0 3px color-mix(in srgb, var(--partner-accent) 8%, transparent); }\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: #fff; 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(--dsw-alias-label-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:hover { border-color: color-mix(in srgb, var(--partner-accent) 24%, transparent); background: var(--partner-raised); }\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: #fff; }\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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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, #5a9176 18%, var(--partner-border)); border-radius: 16px; color: #568b72; background: color-mix(in srgb, #5a9176 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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-primary) 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\"] { background: var(--partner-accent); }\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(--dsw-alias-label-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(--dsw-alias-label-tertiary); background: var(--dsw-alias-interactive-bg-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(--dsw-alias-label-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(--dsw-alias-label-secondary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-pairings button.is-primary { color: #fff; border-color: var(--partner-accent); 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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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; 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; 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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); line-height: 1.55; }\n.dsh-partner-automation-fields { display: grid; 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; 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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-primary); 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(--dsw-alias-label-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(--dsw-alias-label-primary) 12%);\n border-radius: 10px;\n background: var(--dsw-alias-bg-layer-2, #fff);\n box-shadow: 0 14px 34px color-mix(in srgb, var(--dsw-alias-label-primary) 15%, transparent);\n scrollbar-width: thin;\n}\n.dsh-partner-concern-sources > p { margin: 0; padding: 14px 12px; color: var(--dsw-alias-label-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(--dsw-alias-label-primary);\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(--dsw-alias-label-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(--dsw-alias-bg-layer-2, #fff)); }\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(--dsw-alias-label-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(--dsw-alias-label-on-accent, #fff); 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(--dsw-alias-label-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(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-concern-time { display: grid; justify-items: end; gap: 2px; color: var(--dsw-alias-label-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(--dsw-alias-label-secondary); font: 590 var(--partner-font-caption)/1.1 var(--partner-font-family); }\n.dsh-partner-concern-row > svg { color: var(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-secondary); line-height: 1.45; }\n.dsh-partner-concern-decision small { grid-column: 1 / -1; color: var(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-primary); }\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(--dsw-alias-label-primary); background: var(--partner-control); font-size: var(--partner-font-caption); }\n.dsh-partner-library-tools input::placeholder { color: var(--dsw-alias-label-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(--dsw-alias-label-tertiary); background: transparent; font-size: var(--partner-font-caption); cursor: pointer; }\n.dsh-partner-memory-kinds button:hover { color: var(--dsw-alias-label-primary); background: var(--dsw-alias-interactive-bg-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: contain; 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(--dsw-alias-label-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(--dsw-alias-label-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: contain; 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 { padding: 0; border: 0; color: var(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-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(--dsw-alias-label-primary); 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(--dsw-alias-label-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: #fff; 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(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-diary-detail > p { margin: 0; color: var(--dsw-alias-label-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(--dsw-alias-label-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-browser { display: grid; grid-template-columns: minmax(240px, 28%) minmax(0, 1fr); height: clamp(430px, 58vh, 640px); min-height: 0; overflow: hidden; }\n.dsh-partner-graph-index { min-height: 0; overflow-y: auto; border-right: 1px solid var(--partner-border); }\n.dsh-partner-graph-index > button { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 5px 9px; width: 100%; 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-graph-index > button:hover { background: color-mix(in srgb, var(--partner-accent) 4%, transparent); }\n.dsh-partner-graph-index > button.is-active { background: color-mix(in srgb, var(--partner-accent) 8%, transparent); box-shadow: inset 2px 0 var(--partner-accent); }\n.dsh-partner-graph-index span { grid-row: span 2; padding: 4px 6px; border-radius: 6px; color: var(--partner-accent-strong); background: color-mix(in srgb, var(--partner-accent) 8%, transparent); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-index strong { overflow: hidden; font-size: var(--partner-font-body); text-overflow: ellipsis; white-space: nowrap; }\n.dsh-partner-graph-index small { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-stage { min-width: 0; min-height: 0; overflow-y: auto; padding: 26px clamp(22px, 4vw, 42px) 40px; background: radial-gradient(circle at 78% 14%, color-mix(in srgb, var(--partner-accent) 7%, transparent), transparent 38%); }\n.dsh-partner-graph-stage > header { display: grid; gap: 7px; max-width: 66ch; padding-bottom: 20px; border-bottom: 1px solid var(--partner-border); }\n.dsh-partner-graph-stage > header span { width: max-content; color: var(--partner-accent); font-size: var(--partner-font-caption); font-weight: 650; }\n.dsh-partner-graph-stage > header strong { font-size: var(--partner-font-title); letter-spacing: -.025em; }\n.dsh-partner-graph-stage > header p { margin: 0; color: var(--dsw-alias-label-secondary); font-size: var(--partner-font-body); line-height: 1.7; }\n.dsh-partner-graph-links { position: relative; display: grid; gap: 8px; margin: 21px 0 0 16px; padding-left: 24px; }\n.dsh-partner-graph-links::before { position: absolute; top: 0; bottom: 0; left: 3px; width: 1px; background: linear-gradient(var(--partner-accent), color-mix(in srgb, var(--partner-accent) 8%, transparent)); content: ''; }\n.dsh-partner-graph-links > button { position: relative; display: grid; grid-template-columns: 8px minmax(0, 1fr) auto; align-items: center; gap: 11px; padding: 12px 13px; border: 1px solid var(--partner-border); border-radius: 11px; color: inherit; background: color-mix(in srgb, var(--partner-control) 82%, transparent); text-align: left; cursor: pointer; }\n.dsh-partner-graph-links > button::before { position: absolute; top: 50%; right: 100%; width: 25px; height: 1px; background: color-mix(in srgb, var(--partner-accent) 42%, transparent); content: ''; }\n.dsh-partner-graph-links > button > i { width: 7px; height: 7px; border-radius: 50%; background: var(--partner-accent); }\n.dsh-partner-graph-links > button > span { display: grid; gap: 3px; }\n.dsh-partner-graph-links small { color: var(--partner-accent); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-links strong { font-size: var(--partner-font-body); }\n.dsh-partner-graph-links p { margin: 0; color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); }\n.dsh-partner-graph-links b { color: var(--dsw-alias-label-tertiary); font-size: var(--partner-font-caption); font-weight: 560; font-variant-numeric: tabular-nums; }\n.dsh-partner-state { display: grid; place-items: center; align-content: center; min-height: 280px; padding: 30px; color: var(--dsw-alias-label-tertiary); text-align: center; }\n.dsh-partner-state > svg { margin-bottom: 10px; color: var(--partner-accent); }\n.dsh-partner-state strong { color: var(--dsw-alias-label-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@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 .dsh-partner-automation-grid { grid-template-columns: 1fr; }\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-automation-fields.is-heartbeat { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n .dsh-partner-automation-fields.is-memory-model { 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; padding-right: 2px !important; border-right: 0; }\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-review-policy { grid-template-columns: auto minmax(0, 1fr); }\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 .dsh-partner-review-policy > label, .dsh-partner-review-policy > button:last-child { grid-column: span 1; }\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}\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 MemoryView { id: string; kind: MemoryKindView; subject: string; content: string; status: 'active' | 'completed' | 'superseded' | 'expired'; confidence: number; importance: number; updatedAt: number; locked?: boolean }\nexport interface MemoryRelationView { id: 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"],
|
|
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;A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",
|
|
6
6
|
"names": ["import_react", "__defProp", "__hasOwnProp", "_QrCode", "_QrSegment", "React", "import_react"]
|
|
7
7
|
}
|