@michengai/dsh-automation 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +9 -0
- package/README.md +136 -0
- package/README.zh-CN.md +136 -0
- package/cordis.patch.yml +9 -0
- package/docs/00-/344/272/244/346/216/245/345/205/245/345/217/243/00-/351/230/205/350/257/273/345/257/274/350/210/252.md +11 -0
- package/docs/00-/344/272/244/346/216/245/345/205/245/345/217/243/01-/351/241/271/347/233/256/346/246/202/350/247/210.md +22 -0
- package/docs/00-/344/272/244/346/216/245/345/205/245/345/217/243/02-/345/275/223/345/211/215/347/212/266/346/200/201.md +9 -0
- package/docs/00-/344/272/244/346/216/245/345/205/245/345/217/243/03-/345/276/205/345/212/236/344/270/216/351/230/273/345/241/236.md +7 -0
- package/docs/00-/344/272/244/346/216/245/345/205/245/345/217/243/04-/350/277/255/344/273/243/350/267/257/347/272/277/345/233/276.md +5 -0
- package/docs/00-/344/272/244/346/216/245/345/205/245/345/217/243/05-/346/212/200/346/234/257/346/236/266/346/236/204/345/237/272/347/272/277.md +10 -0
- package/docs/00-/344/272/244/346/216/245/345/205/245/345/217/243/06-/346/226/207/346/241/243/347/274/226/345/206/231/350/247/204/350/214/203.md +8 -0
- package/docs/01-/345/275/223/345/211/215/345/267/245/344/275/234/I001-/344/273/273/345/212/241/350/207/252/345/212/250/345/214/226/346/217/222/344/273/266/00-/350/277/255/344/273/243/346/200/273/350/247/210.md +47 -0
- package/docs/03-/346/212/200/346/234/257/346/236/266/346/236/204/00-/351/242/206/345/237/237/347/264/242/345/274/225.md +5 -0
- package/docs/03-/346/212/200/346/234/257/346/236/266/346/236/204/01-/350/260/203/345/272/246/344/270/216/346/211/247/350/241/214/346/250/241/345/236/213.md +30 -0
- package/lib/client.js +2792 -0
- package/lib/client.js.map +7 -0
- package/lib/index.js +22869 -0
- package/lib/types/client/AutomationView.d.ts +2 -0
- package/lib/types/client/ScheduleRail.d.ts +34 -0
- package/lib/types/client/contracts.d.ts +57 -0
- package/lib/types/client/create-modal.d.ts +30 -0
- package/lib/types/client/helpers.d.ts +67 -0
- package/lib/types/client/icons.d.ts +28 -0
- package/lib/types/client/index.d.ts +4 -0
- package/lib/types/client/locales.d.ts +187 -0
- package/lib/types/client/menu.d.ts +53 -0
- package/lib/types/client/native-session-list.d.ts +14 -0
- package/lib/types/client/native-tabs.d.ts +23 -0
- package/lib/types/client/prefill.d.ts +6 -0
- package/lib/types/client/protocol.d.ts +153 -0
- package/lib/types/client/runtime.d.ts +29 -0
- package/lib/types/client/schedule-rail-model.d.ts +87 -0
- package/lib/types/client/styles.d.ts +1 -0
- package/lib/types/domain.d.ts +67 -0
- package/lib/types/executor.d.ts +30 -0
- package/lib/types/index.d.ts +20 -0
- package/lib/types/recurrence.d.ts +7 -0
- package/lib/types/rpc.d.ts +13 -0
- package/lib/types/run-title.d.ts +3 -0
- package/lib/types/service.d.ts +110 -0
- package/lib/types/tools.d.ts +12 -0
- package/lib/types/types.d.ts +146 -0
- package/package.json +99 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/client/index.ts", "../src/client/AutomationView.tsx", "../src/client/helpers.ts", "../src/client/icons.tsx", "../src/client/create-modal.tsx", "../src/client/menu.tsx", "../src/client/prefill.ts", "../src/client/protocol.ts", "../src/client/runtime.ts", "../src/client/locales.ts", "../src/client/native-tabs.ts", "../src/client/native-session-list.tsx", "../src/run-title.ts", "../src/client/schedule-rail-model.ts", "../src/client/ScheduleRail.tsx", "../src/client/styles.ts"],
|
|
4
|
+
"sourcesContent": ["import { createElement, useEffect, type ComponentType } from 'react'\nimport { AutomationView } from './AutomationView.js'\nimport type { ClientContext, NativeSwitcherProps } from './contracts.js'\nimport { en, NS, zh } from './locales.js'\nimport {\n attachNativeTabRegistry,\n createNativeTabRegistry,\n findNativeTabRegistry,\n isForeignSidebarHost,\n} from './native-tabs.js'\nimport { applyPrefillToDom, peekChatPrefill, subscribeChatPrefill, takeChatPrefill } from './prefill.js'\nimport { createAutomationRuntime } from './runtime.js'\nimport { NativeScheduleSessionList } from './native-session-list.js'\nimport { NativeScheduleShell, ScheduleRail } from './ScheduleRail.js'\nimport { AUTOMATION_SESSION_PREFIX, hasCodexUiSidebar, openScheduledSession, pickWrappableWorkspacesEntry, resolveOfficialTreeComponent } from './schedule-rail-model.js'\nimport { installStyles } from './styles.js'\n\nexport const name = 'dsh-automation-client'\nexport const inject = ['slots', 'locale', 'connection', 'sessions']\n\ntype MutableSlotEntry = {\n component?: ComponentType<any>\n options?: { id?: unknown }\n}\n\ntype HostComponent = ComponentType<any> & {\n displayName?: string\n __dshNativeTabHost?: boolean\n __dshAutomationWrapped?: boolean\n __dshAutomationOriginal?: ComponentType<any>\n}\n\nconst SETTINGS_CLOCK_SVG = '<svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" fill=\"none\" aria-hidden=\"true\" data-dsh-schedule-icon=\"1\"><path fill=\"currentColor\" d=\"M8 1.15A6.85 6.85 0 1 0 8 14.85 6.85 6.85 0 0 0 8 1.15Zm0 1.4a5.45 5.45 0 1 1 0 10.9 5.45 5.45 0 0 1 0-10.9Z\"/><path fill=\"currentColor\" d=\"M8.62 4.35H7.28v4.2l3.02 1.78.67-1.13-2.35-1.39V4.35Z\"/></svg>'\n\nfunction installSettingsNavIcon(labels: () => readonly string[]): () => void {\n const apply = (): void => {\n const wanted = new Set(labels().map(item => item.trim()).filter(item => item !== ''))\n const buttons = document.querySelectorAll('button')\n for (const button of buttons) {\n const text = (button.textContent ?? '').replace(/\\s+/g, ' ').trim()\n if (!wanted.has(text)) continue\n const svg = button.querySelector('svg')\n if (svg === null || svg.getAttribute('data-dsh-schedule-icon') === '1') continue\n svg.outerHTML = SETTINGS_CLOCK_SVG\n }\n }\n apply()\n const observer = new MutationObserver(apply)\n observer.observe(document.documentElement, { childList: true, subtree: true })\n return () => { observer.disconnect() }\n}\nexport function apply(ctx: ClientContext): void {\n ctx.effect(() => installStyles(), 'dsh-automation: styles')\n ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'dsh-automation: locale')\n const t = ctx.locale.bind(NS)\n const runtime = createAutomationRuntime(ctx.connection.rpc)\n ctx.effect(() => installSettingsNavIcon(() => [t('tab'), 'Scheduled tasks', '\u5B9A\u65F6\u4EFB\u52A1']), 'dsh-automation: settings icon')\n ctx.slots.inject('settings.section', () => ctx.slots.register({\n name: 'settings.section',\n id: 'scheduled-tasks',\n order: 28,\n locale: NS,\n label: () => t('tab'),\n icon: 'schedule',\n }, function ScheduledTasksSettings(props: { close?: () => void }) {\n return createElement(AutomationView, { t, runtime, ...(props.close === undefined ? {} : { closeSettings: props.close }) })\n }))\n ctx.slots.inject('sidebar.schedule', () => ctx.slots.register({\n name: 'sidebar.schedule',\n id: 'dsh-automation-schedule',\n order: 10,\n locale: NS,\n label: () => t('sidebar.tab'),\n }, function AutomationScheduleRail(props: { openSession?: (sessionId: string) => void }) {\n return createElement(ScheduleRail, {\n t,\n runtime,\n openSession: (id) => { openScheduledSession(id, (sessionId) => { ctx.sessions?.open(sessionId) }, props.openSession) },\n })\n }))\n ctx.slots.inject('sidebar.workspaces', () => {\n let wrappedEntry: MutableSlotEntry | undefined\n let originalComp: ComponentType<any> | undefined\n let removeInsertedTab = (): void => undefined\n let removeFilter = (): void => undefined\n let syncing = false\n const unwrap = (): void => {\n removeInsertedTab()\n removeInsertedTab = (): void => undefined\n removeFilter()\n removeFilter = (): void => undefined\n if (wrappedEntry !== undefined && originalComp !== undefined) {\n try { wrappedEntry.component = originalComp } catch { /* ignore */ }\n }\n wrappedEntry = undefined\n originalComp = undefined\n }\n const insertScheduleTab = (entry: unknown, openSession?: (id: string) => void): boolean => {\n const registry = findNativeTabRegistry(entry)\n if (registry === undefined) return false\n if (registry.getTabs().some(item => item.id === 'schedule')) return true\n removeInsertedTab()\n removeInsertedTab = registry.insert({\n id: 'schedule',\n label: t('sidebar.tab'),\n order: 30,\n matchSession: (sessionId) => sessionId.startsWith(AUTOMATION_SESSION_PREFIX),\n render: (props) => {\n const hostOpen = typeof props.openSession === 'function'\n ? props.openSession as (id: string) => void\n : typeof props.open === 'function'\n ? props.open as (id: string) => void\n : openSession\n const opener = (id: string): void => {\n openScheduledSession(id, (sessionId) => { ctx.sessions?.open(sessionId) }, hostOpen)\n }\n return createElement(NativeScheduleSessionList, {\n t,\n runtime,\n openSession: opener,\n ...(typeof props.useSessions === 'function' ? { useSessions: props.useSessions as any } : {}),\n ...(typeof props.useWorkspaces === 'function' ? { useWorkspaces: props.useWorkspaces as any } : {}),\n ...(typeof props.renameSession === 'function' ? { renameSession: props.renameSession as any } : {}),\n ...(typeof props.archiveSession === 'function' ? { archiveSession: props.archiveSession as any } : {}),\n ...(typeof props.deleteSession === 'function' ? { deleteSession: props.deleteSession as any } : {}),\n ...(typeof props.forkSession === 'function' ? { forkSession: props.forkSession as any } : {}),\n })\n },\n })\n removeFilter()\n removeFilter = registry.addSessionFilter(id => !id.startsWith(AUTOMATION_SESSION_PREFIX))\n return true\n }\n const sync = (): void => {\n if (syncing) return\n syncing = true\n try {\n if (hasCodexUiSidebar(readSlotEntries(ctx, 'sidebar'))) {\n unwrap()\n return\n }\n const entries = readSlotEntries(ctx, 'sidebar.workspaces')\n const occupant = pickWrappableWorkspacesEntry(entries) as MutableSlotEntry | undefined\n const current = occupant?.component\n if (current !== undefined && isForeignSidebarHost(current)) {\n if (insertScheduleTab(occupant) || insertScheduleTab(current)) return\n return\n }\n if (wrappedEntry?.component !== undefined && (wrappedEntry.component as HostComponent).__dshAutomationWrapped === true) {\n insertScheduleTab(wrappedEntry)\n return\n }\n if (occupant?.component === undefined) return\n const resolved = resolveOfficialTreeComponent(occupant.component)\n if (resolved === undefined) return\n originalComp = resolved as ComponentType<any>\n const registry = createNativeTabRegistry(originalComp)\n attachNativeTabRegistry(occupant, registry)\n function AutomationNativeWorkspaceShell(innerProps: NativeSwitcherProps): JSX.Element | null {\n const openSession = (id: string): void => { openScheduledSession(id, (sessionId) => { ctx.sessions?.open(sessionId) }, innerProps.openSession ?? innerProps.open) }\n return createElement(NativeScheduleShell, {\n t,\n runtime,\n hostProps: innerProps as Record<string, unknown>,\n openSession,\n tabRegistry: registry,\n ...(innerProps.wide === undefined ? {} : { wide: innerProps.wide }),\n hasChannels: () => slotHasEntries(ctx, 'sidebar.channels'),\n subscribeChannels: (listener: () => void) => ctx.slots.subscribe?.('sidebar.channels', listener) ?? (() => undefined),\n ...(innerProps.useSessions === undefined ? {} : { useSessions: innerProps.useSessions }),\n ...(innerProps.useWorkspaces === undefined ? {} : { useWorkspaces: innerProps.useWorkspaces }),\n ...(innerProps.renderSlot === undefined ? {} : { renderSlot: innerProps.renderSlot }),\n ...(originalComp === undefined ? {} : { officialTree: originalComp }),\n })\n }\n const marked = AutomationNativeWorkspaceShell as HostComponent\n marked.displayName = 'AutomationNativeWorkspaceShell'\n marked.__dshNativeTabHost = true\n marked.__dshAutomationWrapped = true\n marked.__dshAutomationOriginal = originalComp\n attachNativeTabRegistry(marked, registry)\n occupant.component = marked\n wrappedEntry = occupant\n insertScheduleTab(occupant, (id) => { ctx.sessions?.open(id) })\n } catch (error) {\n console.warn('[dsh-automation] \u5305\u88F9\u5B98\u65B9\u4EFB\u52A1\u6811\u5931\u8D25', error)\n } finally {\n syncing = false\n }\n }\n sync()\n const unsub = typeof ctx.slots.subscribe === 'function' ? ctx.slots.subscribe('sidebar.workspaces', sync) : () => undefined\n return () => { unsub(); unwrap() }\n })\n ctx.slots.inject('conversation.input.left', () => ctx.slots.register({\n name: 'conversation.input.left',\n id: 'dsh-automation-prefill',\n order: 80,\n locale: NS,\n }, PrefillBridge))\n}\n\nfunction PrefillBridge(props: { inputActions?: { setDraft(text: string): void } }): null {\n useEffect(() => {\n const applyPrefill = (text: string | null): void => {\n if (text === null || text === '') return\n if (props.inputActions !== undefined) {\n props.inputActions.setDraft(text)\n takeChatPrefill()\n return\n }\n if (applyPrefillToDom(text)) takeChatPrefill()\n }\n applyPrefill(peekChatPrefill())\n return subscribeChatPrefill(applyPrefill)\n }, [props.inputActions])\n return null\n}\n\nfunction readSlotEntries(ctx: ClientContext, name: string): readonly unknown[] {\n try {\n const read = ctx.slots.entriesOfSlot ?? ctx.slots.entries\n return read?.call(ctx.slots, name) ?? []\n } catch {\n return []\n }\n}\n\nfunction slotHasEntries(ctx: ClientContext, name: string): boolean {\n return readSlotEntries(ctx, name).length > 0\n}\n", "import { useEffect, useMemo, useRef, useState, useSyncExternalStore, type FormEvent } from 'react'\nimport type { AutomationViewProps, Translate } from './contracts.js'\nimport {\n AutomationFormError,\n buildCreateInput,\n clockTime,\n defaultFormState,\n formatDuration,\n formatSchedule,\n formatWithin,\n formFromAutomation,\n groupHistory,\n type AutomationFormState,\n type HistoryRange,\n type ScheduleKind,\n} from './helpers.js'\nimport {\n ChatIcon,\n ClockIcon,\n InfoIcon,\n MoreIcon,\n PlayIcon,\n PlusIcon,\n RefreshIcon,\n TrashIcon,\n} from './icons.js'\nimport { CreateModal } from './create-modal.js'\nimport { setChatPrefill } from './prefill.js'\nimport { isTransportError } from './runtime.js'\nimport type { AutomationRunStatus, AutomationRunViewModel, AutomationViewModel } from './protocol.js'\n\nconst POLL_INTERVAL_MS = 15_000\nconst WEEKDAYS = [1, 2, 3, 4, 5, 6, 7] as const\n\ntype Tab = 'mine' | 'runs'\n\nconst EXAMPLES: readonly { readonly name: string; readonly scheduleKind: ScheduleKind; readonly time: string; readonly weekdays: readonly number[] }[] = [\n { name: '\u6BCF\u65E5\u56DE\u5F52\u68C0\u67E5', scheduleKind: 'daily', time: '09:00', weekdays: [1, 2, 3, 4, 5] },\n { name: '\u6BCF\u5468\u4F9D\u8D56\u5DE1\u68C0', scheduleKind: 'weekly', time: '10:00', weekdays: [1] },\n { name: '\u5DE5\u4F5C\u65E5\u65E9\u62A5', scheduleKind: 'weekly', time: '08:00', weekdays: [1, 2, 3, 4, 5] },\n]\n\nexport function AutomationView({ t, runtime, closeSettings }: AutomationViewProps): JSX.Element {\n const state = useSyncExternalStore(runtime.source.subscribe, runtime.source.getSnapshot, runtime.source.getSnapshot)\n const [tab, setTab] = useState<Tab>('mine')\n const [query, setQuery] = useState('')\n const [creating, setCreating] = useState(false)\n const [editingId, setEditingId] = useState<string>()\n const [draft, setDraft] = useState<Partial<AutomationFormState>>()\n const [busy, setBusy] = useState(false)\n const [error, setError] = useState<string>()\n const [historyRange, setHistoryRange] = useState<HistoryRange>('day')\n const [historyTask, setHistoryTask] = useState('all')\n const [historyStatus, setHistoryStatus] = useState<'all' | AutomationRunStatus>('all')\n const now = useMemo(() => new Date(state.snapshot?.serverNow ?? Date.now()), [state.snapshot?.serverNow, state.refreshedAt])\n\n useEffect(() => {\n void runtime.refresh().catch(() => undefined)\n const timer = window.setInterval(() => { void runtime.refresh().catch(() => undefined) }, POLL_INTERVAL_MS)\n return () => { window.clearInterval(timer) }\n }, [runtime])\n\n const snapshot = state.snapshot\n const workspaces = snapshot?.workspaces ?? []\n const models = snapshot?.models ?? []\n const automations = (snapshot?.automations ?? [])\n .filter(item => query.trim() === '' || `${item.name} ${item.prompt}`.toLowerCase().includes(query.trim().toLowerCase()))\n .slice()\n .sort((left, right) => Date.parse(right.createdAt) - Date.parse(left.createdAt))\n\n const runs = (snapshot?.runs ?? []).filter((run) => {\n if (historyTask !== 'all' && run.automationId !== historyTask) return false\n if (historyStatus !== 'all' && run.status !== historyStatus) return false\n return true\n })\n const groups = groupHistory(runs, historyRange, now, t)\n\n const runAction = async (action: () => Promise<void>): Promise<void> => {\n setBusy(true)\n setError(undefined)\n try {\n await action()\n } catch (caught) {\n setError(caught instanceof AutomationFormError\n ? t(caught.key)\n : isTransportError(caught) ? t('error.offline')\n : caught instanceof Error ? caught.message : t('error.action'))\n } finally {\n setBusy(false)\n }\n }\n\n const closeModal = (): void => {\n setCreating(false)\n setDraft(undefined)\n setEditingId(undefined)\n }\n\n const openCreate = (partial?: Partial<AutomationFormState>): void => {\n setEditingId(undefined)\n setDraft(partial)\n setCreating(true)\n }\n\n const openEdit = (item: AutomationViewModel): void => {\n setEditingId(item.id)\n setDraft(formFromAutomation(item, workspaces, snapshot?.defaultModel ?? null))\n setCreating(true)\n }\n\n return (\n <div className=\"dsh-st-shell\">\n <header className=\"dsh-st-top\">\n <div className=\"dsh-st-heading\">\n <h1>{t('tab')}</h1>\n <p>{t('header.lead')}</p>\n </div>\n <div className=\"dsh-st-toolbar\">\n <input className=\"dsh-st-search\" value={query} placeholder={t('search.placeholder')} onChange={event => setQuery(event.target.value)} />\n <button type=\"button\" className=\"dsh-st-btn\" onClick={() => {\n setChatPrefill(t('chat.prompt'))\n closeSettings?.()\n }}><ChatIcon />{t('action.chatCreate')}</button>\n <button type=\"button\" className=\"dsh-st-btn dsh-st-btn--primary\" onClick={() => openCreate()}><PlusIcon />{t('action.create')}</button>\n <button type=\"button\" className=\"dsh-st-icon\" onClick={() => { void runtime.refresh() }} aria-label={t('section.refresh')}><RefreshIcon /></button>\n </div>\n </header>\n\n <div className=\"dsh-st-banner\" role=\"note\">\n <span><InfoIcon />{t('banner.wake')}</span>\n </div>\n\n <section className=\"dsh-st-examples\">\n <div className=\"dsh-st-examples-head\">\n <h2>{t('examples.title')}</h2>\n </div>\n <div className=\"dsh-st-example-row\">\n {EXAMPLES.map((example, index) => (\n <button\n key={example.name}\n type=\"button\"\n className=\"dsh-st-example\"\n onClick={() => openCreate({\n name: t(`examples.${index + 1}.title` as 'examples.1.title'),\n prompt: t(`examples.${index + 1}.body` as 'examples.1.body'),\n scheduleKind: example.scheduleKind,\n time: example.time,\n weekdays: example.weekdays,\n })}\n >\n <strong>{t(`examples.${index + 1}.title` as 'examples.1.title')}</strong>\n <p>{t(`examples.${index + 1}.body` as 'examples.1.body')}</p>\n <span className=\"dsh-st-chip\"><ClockIcon />{t(`examples.${index + 1}.chip` as 'examples.1.chip')}</span>\n </button>\n ))}\n </div>\n </section>\n\n {error !== undefined && <p className=\"dsh-st-error\">{error}</p>}\n {(state.phase === 'idle' || (state.phase === 'loading' && snapshot === undefined)) && <p className=\"dsh-st-muted\">{t('loading')}</p>}\n {state.phase === 'error' && snapshot === undefined && (\n <div className=\"dsh-st-empty\">\n <h3>{t('error.title')}</h3>\n <p>{state.error}</p>\n <button type=\"button\" className=\"dsh-st-btn dsh-st-btn--primary\" onClick={() => { void runtime.refresh() }}>{t('error.retry')}</button>\n </div>\n )}\n\n <div className=\"dsh-st-tabs\">\n <button type=\"button\" className={tab === 'mine' ? 'is-on' : ''} onClick={() => setTab('mine')}>{t('tabs.mine')}</button>\n <button type=\"button\" className={tab === 'runs' ? 'is-on' : ''} onClick={() => setTab('runs')}>{t('tabs.runs')}</button>\n {tab === 'mine' && <span className=\"dsh-st-sort\">{t('sort.created')}</span>}\n {tab === 'runs' && (\n <div className=\"dsh-st-filters\">\n {(['day', 'week', 'month'] as const).map(range => (\n <button key={range} type=\"button\" className={historyRange === range ? 'is-on' : ''} onClick={() => setHistoryRange(range)}>\n {t(`history.range.${range}`)}\n </button>\n ))}\n <select value={historyTask} onChange={event => setHistoryTask(event.target.value)}>\n <option value=\"all\">{t('history.allTasks')}</option>\n {(snapshot?.automations ?? []).map(item => <option key={item.id} value={item.id}>{item.name}</option>)}\n </select>\n <select value={historyStatus} onChange={event => setHistoryStatus(event.target.value as 'all' | AutomationRunStatus)}>\n <option value=\"all\">{t('history.allStatus')}</option>\n {(['succeeded', 'failed', 'running', 'queued', 'skipped', 'cancelled'] as const).map(status => (\n <option key={status} value={status}>{t(`status.${status}`)}</option>\n ))}\n </select>\n </div>\n )}\n </div>\n\n {tab === 'mine' && (\n automations.length === 0\n ? <div className=\"dsh-st-empty\"><h3>{t('empty.title')}</h3><p>{t('empty.body')}</p></div>\n : <div className=\"dsh-st-grid\">\n {automations.map(item => (\n <TaskCard\n key={item.id}\n item={item}\n t={t}\n now={now}\n busy={busy}\n onEdit={() => openEdit(item)}\n onToggle={() => { void runAction(() => runtime.mutateAutomation(item.id, item.status === 'active' ? 'pause' : 'resume')) }}\n onRun={() => { void runAction(() => runtime.runNow(item.id)) }}\n onDelete={() => { void runAction(() => runtime.mutateAutomation(item.id, 'delete')) }}\n />\n ))}\n </div>\n )}\n\n {tab === 'runs' && (\n groups.length === 0\n ? <div className=\"dsh-st-empty\">{t('runs.empty')}</div>\n : <div className=\"dsh-st-timeline\">\n {groups.map(group => (\n <section key={group.key} className=\"dsh-st-group\">\n <h3>{group.label}</h3>\n {group.items.map(run => <RunRow key={run.id} run={run} t={t} />)}\n </section>\n ))}\n </div>\n )}\n\n {creating && (\n <CreateModal\n key={editingId ?? 'create'}\n t={t}\n busy={busy}\n workspaces={workspaces}\n models={models}\n defaultModel={snapshot?.defaultModel ?? null}\n skills={snapshot?.skills ?? []}\n onAddWorkspace={async (path) => runtime.addWorkspace(path).then((value) => value.id)}\n editing={editingId !== undefined}\n {...(draft === undefined ? {} : { draft })}\n onClose={closeModal}\n onSubmit={async (form) => {\n const input = buildCreateInput(form, workspaces, models, new Date(), {\n allowPastOnce: editingId !== undefined,\n })\n await runAction(async () => {\n if (editingId === undefined) await runtime.createAutomation(input)\n else await runtime.updateAutomation(editingId, input)\n closeModal()\n })\n }}\n />\n )}\n </div>\n )\n}\n\nfunction TaskCard({\n item, t, now, busy, onEdit, onToggle, onRun, onDelete,\n}: {\n readonly item: AutomationViewModel\n readonly t: Translate\n readonly now: Date\n readonly busy: boolean\n readonly onEdit: () => void\n readonly onToggle: () => void\n readonly onRun: () => void\n readonly onDelete: () => void\n}): JSX.Element {\n const [menu, setMenu] = useState(false)\n const root = useRef<HTMLElement>(null)\n useEffect(() => {\n if (!menu) return\n const close = (event: MouseEvent): void => {\n if (root.current !== null && !root.current.contains(event.target as Node)) setMenu(false)\n }\n document.addEventListener('mousedown', close)\n return () => { document.removeEventListener('mousedown', close) }\n }, [menu])\n\n return (\n <article className=\"dsh-st-card\" ref={root} onClick={onEdit}>\n <div className=\"dsh-st-card-head\">\n <button type=\"button\" className={`dsh-st-switch ${item.status === 'active' ? 'is-on' : ''}`} role=\"switch\" aria-checked={item.status === 'active'} disabled={busy} onClick={(event) => { event.stopPropagation(); onToggle() }} />\n <button type=\"button\" className=\"dsh-st-more\" onClick={(event) => { event.stopPropagation(); setMenu(value => !value) }} aria-label={t('card.delete')}><MoreIcon /></button>\n {menu && (\n <div className=\"dsh-st-menu\" onClick={event => event.stopPropagation()}>\n <button type=\"button\" disabled={busy} onClick={() => { setMenu(false); onRun() }}><PlayIcon />{t('menu.run')}</button>\n <button type=\"button\" className=\"is-danger\" disabled={busy} onClick={() => { setMenu(false); onDelete() }}><TrashIcon />{t('menu.delete')}</button>\n </div>\n )}\n </div>\n <h3>{item.name}</h3>\n <p>{item.prompt}</p>\n <div className=\"dsh-st-card-foot\">\n <span className=\"dsh-st-chip\"><ClockIcon />{formatSchedule(item.schedule, t)}</span>\n <span>{item.nextRunAt === undefined ? t('stats.noneScheduled') : t('history.nextApprox', { when: formatWithin(item.nextRunAt, now, t) })}</span>\n </div>\n </article>\n )\n}\n\nfunction RunRow({ run, t }: { readonly run: AutomationRunViewModel; readonly t: Translate }): JSX.Element {\n const duration = formatDuration(run.startedAt, run.finishedAt)\n return (\n <article className={`dsh-st-run is-${run.status}`}>\n <strong>{run.automationName}</strong>\n <p>\n <span>{clockTime(run.startedAt ?? run.scheduledFor)}</span>\n {duration !== undefined && <span>{duration}</span>}\n <span>{t('history.trigger')}</span>\n </p>\n </article>\n )\n}\n", "import type { Translate } from './contracts.js'\nimport type {\n AutomationSchedule,\n AutomationRunStatus,\n AutomationSnapshot,\n CreateAutomationInput,\n ModelOption,\n WorkspaceOption,\n} from './protocol.js'\n\nexport type ScheduleKind = 'once' | 'interval' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'custom'\n\nexport interface AutomationFormState {\n readonly name: string\n readonly prompt: string\n readonly scheduleKind: ScheduleKind\n readonly onceAt: string\n readonly everyMinutes: string\n readonly time: string\n readonly weekdays: readonly number[]\n readonly hourlyMinute: string\n readonly monthDay: string\n readonly customDays: string\n readonly timeZone: string\n readonly permission: CreateAutomationInput['permission']\n readonly workspaceId: string\n readonly modelKey: string\n readonly reasoningEffort: string\n readonly skills: readonly string[]\n}\n\nexport type FormErrorKey =\n | 'form.error.name'\n | 'form.error.prompt'\n | 'form.error.once'\n | 'form.error.interval'\n | 'form.error.weekdays'\n | 'form.error.workspace'\n\nexport class AutomationFormError extends Error {\n constructor(readonly key: FormErrorKey) {\n super(key)\n }\n}\n\nconst SKILL_GESTURE_NAME = /^[a-z0-9]+(?:-[a-z0-9]+)*$/\n\n/** Chat \u70B9\u9009\u6280\u80FD\u540E\u5199\u5165\u8F93\u5165\u6846\u7684 `/name` \u6587\u672C\u3002\u4F18\u5148\u7528\u5408\u6CD5\u6280\u80FD\u540D\uFF0C\u5426\u5219\u56DE\u9000\u5230\u76EE\u5F55 id\u3002 */\nexport function skillGestureToken(skill: { readonly id: string; readonly name: string }): string {\n const raw = SKILL_GESTURE_NAME.test(skill.name) ? skill.name : skill.id\n return `/${raw}`\n}\n\n/** \u5728\u5149\u6807\u5904\u63D2\u5165\u6280\u80FD\u624B\u52BF\uFF1B\u5DF2\u5B58\u5728\u76F8\u540C token \u65F6\u4E0D\u91CD\u590D\u63D2\u5165\u3002 */\nexport function insertSkillGesture(\n prompt: string,\n token: string,\n caret: number,\n): { readonly text: string; readonly caret: number } {\n const normalized = token.startsWith('/') ? token : `/${token}`\n const escaped = normalized.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n if (new RegExp(`(^|\\\\s)${escaped}(?=\\\\s|$)`).test(prompt)) {\n return { text: prompt, caret: Math.min(Math.max(caret, 0), prompt.length) }\n }\n const at = Math.min(Math.max(caret, 0), prompt.length)\n const prefix = prompt.slice(0, at)\n const suffix = prompt.slice(at)\n const lead = prefix.length > 0 && !/\\s$/.test(prefix) ? ' ' : ''\n const inserted = `${lead}${normalized} `\n return { text: prefix + inserted + suffix, caret: prefix.length + inserted.length }\n}\nexport function localDateTimeValue(date = new Date()): string {\n const future = new Date(date.getTime() + 60 * 60 * 1000)\n future.setMinutes(0, 0, 0)\n const offset = future.getTimezoneOffset() * 60_000\n return new Date(future.getTime() - offset).toISOString().slice(0, 16)\n}\n\nexport function defaultFormState(\n now = new Date(),\n workspaces: readonly WorkspaceOption[] = [],\n defaultModel?: ModelOption | null,\n): AutomationFormState {\n return {\n name: '',\n prompt: '',\n scheduleKind: 'daily',\n onceAt: localDateTimeValue(now),\n everyMinutes: '60',\n time: '09:00',\n weekdays: [1, 2, 3, 4, 5],\n hourlyMinute: '00',\n monthDay: '1',\n customDays: '2',\n timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone || 'Asia/Shanghai',\n permission: 'read-only',\n workspaceId: workspaces[0]?.id ?? '',\n modelKey: defaultModel === undefined || defaultModel === null\n ? 'default'\n : `${defaultModel.provider}::${defaultModel.model}`,\n reasoningEffort: 'high',\n skills: [],\n }\n}\n\nexport function buildCreateInput(\n form: AutomationFormState,\n workspaces: readonly WorkspaceOption[],\n models: readonly ModelOption[],\n now = new Date(),\n options: { readonly allowPastOnce?: boolean } = {},\n): CreateAutomationInput {\n const name = form.name.trim()\n const prompt = form.prompt.trim()\n if (name === '') throw new AutomationFormError('form.error.name')\n if (prompt === '') throw new AutomationFormError('form.error.prompt')\n const workspace = workspaces.find(item => item.id === form.workspaceId)\n if (workspace === undefined) throw new AutomationFormError('form.error.workspace')\n\n let schedule: CreateAutomationInput['schedule']\n switch (form.scheduleKind) {\n case 'once': {\n const at = new Date(form.onceAt)\n if (!Number.isFinite(at.getTime()) || (options.allowPastOnce !== true && at.getTime() <= now.getTime())) {\n throw new AutomationFormError('form.error.once')\n }\n schedule = { kind: 'once', at: at.toISOString(), timeZone: form.timeZone }\n break\n }\n case 'interval': {\n const everyMinutes = Number(form.everyMinutes)\n if (!Number.isInteger(everyMinutes) || everyMinutes < 5 || everyMinutes > 43_200) {\n throw new AutomationFormError('form.error.interval')\n }\n schedule = { kind: 'interval', everyMinutes, anchor: now.toISOString(), timeZone: form.timeZone }\n break\n }\n case 'daily':\n schedule = { kind: 'daily', time: form.time, timeZone: form.timeZone }\n break\n case 'weekly':\n if (form.weekdays.length === 0) throw new AutomationFormError('form.error.weekdays')\n schedule = { kind: 'weekly', time: form.time, weekdays: [...form.weekdays].sort((a, b) => a - b), timeZone: form.timeZone }\n break\n case 'hourly': {\n const minute = Number(form.hourlyMinute)\n if (!Number.isInteger(minute) || minute < 0 || minute > 59) throw new AutomationFormError('form.error.interval')\n schedule = { kind: 'hourly', minute, timeZone: form.timeZone }\n break\n }\n case 'monthly': {\n const day = Number(form.monthDay)\n if (!Number.isInteger(day) || day < 1 || day > 31) throw new AutomationFormError('form.error.interval')\n schedule = { kind: 'monthly', day, time: form.time, timeZone: form.timeZone }\n break\n }\n case 'custom': {\n const everyDays = Number(form.customDays)\n if (!Number.isInteger(everyDays) || everyDays < 1) throw new AutomationFormError('form.error.interval')\n schedule = { kind: 'custom', everyDays, time: form.time, timeZone: form.timeZone }\n break\n }\n }\n\n const selected = models.find(item => `${item.provider}::${item.model}` === form.modelKey)\n return {\n name,\n prompt,\n schedule,\n timeZone: form.timeZone,\n permission: form.permission,\n workspaceId: workspace.id,\n cwd: workspace.path,\n ...(selected === undefined ? { provider: null, model: null } : { provider: selected.provider, model: selected.model }),\n reasoningEffort: form.reasoningEffort === 'none' ? null : form.reasoningEffort,\n }\n}\n\nconst ATTENTION_STATUSES = new Set<AutomationRunStatus>(['failed', 'interrupted'])\n\nexport interface OverviewStats {\n readonly total: number\n readonly active: number\n readonly attention: number\n readonly nextRunAt?: string\n}\n\nexport function deriveOverview(snapshot: AutomationSnapshot): OverviewStats {\n const next = snapshot.automations\n .filter(item => item.status === 'active' && item.nextRunAt !== undefined)\n .map(item => item.nextRunAt as string)\n .sort((a, b) => Date.parse(a) - Date.parse(b))[0]\n return {\n total: snapshot.automations.length,\n active: snapshot.automations.filter(item => item.status === 'active').length,\n attention: snapshot.runs.filter(run => ATTENTION_STATUSES.has(run.status) && run.unread !== false).length,\n ...(next === undefined ? {} : { nextRunAt: next }),\n }\n}\n\nexport function formatRelativeTime(iso: string, now: Date, t: Translate): string {\n const value = Date.parse(iso)\n if (!Number.isFinite(value)) return iso\n const deltaMinutes = Math.round((value - now.getTime()) / 60_000)\n const abs = Math.abs(deltaMinutes)\n if (abs < 1) return t('time.now')\n const future = deltaMinutes > 0\n if (abs < 60) return t(future ? 'time.inMinute' : 'time.minuteAgo', { count: abs })\n const hours = Math.round(abs / 60)\n if (hours < 24) return t(future ? 'time.inHour' : 'time.hourAgo', { count: hours })\n const days = Math.round(hours / 24)\n return t(future ? 'time.inDay' : 'time.dayAgo', { count: days })\n}\n\nexport function shortSessionId(sessionId: string): string {\n return sessionId.length <= 12 ? sessionId : `${sessionId.slice(0, 8)}\u2026${sessionId.slice(-4)}`\n}\n\nexport function formatSchedule(schedule: AutomationSchedule, t: Translate): string {\n switch (schedule.kind) {\n case 'once':\n return t('schedule.onceAt', { time: new Date(schedule.at).toLocaleString() })\n case 'interval':\n return t('schedule.everyMinutes', { count: schedule.everyMinutes })\n case 'daily':\n return t('schedule.dailyAt', { time: schedule.time })\n case 'weekly': {\n const days = schedule.weekdays.map(day => t(`day.${day}` as 'day.1' | 'day.2' | 'day.3' | 'day.4' | 'day.5' | 'day.6' | 'day.7')).join('\u3001')\n return t('schedule.weeklyAt', { days, time: schedule.time })\n }\n case 'hourly':\n return t('schedule.hourlyAt', { minute: String(schedule.minute).padStart(2, '0') })\n case 'monthly':\n return t('schedule.monthlyAt', { day: schedule.day, time: schedule.time })\n case 'custom':\n return t('schedule.customAt', { count: schedule.everyDays, time: schedule.time })\n }\n}\n\nexport function workspaceLabel(\n item: { readonly workspaceId?: string; readonly cwd?: string },\n workspaces: readonly WorkspaceOption[],\n): string {\n const found = workspaces.find(workspace => workspace.id === item.workspaceId)\n return found?.title || item.cwd || item.workspaceId || '-'\n}\n\nexport function formatWithin(iso: string, now: Date, t: Translate): string {\n const delta = Date.parse(iso) - now.getTime()\n if (!Number.isFinite(delta) || delta <= 0) return t('time.now')\n const minutes = Math.max(1, Math.ceil(delta / 60_000))\n if (minutes < 60) return t('time.withinMinute', { count: minutes })\n const hours = Math.ceil(minutes / 60)\n if (hours < 24) return t('time.withinHour', { count: hours })\n return t('time.withinDay', { count: Math.ceil(hours / 24) })\n}\n\nexport function formatDuration(startedAt?: string, finishedAt?: string): string | undefined {\n if (startedAt === undefined || finishedAt === undefined) return undefined\n const seconds = (Date.parse(finishedAt) - Date.parse(startedAt)) / 1000\n if (!Number.isFinite(seconds) || seconds < 0) return undefined\n return `${seconds.toFixed(1)}s`\n}\n\nexport function clockTime(iso: string): string {\n const value = new Date(iso)\n if (Number.isNaN(value.getTime())) return iso\n return value.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false })\n}\n\nexport type HistoryRange = 'day' | 'week' | 'month'\n\nexport interface HistoryGroup {\n readonly key: string\n readonly label: string\n readonly items: readonly import('./protocol.js').AutomationRunViewModel[]\n}\n\nexport function groupHistory(\n runs: readonly import('./protocol.js').AutomationRunViewModel[],\n range: HistoryRange,\n now: Date,\n t: Translate,\n): HistoryGroup[] {\n const buckets = new Map<string, import('./protocol.js').AutomationRunViewModel[]>()\n for (const run of runs) {\n const at = new Date(run.finishedAt ?? run.startedAt ?? run.scheduledFor)\n if (Number.isNaN(at.getTime())) continue\n let key: string\n let label: string\n if (range === 'month') {\n key = `${at.getFullYear()}-${String(at.getMonth() + 1).padStart(2, '0')}`\n label = t('history.month', { month: `${at.getFullYear()}/${at.getMonth() + 1}` })\n } else if (range === 'week') {\n const start = startOfWeek(at)\n key = start.toISOString().slice(0, 10)\n label = t('history.week', { date: `${start.getMonth() + 1}/${start.getDate()}` })\n } else {\n key = localDayKey(at)\n const today = localDayKey(now)\n const yesterday = localDayKey(new Date(now.getTime() - 86_400_000))\n label = key === today ? t('history.today') : key === yesterday ? t('history.yesterday') : t('history.date', { date: `${at.getMonth() + 1}/${at.getDate()}` })\n }\n const existing = buckets.get(key) ?? []\n existing.push(run)\n buckets.set(key, existing)\n }\n return [...buckets.entries()].map(([key, items]) => ({\n key,\n label: items[0] === undefined ? key : (\n range === 'month'\n ? t('history.month', { month: key.replace('-', '/') })\n : range === 'week'\n ? t('history.week', { date: key.slice(5).replace('-', '/') })\n : key === localDayKey(now)\n ? t('history.today')\n : key === localDayKey(new Date(now.getTime() - 86_400_000))\n ? t('history.yesterday')\n : t('history.date', { date: key.slice(5).replace('-', '/') })\n ),\n items,\n }))\n}\n\nfunction localDayKey(value: Date): string {\n return `${value.getFullYear()}-${String(value.getMonth() + 1).padStart(2, '0')}-${String(value.getDate()).padStart(2, '0')}`\n}\n\nfunction startOfWeek(value: Date): Date {\n const next = new Date(value)\n const day = next.getDay()\n const offset = day === 0 ? 6 : day - 1\n next.setHours(0, 0, 0, 0)\n next.setDate(next.getDate() - offset)\n return next\n}\n\nexport function formFromAutomation(\n item: import('./protocol.js').AutomationViewModel,\n workspaces: readonly WorkspaceOption[] = [],\n defaultModel?: ModelOption | null,\n): AutomationFormState {\n const base = defaultFormState(new Date(), workspaces, defaultModel)\n const schedule = item.schedule\n const modelKey = item.provider && item.model ? `${item.provider}::${item.model}` : 'default'\n const common = {\n ...base,\n name: item.name,\n prompt: item.prompt,\n permission: item.permission,\n workspaceId: item.workspaceId ?? base.workspaceId,\n modelKey,\n reasoningEffort: item.reasoningEffort ?? 'high',\n }\n switch (schedule.kind) {\n case 'once':\n return { ...common, scheduleKind: 'once', onceAt: toLocalInput(schedule.at) }\n case 'interval':\n return { ...common, scheduleKind: 'interval', everyMinutes: String(schedule.everyMinutes) }\n case 'hourly':\n return { ...common, scheduleKind: 'hourly', hourlyMinute: String(schedule.minute).padStart(2, '0') }\n case 'daily':\n return { ...common, scheduleKind: 'daily', time: schedule.time }\n case 'weekly':\n return { ...common, scheduleKind: 'weekly', time: schedule.time, weekdays: [...schedule.weekdays] }\n case 'monthly':\n return { ...common, scheduleKind: 'monthly', time: schedule.time, monthDay: String(schedule.day) }\n case 'custom':\n return { ...common, scheduleKind: 'custom', time: schedule.time, customDays: String(schedule.everyDays) }\n }\n}\n\nfunction toLocalInput(iso: string): string {\n const value = new Date(iso)\n if (Number.isNaN(value.getTime())) return localDateTimeValue()\n const offset = value.getTimezoneOffset() * 60_000\n return new Date(value.getTime() - offset).toISOString().slice(0, 16)\n}\n\n\nexport function prettyModelName(model: string): string {\n return model.split(/[-_]/g).map((part) => {\n if (part.toLowerCase() === 'deepseek') return 'DeepSeek'\n if (/^v\\d/i.test(part)) return part.slice(0, 1).toUpperCase() + part.slice(1)\n if (part === '') return part\n return part.slice(0, 1).toUpperCase() + part.slice(1)\n }).join('-')\n}\n\n\r\n", "import type { SVGProps } from 'react'\n\ntype IconProps = SVGProps<SVGSVGElement>\n\nfunction IconFrame({ children, ...props }: IconProps): JSX.Element {\n return (\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\" {...props}>\n {children}\n </svg>\n )\n}\n\nexport function AutomationIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><circle cx=\"12\" cy=\"12\" r=\"8.25\" /><path d=\"M12 7.7v4.7l3.15 1.85\" /><path d=\"M5.6 4.9 4.2 6.3M18.4 4.9l1.4 1.4\" /></IconFrame>\n}\n\nexport function PlusIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><path d=\"M12 5v14M5 12h14\" /></IconFrame>\n}\n\nexport function RefreshIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><path d=\"M19 7v5h-5\" /><path d=\"M18.1 15.5A7.5 7.5 0 1 1 19 12\" /></IconFrame>\n}\n\nexport function PlayIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><path d=\"m9 7 8 5-8 5V7Z\" /></IconFrame>\n}\n\nexport function PauseIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><path d=\"M9 7v10M15 7v10\" /></IconFrame>\n}\n\nexport function TrashIcon(props: IconProps): JSX.Element {\n return <FillIcon {...props}><path fill='currentColor' d='M14.478 4.841 14.214 10.115c-.104 2.072-.147 2.896-.827 3.846a3.53 3.53 0 0 1-1.044.993c-.519.333-1.101.478-1.784.546-.671.067-1.509.066-2.559.066s-1.887.001-2.558-.066c-.683-.068-1.266-.213-1.784-.546a3.53 3.53 0 0 1-1.044-.993c-.681-.95-.724-1.774-.828-3.846L1.522 4.841l1.368-.068.263 5.273c.109 2.176.171 2.556.573 3.117a2.16 2.16 0 0 0 .673.64c.263.169.603.277 1.179.334.587.059 1.345.06 2.422.06s1.834-.001 2.422-.06c.575-.057.916-.165 1.179-.335.262-.168.49-.386.672-.64.402-.56.464-.94.573-3.116l.263-5.273 1.369.068ZM5.43 6.228h1.37v5.163H5.43V6.228Zm3.77 0h1.37v5.163H9.2V6.228ZM8.536.434c.644 0 1.116-.007 1.56.137.14.045.276.101.406.168.416.212.745.552 1.2 1.007l.796.795h2.876v1.37H.626V2.541h2.876l.796-.795c.456-.455.784-.795 1.2-1.007.13-.067.266-.123.405-.168C6.348.427 6.82.434 7.464.434h1.072Zm-1.072 1.37c-.732 0-.948.008-1.138.07a2.2 2.2 0 0 0-.206.085c-.156.08-.296.204-.678.583h5.117c-.382-.379-.522-.503-.679-.583a2.2 2.2 0 0 0-.205-.085c-.191-.062-.406-.07-1.138-.07H7.464Z' /></FillIcon>\n}\n\nexport function ShieldIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><path d=\"M12 3.8 19 6v5.1c0 4.3-2.6 7.4-7 9.1-4.4-1.7-7-4.8-7-9.1V6l7-2.2Z\" /><path d=\"m9.4 12 1.7 1.7 3.7-4\" /></IconFrame>\n}\n\nexport function CalendarIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><rect x=\"4\" y=\"5.5\" width=\"16\" height=\"14\" rx=\"2\" /><path d=\"M8 3.8v3.4M16 3.8v3.4M4 9.5h16\" /></IconFrame>\n}\n\nexport function CheckIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><path d=\"m5.5 12.5 4 4 9-9\" /></IconFrame>\n}\n\nexport function AlertIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><path d=\"M12 4.2 21 19H3L12 4.2Z\" /><path d=\"M12 9v4.5M12 16.5h.01\" /></IconFrame>\n}\n\nexport function MoreIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><circle cx=\"6\" cy=\"12\" r=\"1.2\" fill=\"currentColor\" /><circle cx=\"12\" cy=\"12\" r=\"1.2\" fill=\"currentColor\" /><circle cx=\"18\" cy=\"12\" r=\"1.2\" fill=\"currentColor\" /></IconFrame>\n}\n\nexport function InfoIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><circle cx=\"12\" cy=\"12\" r=\"8.25\" /><path d=\"M12 10.4V16\" /><path d=\"M12 7.6h.01\" /></IconFrame>\n}\n\nexport function ClockIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><circle cx=\"12\" cy=\"12\" r=\"8.25\" /><path d=\"M12 7.6v4.6l3 1.8\" /></IconFrame>\n}\n\nexport function ChatIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><path d=\"M5.5 6.5h13v9.2H9.2L5.5 18.8V6.5Z\" /></IconFrame>\n}\n\nexport function FolderIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><path d=\"M4 7.2h6.1l1.7 1.8H20V18H4V7.2Z\" /></IconFrame>\n}\n\nexport function SparkleIcon(props: IconProps): JSX.Element {\n return <IconFrame {...props}><path d=\"M12 3.6 13.3 8.7 18.4 10 13.3 11.3 12 16.4 10.7 11.3 5.6 10 10.7 8.7 12 3.6Z\" /></IconFrame>\n}\n\nfunction FillIcon({ children, width = 16, height = 16 }: IconProps & { children: JSX.Element | JSX.Element[] }): JSX.Element {\n return <svg viewBox='0 0 16 16' width={width} height={height} fill='none' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'>{children}</svg>\n}\n\nexport function FolderClosedIcon(props: IconProps): JSX.Element {\n return <FillIcon {...props}><path fill='currentColor' d='M6.556 3.377 6.007 3.725l.549-.348ZM14.5 12.342h.65V6.397h-.65-.65v5.945h.65Zm-1.674-7.618v-.65H8.023v.65h4.803Zm-5.746-.519.55-.347-.525-.828-.549.348-.549.348.525.828.55-.348ZM5.613 2.858h0H3.174v.65h2.439v-.65ZM3 4.532v8.46h.65V4.532H3Zm11.326 9.484v-.65H4.674v.65h9.652ZM3 12.342h-.65A2.324 2.324 0 0 0 4.674 14.666v-1.3A.824.824 0 0 1 3.65 12.342H3Zm.174-9.484h0A2.324 2.324 0 0 0 2.35 4.532h1.3A.824.824 0 0 1 4.674 3.508h0V2.858Zm3.382.519.549-.348A1.824 1.824 0 0 0 5.613 2.208v1.3c.16 0 .308.082.394.217l.549-.348Zm1.467 1.347h0c-.16 0-.308-.082-.393-.216l-.55.347-.549.348A1.824 1.824 0 0 0 8.023 5.374v-1.3ZM14.5 6.397h.65A2.324 2.324 0 0 0 12.826 4.073v1.3c.565 0 1.024.458 1.024 1.024h.65Zm0 5.945h-.65c0 .565-.458 1.024-1.024 1.024v1.3A2.324 2.324 0 0 0 15.15 12.342h-.65Z' /></FillIcon>\n}\n\nexport function FolderOpenIcon(props: IconProps): JSX.Element {\n return <FillIcon {...props}><path fill='currentColor' d='M5.196 1.571c.615 0 1.19.308 1.532.819l.471.708c.086.128.23.205.383.205h4.588A2.666 2.666 0 0 1 14.586 5.72v.907c.683.4 1.074 1.223.852 2.06l-1.053 3.971A2.666 2.666 0 0 1 12.05 14.453H2.917A2.416 2.416 0 0 1 .502 11.952V3.987A2.416 2.416 0 0 1 2.918 1.571h2.278Zm-1.417 6.185c-.469 0-.88.316-1.001.77l-.862 3.247c-.174.657.322 1.301 1.001 1.301H12.05c.469 0 .88-.316 1.001-.77l1.053-3.97c.078-.291-.142-.577-.444-.577H3.779Zm-.861-4.804c-.572 0-1.035.464-1.035 1.035v3.307a2.67 2.67 0 0 1 1.896-.919h9.426V5.72c0-.572-.464-1.035-1.035-1.035H7.582c-.615 0-1.19-.309-1.531-.82L5.579 3.156a.666.666 0 0 0-.383-.204H2.918Z' /></FillIcon>\n}\n\nexport function ChevronIcon(props: IconProps): JSX.Element {\n return <svg viewBox='0 0 14 14' width={props.width || 14} height={props.height || 14} fill='none' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'><path fill='currentColor' d='M4.25 2.828v8.344c0 .49.592.735.939.389l4.172-4.172a.55.55 0 0 0 0-.778L5.189 2.439c-.347-.347-.939-.101-.939.389Z' /></svg>\n}\n\nexport function EllipsisIcon(props: IconProps): JSX.Element {\n return <FillIcon {...props}><path fill='currentColor' d='M4.55146 8.00001C4.55146 8.63513 4.03659 9.15001 3.40146 9.15001C2.76634 9.15001 2.25146 8.63513 2.25146 8.00001C2.25146 7.36488 2.76634 6.85001 3.40146 6.85001C4.03659 6.85001 4.55146 7.36488 4.55146 8.00001Z' /><path fill='currentColor' d='M9.1476 8.00001C9.1476 8.63513 8.63273 9.15001 7.9976 9.15001C7.36248 9.15001 6.8476 8.63513 6.8476 8.00001C6.8476 7.36488 7.36248 6.85001 7.9976 6.85001C8.63273 6.85001 9.1476 7.36488 9.1476 8.00001Z' /><path fill='currentColor' d='M13.7486 8.00001C13.7486 8.63513 13.2338 9.15001 12.5986 9.15001C11.9635 9.15001 11.4486 8.63513 11.4486 8.00001C11.4486 7.36488 11.9635 6.85001 12.5986 6.85001C13.2338 6.85001 13.7486 7.36488 13.7486 8.00001Z' /></FillIcon>\n}\n\nexport function PencilIcon(props: IconProps): JSX.Element {\n return <FillIcon {...props}><path fill='currentColor' d='M9.941 1.349a2.54 2.54 0 0 1 2.473 0c.292.171.555.442.897.784.341.341.612.604.783.896a2.54 2.54 0 0 1 0 2.473c-.171.292-.442.555-.784.896L6.659 13.05c-.378.378-.652.661-.994.86-.341.199-.722.298-1.238.44l-1.183.326c-.469.13-.899.25-1.243.292-.349.043-.821.033-1.19-.336-.369-.369-.379-.841-.336-1.19.042-.344.163-.774.292-1.243l.326-1.183c.143-.516.242-.897.44-1.238.199-.342.482-.615.86-.994l6.652-6.651c.341-.342.604-.613.896-.784Zm1.759 1.222a1.16 1.16 0 0 0-1.045 0c-.095.056-.206.158-.61.562L9.456 3.721l2.265 2.265.589-.588c.404-.403.507-.515.562-.61a1.16 1.16 0 0 0 0-1.045c-.056-.095-.158-.206-.562-.61-.404-.404-.515-.507-.61-.562ZM3.394 9.784c-.429.429-.551.56-.637.706-.085.147-.138.318-.3.903l-.326 1.183c-.129.468-.209.766-.242.978.212-.033.51-.112.979-.241l1.183-.327c.585-.161.756-.214.902-.3.147-.085.277-.208.706-.636l5.062-5.063-2.265-2.265-5.062 5.062Z' /></FillIcon>\n}\n\nexport function BranchIcon(props: IconProps): JSX.Element {\n return <FillIcon {...props}><path fill='currentColor' fillRule='evenodd' clipRule='evenodd' d='M13.076 1.372c1.008 0 1.826.819 1.826 1.827s-.818 1.826-1.826 1.826c-.78 0-1.444-.488-1.706-1.175H4.355c.439.415.804.915 1.062 1.485l1.69 3.733a4.83 4.83 0 0 0 4.312 2.97c.29-.626.923-1.061 1.658-1.061 1.008 0 1.826.818 1.826 1.826s-.818 1.826-1.826 1.826c-.823 0-1.519-.545-1.747-1.293a6.34 6.34 0 0 1-5.406-3.731L4.232 5.871A3.83 3.83 0 0 0 1.098 3.85V2.549h10.272c.263-.687.927-1.177 1.706-1.177Zm0 10.904a.525.525 0 1 0 0 1.052.525.525 0 0 0 0-1.052Zm0-9.603a.526.526 0 1 0 0 1.053.526.526 0 0 0 0-1.053Z' /></FillIcon>\n}\n\nexport function ArchiveIcon(props: IconProps): JSX.Element {\n return <svg viewBox='0 0 20 20' width={props.width || 16} height={props.height || 16} fill='none' xmlns='http://www.w3.org/2000/svg' aria-hidden='true'><path fill='currentColor' fillRule='evenodd' clipRule='evenodd' d='M15.866 2.06a2.526 2.526 0 0 1 2.525 2.525v.902c0 .54-.172 1.04-.461 1.45l.009.085v5.866c0 .746 0 1.35-.039 1.837-.035.434-.106.825-.262 1.189l-.072.154a3.03 3.03 0 0 1-1.262 1.366l-.236.132c-.408.208-.848.294-1.344.334-.488.04-1.091.04-1.837.04H7.111c-.746 0-1.35 0-1.837-.04-.434-.035-.825-.105-1.189-.261l-.154-.073a3.03 3.03 0 0 1-1.366-1.262l-.132-.235a2.53 2.53 0 0 1-.335-1.344c-.04-.487-.039-1.091-.039-1.837V7.022c0-.029.005-.057.008-.086A2.48 2.48 0 0 1 1.609 5.487v-.902A2.526 2.526 0 0 1 4.134 2.06h11.732Zm.632 5.87a2.48 2.48 0 0 1-.632.083H4.134a2.48 2.48 0 0 1-.634-.083v4.959c0 .77 0 1.304.034 1.72.034.406.095.635.182.806l.076.137c.191.311.465.565.792.731l.141.061c.156.055.361.096.666.121.415.034.95.035 1.72.035h5.775c.77 0 1.305 0 1.72-.035.407-.033.636-.095.807-.182l.138-.077c.311-.191.565-.464.731-.791l.06-.142c.056-.155.097-.36.122-.665.034-.415.034-.95.034-1.72V7.93ZM4.134 3.5a1.086 1.086 0 0 0-1.085 1.085v.902c0 .599.486 1.085 1.085 1.085h11.732c.599 0 1.085-.486 1.085-1.085v-.902A1.086 1.086 0 0 0 15.866 3.5H4.134Z' /><path fill='currentColor' d='M12.796 12.566v-1.483H7.205v1.483h5.591Z' /></svg>\n}\n\nconst RUNNING_CELLS: readonly (readonly [number, number])[] = [\n [0, 0], [4, 0], [8, 0], [8, 4], [8, 8], [4, 8], [0, 8], [0, 4],\n]\n\n/** \u590D\u523B\u5B98\u65B9\u4EFB\u52A1\u6811 running StateDot\uFF1A3x3 \u50CF\u7D20\u7ED5\u5708\u3002 */\nexport function RunningStateDot(): JSX.Element {\n return (\n <svg className=\"dsh-st-run-dot\" width={10} height={10} viewBox=\"0 0 10 10\" shapeRendering=\"crispEdges\" aria-hidden=\"true\">\n {RUNNING_CELLS.map(([x, y], index) => (\n <rect\n key={`${x}-${y}`}\n className=\"dsh-st-run-dot-cell\"\n x={x}\n y={y}\n width=\"2\"\n height=\"2\"\n style={{ animationDelay: `${(index - RUNNING_CELLS.length) * 125}ms` }}\n />\n ))}\n </svg>\n )\n}\r\n", "import { useEffect, useRef, useState, type FormEvent } from 'react'\nimport type { Translate } from './contracts.js'\nimport {\n AutomationFormError,\n defaultFormState,\n insertSkillGesture,\n prettyModelName,\n skillGestureToken,\n type AutomationFormState,\n type ScheduleKind,\n} from './helpers.js'\nimport { FolderIcon, PlusIcon, ShieldIcon, SparkleIcon } from './icons.js'\nimport { MenuHostProvider, MenuPanel, MenuPopup, MenuRow, MenuSelect, useMenuState } from './menu.js'\n\nconst WEEKDAYS = [1, 2, 3, 4, 5, 6, 7] as const\nconst KINDS: readonly ScheduleKind[] = ['once', 'interval', 'hourly', 'daily', 'weekly', 'monthly', 'custom']\nconst HOURS = Array.from({ length: 24 }, (_, index) => String(index).padStart(2, '0'))\nconst MINUTES = Array.from({ length: 60 }, (_, index) => String(index).padStart(2, '0'))\nconst EFFORTS = ['none', 'low', 'medium', 'high'] as const\n\nexport function CreateModal({\n t, busy, workspaces, models, defaultModel, skills, draft, editing, onClose, onSubmit, onAddWorkspace,\n}: {\n readonly t: Translate\n readonly busy: boolean\n readonly workspaces: readonly { id: string; title: string; path: string }[]\n readonly models: readonly { provider: string; model: string; label: string }[]\n readonly defaultModel: { provider: string; model: string; label: string } | null\n readonly skills: readonly { id: string; name: string }[]\n readonly draft?: Partial<AutomationFormState>\n readonly editing?: boolean\n readonly onClose: () => void\n readonly onSubmit: (form: AutomationFormState) => Promise<void>\n readonly onAddWorkspace?: (path: string) => Promise<string>\n}): JSX.Element {\n const [form, setForm] = useState<AutomationFormState>(() => ({ ...defaultFormState(new Date(), workspaces, defaultModel), ...draft }))\n const [validationError, setValidationError] = useState<string>()\n const [addingWorkspace, setAddingWorkspace] = useState(false)\n const [workspacePath, setWorkspacePath] = useState('')\n const update = (patch: Partial<AutomationFormState>): void => {\n setForm(current => ({ ...current, ...patch }))\n setValidationError(undefined)\n }\n\n useEffect(() => {\n const onKey = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape') return\n event.preventDefault()\n event.stopPropagation()\n event.stopImmediatePropagation()\n onClose()\n }\n window.addEventListener('keydown', onKey, true)\n return () => { window.removeEventListener('keydown', onKey, true) }\n }, [onClose])\n\n const handleSubmit = async (event: FormEvent): Promise<void> => {\n event.preventDefault()\n try {\n await onSubmit(form)\n } catch (caught) {\n if (caught instanceof AutomationFormError) {\n setValidationError(t(caught.key))\n return\n }\n setValidationError(caught instanceof Error ? caught.message : t('error.action'))\n }\n }\n\n const datePart = form.onceAt.slice(0, 10)\n const timePart = form.onceAt.slice(11, 16) || '09:00'\n const today = localDateValue(new Date())\n const minOnceTime = datePart === today ? localTimeValue(new Date()) : undefined\n const [menuHost, setMenuHost] = useState<HTMLDivElement | null>(null)\n const workspace = workspaces.find(item => item.id === form.workspaceId)\n const promptRef = useRef<HTMLTextAreaElement>(null)\n const caretRef = useRef(0)\n const rememberCaret = (): void => {\n const el = promptRef.current\n if (el !== null) caretRef.current = el.selectionStart\n }\n const insertSkill = (skill: { id: string; name: string }): void => {\n const next = insertSkillGesture(form.prompt, skillGestureToken(skill), caretRef.current)\n update({ prompt: next.text })\n queueMicrotask(() => {\n const el = promptRef.current\n if (el === null) return\n el.focus()\n el.setSelectionRange(next.caret, next.caret)\n caretRef.current = next.caret\n })\n }\n return (\n <div\n className=\"dsh-st-mask\"\n role=\"presentation\"\n onClick={(event) => {\n if ((event.target as HTMLElement).closest('.dsh-st-select-menu') !== null) return\n onClose()\n }}\n >\n <MenuHostProvider host={menuHost}>\n <form className=\"dsh-st-modal\" onClick={event => event.stopPropagation()} onSubmit={handleSubmit}>\n <div className=\"dsh-st-modal-head\">\n <div>\n <h2>{editing === true ? t('modal.edit') : t('modal.title')}</h2>\n <p>{t('form.subtitle')}</p>\n </div>\n <button type=\"button\" className=\"dsh-st-icon\" onClick={onClose} aria-label={t('form.cancel')}>\u00D7</button>\n </div>\n\n <label className=\"dsh-st-field\">\n {t('form.name')}\n <input value={form.name} placeholder={t('form.namePlaceholder')} onChange={event => update({ name: event.target.value })} />\n </label>\n\n <div className=\"dsh-st-field\">\n {t('form.planTime')}\n <div className=\"dsh-st-inline\">\n <MenuSelect\n value={form.scheduleKind}\n options={KINDS.map(kind => ({ value: kind, label: t(`form.${kind}`) }))}\n onChange={value => update({ scheduleKind: value })}\n />\n {form.scheduleKind === 'once' && (\n <>\n <input type=\"date\" min={today} value={datePart} onChange={event => update({ onceAt: clampOnceAt(`${event.target.value}T${timePart}`) })} />\n <TimeSelect value={timePart} {...(minOnceTime === undefined ? {} : { minTime: minOnceTime })} onChange={value => update({ onceAt: clampOnceAt(`${datePart}T${value}`) })} />\n </>\n )}\n {form.scheduleKind === 'interval' && (\n <>\n <input className=\"is-narrow\" type=\"number\" min={5} value={form.everyMinutes} onChange={event => update({ everyMinutes: event.target.value })} />\n <span className=\"dsh-st-suffix\">{t('form.minutesShort')}</span>\n </>\n )}\n {form.scheduleKind === 'hourly' && (\n <>\n <MenuSelect value={form.hourlyMinute} options={MINUTES.map(item => ({ value: item, label: item }))} onChange={value => update({ hourlyMinute: value })} />\n <span className=\"dsh-st-suffix\">{t('form.minutesShort')}</span>\n </>\n )}\n {(form.scheduleKind === 'daily' || form.scheduleKind === 'weekly') && (\n <TimeSelect value={form.time} onChange={value => update({ time: value })} />\n )}\n {form.scheduleKind === 'monthly' && (\n <>\n <MenuSelect\n value={form.monthDay}\n options={Array.from({ length: 31 }, (_, index) => {\n const day = String(index + 1)\n return { value: day, label: t('form.monthDay', { day }) }\n })}\n onChange={value => update({ monthDay: value })}\n />\n <TimeSelect value={form.time} onChange={value => update({ time: value })} />\n </>\n )}\n {form.scheduleKind === 'custom' && (\n <>\n <input className=\"is-narrow\" type=\"number\" min={1} value={form.customDays} onChange={event => update({ customDays: event.target.value })} />\n <span className=\"dsh-st-suffix\">{t('form.daysShort')}</span>\n <TimeSelect value={form.time} onChange={value => update({ time: value })} />\n </>\n )}\n </div>\n </div>\n\n {form.scheduleKind === 'weekly' && (\n <div className=\"dsh-st-weekdays\">\n {WEEKDAYS.map(day => (\n <button\n key={day}\n type=\"button\"\n className={form.weekdays.includes(day) ? 'is-on' : ''}\n onClick={() => update({\n weekdays: form.weekdays.includes(day) ? form.weekdays.filter(value => value !== day) : [...form.weekdays, day],\n })}\n >\n {t(`day.${day}`)}\n </button>\n ))}\n </div>\n )}\n\n <div className=\"dsh-st-field\">\n <span>{t('form.prompt')}</span>\n <div className=\"dsh-st-prompt-card\">\n <textarea ref={promptRef} value={form.prompt} placeholder={t('form.promptPlaceholder')} onChange={event => { rememberCaret(); update({ prompt: event.target.value }) }} onSelect={rememberCaret} onClick={rememberCaret} onKeyUp={rememberCaret} />\n <div className=\"dsh-st-composer\">\n <div className=\"dsh-st-composer-left\">\n <MenuPanel ghost up label={<><FolderIcon width={14} height={14} />{workspace?.title || t('form.workspace')}</>}>\n {workspaces.length === 0 && <div className=\"dsh-st-select-empty\">{t('form.error.workspace')}</div>}\n {workspaces.map(item => (\n <MenuRow\n key={item.id}\n icon={<FolderIcon width={14} height={14} />}\n label={item.title}\n active={item.id === form.workspaceId}\n onClick={() => update({ workspaceId: item.id })}\n />\n ))}\n <div className=\"dsh-st-menu-split\" />\n <MenuRow\n icon={<PlusIcon width={14} height={14} />}\n label={t('form.addWorkspace')}\n onClick={() => { setWorkspacePath(''); setAddingWorkspace(true) }}\n />\n </MenuPanel>\n <MenuPanel ghost up label={<><SparkleIcon width={14} height={14} />{t('form.skills')}</>}>\n {skills.length === 0 && <div className=\"dsh-st-select-empty\">{t('form.skillsEmpty')}</div>}\n {skills.map(item => (\n <MenuRow\n key={item.id}\n icon={<SparkleIcon width={14} height={14} />}\n label={item.name}\n onClick={() => insertSkill(item)}\n />\n ))}\n </MenuPanel>\n <MenuSelect\n pill\n up\n icon={<ShieldIcon width={14} height={14} />}\n value={form.permission}\n options={[\n { value: 'read-only', label: t('form.readOnly'), icon: <ShieldIcon width={14} height={14} /> },\n { value: 'workspace-write', label: t('form.workspaceWrite'), icon: <ShieldIcon width={14} height={14} /> },\n { value: 'full-access', label: t('form.fullAccess'), icon: <ShieldIcon width={14} height={14} /> },\n ]}\n onChange={value => update({ permission: value })}\n />\n </div>\n <div className=\"dsh-st-composer-right\">\n <ModelPicker\n t={t}\n models={models}\n modelKey={form.modelKey}\n effort={form.reasoningEffort}\n onModelKey={value => update({ modelKey: value })}\n onEffort={value => update({ reasoningEffort: value })}\n />\n </div>\n </div>\n </div>\n </div>\n\n {addingWorkspace && (\n <div className=\"dsh-st-subdialog\">\n <strong>{t('form.addWorkspace')}</strong>\n <label className=\"dsh-st-field\">\n {t('form.workspacePath')}\n <input value={workspacePath} placeholder={t('form.workspacePathPlaceholder')} onChange={event => setWorkspacePath(event.target.value)} />\n </label>\n <div className=\"dsh-st-modal-actions\">\n <button type=\"button\" className=\"dsh-st-btn\" onClick={() => setAddingWorkspace(false)}>{t('form.cancel')}</button>\n <button\n type=\"button\"\n className=\"dsh-st-btn dsh-st-btn--primary\"\n disabled={busy || onAddWorkspace === undefined}\n onClick={async () => {\n if (onAddWorkspace === undefined) return\n try {\n const id = await onAddWorkspace(workspacePath)\n update({ workspaceId: id })\n setAddingWorkspace(false)\n } catch (caught) {\n setValidationError(caught instanceof Error ? caught.message : t('error.action'))\n }\n }}\n >{t('modal.save')}</button>\n </div>\n </div>\n )}\n {validationError !== undefined && <p className=\"dsh-st-error\">{validationError}</p>}\n <div className=\"dsh-st-modal-actions\">\n <button type=\"button\" className=\"dsh-st-btn\" onClick={onClose} disabled={busy}>{t('form.cancel')}</button>\n <button type=\"submit\" className=\"dsh-st-btn dsh-st-btn--primary\" disabled={busy}>{t('modal.save')}</button>\n </div>\n </form>\n <div className=\"dsh-st-flyout-root\" ref={setMenuHost} />\n </MenuHostProvider>\n </div>\n )\n}\n\nfunction ModelPicker({\n t, models, modelKey, effort, onModelKey, onEffort,\n}: {\n readonly t: Translate\n readonly models: readonly { provider: string; model: string; label: string }[]\n readonly modelKey: string\n readonly effort: string\n readonly onModelKey: (value: string) => void\n readonly onEffort: (value: string) => void\n}): JSX.Element {\n const menu = useMenuState()\n const [pane, setPane] = useState<'root' | 'model' | 'effort'>('root')\n const selected = models.find(item => `${item.provider}::${item.model}` === modelKey)\n const modelLabel = selected === undefined ? t('form.modelDefault') : selected.label\n const effortLabel = t(`form.effort.${effort}` as 'form.effort.high')\n const trigger = effort === 'none' ? modelLabel : `${modelLabel} ${effortLabel}`\n\n const open = (next: 'root' | 'model' | 'effort'): void => {\n setPane(next)\n menu.setOpen(true)\n }\n\n return (\n <div className={`dsh-st-select is-pill${menu.open ? \" is-open\" : \"\"}`} ref={menu.root}>\n <button\n type=\"button\"\n className=\"dsh-st-select-btn\"\n onMouseDown={event => event.stopPropagation()}\n onClick={() => {\n if (menu.open) {\n menu.setOpen(false)\n return\n }\n open('root')\n }}\n >\n <span>{trigger}</span>\n <em />\n </button>\n <MenuPopup open={menu.open} anchor={menu.root} menuRef={menu.menu} up end className=\"dsh-st-select-menu is-composer is-up is-end\">\n {pane === 'root' && (\n <>\n <MenuRow kv label={t('form.model')} hint={modelLabel} chevron onClick={() => setPane('model')} />\n <MenuRow kv label={t('form.effort')} hint={effortLabel} chevron onClick={() => setPane('effort')} />\n </>\n )}\n {pane === 'model' && (\n <>\n <MenuRow\n label={t('form.modelDefault')}\n active={modelKey === 'default'}\n onClick={() => { onModelKey('default'); menu.setOpen(false) }}\n />\n {models.map(item => {\n const value = `${item.provider}::${item.model}`\n return (\n <MenuRow\n key={value}\n label={item.label}\n active={value === modelKey}\n onClick={() => { onModelKey(value); menu.setOpen(false) }}\n />\n )\n })}\n </>\n )}\n {pane === 'effort' && EFFORTS.map(item => (\n <MenuRow\n key={item}\n label={t(`form.effort.${item}` as 'form.effort.high')}\n active={item === effort}\n onClick={() => { onEffort(item); menu.setOpen(false) }}\n />\n ))}\n </MenuPopup>\n </div>\n )\n}\n\n\nfunction TimeSelect({\n value,\n onChange,\n minTime,\n}: {\n readonly value: string\n readonly onChange: (value: string) => void\n readonly minTime?: string\n}): JSX.Element {\n const hour = value.slice(0, 2) || '09'\n const minute = value.slice(3, 5) || '00'\n const minHour = minTime?.slice(0, 2)\n const minMinute = minTime?.slice(3, 5)\n const hours = HOURS.filter(item => minHour === undefined || item >= minHour)\n const minutes = MINUTES.filter(item => minHour === undefined || hour > minHour || minMinute === undefined || item >= minMinute)\n return (\n <div className=\"dsh-st-time\">\n <MenuSelect value={hour} options={hours.map(item => ({ value: item, label: item }))} onChange={next => onChange(`${next}:${minute}`)} />\n <span className=\"dsh-st-time-sep\">:</span>\n <MenuSelect value={minute} options={minutes.map(item => ({ value: item, label: item }))} onChange={next => onChange(`${hour}:${next}`)} />\n </div>\n )\n}\n\nfunction localDateValue(now: Date): string {\n const offset = now.getTimezoneOffset() * 60_000\n return new Date(now.getTime() - offset).toISOString().slice(0, 10)\n}\n\nfunction localTimeValue(now: Date): string {\n const offset = now.getTimezoneOffset() * 60_000\n return new Date(now.getTime() - offset).toISOString().slice(11, 16)\n}\n\nfunction clampOnceAt(value: string): string {\n const selected = new Date(value)\n const now = new Date()\n if (!Number.isFinite(selected.getTime()) || selected.getTime() > now.getTime()) return value\n const next = new Date(now.getTime() + 60_000)\n next.setSeconds(0, 0)\n const offset = next.getTimezoneOffset() * 60_000\n return new Date(next.getTime() - offset).toISOString().slice(0, 16)\n}\n\r\n\r\n", "import { createContext, useContext, useEffect, useLayoutEffect, useRef, useState, type CSSProperties, type ReactNode, type RefObject } from 'react'\nimport { createPortal } from 'react-dom'\n\nexport interface MenuOption<T extends string> {\n readonly value: T\n readonly label: string\n readonly icon?: ReactNode\n}\n\nconst MenuHostContext = createContext<HTMLElement | null>(null)\n\nfunction useMenuOpen(): {\n readonly open: boolean\n readonly setOpen: (value: boolean | ((current: boolean) => boolean)) => void\n readonly root: React.RefObject<HTMLDivElement>\n readonly menu: React.RefObject<HTMLDivElement>\n} {\n const [open, setOpen] = useState(false)\n const root = useRef<HTMLDivElement>(null)\n const menu = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (!open) return\n const close = (event: MouseEvent): void => {\n const target = event.target as Node\n if (root.current !== null && root.current.contains(target)) return\n if (menu.current !== null && menu.current.contains(target)) return\n setOpen(false)\n }\n document.addEventListener('mousedown', close)\n return () => { document.removeEventListener('mousedown', close) }\n }, [open])\n\n return { open, setOpen, root, menu }\n}\n\nfunction flyoutStyle(anchor: HTMLElement, host: HTMLElement, up?: boolean, end?: boolean): CSSProperties {\n const box = anchor.getBoundingClientRect()\n const frame = host.getBoundingClientRect()\n const gap = 6\n return {\n position: 'absolute',\n zIndex: 1200,\n top: up === true ? 'auto' : `${box.bottom - frame.top + gap}px`,\n bottom: up === true ? `${frame.bottom - box.top + gap}px` : 'auto',\n left: end === true ? 'auto' : `${box.left - frame.left}px`,\n right: end === true ? `${frame.right - box.right}px` : 'auto',\n }\n}\n\nexport function MenuPopup({\n open,\n anchor,\n menuRef,\n up,\n end,\n className,\n children,\n onClick,\n}: {\n readonly open: boolean\n readonly anchor: RefObject<HTMLElement>\n readonly menuRef: RefObject<HTMLDivElement>\n readonly up?: boolean | undefined\n readonly end?: boolean | undefined\n readonly className: string\n readonly children: ReactNode\n readonly onClick?: () => void\n}): JSX.Element | null {\n const host = useContext(MenuHostContext)\n const [style, setStyle] = useState<CSSProperties>({})\n\n useLayoutEffect(() => {\n if (!open || anchor.current === null || host === null) return\n const update = (): void => {\n if (anchor.current !== null) setStyle(flyoutStyle(anchor.current, host, up, end))\n }\n update()\n window.addEventListener('resize', update)\n document.addEventListener('scroll', update, true)\n return () => {\n window.removeEventListener('resize', update)\n document.removeEventListener('scroll', update, true)\n }\n }, [open, anchor, host, up, end])\n\n if (!open) return null\n\n const node = (\n <div\n ref={menuRef}\n className={`${className}${host !== null ? ' is-float' : ''}`}\n style={host !== null ? style : undefined}\n onMouseDown={event => event.stopPropagation()}\n onClick={event => {\n event.stopPropagation()\n onClick?.()\n }}\n >\n {children}\n </div>\n )\n\n if (host !== null) return createPortal(node, host)\n return node\n}\n\nexport function MenuHostProvider({\n host,\n children,\n}: {\n readonly host: HTMLElement | null\n readonly children: ReactNode\n}): JSX.Element {\n return <MenuHostContext.Provider value={host}>{children}</MenuHostContext.Provider>\n}\n\nexport function MenuRow({\n icon,\n label,\n hint,\n active,\n chevron,\n kv,\n onClick,\n}: {\n readonly icon?: ReactNode\n readonly label: ReactNode\n readonly hint?: ReactNode\n readonly active?: boolean\n readonly chevron?: boolean\n readonly kv?: boolean\n readonly onClick: () => void\n}): JSX.Element {\n return (\n <button type=\"button\" className={`dsh-st-menu-row${active === true ? ' is-on' : ''}${kv === true ? ' is-kv' : ''}`} onClick={onClick}>\n <span className=\"dsh-st-menu-row-main\">\n {icon}\n <span>{label}</span>\n </span>\n <span className=\"dsh-st-menu-row-side\">\n {hint}\n {active === true && chevron !== true && <i className=\"dsh-st-tick\" />}\n {chevron === true && <i className=\"dsh-st-next\" />}\n </span>\n </button>\n )\n}\n\nexport function MenuSelect<T extends string>({\n value,\n options,\n onChange,\n wide,\n pill,\n up,\n icon,\n}: {\n readonly value: T\n readonly options: readonly MenuOption<T>[]\n readonly onChange: (value: T) => void\n readonly wide?: boolean\n readonly pill?: boolean\n readonly up?: boolean\n readonly icon?: ReactNode\n}): JSX.Element {\n const menu = useMenuOpen()\n const current = options.find(item => item.value === value)?.label ?? value\n return (\n <div className={`dsh-st-select${wide === true ? ' is-wide' : ''}${pill === true ? ' is-pill' : ''}${menu.open ? ' is-open' : ''}`} ref={menu.root}>\n <button\n type=\"button\"\n className=\"dsh-st-select-btn\"\n onMouseDown={event => event.stopPropagation()}\n onClick={() => menu.setOpen(value => !value)}\n >\n {icon}\n <span>{current}</span>\n <em />\n </button>\n <MenuPopup\n open={menu.open}\n anchor={menu.root}\n menuRef={menu.menu}\n up={up}\n end={up}\n className={`dsh-st-select-menu${pill === true ? ' is-composer' : ''}${up === true ? ' is-up' : ''}${up === true ? ' is-end' : ''}`}\n >\n {options.map(item => (\n <MenuRow\n key={item.value}\n icon={item.icon}\n label={item.label}\n active={item.value === value}\n onClick={() => { onChange(item.value); menu.setOpen(false) }}\n />\n ))}\n </MenuPopup>\n </div>\n )\n}\n\nexport function MenuPanel({\n label,\n children,\n ghost,\n up,\n persist,\n}: {\n readonly label: ReactNode\n readonly children: ReactNode\n readonly ghost?: boolean\n readonly up?: boolean\n readonly persist?: boolean\n}): JSX.Element {\n const menu = useMenuOpen()\n return (\n <div className={`dsh-st-select${ghost === true ? ' is-pill' : ''}${menu.open ? ' is-open' : ''}`} ref={menu.root}>\n <button\n type=\"button\"\n className=\"dsh-st-chip-btn\"\n onMouseDown={event => event.stopPropagation()}\n onClick={() => menu.setOpen(value => !value)}\n >\n {label}\n {ghost === true && <em />}\n </button>\n <MenuPopup\n open={menu.open}\n anchor={menu.root}\n menuRef={menu.menu}\n up={up}\n className={`dsh-st-select-menu is-composer${up === true ? ' is-up' : ''}`}\n onClick={() => { if (persist !== true) menu.setOpen(false) }}\n >\n {children}\n </MenuPopup>\n </div>\n )\n}\n\nexport function useMenuState(): ReturnType<typeof useMenuOpen> {\n return useMenuOpen()\n}\r\n\r\n", "/** \u8BBE\u7F6E\u9875\u300C\u901A\u8FC7\u5BF9\u8BDD\u521B\u5EFA\u300D\u4EA4\u7ED9\u4F1A\u8BDD\u8F93\u5165\u6846\u7684\u5F85\u586B\u8349\u7A3F\u3002 */\n\nlet pending: string | null = null\nconst listeners = new Set<(text: string | null) => void>()\n\nexport function setChatPrefill(text: string): void {\n pending = text\n for (const listener of [...listeners]) listener(pending)\n}\n\nexport function takeChatPrefill(): string | null {\n const value = pending\n pending = null\n return value\n}\n\nexport function peekChatPrefill(): string | null {\n return pending\n}\n\nexport function subscribeChatPrefill(listener: (text: string | null) => void): () => void {\n listeners.add(listener)\n return () => { listeners.delete(listener) }\n}\n\nexport function applyPrefillToDom(text: string): boolean {\n const seat = document.querySelector('[data-composer-seat] textarea')\n if (!(seat instanceof HTMLTextAreaElement)) return false\n const descriptor = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value')\n descriptor?.set?.call(seat, text)\n seat.dispatchEvent(new InputEvent('input', { bubbles: true }))\n seat.focus()\n return true\n}\r\n", "/** Web \u5BA2\u6237\u7AEF\u4E0E Host RPC \u5171\u4EAB\u7684 JSON \u5951\u7EA6\u3002 */\n\nexport type AutomationStatus = 'active' | 'paused'\nexport type AutomationRunStatus =\n | 'queued' | 'running' | 'succeeded' | 'failed' | 'skipped' | 'cancelled' | 'interrupted'\nexport type AutomationPermission = 'read-only' | 'workspace-write' | 'full-access'\n\nexport type AutomationSchedule =\n | { readonly kind: 'once'; readonly at: string; readonly timeZone?: string }\n | { readonly kind: 'interval'; readonly everyMinutes: number; readonly anchor?: string; readonly timeZone?: string }\n | { readonly kind: 'daily'; readonly time: string; readonly timeZone?: string }\n | { readonly kind: 'weekly'; readonly time: string; readonly weekdays: readonly number[]; readonly timeZone?: string }\n | { readonly kind: 'hourly'; readonly minute: number; readonly timeZone?: string }\n | { readonly kind: 'monthly'; readonly day: number; readonly time: string; readonly timeZone?: string }\n | { readonly kind: 'custom'; readonly everyDays: number; readonly time: string; readonly timeZone?: string }\n\nexport interface WorkspaceOption {\n readonly id: string\n readonly title: string\n readonly path: string\n}\n\nexport interface ModelOption {\n readonly provider: string\n readonly model: string\n readonly label: string\n}\n\nexport interface AutomationViewModel {\n readonly id: string\n readonly revision: number\n readonly name: string\n readonly prompt: string\n readonly status: AutomationStatus\n readonly schedule: AutomationSchedule\n readonly scheduleSummary: string\n readonly timeZone: string\n readonly permission: AutomationPermission\n readonly workspaceId?: string\n readonly cwd?: string\n readonly provider?: string | null\n readonly model?: string | null\n readonly reasoningEffort?: string | null | undefined\n readonly nextRunAt?: string\n readonly lastRunAt?: string\n readonly lastRunStatus?: AutomationRunStatus\n readonly createdAt: string\n readonly updatedAt: string\n}\n\nexport interface AutomationRunViewModel {\n readonly id: string\n readonly automationId: string\n readonly automationName: string\n readonly status: AutomationRunStatus\n readonly trigger: 'schedule' | 'manual' | 'catch-up'\n readonly scheduledFor: string\n readonly startedAt?: string\n readonly finishedAt?: string\n readonly sessionId?: string\n readonly summary?: string\n readonly error?: string\n readonly unread?: boolean\n}\n\nexport interface AutomationSnapshot {\n readonly scope: {\n readonly workspaceId?: string\n readonly workspaceName?: string\n readonly cwd: string\n }\n readonly workspaces?: readonly WorkspaceOption[]\n readonly models?: readonly ModelOption[]\n readonly defaultModel?: ModelOption | null\n readonly skills?: readonly { readonly id: string; readonly name: string }[]\n readonly automations: readonly AutomationViewModel[]\n readonly runs: readonly AutomationRunViewModel[]\n readonly serverNow: string\n}\n\nexport interface CreateAutomationInput {\n readonly name: string\n readonly prompt: string\n readonly schedule: AutomationSchedule\n readonly timeZone: string\n readonly permission: AutomationPermission\n readonly workspaceId: string\n readonly cwd: string\n readonly provider?: string | null\n readonly model?: string | null\n readonly reasoningEffort?: string | null | undefined\n}\n\nexport interface SnapshotRequest { readonly sessionId?: string }\nexport interface CreateRequest { readonly sessionId?: string; readonly input: CreateAutomationInput }\nexport interface MutateRequest {\n readonly sessionId?: string\n readonly automationId: string\n readonly mutation: 'pause' | 'resume' | 'delete'\n}\n\nexport interface UpdateRequest {\n readonly sessionId?: string\n readonly automationId: string\n readonly input: CreateAutomationInput\n}\nexport interface RunNowRequest { readonly sessionId?: string; readonly automationId: string }\nexport interface MarkReadRequest { readonly sessionId?: string; readonly runId: string }\nexport interface AddWorkspaceRequest { readonly sessionId?: string; readonly path: string }\n\nexport interface RpcErrorValue {\n readonly code: string\n readonly message: string\n readonly details?: unknown\n}\n\nexport type RpcResult<T> =\n | { readonly ok: true; readonly value: T }\n | { readonly ok: false; readonly error: RpcErrorValue }\n\nexport function unwrapRpcResult<T>(value: unknown): T {\n if (typeof value !== 'object' || value === null || !('ok' in value)) {\n throw new Error('\u81EA\u52A8\u5316\u4E3B\u673A\u8FD4\u56DE\u4E86\u65E0\u6548\u54CD\u5E94\u3002')\n }\n const result = value as Partial<RpcResult<T>>\n if (result.ok === true && 'value' in result) return result.value as T\n if (result.ok === false && 'error' in result) {\n const error = result.error as RpcErrorValue | undefined\n throw new Error(error?.message ?? '\u81EA\u52A8\u5316\u8BF7\u6C42\u5931\u8D25\u3002')\n }\n throw new Error('\u81EA\u52A8\u5316\u4E3B\u673A\u8FD4\u56DE\u4E86\u65E0\u6548\u54CD\u5E94\u3002')\n}\n", "import type { ClientRpc } from './contracts.js'\nimport type {\n AutomationSnapshot,\n CreateAutomationInput,\n CreateRequest,\n AddWorkspaceRequest,\n MarkReadRequest,\n MutateRequest,\n RunNowRequest,\n UpdateRequest,\n} from './protocol.js'\nimport { unwrapRpcResult } from './protocol.js'\n\nconst CHANNEL = '/dsh-automation'\n\nexport function isTransportError(error: unknown): boolean {\n const message = error instanceof Error ? error.message : String(error)\n return /failed to fetch|networkerror|load failed|network request failed/i.test(message)\n}\nexport interface AutomationClientState {\n readonly phase: 'idle' | 'loading' | 'ready' | 'error'\n readonly snapshot?: AutomationSnapshot\n readonly error?: string\n readonly refreshedAt?: number\n}\n\nexport interface AutomationStateSource {\n getSnapshot(): AutomationClientState\n subscribe(listener: () => void): () => void\n}\n\nexport interface AutomationRuntime {\n readonly source: AutomationStateSource\n refresh(): Promise<void>\n createAutomation(input: CreateAutomationInput): Promise<void>\n mutateAutomation(automationId: string, mutation: MutateRequest['mutation']): Promise<void>\n updateAutomation(automationId: string, input: CreateAutomationInput): Promise<void>\n runNow(automationId: string): Promise<void>\n markRunRead(runId: string): Promise<void>\n addWorkspace(path: string): Promise<{ id: string }>\n adoptSession(sessionId: string): Promise<void>\n forgetSession(sessionId: string): Promise<void>\n forgetAutomationSessions(automationId: string): Promise<void>\n}\n\nexport function createAutomationRuntime(rpc: ClientRpc): AutomationRuntime {\n let state: AutomationClientState = { phase: 'idle' }\n let refreshPromise: Promise<void> | undefined\n const listeners = new Set<() => void>()\n const publish = (next: AutomationClientState): void => {\n state = next\n for (const listener of [...listeners]) listener()\n }\n const source: AutomationStateSource = {\n getSnapshot: () => state,\n subscribe: (listener) => {\n listeners.add(listener)\n return () => { listeners.delete(listener) }\n },\n }\n\n const refresh = async (): Promise<void> => {\n if (refreshPromise !== undefined) return refreshPromise\n const previous = state.snapshot\n publish(previous === undefined\n ? { phase: 'loading' }\n : {\n phase: 'loading',\n snapshot: previous,\n ...(state.refreshedAt === undefined ? {} : { refreshedAt: state.refreshedAt }),\n })\n refreshPromise = (async () => {\n try {\n const response = await rpc.call(CHANNEL, 'snapshot', { sessionId: 'settings' })\n const snapshot = unwrapRpcResult<AutomationSnapshot>(response)\n publish({ phase: 'ready', snapshot, refreshedAt: Date.now() })\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n publish(previous === undefined\n ? { phase: 'error', error: message }\n : {\n phase: 'error',\n snapshot: previous,\n error: message,\n ...(state.refreshedAt === undefined ? {} : { refreshedAt: state.refreshedAt }),\n })\n throw error\n } finally {\n refreshPromise = undefined\n }\n })()\n return refreshPromise\n }\n\n const callRpc = async (endpoint: string, payload: unknown): Promise<unknown> => {\n try {\n return await rpc.call(CHANNEL, endpoint, payload)\n } catch (error) {\n if (!isTransportError(error)) throw error\n return await rpc.call(CHANNEL, endpoint, payload)\n }\n }\n\n const mutateThenRefresh = async (\n endpoint: string,\n payload: unknown,\n patch?: (snapshot: AutomationSnapshot) => AutomationSnapshot,\n ): Promise<void> => {\n unwrapRpcResult<unknown>(await callRpc(endpoint, payload))\n if (patch !== undefined && state.snapshot !== undefined) {\n publish({ phase: 'ready', snapshot: patch(state.snapshot), refreshedAt: Date.now() })\n }\n const pendingBeforeRefresh = refreshPromise\n if (pendingBeforeRefresh !== undefined) await pendingBeforeRefresh.catch(() => undefined)\n try {\n await refresh()\n } catch {\n // \u53D8\u66F4\u5DF2\u7ECF\u751F\u6548\uFF1B\u5237\u65B0\u5931\u8D25\u4E0D\u5E94\u8BA9\u7528\u6237\u4EE5\u4E3A\u5220\u9664/\u66F4\u65B0\u6CA1\u6210\u529F\u3002\n }\n }\n\n return {\n source,\n refresh,\n async createAutomation(input) {\n const payload: CreateRequest = { sessionId: 'settings', input }\n await mutateThenRefresh('create', payload)\n },\n async mutateAutomation(automationId, mutation) {\n const payload: MutateRequest = { sessionId: 'settings', automationId, mutation }\n await mutateThenRefresh('mutate', payload, mutation === 'delete'\n ? (snapshot) => ({\n ...snapshot,\n automations: snapshot.automations.filter(item => item.id !== automationId),\n })\n : undefined)\n },\n async updateAutomation(automationId, input) {\n const payload: UpdateRequest = { sessionId: 'settings', automationId, input }\n await mutateThenRefresh('update', payload)\n },\n async runNow(automationId) {\n const payload: RunNowRequest = { sessionId: 'settings', automationId }\n await mutateThenRefresh('run-now', payload)\n },\n async markRunRead(runId) {\n const payload: MarkReadRequest = { sessionId: 'settings', runId }\n await mutateThenRefresh('mark-read', payload)\n },\n async adoptSession(sessionId) {\n unwrapRpcResult<unknown>(await rpc.call(CHANNEL, 'adopt-session', { sessionId }))\n },\n async forgetSession(sessionId) {\n await mutateThenRefresh('forget-session', { sessionId }, (snapshot) => ({\n ...snapshot,\n runs: snapshot.runs.map((run) => { if (run.sessionId !== sessionId) return run; const { sessionId: _ignored, ...rest } = run; return rest }),\n }))\n },\n async forgetAutomationSessions(automationId) {\n await mutateThenRefresh('forget-automation-sessions', { automationId }, (snapshot) => ({\n ...snapshot,\n runs: snapshot.runs.map((run) => { if (run.automationId !== automationId) return run; const { sessionId: _ignored, ...rest } = run; return rest }),\n }))\n },\n async addWorkspace(path) {\n const payload: AddWorkspaceRequest = { sessionId: 'settings', path }\n const value = unwrapRpcResult<{ id: string }>(await rpc.call(CHANNEL, 'add-workspace', payload))\n await refresh()\n return value\n },\n }\n}\n\r\n\r\n", "export const NS = 'dsh-automation'\n\nexport const en = {\n tab: 'Scheduled tasks',\n 'sidebar.tab': 'Scheduled',\n 'sidebar.tabs': 'Workspace views',\n 'sidebar.tasksTab': 'Tasks',\n 'sidebar.channelsTab': 'Channels',\n 'sidebar.empty': 'No scheduled runs yet.',\n 'sidebar.tasksEmpty': 'No web tasks yet.',\n 'sidebar.ungrouped': 'Ungrouped',\n 'sidebar.section': 'Scheduled',\n 'header.lead': 'Plan automatic tasks, or trigger them by hand. Describe the recurring work in any chat to create it quickly.',\n 'examples.title': 'Recommended examples',\n 'examples.1.title': 'Daily regression check',\n 'examples.1.body': 'Create a scheduled task that runs every day and inspects new test failures.',\n 'examples.1.chip': 'Every day 09:00',\n 'examples.2.title': 'Weekly dependency review',\n 'examples.2.body': 'Create a scheduled task that runs every Monday and reports outdated or risky dependencies.',\n 'examples.2.chip': 'Monday 10:00',\n 'examples.3.title': 'Weekday morning briefing',\n 'examples.3.body': 'Create a scheduled task that runs on weekdays and summarizes overnight changes.',\n 'examples.3.chip': 'Weekdays 08:00',\n 'chat.hint': 'In any conversation, describe the recurring work and ask the Agent to call automation_create.',\n 'chat.prompt': 'I want to create a scheduled task that runs every [interval] and does [the actual task]',\n 'menu.run': 'Run now',\n 'menu.delete': 'Delete task',\n 'session.rename': 'Rename',\n 'session.fork': 'Fork session',\n 'session.archive': 'Archive session',\n 'session.delete': 'Delete session',\r\n 'session.deleteFolder': 'Delete folder',\n 'history.range.day': 'By day',\n 'history.range.week': 'By week',\n 'history.range.month': 'By month',\n 'history.allTasks': 'All tasks',\n 'history.allStatus': 'All statuses',\n 'history.today': 'Today',\n 'history.yesterday': 'Yesterday',\n 'history.date': '{date}',\n 'history.week': 'Week of {date}',\n 'history.month': '{month}',\n 'history.trigger': 'Scheduled',\n 'history.nextApprox': 'Next run in about {when}',\n 'time.withinMinute': 'about {count} minutes',\n 'time.withinHour': 'about {count} hours',\n 'time.withinDay': 'about {count} days',\n 'search.placeholder': 'Search scheduled tasks...',\n 'action.chatCreate': 'Create in chat',\n 'action.create': 'New scheduled task',\n 'banner.wake': 'Scheduled tasks run only while this computer stays awake.',\n 'tabs.mine': 'My tasks',\n 'tabs.runs': 'Run history',\n 'sort.created': 'Newest first',\n 'form.workspace': 'Workspace',\n 'form.addWorkspace': 'Add workspace...',\n 'form.workspacePath': 'Folder path',\n 'form.workspacePathPlaceholder': 'D:\\\\work\\\\project',\n 'form.model': 'Model',\n 'form.modelDefault': 'Follow default model',\n 'form.effort': 'Reasoning',\n 'form.effort.none': 'Default',\n 'form.effort.low': 'Low',\n 'form.effort.medium': 'Medium',\n 'form.effort.high': 'High',\n 'form.error.workspace': 'Select a workspace.',\n 'modal.title': 'New scheduled task',\n 'modal.edit': 'Edit scheduled task',\n 'modal.save': 'Save',\n 'header.eyebrow': 'Unattended coding work',\n 'header.title': 'Automations',\n 'header.subtitle': 'Schedule standalone, auditable Agent runs for this workspace.',\n 'header.create': 'New automation',\n 'header.closeCreate': 'Hide form',\n 'scope.workspace': 'Workspace',\n 'scope.folder': 'Working directory',\n 'stats.total': 'All',\n 'stats.active': 'Active',\n 'stats.next': 'Next run',\n 'stats.attention': 'Needs attention',\n 'stats.noneScheduled': 'None scheduled',\n 'stats.noAttention': 'All clear',\n 'section.automations': 'Workspace automations',\n 'section.automationsHint': 'Each trigger starts a fresh DSH Session and keeps its own audit record.',\n 'section.runs': 'Recent runs',\n 'section.runsHint': 'Latest outcomes for this workspace.',\n 'section.refresh': 'Refresh',\n 'empty.title': 'Let recurring coding work run itself',\n 'empty.body': 'Save a self-contained task, a schedule, and a permission boundary. Every run starts in a new Session.',\n 'empty.action': 'Create the first automation',\n 'runs.empty': 'No runs yet. Run one now, or wait for the next scheduled occurrence.',\n 'form.title': 'Create automation',\n 'form.subtitle': 'Write a complete, standalone task. Scheduled runs do not inherit this conversation.',\n 'form.name': 'Name',\n 'form.namePlaceholder': 'Daily regression triage',\n 'form.prompt': 'Task prompt',\n 'form.promptPlaceholder': 'Inspect new test failures, locate the regression, and propose a verified minimal fix\u2026',\n 'form.schedule': 'Schedule',\n 'form.planTime': 'Schedule',\n 'form.hourly': 'Hourly',\n 'form.monthly': 'Monthly',\n 'form.custom': 'Custom',\n 'form.minutesShort': 'min',\n 'form.daysShort': 'days',\n 'form.monthDay': 'Day {day} of month',\n 'form.skills': 'Skills',\n 'form.skillsEmpty': 'No skills available',\n 'schedule.hourlyAt': 'Every hour at :{minute}',\n 'schedule.monthlyAt': 'Monthly on day {day} \u00B7 {time}',\n 'schedule.customAt': 'Every {count} days \u00B7 {time}',\n 'form.once': 'Does not repeat',\n 'form.interval': 'Interval',\n 'form.daily': 'Daily',\n 'form.weekly': 'Weekly',\n 'form.runAt': 'Run at',\n 'form.every': 'Every',\n 'form.minutes': 'minutes',\n 'form.time': 'Time',\n 'form.days': 'Weekdays',\n 'form.timeZone': 'Time zone',\n 'form.permission': 'Permission boundary',\n 'form.readOnly': 'Read Only',\n 'form.readOnlyHint': 'Inspect the workspace without changing files.',\n 'form.workspaceWrite': 'Workspace Write',\n 'form.fullAccess': 'Full access',\n 'form.workspaceWriteHint': 'May change files in this workspace; past approvals are not reused.',\n 'form.cancel': 'Cancel',\n 'form.submit': 'Create automation',\n 'form.submitting': 'Creating\u2026',\n 'form.error.name': 'Enter a name.',\n 'form.error.prompt': 'Enter a complete, standalone task prompt.',\n 'form.error.once': 'Choose a valid future date and time.',\n 'form.error.interval': 'The interval must be between 5 and 43,200 minutes.',\n 'form.error.weekdays': 'Select at least one weekday.',\n 'day.1': 'Mon',\n 'day.2': 'Tue',\n 'day.3': 'Wed',\n 'day.4': 'Thu',\n 'day.5': 'Fri',\n 'day.6': 'Sat',\n 'day.7': 'Sun',\n 'status.active': 'Active',\n 'status.paused': 'Paused',\n 'status.queued': 'Queued',\n 'status.running': 'Running',\n 'status.succeeded': 'Succeeded',\n 'status.failed': 'Failed',\n 'status.skipped': 'Skipped',\n 'status.cancelled': 'Cancelled',\n 'status.interrupted': 'Interrupted',\n 'card.nextRun': 'Next',\n 'card.lastRun': 'Last',\n 'card.never': 'Not yet run',\n 'card.permission.read-only': 'Read-only',\n 'card.permission.workspace-write': 'Workspace write',\n 'card.permission.full-access': 'Full access',\n 'schedule.onceAt': 'Once \u00B7 {time}',\n 'schedule.everyMinutes': 'Every {count} minutes',\n 'schedule.dailyAt': 'Daily \u00B7 {time}',\n 'schedule.weeklyAt': '{days} \u00B7 {time}',\n 'card.pause': 'Pause',\n 'card.resume': 'Resume',\n 'card.runNow': 'Run now',\n 'card.delete': 'Delete',\n 'card.confirmDelete': 'Delete this automation?',\n 'card.confirmDeleteHint': 'Run history is kept for audit.',\n 'card.confirm': 'Delete',\n 'card.cancel': 'Cancel',\n 'run.trigger.schedule': 'Scheduled',\n 'run.trigger.manual': 'Manual',\n 'run.trigger.catch-up': 'Catch-up',\n 'run.openSession': 'Session {id}',\n 'run.markRead': 'Mark reviewed',\n loading: 'Loading automations\u2026',\n 'error.title': 'Automations could not be loaded',\n 'error.retry': 'Try again',\n 'error.action': 'The action failed. Please try again.',\n 'error.offline': 'Could not reach the local automation service. Check that DSH is still running and try again.',\n 'time.now': 'now',\n 'time.minuteAgo': '{count}m ago',\n 'time.hourAgo': '{count}h ago',\n 'time.dayAgo': '{count}d ago',\n 'time.inMinute': 'in {count}m',\n 'time.inHour': 'in {count}h',\n 'time.inDay': 'in {count}d',\n} as const\n\nexport type AutomationLocaleKey = keyof typeof en\n\nexport const zh: Record<AutomationLocaleKey, string> = {\n tab: '\u5B9A\u65F6\u4EFB\u52A1',\n 'sidebar.tab': '\u5B9A\u65F6',\n 'sidebar.tabs': '\u5DE5\u4F5C\u533A\u5206\u7C7B',\n 'sidebar.tasksTab': '\u4EFB\u52A1',\n 'sidebar.channelsTab': '\u9891\u9053',\n 'sidebar.empty': '\u8FD8\u6CA1\u6709\u5B9A\u65F6\u4EFB\u52A1\u6267\u884C\u8BB0\u5F55\u3002',\n 'sidebar.tasksEmpty': '\u6682\u65E0\u7F51\u9875\u4EFB\u52A1',\n 'sidebar.ungrouped': '\u672A\u5206\u7EC4',\n 'sidebar.section': '\u5B9A\u65F6\u4EFB\u52A1',\n 'header.lead': '\u6309\u8BA1\u5212\u81EA\u52A8\u6267\u884C\u4EFB\u52A1\uFF0C\u4E5F\u53EF\u968F\u65F6\u624B\u52A8\u89E6\u53D1\u3002\u5728\u4EFB\u610F\u5BF9\u8BDD\u4E2D\u63CF\u8FF0\u4F60\u60F3\u5B9A\u671F\u505A\u7684\u4E8B\uFF0C\u5373\u53EF\u5FEB\u901F\u521B\u5EFA',\n 'examples.title': '\u63A8\u8350\u6848\u4F8B',\n 'examples.1.title': '\u6BCF\u65E5\u56DE\u5F52\u68C0\u67E5',\n 'examples.1.body': '\u6211\u8981\u521B\u5EFA\u4E00\u4E2A\u5B9A\u65F6\u4EFB\u52A1\uFF0C\u6BCF\u3010\u5929\u3011\u6267\u884C\u3010\u68C0\u67E5\u65B0\u589E\u6D4B\u8BD5\u5931\u8D25\u5E76\u7ED9\u51FA\u6700\u5C0F\u4FEE\u590D\u3011\u3002',\n 'examples.1.chip': '\u6BCF\u5929 09:00',\n 'examples.2.title': '\u6BCF\u5468\u4F9D\u8D56\u5DE1\u68C0',\n 'examples.2.body': '\u6211\u8981\u521B\u5EFA\u4E00\u4E2A\u5B9A\u65F6\u4EFB\u52A1\uFF0C\u6BCF\u3010\u5468\u4E00\u3011\u6267\u884C\u3010\u68C0\u67E5\u8FC7\u671F\u6216\u6709\u98CE\u9669\u7684\u4F9D\u8D56\u5E76\u7ED9\u51FA\u5904\u7406\u5EFA\u8BAE\u3011\u3002',\n 'examples.2.chip': '\u6BCF\u5468\u4E00 10:00',\n 'examples.3.title': '\u5DE5\u4F5C\u65E5\u65E9\u62A5',\n 'examples.3.body': '\u6211\u8981\u521B\u5EFA\u4E00\u4E2A\u5B9A\u65F6\u4EFB\u52A1\uFF0C\u6BCF\u3010\u5DE5\u4F5C\u65E5\u3011\u6267\u884C\u3010\u6C47\u603B\u6628\u591C\u4ED3\u5E93\u53D8\u66F4\u5E76\u7ED9\u51FA\u4ECA\u65E5\u5173\u6CE8\u70B9\u3011\u3002',\n 'examples.3.chip': '\u5DE5\u4F5C\u65E5 08:00',\n 'chat.hint': '\u5728\u4EFB\u610F\u5BF9\u8BDD\u4E2D\u63CF\u8FF0\u4F60\u60F3\u5B9A\u671F\u505A\u7684\u4E8B\uFF0C\u5E76\u8BA9 Agent \u8C03\u7528 automation_create\u3002',\n 'chat.prompt': '\u6211\u8981\u521B\u5EFA\u4E00\u4E2A\u5B9A\u65F6\u4EFB\u52A1\uFF0C\u6BCF\u3010\u65F6\u95F4\u95F4\u9694\u3011\u6267\u884C\u3010\u5177\u4F53\u4EFB\u52A1\u3011',\n 'menu.run': '\u7ACB\u5373\u6267\u884C',\n 'menu.delete': '\u5220\u9664\u4EFB\u52A1',\n 'session.rename': '\u91CD\u547D\u540D',\n 'session.fork': '\u5206\u53C9\u4F1A\u8BDD',\n 'session.archive': '\u5F52\u6863\u4F1A\u8BDD',\n 'session.delete': '\u5220\u9664\u4F1A\u8BDD',\r\n 'session.deleteFolder': '\u5220\u9664\u6587\u4EF6\u5939',\n 'history.range.day': '\u6309\u5929',\n 'history.range.week': '\u6309\u5468',\n 'history.range.month': '\u6309\u6708',\n 'history.allTasks': '\u5168\u90E8\u4EFB\u52A1',\n 'history.allStatus': '\u5168\u90E8\u72B6\u6001',\n 'history.today': '\u4ECA\u5929',\n 'history.yesterday': '\u6628\u5929',\n 'history.date': '{date}',\n 'history.week': '{date} \u5F53\u5468',\n 'history.month': '{month}',\n 'history.trigger': '\u5B9A\u65F6\u89E6\u53D1',\n 'history.nextApprox': '\u4E0B\u6B21\u6267\u884C \u5927\u7EA6 {when}',\n 'time.withinMinute': '{count} \u5206\u949F\u5185',\n 'time.withinHour': '{count} \u5C0F\u65F6\u5185',\n 'time.withinDay': '{count} \u5929\u5185',\n 'search.placeholder': '\u641C\u7D22\u5B9A\u65F6\u4EFB\u52A1...',\n 'action.chatCreate': '\u901A\u8FC7\u5BF9\u8BDD\u521B\u5EFA',\n 'action.create': '\u65B0\u5EFA\u5B9A\u65F6\u4EFB\u52A1',\n 'banner.wake': '\u5B9A\u65F6\u4EFB\u52A1\u4EC5\u5728\u7535\u8111\u4FDD\u6301\u5524\u9192\u65F6\u8FD0\u884C',\n 'tabs.mine': '\u6211\u7684\u5B9A\u65F6\u4EFB\u52A1',\n 'tabs.runs': '\u6267\u884C\u8BB0\u5F55',\n 'sort.created': '\u6309\u521B\u5EFA\u65F6\u95F4\u5012\u5E8F',\n 'form.workspace': '\u5DE5\u4F5C\u76EE\u5F55',\n 'form.addWorkspace': '\u6DFB\u52A0\u5DE5\u4F5C\u533A...',\n 'form.workspacePath': '\u76EE\u5F55\u8DEF\u5F84',\n 'form.workspacePathPlaceholder': 'D:\\\\work\\\\project',\n 'form.model': '\u6A21\u578B',\n 'form.modelDefault': '\u8DDF\u968F\u9ED8\u8BA4\u6A21\u578B',\n 'form.effort': '\u63A8\u7406\u7B49\u7EA7',\n 'form.effort.none': '\u9ED8\u8BA4',\n 'form.effort.low': 'Low',\n 'form.effort.medium': 'Medium',\n 'form.effort.high': 'High',\n 'form.error.workspace': '\u8BF7\u9009\u62E9\u5DE5\u4F5C\u533A\u3002',\n 'modal.title': '\u65B0\u5EFA\u5B9A\u65F6\u4EFB\u52A1',\n 'modal.edit': '\u7F16\u8F91\u5B9A\u65F6\u4EFB\u52A1',\n 'modal.save': '\u4FDD\u5B58',\n 'header.eyebrow': '\u81EA\u4E3B\u7F16\u7801\u4EFB\u52A1',\n 'header.title': '\u81EA\u52A8\u5316',\n 'header.subtitle': '\u4E3A\u5F53\u524D\u5DE5\u4F5C\u533A\u5B89\u6392\u72EC\u7ACB\u3001\u53EF\u5BA1\u8BA1\u7684 Agent \u8FD0\u884C\u3002',\n 'header.create': '\u65B0\u5EFA\u81EA\u52A8\u5316',\n 'header.closeCreate': '\u6536\u8D77\u8868\u5355',\n 'scope.workspace': '\u5DE5\u4F5C\u533A',\n 'scope.folder': '\u5DE5\u4F5C\u76EE\u5F55',\n 'stats.total': '\u5168\u90E8',\n 'stats.active': '\u5DF2\u542F\u7528',\n 'stats.next': '\u4E0B\u6B21\u8FD0\u884C',\n 'stats.attention': '\u9700\u8981\u5173\u6CE8',\n 'stats.noneScheduled': '\u6682\u65E0\u8BA1\u5212',\n 'stats.noAttention': '\u4E00\u5207\u6B63\u5E38',\n 'section.automations': '\u5DE5\u4F5C\u533A\u81EA\u52A8\u5316',\n 'section.automationsHint': '\u6BCF\u6B21\u89E6\u53D1\u90FD\u4F1A\u521B\u5EFA\u4E00\u4E2A\u5168\u65B0\u7684 DSH Session\uFF0C\u5E76\u4FDD\u7559\u72EC\u7ACB\u5BA1\u8BA1\u8BB0\u5F55\u3002',\n 'section.runs': '\u6700\u8FD1\u8FD0\u884C',\n 'section.runsHint': '\u5F53\u524D\u5DE5\u4F5C\u533A\u6700\u8FD1\u7684\u6267\u884C\u72B6\u6001\u3002',\n 'section.refresh': '\u5237\u65B0',\n 'empty.title': '\u8BA9\u91CD\u590D\u7684\u7F16\u7801\u5DE5\u4F5C\u81EA\u52A8\u8FD0\u884C',\n 'empty.body': '\u8BBE\u7F6E\u4E00\u4E2A\u76EE\u6807\u660E\u786E\u7684\u4EFB\u52A1\u3001\u8FD0\u884C\u65F6\u95F4\u548C\u6743\u9650\u8FB9\u754C\u3002\u6BCF\u6B21\u8FD0\u884C\u90FD\u4ECE\u5168\u65B0 Session \u5F00\u59CB\u3002',\n 'empty.action': '\u521B\u5EFA\u7B2C\u4E00\u4E2A\u81EA\u52A8\u5316',\n 'runs.empty': '\u8FD8\u6CA1\u6709\u8FD0\u884C\u8BB0\u5F55\u3002\u4F60\u53EF\u4EE5\u7ACB\u5373\u8FD0\u884C\u4E00\u6B21\uFF0C\u6216\u7B49\u5F85\u8BA1\u5212\u89E6\u53D1\u3002',\n 'form.title': '\u521B\u5EFA\u81EA\u52A8\u5316',\n 'form.subtitle': '\u8BF7\u5199\u5B8C\u6574\u3001\u72EC\u7ACB\u7684\u4EFB\u52A1\u8BF4\u660E\uFF1A\u5B9A\u65F6\u8FD0\u884C\u4E0D\u4F1A\u7EE7\u627F\u5F53\u524D\u5BF9\u8BDD\u3002',\n 'form.name': '\u540D\u79F0',\n 'form.namePlaceholder': '\u6BCF\u65E5\u56DE\u5F52\u6D4B\u8BD5\u5206\u8BCA',\n 'form.prompt': '\u4EFB\u52A1\u6307\u4EE4',\n 'form.promptPlaceholder': '\u68C0\u67E5\u65B0\u589E\u6D4B\u8BD5\u5931\u8D25\uFF0C\u5B9A\u4F4D\u56DE\u5F52\u539F\u56E0\uFF0C\u5E76\u7ED9\u51FA\u7ECF\u8FC7\u9A8C\u8BC1\u7684\u6700\u5C0F\u4FEE\u590D\u65B9\u6848\u2026\u2026',\n 'form.schedule': '\u8FD0\u884C\u8BA1\u5212',\n 'form.planTime': '\u8BA1\u5212\u65F6\u95F4',\n 'form.hourly': '\u6BCF\u5C0F\u65F6',\n 'form.monthly': '\u6BCF\u6708',\n 'form.custom': '\u81EA\u5B9A\u4E49',\n 'form.minutesShort': '\u5206',\n 'form.daysShort': '\u5929',\n 'form.monthDay': '\u6BCF\u6708\u7B2C {day} \u5929',\n 'form.skills': '\u6280\u80FD',\n 'form.skillsEmpty': '\u6682\u65E0\u53EF\u7528\u6280\u80FD',\n 'schedule.hourlyAt': '\u6BCF\u5C0F\u65F6 :{minute}',\n 'schedule.monthlyAt': '\u6BCF\u6708 {day} \u65E5 \u00B7 {time}',\n 'schedule.customAt': '\u6BCF {count} \u5929 \u00B7 {time}',\n 'form.once': '\u4E0D\u91CD\u590D',\n 'form.interval': '\u95F4\u9694',\n 'form.daily': '\u6BCF\u5929',\n 'form.weekly': '\u6BCF\u5468',\n 'form.runAt': '\u8FD0\u884C\u65F6\u95F4',\n 'form.every': '\u6BCF\u9694',\n 'form.minutes': '\u5206\u949F',\n 'form.time': '\u65F6\u95F4',\n 'form.days': '\u661F\u671F',\n 'form.timeZone': '\u65F6\u533A',\n 'form.permission': '\u6743\u9650\u8FB9\u754C',\n 'form.readOnly': 'Read Only',\n 'form.readOnlyHint': '\u53EF\u4EE5\u68C0\u67E5\u5DE5\u4F5C\u533A\uFF0C\u4F46\u4E0D\u4F1A\u4FEE\u6539\u6587\u4EF6\u3002',\n 'form.workspaceWrite': 'Workspace Write',\n 'form.fullAccess': 'Full access',\n 'form.workspaceWriteHint': '\u53EF\u4EE5\u4FEE\u6539\u5F53\u524D\u5DE5\u4F5C\u533A\u6587\u4EF6\uFF1B\u4E0D\u4F1A\u7EE7\u627F\u5386\u53F2\u6279\u51C6\u3002',\n 'form.cancel': '\u53D6\u6D88',\n 'form.submit': '\u521B\u5EFA\u81EA\u52A8\u5316',\n 'form.submitting': '\u521B\u5EFA\u4E2D\u2026',\n 'form.error.name': '\u8BF7\u8F93\u5165\u540D\u79F0\u3002',\n 'form.error.prompt': '\u8BF7\u8F93\u5165\u5B8C\u6574\u3001\u72EC\u7ACB\u7684\u4EFB\u52A1\u6307\u4EE4\u3002',\n 'form.error.once': '\u8BF7\u9009\u62E9\u6709\u6548\u7684\u672A\u6765\u65E5\u671F\u548C\u65F6\u95F4\u3002',\n 'form.error.interval': '\u8FD0\u884C\u95F4\u9694\u5FC5\u987B\u5728 5 \u5230 43,200 \u5206\u949F\u4E4B\u95F4\u3002',\n 'form.error.weekdays': '\u8BF7\u81F3\u5C11\u9009\u62E9\u4E00\u5929\u3002',\n 'day.1': '\u5468\u4E00',\n 'day.2': '\u5468\u4E8C',\n 'day.3': '\u5468\u4E09',\n 'day.4': '\u5468\u56DB',\n 'day.5': '\u5468\u4E94',\n 'day.6': '\u5468\u516D',\n 'day.7': '\u5468\u65E5',\n 'status.active': '\u5DF2\u542F\u7528',\n 'status.paused': '\u5DF2\u6682\u505C',\n 'status.queued': '\u6392\u961F\u4E2D',\n 'status.running': '\u8FD0\u884C\u4E2D',\n 'status.succeeded': '\u5DF2\u5B8C\u6210',\n 'status.failed': '\u5931\u8D25',\n 'status.skipped': '\u5DF2\u8DF3\u8FC7',\n 'status.cancelled': '\u5DF2\u53D6\u6D88',\n 'status.interrupted': '\u5DF2\u4E2D\u65AD',\n 'card.nextRun': '\u4E0B\u6B21',\n 'card.lastRun': '\u6700\u8FD1',\n 'card.never': '\u5C1A\u672A\u8FD0\u884C',\n 'card.permission.read-only': '\u53EA\u8BFB',\n 'card.permission.workspace-write': '\u53EF\u5199\u5DE5\u4F5C\u533A',\n 'card.permission.full-access': 'Full access',\n 'schedule.onceAt': '\u5355\u6B21 \u00B7 {time}',\n 'schedule.everyMinutes': '\u6BCF {count} \u5206\u949F',\n 'schedule.dailyAt': '\u6BCF\u5929 \u00B7 {time}',\n 'schedule.weeklyAt': '{days} \u00B7 {time}',\n 'card.pause': '\u6682\u505C',\n 'card.resume': '\u6062\u590D',\n 'card.runNow': '\u7ACB\u5373\u8FD0\u884C',\n 'card.delete': '\u5220\u9664',\n 'card.confirmDelete': '\u786E\u8BA4\u5220\u9664\u8FD9\u4E2A\u81EA\u52A8\u5316\uFF1F',\n 'card.confirmDeleteHint': '\u8FD0\u884C\u5386\u53F2\u4F1A\u4FDD\u7559\u7528\u4E8E\u5BA1\u8BA1\u3002',\n 'card.confirm': '\u786E\u8BA4\u5220\u9664',\n 'card.cancel': '\u53D6\u6D88',\n 'run.trigger.schedule': '\u5B9A\u65F6',\n 'run.trigger.manual': '\u624B\u52A8',\n 'run.trigger.catch-up': '\u8865\u507F\u8FD0\u884C',\n 'run.openSession': 'Session {id}',\n 'run.markRead': '\u6807\u8BB0\u5DF2\u5904\u7406',\n loading: '\u6B63\u5728\u52A0\u8F7D\u81EA\u52A8\u5316\u2026',\n 'error.title': '\u65E0\u6CD5\u52A0\u8F7D\u81EA\u52A8\u5316',\n 'error.retry': '\u91CD\u8BD5',\n 'error.action': '\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002',\n 'error.offline': '\u65E0\u6CD5\u8FDE\u63A5\u672C\u673A\u81EA\u52A8\u5316\u670D\u52A1\uFF0C\u8BF7\u786E\u8BA4 DSH \u4ECD\u5728\u8FD0\u884C\u540E\u91CD\u8BD5\u3002',\n 'time.now': '\u521A\u521A',\n 'time.minuteAgo': '{count} \u5206\u949F\u524D',\n 'time.hourAgo': '{count} \u5C0F\u65F6\u524D',\n 'time.dayAgo': '{count} \u5929\u524D',\n 'time.inMinute': '{count} \u5206\u949F\u540E',\n 'time.inHour': '{count} \u5C0F\u65F6\u540E',\n 'time.inDay': '{count} \u5929\u540E',\n}\n\r\n", "/** \u539F\u751F\u4FA7\u680F\u9875\u7B7E\u534F\u4F5C\u534F\u8BAE\u3002\u4E24\u5957\u63D2\u4EF6\u5404\u81EA\u590D\u5236\u8FD9\u4EFD\u7EA6\u5B9A\uFF0C\u4E0D\u4E92\u76F8 import\u3002 */\n\nexport const NATIVE_TABS_KEY = '__dshNativeTabs'\n\nexport interface NativeSidebarTab {\n readonly id: string\n readonly label: string\n readonly order?: number\n matchSession?(sessionId: string): boolean\n render(props: Record<string, unknown>): unknown\n}\n\nexport interface NativeTabRegistry {\n readonly version: 1\n officialTree: unknown\n readonly sessionFilters: Array<(id: string) => boolean>\n getTabs(): NativeSidebarTab[]\n subscribe(listener: () => void): () => void\n insert(tab: NativeSidebarTab): () => void\n addSessionFilter(filter: (id: string) => boolean): () => void\n}\n\nexport function createNativeTabRegistry(officialTree: unknown): NativeTabRegistry {\n const tabs = new Map<string, NativeSidebarTab>()\n const sessionFilters: Array<(id: string) => boolean> = []\n const listeners = new Set<() => void>()\n let cachedTabs: NativeSidebarTab[] = []\n const rebuild = (): void => {\n cachedTabs = [...tabs.values()].sort((left, right) => (left.order ?? 0) - (right.order ?? 0))\n }\n const emit = (): void => { for (const listener of listeners) listener() }\n return {\n version: 1,\n officialTree,\n sessionFilters,\n getTabs() {\n return cachedTabs\n },\n subscribe(listener: () => void) {\n listeners.add(listener)\n return () => { listeners.delete(listener) }\n },\n insert(tab: NativeSidebarTab) {\n if (tab.id === '') return () => undefined\n const existed = tabs.get(tab.id)\n tabs.set(tab.id, tab)\n if (existed !== tab) {\n rebuild()\n emit()\n }\n return () => { tabs.delete(tab.id); rebuild(); emit() }\n },\n addSessionFilter(filter: (id: string) => boolean) {\n sessionFilters.push(filter)\n emit()\n return () => {\n const index = sessionFilters.indexOf(filter)\n if (index >= 0) sessionFilters.splice(index, 1)\n emit()\n }\n },\n }\n}\n\nexport function getNativeTabRegistry(target: unknown): NativeTabRegistry | undefined {\n if (target === undefined || target === null || (typeof target !== 'object' && typeof target !== 'function')) return undefined\n const registry = (target as Record<string, unknown>)[NATIVE_TABS_KEY]\n if (registry === undefined || registry === null || typeof registry !== 'object') return undefined\n return typeof (registry as NativeTabRegistry).insert === 'function' ? registry as NativeTabRegistry : undefined\n}\n\nexport function attachNativeTabRegistry<T>(target: T, registry: NativeTabRegistry): NativeTabRegistry {\n try { (target as Record<string, unknown>)[NATIVE_TABS_KEY] = registry } catch { /* ignore */ }\n return registry\n}\n\nexport function findNativeTabRegistry(entry: unknown): NativeTabRegistry | undefined {\n const record = entry as { component?: unknown } | undefined\n return getNativeTabRegistry(entry) ?? getNativeTabRegistry(record?.component)\n}\n\nexport function isForeignSidebarHost(component: unknown): boolean {\n if (component === undefined || component === null) return false\n const flags = component as { __dshNativeTabHost?: unknown; __imConnectWrapped?: unknown }\n if (flags.__dshNativeTabHost === true) return true\n if (flags.__imConnectWrapped === true) return true\n return getNativeTabRegistry(component) !== undefined\n}\n", "import { useEffect, useMemo, useState, useSyncExternalStore } from 'react'\nimport type { Translate } from './contracts.js'\nimport {\n ArchiveIcon,\n BranchIcon,\n ChevronIcon,\n EllipsisIcon,\n FolderClosedIcon,\n FolderOpenIcon,\n PencilIcon,\n RunningStateDot,\n TrashIcon,\n} from './icons.js'\nimport type { AutomationRuntime } from './runtime.js'\nimport { formatRunStamp, groupScheduledSessions, type NativeSessionLike } from './schedule-rail-model.js'\r\n\r\nconst EMPTY_SESSION_BY_ID: Record<string, NativeSessionLike> = {}\r\n\r\nexport function relativeTime(value: string): string {\n const ts = Date.parse(value || '')\n if (!Number.isFinite(ts)) return ''\n const delta = Math.max(0, Date.now() - ts)\n const min = Math.floor(delta / 60000)\n if (min < 1) return '\u521A\u521A'\n if (min < 60) return String(min) + '\u5206\u949F'\n const hour = Math.floor(min / 60)\n if (hour < 24) return String(hour) + '\u5C0F\u65F6'\n return String(Math.floor(hour / 24)) + '\u5929'\n}\n\nexport function NativeScheduleSessionList(props: {\n readonly t: Translate\n readonly runtime: AutomationRuntime\n readonly openSession?: (sessionId: string) => void\n readonly useSessions?: (select: (state: any) => any) => any\n readonly useWorkspaces?: (select: (state: any) => any) => any\n readonly renameSession?: (sessionId: string, title: string) => void | Promise<void>\n readonly archiveSession?: (sessionId: string) => void | Promise<void>\n readonly deleteSession?: (sessionId: string) => void | Promise<void>\n readonly forkSession?: (sessionId: string) => void | Promise<void>\n}): JSX.Element {\n const { t, runtime, openSession, useSessions, useWorkspaces, renameSession, archiveSession, deleteSession, forkSession } = props\n const state = useSyncExternalStore(runtime.source.subscribe, runtime.source.getSnapshot, runtime.source.getSnapshot)\n const selectedId = useSessions ? useSessions((snap: { current?: string | null }) => snap?.current ?? null) : null\n const sessionById: Record<string, NativeSessionLike> = useSessions\n ? useSessions((snap: { byId?: Record<string, NativeSessionLike> }) => snap?.byId ?? EMPTY_SESSION_BY_ID)\n : EMPTY_SESSION_BY_ID\n const archivedIds: string[] = useWorkspaces ? useWorkspaces((snap: { archivedSessionIds?: string[] }) => snap?.archivedSessionIds ?? []) : []\n const [folded, setFolded] = useState<Record<string, boolean>>({})\n useEffect(() => {\n void runtime.refresh().catch(() => undefined)\n const timer = window.setInterval(() => { void runtime.refresh().catch(() => undefined) }, 15_000)\n return () => { window.clearInterval(timer) }\n }, [runtime])\n const archived = useMemo(() => new Set(archivedIds), [archivedIds])\n const groups = useMemo(() => {\n const snapshot = state.snapshot\n if (snapshot === undefined) return []\n return groupScheduledSessions(snapshot.automations, snapshot.runs).map((group) => ({\n ...group,\n sessions: group.sessions.filter((session) => !archived.has(session.id)).map((session) => {\n const run = snapshot.runs.find((item) => item.sessionId === session.id)\n return {\n ...session,\n title: formatRunStamp((run && (run.startedAt || run.scheduledFor)) || ''),\r\n updatedAt: (run && (run.startedAt || run.scheduledFor)) || '',\r\n running: session.running || sessionById[session.id]?.running === true,\n }\n }),\n })).filter((group) => group.sessions.length > 0)\n }, [archived, sessionById, state.snapshot])\n return (\n <div className='dsh-st-n'>\n <div className='dsh-st-n-tree' role='tree'>\n {state.phase === 'loading' && groups.length === 0 && <div className='dsh-st-n-empty'>{t('loading')}</div>}\n {groups.length === 0 && state.phase !== 'loading' && <div className='dsh-st-n-empty'>{t('sidebar.empty')}</div>}\n {groups.map((group) => {\n const expanded = folded[group.id] !== true\n return (\n <div key={group.id} className='dsh-st-n-group'>\n <div className='dsh-st-n-row' role='treeitem' aria-expanded={expanded} onClick={() => setFolded((current) => ({ ...current, [group.id]: expanded }))}>\n <span className='dsh-st-n-slot dsh-st-n-folder'>{expanded ? <FolderOpenIcon width={16} height={16} /> : <FolderClosedIcon width={16} height={16} />}</span>\n <span className='dsh-st-n-slot dsh-st-n-chevron'><span className={expanded ? 'dsh-st-n-arrow is-open' : 'dsh-st-n-arrow'}><ChevronIcon width={14} height={14} /></span></span>\n <span className='dsh-st-n-title'>{group.name}</span>\n <span className='dsh-st-n-acts'>\n <button\n type='button'\n className='dsh-st-n-ico'\n aria-label={t('session.deleteFolder')}\n onClick={(event) => {\n event.stopPropagation()\n void (async () => {\n for (const session of group.sessions) {\n try { await deleteSession?.(session.id) } catch { /* ignore */ }\n }\n await runtime.forgetAutomationSessions(group.id)\n })()\n }}\n >\n <TrashIcon width={16} height={16} />\n </button>\n </span>\n </div>\n {expanded && group.sessions.map((session) => (\n <NativeSessionRow\n key={session.id}\n t={t}\n id={session.id}\n title={session.title}\n updatedAt={session.updatedAt}\n running={session.running}\n selected={selectedId === session.id}\n onOpen={() => {\n openSession?.(session.id)\n void runtime.adoptSession?.(session.id).catch(() => undefined)\n }}\n onDelete={async () => {\n try { await deleteSession?.(session.id) } catch { /* \u5BBF\u4E3B\u53EF\u80FD\u62D2\u7EDD\uFF0C\u4FA7\u680F\u4ECD\u6458\u6389 */ }\n await runtime.forgetSession(session.id)\n }}\n {...(renameSession === undefined ? {} : { renameSession })}\n {...(archiveSession === undefined ? {} : { archiveSession })}\n {...(forkSession === undefined ? {} : { forkSession })}\n />\n ))}\n </div>\n )\n })}\n </div>\n </div>\n )\n}\n\nfunction NativeSessionRow(props: {\n readonly t: Translate\n readonly id: string\n readonly title: string\n readonly updatedAt: string\n readonly running: boolean\n readonly selected: boolean\n readonly onOpen: () => void\n readonly onDelete: () => void | Promise<void>\n readonly renameSession?: (sessionId: string, title: string) => void | Promise<void>\n readonly archiveSession?: (sessionId: string) => void | Promise<void>\n readonly forkSession?: (sessionId: string) => void | Promise<void>\n}): JSX.Element {\n const { t, id, title, updatedAt, running, selected, onOpen, onDelete, renameSession, archiveSession, forkSession } = props\n const [menu, setMenu] = useState(false)\n const [renaming, setRenaming] = useState(false)\n const [draft, setDraft] = useState(title)\n useEffect(() => { setDraft(title) }, [title])\n useEffect(() => {\n if (!menu) return\n const close = (event: MouseEvent): void => {\n const target = event.target as Node | null\n if (target !== null && (event.target as HTMLElement).closest('.dsh-st-n-sess.is-menu') !== null) return\n setMenu(false)\n }\n document.addEventListener('mousedown', close)\n return () => { document.removeEventListener('mousedown', close) }\n }, [menu])\n const run = (action: () => void | Promise<void>): void => { void Promise.resolve(action()).catch(() => undefined) }\n const rowClass = 'dsh-st-n-sess' + (selected ? ' is-on' : '') + (menu ? ' is-menu' : '')\n if (renaming) {\n return (\n <div className={rowClass}>\n <input className='dsh-st-n-rename' value={draft} autoFocus aria-label={t('session.rename')} onChange={(event) => setDraft(event.target.value)} onClick={(event) => event.stopPropagation()} onKeyDown={(event) => {\n if (event.key === 'Enter') { event.preventDefault(); setRenaming(false); if (draft.trim() !== '' && draft.trim() !== title) run(() => renameSession?.(id, draft.trim())) }\n if (event.key === 'Escape') { event.preventDefault(); setRenaming(false); setDraft(title) }\n }} onBlur={() => { setRenaming(false); if (draft.trim() !== '' && draft.trim() !== title) run(() => renameSession?.(id, draft.trim())) }} />\n </div>\n )\n }\n const menuItems = [\n { id: 'rename', label: t('session.rename'), icon: <PencilIcon width={16} height={16} />, go: () => { setRenaming(true) } },\n { id: 'fork', label: t('session.fork'), icon: <BranchIcon width={16} height={16} />, go: () => run(() => forkSession?.(id)) },\n { id: 'archive', label: t('session.archive'), icon: <ArchiveIcon width={16} height={16} />, go: () => run(() => archiveSession?.(id)) },\n { id: 'delete', label: t('session.delete'), icon: <TrashIcon width={16} height={16} />, danger: true, go: () => run(() => onDelete()) },\n ]\n return (\n <div className={rowClass} role='treeitem' tabIndex={0} aria-selected={selected} onClick={onOpen} onKeyDown={(event) => { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); onOpen() } }} onContextMenu={(event) => { event.preventDefault(); event.stopPropagation(); setMenu((open) => !open) }}>\n <span className='dsh-st-n-slot'>{running ? <RunningStateDot /> : null}</span>\n <span className='dsh-st-n-title'>{title}</span>\n <span className='dsh-st-n-time'>{relativeTime(updatedAt)}</span>\n <span className='dsh-st-n-acts'>\n <button type='button' className='dsh-st-n-ico' aria-label={title + ' \u66F4\u591A'} onClick={(event) => { event.stopPropagation(); setMenu((open) => !open) }}>\n <EllipsisIcon width={16} height={16} />\n </button>\n </span>\n {menu && (\n <div className='dsh-st-n-menu' onClick={(event) => event.stopPropagation()}>\n {menuItems.map((item) => (\n <button key={item.id} type='button' className={item.danger === true ? 'danger' : undefined} onClick={() => { setMenu(false); item.go() }}>\n <span className='dsh-st-n-mi'>{item.icon}</span>{item.label}\n </button>\n ))}\n </div>\n )}\n </div>\n )\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n", "/** \u5B9A\u65F6\u6267\u884C Session \u7684\u5C55\u793A\u6807\u9898\uFF0CHost \u4E0E\u4FA7\u680F\u5171\u7528\u3002 */\n\nexport function formatRunStamp(iso: string): string {\n const value = new Date(iso)\n if (Number.isNaN(value.getTime())) return iso\n const date = `${value.getFullYear()}-${String(value.getMonth() + 1).padStart(2, '0')}-${String(value.getDate()).padStart(2, '0')}`\n const time = `${String(value.getHours()).padStart(2, '0')}:${String(value.getMinutes()).padStart(2, '0')}`\n return `${date} ${time}`\n}\n\nexport function automationSessionTitle(taskName: string, iso: string): string {\n return `${formatRunStamp(iso)} - ${taskName}`\n}\n", "/** \u4FA7\u680F\u5B9A\u65F6\u6811\u4E0E\u539F\u751F\u4EFB\u52A1\u5217\u8868\u7684\u7EAF\u51FD\u6570\uFF0C\u4F9B\u7EC4\u4EF6\u548C\u5355\u6D4B\u5171\u7528\u3002 */\n\nexport const AUTOMATION_SESSION_PREFIX = 'dsh-automation-session-'\nexport const NATIVE_SIDEBAR_TAB_KEY = 'dsh-automation.sidebar-tab'\n\nexport interface ScheduleRailSession {\n readonly id: string\n readonly running: boolean\n readonly label: string\n}\n\nexport interface ScheduleRailGroup {\n readonly id: string\n readonly name: string\n readonly sessions: readonly ScheduleRailSession[]\n}\n\nexport interface ScheduleRunLike {\n readonly automationId: string\n readonly automationName?: string\n readonly sessionId?: string\n readonly status: string\n readonly startedAt?: string\n readonly scheduledFor: string\n}\n\nexport interface NativeSessionLike {\n readonly id?: string\n readonly title?: string\n readonly blank?: boolean\n readonly origin?: string\n readonly updatedAt?: number | string\n readonly running?: boolean\n}\n\nexport interface NativeWorkspaceLike {\n readonly id?: string\n readonly workspaceId?: string\n readonly title?: string\n readonly path?: string\n readonly sessionIds?: readonly string[]\n}\n\nexport type NativeSidebarTab = 'tasks' | 'channels' | 'schedule'\n\nexport { formatRunStamp } from '../run-title.js'\nimport { formatRunStamp } from '../run-title.js'\n\n/** \u5B9A\u65F6\u4F1A\u8BDD\u6807\u9898\u590D\u523B\u4EFB\u52A1\u6811\uFF1A\u4F18\u5148\u7528 Session \u771F\u5B9E\u6807\u9898\uFF0C\u6CA1\u6709\u518D\u7528\u6267\u884C\u65F6\u95F4\u515C\u5E95\u3002 */\nexport function scheduledSessionTitle(liveTitle: string | undefined, fallbackLabel: string): string {\n const title = liveTitle?.trim() ?? ''\n return title !== '' ? title : fallbackLabel\n}\n\nexport function sessionUpdatedAtIso(value: number | string | undefined, fallback: string): string {\n if (typeof value === 'number' && Number.isFinite(value)) return new Date(value).toISOString()\n if (typeof value === 'string' && value.trim() !== '') return value\n return fallback\n}\n\nexport function groupScheduledSessions(\n automations: readonly { readonly id: string; readonly name: string }[],\n runs: readonly ScheduleRunLike[],\n): ScheduleRailGroup[] {\n const nameById = new Map<string, string>()\n for (const item of automations) nameById.set(item.id, item.name)\n for (const run of runs) {\n const stored = (run.automationName || '').trim()\n if (stored !== '' && stored !== run.automationId && !nameById.has(run.automationId)) {\n nameById.set(run.automationId, stored)\n }\n }\n const ids: string[] = []\n const seen = new Set<string>()\n for (const item of automations) {\n if (seen.has(item.id)) continue\n ids.push(item.id)\n seen.add(item.id)\n }\n for (const run of runs) {\n if (run.sessionId === undefined || run.sessionId === '' || seen.has(run.automationId)) continue\n ids.push(run.automationId)\n seen.add(run.automationId)\n }\n return ids.map((id) => {\n const name = nameById.get(id) ?? id\n return {\n id,\n name,\n sessions: runs\n .filter(run => run.automationId === id && run.sessionId !== undefined && run.sessionId !== '')\n .slice()\n .sort((left, right) => Date.parse(right.startedAt ?? right.scheduledFor) - Date.parse(left.startedAt ?? left.scheduledFor))\n .map(run => ({\n id: run.sessionId as string,\n running: run.status === 'running' || run.status === 'queued',\n label: formatRunStamp(run.startedAt ?? run.scheduledFor) + ' - ' + name,\n })),\n }\n }).filter(group => group.sessions.length > 0)\n}\n\nexport function isNativeTaskSession(item: NativeSessionLike | undefined): boolean {\n if (item === undefined || item.blank === true) return false\n if (item.origin === 'im' || item.origin === 'subagent') return false\n const id = item.id ?? ''\n if (id.startsWith('im:')) return false\n if (id.startsWith(AUTOMATION_SESSION_PREFIX)) return false\n return true\n}\n\nexport function groupNativeTaskSessions(\n sessions: { readonly ids?: readonly string[]; readonly byId?: Record<string, NativeSessionLike> },\n workspaces: { readonly items?: readonly NativeWorkspaceLike[]; readonly archivedSessionIds?: readonly string[] } | undefined,\n ungroupedLabel: string,\n): { readonly id: string; readonly label: string; readonly sessions: readonly NativeSessionLike[] }[] {\n const byId = sessions.byId ?? {}\n const archived = new Set(workspaces?.archivedSessionIds ?? [])\n const assigned = new Set<string>()\n const groups: { id: string; label: string; sessions: NativeSessionLike[] }[] = []\n for (const workspace of workspaces?.items ?? []) {\n const items = (workspace.sessionIds ?? [])\n .map(id => byId[id])\n .filter((item): item is NativeSessionLike => item !== undefined && item.id !== undefined && isNativeTaskSession(item) && !archived.has(item.id))\n for (const item of items) {\n if (item.id !== undefined) assigned.add(item.id)\n }\n if (items.length > 0) {\n groups.push({\n id: workspace.workspaceId ?? workspace.id ?? workspace.path ?? workspace.title ?? 'workspace',\n label: workspace.title || workspace.path || ungroupedLabel,\n sessions: items,\n })\n }\n }\n const ungrouped = (sessions.ids ?? [])\n .map(id => byId[id])\n .filter((item): item is NativeSessionLike => item !== undefined && item.id !== undefined && !assigned.has(item.id) && isNativeTaskSession(item) && !archived.has(item.id))\n if (ungrouped.length > 0) groups.push({ id: '', label: ungroupedLabel, sessions: ungrouped })\n return groups\n}\n\nexport function readNativeSidebarTab(raw: string | null): NativeSidebarTab {\n if (raw === 'channels' || raw === 'schedule' || raw === 'tasks') return raw\n return 'tasks'\n}\n\nexport function tabForSessionId(sessionId: string | null | undefined): NativeSidebarTab | undefined {\n if (sessionId === undefined || sessionId === null || sessionId === '') return undefined\n if (sessionId.startsWith(AUTOMATION_SESSION_PREFIX)) return 'schedule'\n if (sessionId.startsWith('im:')) return 'channels'\n return undefined\n}\n\nexport function occupantLooksLikeCodexUi(value: unknown): boolean {\n return /dsh-codex-ui|michengai-codex-ui|michengai\\.codexUi|codex-ui/i.test(String(value ?? ''))\n}\n\nexport function slotOccupantName(item: unknown): string {\n const record = item as {\n options?: { locale?: unknown; id?: unknown; name?: unknown; registrant?: unknown }\n component?: { displayName?: unknown; name?: unknown }\n id?: unknown\n name?: unknown\n } | undefined\n return String(\n record?.options?.locale\n ?? record?.options?.id\n ?? record?.options?.name\n ?? record?.options?.registrant\n ?? record?.component?.displayName\n ?? record?.component?.name\n ?? record?.id\n ?? record?.name\n ?? '',\n )\n}\n\nexport function hasCodexUiSidebar(entries: readonly unknown[] | undefined): boolean {\n return (entries ?? []).some(item => occupantLooksLikeCodexUi(slotOccupantName(item)))\n}\r\n\nexport interface SessionListState {\n readonly ids?: readonly string[]\n readonly byId?: Record<string, NativeSessionLike>\n readonly current?: string | null\n}\n\nexport function filterTaskSessionState<T extends SessionListState>(state: T | undefined): T {\n const src = (state ?? { ids: [], byId: {}, current: null }) as T\n const ids = (src.ids ?? []).filter((id) => {\n const value = String(id)\n return !value.startsWith(AUTOMATION_SESSION_PREFIX) && !value.startsWith('im:')\n })\n const byId: Record<string, NativeSessionLike> = {}\n for (const id of ids) {\n const item = src.byId?.[id]\n if (item !== undefined) byId[id] = item\n }\n return { ...src, ids, byId }\n}\n\nexport interface WorkspaceListState {\n readonly items?: readonly NativeWorkspaceLike[]\n readonly archivedSessionIds?: readonly string[]\n}\n\nexport function openScheduledSession(\n id: string,\n openRuntime?: (sessionId: string) => void,\n openHost?: (sessionId: string) => void,\n): void {\n if (id === '') return\n const attempts = id.startsWith(AUTOMATION_SESSION_PREFIX) || id.startsWith('im:')\n ? [openRuntime, openHost]\n : [openHost, openRuntime]\n for (const attempt of attempts) {\n if (typeof attempt !== 'function') continue\n try {\n attempt(id)\n return\n } catch {\n // \u5217\u8868\u91CC\u6709\u3001\u5BBF\u4E3B\u4F1A\u8BDD\u7C3F\u8FD8\u6CA1\u6536\u5F55\u65F6\uFF0C\u6362\u4E0B\u4E00\u4E2A\u6253\u5F00\u5165\u53E3\u3002\n }\n }\n}\n\nexport function isHiddenSidebarSessionId(id: string): boolean {\n return id.startsWith(AUTOMATION_SESSION_PREFIX) || id.startsWith('im:')\n}\n\nexport function filterWorkspaceListState<T extends WorkspaceListState>(state: T | undefined): T {\n const src = (state ?? { items: [], archivedSessionIds: [] }) as T\n const items = (src.items ?? []).map((workspace) => ({\n ...workspace,\n sessionIds: (workspace.sessionIds ?? []).filter(sid => !isHiddenSidebarSessionId(String(sid))),\n }))\n return { ...src, items }\n}\n\nexport type WrapperFlags = {\n __dshAutomationWrapped?: unknown\n __dshAutomationOriginal?: unknown\n __imConnectWrapped?: unknown\n __imConnectOriginal?: unknown\n}\n\nexport function wrapperFlags(component: unknown): WrapperFlags {\n if (component === undefined || component === null || (typeof component !== 'function' && typeof component !== 'object')) return {}\n return component as WrapperFlags\n}\n\nexport function isOwnAutomationWrapper(component: unknown): boolean {\n return wrapperFlags(component).__dshAutomationWrapped === true\n}\n\nexport function isMarkedWorkspaceWrapper(component: unknown): boolean {\n const flags = wrapperFlags(component)\n return flags.__dshAutomationWrapped === true\n || flags.__dshAutomationOriginal !== undefined\n || flags.__imConnectWrapped === true\n || flags.__imConnectOriginal !== undefined\n}\n\nexport function resolveOfficialTreeComponent(component: unknown): unknown {\n const seen = new Set<unknown>()\n let current = component\n while (current !== undefined && current !== null && !seen.has(current)) {\n seen.add(current)\n const flags = wrapperFlags(current)\n const next = flags.__dshAutomationOriginal ?? flags.__imConnectOriginal\n if (next !== undefined && next !== current) {\n current = next\n continue\n }\n if (flags.__dshAutomationWrapped === true || flags.__imConnectWrapped === true) return undefined\n return current\n }\n return undefined\n}\n\nexport function isAutomationWorkspaceWrapper(item: unknown): boolean {\n const record = item as { options?: { id?: unknown }; component?: { displayName?: unknown; name?: unknown } }\n const id = String(record?.options?.id ?? '')\n const name = String(record?.component?.displayName ?? record?.component?.name ?? '')\n return id === 'dsh-automation-native-switcher'\n || id === 'dsh-automation-wrap-bump'\n || name === 'AutomationNativeWorkspaceShell'\n || name === 'AutomationWrapBump'\n || isOwnAutomationWrapper(record?.component)\n}\n\nexport function pickWrappableWorkspacesEntry(entries: readonly unknown[]): unknown {\n for (const item of entries) {\n const record = item as { component?: unknown }\n if (record?.component === undefined) continue\n if (isAutomationWorkspaceWrapper(item)) continue\n return item\n }\n return undefined\n}\n\r\n\r\n\r\n", "import { Component, createElement, useCallback, useEffect, useMemo, useState, useSyncExternalStore, type ComponentType, type ReactNode } from 'react'\nimport type { Translate } from './contracts.js'\nimport { ClockIcon, RunningStateDot } from './icons.js'\nimport type { AutomationRuntime } from './runtime.js'\nimport {\n filterTaskSessionState,\n filterWorkspaceListState,\n groupNativeTaskSessions,\n groupScheduledSessions,\n NATIVE_SIDEBAR_TAB_KEY,\n readNativeSidebarTab,\n tabForSessionId,\n type NativeSessionLike,\n type NativeSidebarTab,\n type NativeWorkspaceLike,\n} from './schedule-rail-model.js'\nimport type { NativeSidebarTab as ExtraSidebarTab, NativeTabRegistry } from './native-tabs.js'\n\nconst EMPTY_EXTRA_TABS: ExtraSidebarTab[] = []\n\ntype SessionSelector = <S>(select: (state: {\n ids?: string[]\n byId?: Record<string, NativeSessionLike>\n current?: string | null\n}) => S) => S\n\ntype WorkspaceSelector = <S>(select: (state: {\n items?: NativeWorkspaceLike[]\n archivedSessionIds?: string[]\n}) => S) => S\n\nclass OfficialTreeGuard extends Component<{ fallback: ReactNode; children: ReactNode }, { failed: boolean }> {\n override state = { failed: false }\n static getDerivedStateFromError(): { failed: boolean } { return { failed: true } }\n override componentDidCatch(error: unknown): void {\n console.warn('[dsh-automation] official workspace tree crashed', error)\n }\n override render(): ReactNode {\n return this.state.failed ? this.props.fallback : this.props.children\n }\n}\n\nexport function ScheduleRail({\n t,\n runtime,\n openSession,\n}: {\n readonly t: Translate\n readonly runtime: AutomationRuntime\n readonly openSession?: (sessionId: string) => void\n}): JSX.Element {\n const state = useSyncExternalStore(runtime.source.subscribe, runtime.source.getSnapshot, runtime.source.getSnapshot)\n const [folded, setFolded] = useState<Record<string, boolean>>({})\n\n useEffect(() => {\n void runtime.refresh().catch(() => undefined)\n const timer = window.setInterval(() => { void runtime.refresh().catch(() => undefined) }, 15_000)\n return () => { window.clearInterval(timer) }\n }, [runtime])\n\n const groups = useMemo(() => {\n const snapshot = state.snapshot\n if (snapshot === undefined) return []\n return groupScheduledSessions(snapshot.automations, snapshot.runs)\n }, [state.snapshot])\n\n return (\n <div className=\"dsh-st-rail\">\n {state.phase === 'loading' && groups.length === 0 && <div className=\"dsh-st-rail-empty\">{t('loading')}</div>}\n {groups.length === 0 && state.phase !== 'loading' && <div className=\"dsh-st-rail-empty\">{t('sidebar.empty')}</div>}\n {groups.map(group => (\n <section key={group.id} className=\"dsh-st-rail-group\">\n <button\n type=\"button\"\n className=\"dsh-st-rail-head\"\n onClick={() => setFolded(current => ({ ...current, [group.id]: !current[group.id] }))}\n >\n <span className=\"dsh-st-rail-folder\"><ClockIcon width={16} height={16} /></span>\n <span className=\"dsh-st-rail-title\">{group.name}</span>\n </button>\n {folded[group.id] !== true && group.sessions.map(session => (\n <button\n key={session.id}\n type=\"button\"\n className=\"dsh-st-rail-session\"\n onClick={() => openSession?.(session.id)}\n >\n <span>{session.label}</span>\n {session.running && <RunningStateDot />}\n </button>\n ))}\n </section>\n ))}\n </div>\n )\n}\n\nexport function NativeScheduleShell({\n t,\n runtime,\n officialTree,\n hostProps,\n openSession,\n useSessions,\n useWorkspaces,\n renderSlot,\n hasChannels,\n subscribeChannels,\n tabRegistry,\n wide,\n}: {\n readonly t: Translate\n readonly runtime: AutomationRuntime\n readonly officialTree?: ComponentType<any>\n readonly hostProps?: Record<string, unknown>\n readonly openSession?: (sessionId: string) => void\n readonly useSessions?: SessionSelector\n readonly useWorkspaces?: WorkspaceSelector\n readonly renderSlot?: (name: string, props?: Record<string, unknown>) => ReactNode\n readonly hasChannels?: () => boolean\n readonly subscribeChannels?: (listener: () => void) => () => void\n readonly tabRegistry?: NativeTabRegistry\n readonly wide?: boolean\n}): JSX.Element | null {\n const Official = officialTree\n const [tab, setTab] = useState<string>(() => {\n try { return readNativeSidebarTab(window.localStorage.getItem(NATIVE_SIDEBAR_TAB_KEY)) }\n catch { return 'tasks' }\n })\n const extraTabs = useSyncExternalStore(\n tabRegistry?.subscribe ?? ((listener) => { listener(); return () => undefined }),\n () => tabRegistry?.getTabs() ?? EMPTY_EXTRA_TABS,\n () => EMPTY_EXTRA_TABS,\n )\n const channelsReady = useSyncExternalStore(\n subscribeChannels ?? ((listener) => { listener(); return () => undefined }),\n () => {\n try { return hasChannels?.() === true } catch { return false }\n },\n () => false,\n )\n const currentId = useSessions?.((state) => state?.current ?? null)\n const useFilteredSessions = useCallback<SessionSelector>((selector) => {\n if (useSessions === undefined) return selector({ ids: [], byId: {}, current: null })\n return useSessions(state => selector(filterTaskSessionState(state)))\n }, [useSessions])\n const useFilteredWorkspaces = useCallback<WorkspaceSelector>((selector) => {\n if (useWorkspaces === undefined) return selector({ items: [], archivedSessionIds: [] })\n return useWorkspaces(state => selector(filterWorkspaceListState(state)))\n }, [useWorkspaces])\n\n useEffect(() => {\n try { window.localStorage.setItem(NATIVE_SIDEBAR_TAB_KEY, tab) }\n catch { /* \u9690\u79C1\u6A21\u5F0F\u6216\u7981\u7528\u5B58\u50A8\u65F6\u5FFD\u7565 */ }\n }, [tab])\n\n useEffect(() => {\n const next = tabForSessionId(currentId ?? undefined)\n if (next === 'channels' && channelsReady) setTab('channels')\n const matched = extraTabs.find(item => currentId !== undefined && currentId !== null && item.matchSession?.(String(currentId)) === true)\n if (matched !== undefined) setTab(matched.id)\n }, [currentId, channelsReady, extraTabs])\n\n const rawOfficialProps = { ...(hostProps ?? {}), ...(wide === undefined ? {} : { wide }) }\n const filteredOfficialProps = {\n ...rawOfficialProps,\n ...(useSessions === undefined ? {} : { useSessions: useFilteredSessions }),\n ...(useWorkspaces === undefined ? {} : { useWorkspaces: useFilteredWorkspaces }),\n }\n const renderOfficial = (props: Record<string, unknown>): ReactNode => {\n if (Official === undefined) {\n return <NativeTaskRail t={t} {...(openSession === undefined ? {} : { openSession })} {...(useSessions === undefined ? {} : { useSessions: useFilteredSessions })} {...(useWorkspaces === undefined ? {} : { useWorkspaces })} />\n }\n return (\n <OfficialTreeGuard fallback={createElement(Official, rawOfficialProps)}>\n {createElement(Official, props)}\n </OfficialTreeGuard>\n )\n }\n\n if (wide === false) return <>{renderOfficial(rawOfficialProps)}</>\n\n const visibleTab = tab === 'channels' && !channelsReady ? 'tasks' : tab\n return (\n <div className=\"dsh-st-shell-rail\">\n <div className=\"dsh-st-shell-tabs\" role=\"tablist\" aria-label={t('sidebar.tabs')}>\n <button type=\"button\" role=\"tab\" aria-selected={visibleTab === 'tasks'} className={visibleTab === 'tasks' ? 'is-on' : undefined} onClick={() => setTab('tasks')}>\n {t('sidebar.tasksTab')}\n </button>\n {extraTabs.map(item => (\n <button key={item.id} type=\"button\" role=\"tab\" aria-selected={visibleTab === item.id} className={visibleTab === item.id ? 'is-on' : undefined} onClick={() => setTab(item.id)}>\n {item.label}\n </button>\n ))}\n {channelsReady && extraTabs.every(item => item.id !== 'channels') && (\n <button type=\"button\" role=\"tab\" aria-selected={visibleTab === 'channels'} className={visibleTab === 'channels' ? 'is-on' : undefined} onClick={() => setTab('channels')}>\n {t('sidebar.channelsTab')}\n </button>\n )}\n </div>\n {extraTabs.find(item => item.id === visibleTab) !== undefined\n ? <div className=\"dsh-st-shell-body\">{extraTabs.find(item => item.id === visibleTab)?.render({ ...(hostProps ?? {}), openSession, open: openSession, useSessions, wide: true }) as ReactNode}</div>\n : visibleTab === 'channels'\n ? <div className=\"dsh-st-shell-body\">{renderSlot?.('sidebar.channels', { ...(hostProps ?? {}), openSession, open: openSession, useSessions, wide: true })}</div>\n : <div className=\"dsh-st-official-tree\">{renderOfficial(filteredOfficialProps)}</div>}\n </div>\n )\n}\n\nfunction NativeTaskRail({\n t,\n openSession,\n useSessions,\n useWorkspaces,\n}: {\n readonly t: Translate\n readonly openSession?: (sessionId: string) => void\n readonly useSessions?: SessionSelector\n readonly useWorkspaces?: WorkspaceSelector\n}): JSX.Element {\n const snap = useSessions === undefined\n ? { ids: [] as string[], byId: {} as Record<string, NativeSessionLike>, current: null as string | null }\n : useSessions(state => state ?? { ids: [], byId: {}, current: null })\n const workspaces = useWorkspaces === undefined\n ? undefined\n : useWorkspaces(state => state ?? { items: [], archivedSessionIds: [] })\n const groups = groupNativeTaskSessions(snap, workspaces, t('sidebar.ungrouped'))\n if (groups.length === 0) return <div className=\"dsh-st-rail-empty\">{t('sidebar.tasksEmpty')}</div>\n return (\n <div className=\"dsh-st-rail\">\n {groups.map(group => (\n <section key={group.id || 'ungrouped'} className=\"dsh-st-rail-group\">\n <div className=\"dsh-st-rail-head is-static\">\n <span className=\"dsh-st-rail-title\">{group.label}</span>\n </div>\n {group.sessions.map(item => (\n <button\n key={item.id}\n type=\"button\"\n className={`dsh-st-rail-session${snap.current === item.id ? ' is-on' : ''}`}\n onClick={() => { if (item.id !== undefined) openSession?.(item.id) }}\n >\n <span>{item.title || item.id}</span>\n </button>\n ))}\n </section>\n ))}\n </div>\n )\n}\n\r\n", "const STYLE_ID = 'dsh-automation-styles'\n\nconst CSS_TEXT = `\n.dsh-st-shell{box-sizing:border-box;max-width:1080px;width:100%;margin:0 auto;padding:0 0 32px;color:var(--dsw-alias-label-primary);font-family:var(--dsw-font-family,system-ui)}\n.dsh-st-top{display:flex;flex-direction:column;align-items:stretch;gap:12px;margin-bottom:12px}\n.dsh-st-heading h1,.dsh-st-top h1{margin:0;font-size:20px;line-height:28px;font-weight:650;letter-spacing:-.2px}\n.dsh-st-heading p,.dsh-st-top p{margin:4px 0 0;max-width:none;color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}\n.dsh-st-toolbar{display:flex;flex-wrap:nowrap;align-items:center;justify-content:flex-start;gap:8px}\n.dsh-st-search{flex:1;min-width:0;max-width:280px;height:32px;padding:0 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-layer-3,var(--dsw-alias-bg-layer-1));color:inherit;font:inherit;font-size:13px}\n.dsh-st-btn,.dsh-st-icon{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:32px;padding:0 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:transparent;color:inherit;font:inherit;font-size:13px;cursor:pointer;white-space:nowrap}\n.dsh-st-icon{width:32px;padding:0;flex:none}\n.dsh-st-btn--primary{border-color:transparent;background:var(--dsw-alias-button-primary-fill,#fff);color:var(--dsw-alias-label-primary-foreground,#111)}\n.dsh-st-hint{margin:-6px 0 14px;padding:10px 12px;border-radius:12px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font-size:12px}\n.dsh-st-banner{display:flex;align-items:flex-start;gap:8px;margin-bottom:16px;padding:10px 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font-size:13px;line-height:1.5}\n.dsh-st-banner>span{display:inline-flex;align-items:flex-start;gap:8px}\n.dsh-st-switch{width:42px;height:26px;border:0;border-radius:999px;background:rgba(120,120,128,.36);box-shadow:inset 0 0 0 1px rgba(255,255,255,.06);position:relative;cursor:pointer}\n.dsh-st-switch:after{content:'';position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.28);transition:transform .16s ease}\n.dsh-st-switch.is-on{background:#34c759}\n.dsh-st-switch.is-on:after{transform:translateX(16px)}\n.dsh-st-examples{margin-bottom:22px}\n.dsh-st-examples-head h2{margin:0 0 10px;font-size:13px;font-weight:600;color:var(--dsw-alias-label-secondary)}\n.dsh-st-example-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}\n.dsh-st-example{display:flex;flex-direction:column;align-items:flex-start;gap:8px;min-height:132px;padding:14px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2,rgba(255,255,255,.03));color:inherit;text-align:left;cursor:pointer}\n.dsh-st-example:hover{border-color:rgba(75,124,255,.45)}\n.dsh-st-example strong{font-size:14px}\n.dsh-st-example p{margin:0;color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.45;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}\n.dsh-st-tabs{display:flex;align-items:center;gap:16px;margin:4px 0 16px;border-bottom:1px solid var(--dsw-alias-border-l2)}\n.dsh-st-tabs>button{padding:8px 0;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer}\n.dsh-st-tabs>button.is-on{border-bottom-color:currentColor;color:var(--dsw-alias-label-primary);font-weight:650}\n.dsh-st-sort{margin-left:auto;color:var(--dsw-alias-label-tertiary);font-size:12px}\n.dsh-st-filters{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-left:auto}\n.dsh-st-filters>button,.dsh-st-filters>select{height:28px;padding:0 10px;border:0;border-radius:999px;background:rgba(255,255,255,.06);color:inherit;font-size:12px}\n.dsh-st-filters>button.is-on{background:rgba(255,255,255,.14)}\n.dsh-st-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\n.dsh-st-card,.dsh-st-empty{position:relative;padding:16px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2,rgba(255,255,255,.03))}\n.dsh-st-card{cursor:pointer}\n.dsh-st-card:hover{border-color:rgba(75,124,255,.45)}\n.dsh-st-card h3,.dsh-st-empty h3{margin:10px 0 6px;font-size:14px;font-weight:500}\n.dsh-st-card p,.dsh-st-empty p{margin:0 0 14px;color:var(--dsw-alias-label-secondary);font-size:13px;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}\n.dsh-st-card-head{display:flex;align-items:center;justify-content:space-between}\n.dsh-st-card-foot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-top:12px;border-top:1px dashed var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);font-size:12px}\n.dsh-st-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:999px;background:rgba(255,255,255,.06)}\n.dsh-st-more{width:28px;height:28px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-tertiary);cursor:pointer}\n.dsh-st-menu{position:absolute;top:40px;right:12px;z-index:3;min-width:148px;padding:6px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-base);box-shadow:0 10px 30px rgba(0,0,0,.28)}\n.dsh-st-menu button{display:flex;width:100%;align-items:center;gap:8px;padding:8px 10px;border:0;border-radius:8px;background:transparent;color:inherit;cursor:pointer}\n.dsh-st-menu button:hover{background:rgba(255,255,255,.06)}\n.dsh-st-menu .is-danger{color:#ff6b6b}\n.dsh-st-timeline{display:flex;flex-direction:column;gap:22px;padding-left:10px}\n.dsh-st-group{position:relative;padding-left:18px}\n.dsh-st-group:before{content:'';position:absolute;top:8px;bottom:0;left:4px;width:1px;background:rgba(255,255,255,.08)}\n.dsh-st-group h3{margin:0 0 10px;font-size:13px;font-weight:600}\n.dsh-st-run{position:relative;margin:0 0 12px}\n.dsh-st-run:after{content:'';position:absolute;top:6px;left:-18px;width:7px;height:7px;border-radius:50%;background:#34c759}\n.dsh-st-run.is-failed:after,.dsh-st-run.is-interrupted:after{background:#ff6b6b}\n.dsh-st-run.is-queued:after,.dsh-st-run.is-skipped:after,.dsh-st-run.is-cancelled:after{background:#8b8f98}\n.dsh-st-run strong{display:block;margin-bottom:4px;font-size:14px}\n.dsh-st-run p{display:flex;gap:10px;margin:0;color:var(--dsw-alias-label-tertiary);font-size:12px}\n.dsh-st-error{color:#ff6b6b;font-size:12px}\n.dsh-st-muted{color:var(--dsw-alias-label-secondary)}\n.dsh-st-mask{position:fixed;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;padding:24px;overflow:auto;background:rgba(0,0,0,.45)}.dsh-st-flyout-root{position:absolute;inset:0;z-index:1200;overflow:visible;pointer-events:none}.dsh-st-flyout-root .dsh-st-select-menu{pointer-events:auto}\n.dsh-st-modal,.dsh-st-modal *{box-sizing:border-box}.dsh-st-modal{display:flex;flex-direction:column;width:min(760px,calc(100vw - 48px));max-width:100%;max-height:min(92vh,900px);overflow:hidden;padding:24px;border:1px solid var(--dsw-alias-border-l2);border-radius:20px;background:var(--dsw-alias-bg-base)}\n.dsh-st-modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}\n.dsh-st-modal-head h2{margin:0 0 4px;font-size:20px}\n.dsh-st-field{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;min-width:0;max-width:100%;font-size:13px}.dsh-st-field:has(.dsh-st-prompt-card){flex:1;min-height:0;margin-bottom:10px}\n.dsh-st-field input,.dsh-st-field select,.dsh-st-field textarea{width:100%;padding:9px 10px;border:1px solid var(--dsw-alias-border-l2);border-radius:10px;background:var(--dsw-alias-bg-layer-1);color:inherit}\n.dsh-st-field textarea{min-height:140px;max-width:100%;resize:vertical}\n.dsh-st-inline{display:flex;flex-wrap:wrap;gap:8px;align-items:center}\n.dsh-st-inline select,.dsh-st-inline input{flex:1;min-width:120px}\n.dsh-st-weekdays{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}\n.dsh-st-weekdays button{min-width:40px;padding:6px 8px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:transparent;color:inherit;cursor:pointer}\n.dsh-st-weekdays button.is-on{border-color:#4b7cff;color:#4b7cff}\n.dsh-st-check{display:inline-flex;align-items:center;gap:6px;margin:0 0 12px;font-size:12px}\n.dsh-st-modal-actions{display:flex;justify-content:flex-end;flex:none;gap:8px;margin-top:8px}\n@media(max-width:860px){.dsh-st-toolbar{flex-wrap:wrap}.dsh-st-search{flex-basis:100%;max-width:none}.dsh-st-grid,.dsh-st-example-row{grid-template-columns:1fr}.dsh-st-filters{width:100%;margin:8px 0}}\n.dsh-st-select{position:relative;min-width:108px;z-index:1}.dsh-st-select.is-open{z-index:30}\n.dsh-st-select.is-wide{min-width:148px}\n.dsh-st-select-btn,.dsh-st-field input,.dsh-st-field textarea{border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:rgba(255,255,255,.04);color:inherit}\n.dsh-st-select-btn{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:36px;width:100%;padding:0 12px;cursor:pointer}\n.dsh-st-select.is-pill{width:auto;min-width:0;flex:none}\n.dsh-st-select.is-pill .dsh-st-select-btn{width:auto;min-height:28px;height:28px;padding:0 8px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font-size:13px;font-weight:500;gap:6px;white-space:nowrap}\n.dsh-st-select.is-pill .dsh-st-select-btn:hover{background:rgba(255,255,255,.06);color:var(--dsw-alias-label-primary)}\n.dsh-st-select.is-pill .dsh-st-select-menu,.dsh-st-select-menu.is-composer{min-width:260px}\n.dsh-st-select-btn em{width:8px;height:8px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px);opacity:.7}\n.dsh-st-select-menu{position:absolute;top:calc(100% + 6px);left:0;z-index:30;min-width:196px;max-height:280px;overflow:auto;padding:6px;border:1px solid rgba(255,255,255,.08);border-radius:14px;background:#2a2c31;box-shadow:0 16px 40px rgba(0,0,0,.42)}\n.dsh-st-select-menu.is-up{top:auto;bottom:calc(100% + 6px)}\n.dsh-st-select-menu.is-end{left:auto;right:0}.dsh-st-select-menu.is-float{position:absolute;z-index:1200;max-height:min(280px,calc(100vh - 24px));box-sizing:border-box}\n.dsh-st-menu-row{white-space:nowrap}\n.dsh-st-menu-row.is-kv .dsh-st-menu-row-main{flex:none}\n.dsh-st-menu-row.is-kv .dsh-st-menu-row-side{flex:1;justify-content:flex-end;min-width:0}\n.dsh-st-select-menu button,.dsh-st-menu-row{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;padding:8px 10px;border:0;border-radius:10px;background:transparent;color:inherit;text-align:left;cursor:pointer;font-size:13px}\n.dsh-st-menu-row-main{display:inline-flex;align-items:center;gap:8px;min-width:0}\n.dsh-st-menu-row-side{display:inline-flex;align-items:center;gap:8px;color:var(--dsw-alias-label-secondary);font-size:12px}\n.dsh-st-menu-row-side small{display:block;max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-tertiary)}\n.dsh-st-select-menu button:hover,.dsh-st-menu-row:hover,.dsh-st-menu-row.is-on{background:rgba(255,255,255,.06)}\n.dsh-st-tick,.dsh-st-next{width:7px;height:11px;border-right:1.6px solid currentColor;border-bottom:1.6px solid currentColor;flex:none}\n.dsh-st-tick{height:12px;width:6px;transform:rotate(45deg) translateY(-2px);border-right-color:#7aa2ff;border-bottom-color:#7aa2ff}\n.dsh-st-next{height:7px;transform:rotate(-45deg);opacity:.55}\n.dsh-st-select-empty{padding:14px 12px;color:var(--dsw-alias-label-tertiary);font-size:12px;text-align:center}\n.dsh-st-chip-btn{display:inline-flex;align-items:center;gap:6px;min-height:28px;height:28px;padding:0 8px;border:0;border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);font-size:13px;font-weight:500;white-space:nowrap;cursor:pointer}\n.dsh-st-chip-btn:hover{background:rgba(255,255,255,.06);color:var(--dsw-alias-label-primary)}\n.dsh-st-chip-btn.is-static{cursor:default;opacity:.78}\n.dsh-st-chip-btn em,.dsh-st-select.is-pill .dsh-st-select-btn em{width:6px;height:6px;margin-left:2px;opacity:.55}\n.dsh-st-suffix{color:var(--dsw-alias-label-secondary);font-size:13px}\n.dsh-st-inline input.is-narrow{width:72px;flex:none}\n.dsh-st-time{display:inline-flex;align-items:center;gap:2px;min-height:36px;padding:0 8px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:rgba(255,255,255,.04)}\n.dsh-st-time .dsh-st-select{min-width:48px}\n.dsh-st-time .dsh-st-select-btn{width:auto;min-height:32px;padding:0 6px;border:0;background:transparent}\n.dsh-st-time-sep{padding:0 2px;color:var(--dsw-alias-label-secondary)}\n.dsh-st-inline input[type=date]{min-width:148px;max-width:170px}\n.dsh-st-weekdays button{min-width:52px;height:34px;border-radius:999px;border:1px solid var(--dsw-alias-border-l2);background:transparent}\n.dsh-st-weekdays button.is-on{border-color:transparent;background:#fff;color:#111}\n.dsh-st-prompt-card{display:flex;flex-direction:column;flex:1;min-height:160px;max-width:100%;border:1px solid var(--dsw-alias-border-l2);border-radius:22px;overflow:visible;background:rgba(255,255,255,.03)}\n.dsh-st-prompt-card textarea{flex:1;width:100%;max-width:100%;min-height:140px;border:0;background:transparent;padding:16px 18px;font-size:14px;line-height:1.65;resize:none}\n.dsh-st-composer,.dsh-st-composer-left,.dsh-st-composer-right{display:flex;align-items:center;flex-wrap:nowrap}\n.dsh-st-composer{justify-content:space-between;gap:8px;padding:2px 8px 10px;border-top:0}\n.dsh-st-composer-left,.dsh-st-composer-right{gap:2px;min-width:0}\n.dsh-st-composer .dsh-st-select{min-width:0}\n.dsh-st-composer svg{flex:none}\n.dsh-st-menu-split{height:1px;margin:6px 8px;background:rgba(255,255,255,.08)}\n.dsh-st-subdialog{margin:0 0 12px;padding:12px;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:rgba(255,255,255,.03)}\n.dsh-st-subdialog>strong{display:block;margin:0 0 8px;font-size:13px}\n.dsh-st-rail{box-sizing:border-box;height:100%;overflow:auto;padding:4px var(--dsh-sidebar-inline-padding,12px) 18px 8px;color:inherit;scrollbar-gutter:stable}\n.dsh-st-rail-empty{padding:16px 10px;color:var(--dsw-alias-label-tertiary,#8b8f98);font-size:12px}\n.dsh-st-rail-group{margin:0 0 8px}\n.dsh-st-rail-head,.dsh-st-rail-session{display:flex;align-items:center;gap:8px;width:100%;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer}\n.dsh-st-rail-head{min-height:32px;padding:4px 8px;border-radius:8px;font-size:13px;font-weight:600}\n.dsh-st-rail-session{min-height:28px;padding:3px 8px 3px 28px;border-radius:8px;color:var(--dsw-alias-label-secondary,#9ca39f);font-size:12px}\n.dsh-st-rail-head:hover,.dsh-st-rail-session:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(255,255,255,.06))}\n.dsh-st-rail-folder{display:grid;place-items:center;width:16px;height:20px;flex:none;opacity:.8}\n.dsh-st-rail-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.dsh-st-rail-session span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.dsh-st-rail-dot{width:6px;height:6px;margin-left:auto;border-radius:50%;background:#34c759;flex:none}.dsh-st-run-dot{flex:none;color:var(--dsw-static-deepseek-450,#4c8dff)}.dsh-st-run-dot-cell{fill:currentColor;opacity:.15;animation:dsh-st-run-chase 1s infinite}@keyframes dsh-st-run-chase{0%,12.4%{opacity:1}12.5%,24.9%{opacity:.6}25%,37.4%{opacity:.35}37.5%,100%{opacity:.15}}\n.dsh-st-shell-rail{display:flex;flex-direction:column;min-height:0;flex:1;height:100%;overflow:hidden}\n.dsh-st-shell-tabs{display:flex;flex:none;gap:18px;padding:4px 12px 0;border-bottom:1px solid var(--dsw-alias-border-l2,rgba(255,255,255,.08))}\n.dsh-st-shell-tabs button{appearance:none;border:0;background:transparent;color:var(--dsw-alias-label-secondary,#8b8f98);padding:8px 0;font-size:13px;cursor:pointer}\n.dsh-st-shell-tabs button.is-on{color:var(--dsw-alias-label-primary,inherit);box-shadow:inset 0 -2px 0 currentColor}\n.dsh-st-shell-body{display:flex;min-height:0;flex:1;overflow:hidden}\n.dsh-st-shell-body>*{min-width:0;flex:1}.dsh-st-official-tree{display:flex;min-height:0;flex:1;overflow:hidden}.dsh-st-official-tree>*{min-width:0;flex:1}\n.dsh-st-rail-head.is-static{cursor:default;font-weight:600}\n.dsh-st-rail-session.is-on{background:var(--dsw-alias-interactive-bg-hover,rgba(255,255,255,.06))}\n.dsh-st-n,.dsh-st-n *{box-sizing:border-box}.dsh-st-n{box-sizing:border-box;display:flex;flex:1;min-width:0;max-width:100%;min-height:0;flex-direction:column;padding:0;padding-right:var(--dsh-sidebar-inline-padding,12px);color:var(--dsw-alias-label-primary,inherit);font:14px/20px inherit;overflow:hidden}.dsh-st-n-head{flex:none;display:flex;align-items:center;height:36px;padding-left:4px;margin:2px 0 4px;color:var(--dsw-alias-label-tertiary,#81858C)}.dsh-st-n-head-label{font-size:14px;line-height:20px}.dsh-st-n-tree{flex:1;min-width:0;max-width:100%;min-height:0;overflow-x:hidden;overflow-y:auto;padding:0 0 16px 4px;user-select:none}.dsh-st-n-empty{padding:14px 8px;color:var(--dsw-alias-label-tertiary,#8b8f98);font-size:12px}.dsh-st-n-group{min-width:0;max-width:100%}.dsh-st-n-row,.dsh-st-n-sess{display:flex;align-items:center;max-width:100%;border-radius:8px;padding:0 8px;cursor:pointer;border:0;background:transparent;color:var(--dsw-alias-label-primary,inherit);text-align:left;font:14px/20px inherit}.dsh-st-n-row{height:34px;gap:6px}.dsh-st-n-sess{height:32px;gap:0;position:relative;width:100%;appearance:none}.dsh-st-n-row:hover,.dsh-st-n-sess:hover,.dsh-st-n-sess.is-on,.dsh-st-n-sess.is-menu{background:var(--dsw-alias-interactive-bg-hover,rgba(255,255,255,.06))}.dsh-st-n-slot{flex:none;width:16px;height:20px;display:inline-flex;align-items:center;justify-content:center}.dsh-st-n-row .dsh-st-n-chevron{display:none;color:var(--dsw-alias-label-caption,#ADB2B8)}.dsh-st-n-row:hover .dsh-st-n-chevron{display:inline-flex}.dsh-st-n-row:hover .dsh-st-n-folder{display:none}.dsh-st-n-arrow{transition:transform .15s ease}.dsh-st-n-arrow.is-open{transform:rotate(90deg)}.dsh-st-n-title{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:14px;line-height:20px}.dsh-st-n-sess .dsh-st-n-title{margin:0 6px 0 4px}.dsh-st-n-time{flex:none;font-size:12px;line-height:20px;color:var(--dsw-alias-label-tertiary,#81858C);white-space:nowrap}.dsh-st-n-acts{flex:none;display:none;align-items:center;gap:12px}.dsh-st-n-row:hover .dsh-st-n-acts,.dsh-st-n-sess:hover .dsh-st-n-acts,.dsh-st-n-row.is-menu .dsh-st-n-acts,.dsh-st-n-sess.is-menu .dsh-st-n-acts{display:inline-flex}.dsh-st-n-sess:hover .dsh-st-n-time,.dsh-st-n-sess.is-menu .dsh-st-n-time{display:none}.dsh-st-n-ico{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border:0;border-radius:4px;background:transparent;color:var(--dsw-alias-label-tertiary,#81858C);padding:0;cursor:pointer}.dsh-st-n-ico:hover{color:var(--dsw-alias-label-primary,inherit)}.dsh-st-n-menu{position:absolute;right:8px;top:calc(100% + 4px);z-index:1100;min-width:218px;max-width:360px;box-sizing:border-box;padding:4px;display:flex;flex-direction:column;border:1px solid var(--dsw-alias-border-inverted,rgba(255,255,255,.12));border-radius:12px;background:var(--dsw-specific-menu,#1c2128);box-shadow:var(--dsw-shadow-lv3,0 8px 24px rgba(0,0,0,.36))}.dsh-st-n-menu button{display:flex;align-items:center;gap:8px;width:100%;min-height:40px;padding:8px 10px;border:0;border-radius:10px;background:transparent;cursor:pointer;font-size:14px;line-height:22px;color:var(--dsw-alias-label-primary,inherit);text-align:left}.dsh-st-n-menu button:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(255,255,255,.06))}.dsh-st-n-mi{display:inline-flex;flex:none;width:16px;height:16px;align-items:center;justify-content:center;color:var(--dsw-alias-label-tertiary,#81858C)}.dsh-st-n-menu button.danger{color:var(--dsw-alias-state-error-primary,#f85149)}.dsh-st-n-menu button.danger .dsh-st-n-mi{color:inherit}.dsh-st-n-menu button.danger:hover{background:var(--dsw-alias-interactive-bg-hover-danger,rgba(248,81,73,.12))}.dsh-st-n-rename{flex:1;min-width:0;margin:0 6px 0 4px;border:1px solid var(--dsw-alias-border-l2);border-radius:4px;background:var(--dsw-alias-button-elevated-fill,rgba(255,255,255,.04));color:inherit;font:inherit;padding:0 2px}\n`\n\nexport function installStyles(): () => void {\n const existing = document.getElementById(STYLE_ID)\n if (existing instanceof HTMLStyleElement) {\n existing.textContent = CSS_TEXT\n return () => undefined\n }\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = CSS_TEXT\n document.head.append(style)\n return () => { style.remove() }\n}\n\r\n\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_react", "import_react", "name", "import_react", "import_jsx_runtime", "value", "import_jsx_runtime", "listeners", "import_jsx_runtime", "listeners", "import_react", "name", "name", "import_jsx_runtime", "import_react", "import_jsx_runtime", "apply", "AutomationNativeWorkspaceShell", "name"]
|
|
7
|
+
}
|