prompt-skill-armory 0.4.6 → 0.4.7
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/package.json
CHANGED
|
@@ -16,7 +16,7 @@ window.__ModuleLoader__.load({
|
|
|
16
16
|
const NS = "settings.switchblade";
|
|
17
17
|
/** zh-CN copy. */
|
|
18
18
|
const zh = {
|
|
19
|
-
nav: "Prompt-
|
|
19
|
+
nav: "Prompt•Skill-Armory",
|
|
20
20
|
skillsTitle: "技能",
|
|
21
21
|
presetsTitle: "提示词预设",
|
|
22
22
|
promptsTitle: "提示词",
|
|
@@ -58,7 +58,7 @@ window.__ModuleLoader__.load({
|
|
|
58
58
|
};
|
|
59
59
|
/** en-US copy. */
|
|
60
60
|
const en = {
|
|
61
|
-
nav: "Prompt-
|
|
61
|
+
nav: "Prompt•Skill-Armory",
|
|
62
62
|
skillsTitle: "Skills",
|
|
63
63
|
presetsTitle: "Prompt Presets",
|
|
64
64
|
promptsTitle: "Prompts",
|
|
@@ -381,7 +381,7 @@ window.__ModuleLoader__.load({
|
|
|
381
381
|
});
|
|
382
382
|
}
|
|
383
383
|
/** Bump with every release; keep in sync with package.json version + CHANGELOG. */
|
|
384
|
-
const ARMORY_VERSION = "0.4.
|
|
384
|
+
const ARMORY_VERSION = "0.4.7";
|
|
385
385
|
/** Render the Prompt-SkillArmory management page. */
|
|
386
386
|
function SwitchbladeSection(props) {
|
|
387
387
|
const { useSwitchblade, t, load, setDefaultPreset, addPrompt, updatePrompt, setPromptEnabled, setDefaultPrompt, deletePrompt, installSkill, updateSkill, setSkillEnabled, uninstallSkill } = props;
|
|
@@ -558,9 +558,9 @@ window.__ModuleLoader__.load({
|
|
|
558
558
|
" ",
|
|
559
559
|
(0, react_jsx_runtime.jsx)("span", {
|
|
560
560
|
style: CSS.titleAccent,
|
|
561
|
-
children: "Prompt"
|
|
561
|
+
children: "Prompt•Skill"
|
|
562
562
|
}),
|
|
563
|
-
"-
|
|
563
|
+
"-Armory",
|
|
564
564
|
(0, react_jsx_runtime.jsxs)("span", {
|
|
565
565
|
style: CSS.versionBadge,
|
|
566
566
|
children: ["v", ARMORY_VERSION]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":["_Fragment"],"sources":["types/client/locales.js","types/client/SwitchbladeSection.js","types/client/store.js","types/client/index.js"],"sourcesContent":["/**\n * Switchblade management page dictionaries.\n * @module @deepseek-ai/dsh-client-ui-switchblade\n */\n/** Locale namespace owned by this plugin (settings.* prefix per the slot contract). */\nexport const NS = 'settings.switchblade';\n/** zh-CN copy. */\nexport const zh = {\n nav: 'Prompt-SkillArmory',\n skillsTitle: '技能',\n presetsTitle: '提示词预设',\n promptsTitle: '提示词',\n commandsTitle: '命令',\n empty: '(空)',\n enabled: '启用',\n disabled: '停用',\n installed: '已装',\n refresh: '刷新',\n setDefault: '设为默认',\n loadFailed: '加载失败',\n globalHint: '· 全局生效',\n promptNamePlaceholder: '提示词名称',\n promptDescPlaceholder: '描述(可选)',\n promptContentPlaceholder: '提示词内容…',\n addPrompt: '添加提示词',\n enable: '启用',\n disable: '停用',\n delete: '删除',\n installSkill: '技能',\n skillNamePlaceholder: '技能名称(kebab-case)',\n skillDescPlaceholder: '描述(可选)',\n skillContentPlaceholder: '技能指令内容…',\n install: '安装',\n uninstall: '卸载',\n pickSkillFile: '选择本地 .md 技能文件导入',\n searchPlaceholder: '搜索…',\n installedSkills: '本地化技能',\n installedSkillsGoRight: '已安装的技能在右侧第四列管理',\n manage: '托管',\n localSkills: '本地扫描技能',\n agentPresetsTitle: 'Agent预设',\n edit: '编辑',\n save: '保存',\n cancel: '取消',\n addSkill: '添加技能',\n pickZipFile: '导入 .zip 技能包',\n cliHint: 'CLI 直接安装(在会话里输入):',\n};\n/** en-US copy. */\nexport const en = {\n nav: 'Prompt-SkillArmory',\n skillsTitle: 'Skills',\n presetsTitle: 'Prompt Presets',\n promptsTitle: 'Prompts',\n commandsTitle: 'Commands',\n empty: '(empty)',\n enabled: 'enabled',\n disabled: 'disabled',\n installed: 'installed',\n refresh: 'Refresh',\n setDefault: 'Set default',\n loadFailed: 'Failed to load',\n globalHint: '· global',\n promptNamePlaceholder: 'Prompt name',\n promptDescPlaceholder: 'Description (optional)',\n promptContentPlaceholder: 'Prompt content…',\n addPrompt: 'Add prompt',\n enable: 'Enable',\n disable: 'Disable',\n delete: 'Delete',\n installSkill: 'Skills',\n skillNamePlaceholder: 'Skill name (kebab-case)',\n skillDescPlaceholder: 'Description (optional)',\n skillContentPlaceholder: 'Skill instructions…',\n install: 'Install',\n uninstall: 'Uninstall',\n pickSkillFile: 'Pick a local .md skill file',\n searchPlaceholder: 'Search…',\n installedSkills: 'Local skills',\n installedSkillsGoRight: 'Installed skills are managed in the right column',\n manage: 'Manage',\n localSkills: 'Scanned skills',\n agentPresetsTitle: 'Agent Presets',\n edit: 'Edit',\n save: 'Save',\n cancel: 'Cancel',\n addSkill: 'Add skill',\n pickZipFile: 'Import .zip skill bundle',\n cliHint: 'Install via CLI (type in a session):',\n};\n//# sourceMappingURL=locales.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * Prompt-SkillArmory management page.\n *\n * Three tabs within the settings dialog's fixed width: Prompts / Skills /\n * Agent Presets. The Skills tab is the single home for skills — both the ones\n * installed through this panel and the ones scanned from the local skill\n * roots — merged into one list with full management (add / edit / toggle /\n * remove / invoke hint). A CLI entry box offers direct command installation.\n * @module @deepseek-ai/dsh-client-ui-switchblade\n */\nimport { useEffect, useState } from 'react';\nconst PHOSPHOR = '#00ff9c';\nconst DAMNED = '#ff2b4b';\nconst AMBER = '#ffb000';\nconst GRAY = '#0f3d2c';\nconst CSS = {\n root: {\n fontFamily: \"'JetBrains Mono','IBM Plex Mono',ui-monospace,monospace\",\n background: '#04070a',\n color: PHOSPHOR,\n padding: '16px',\n border: `1px solid ${GRAY}`,\n boxShadow: 'inset 0 0 40px rgba(0,255,156,.06), 0 0 18px rgba(0,255,156,.15)',\n borderRadius: '2px',\n width: '100%',\n boxSizing: 'border-box',\n },\n head: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderBottom: `1px solid ${GRAY}`,\n paddingBottom: '8px',\n marginBottom: '8px',\n },\n title: {\n fontSize: '14px',\n fontWeight: 700,\n letterSpacing: '1px',\n textShadow: `0 0 8px ${PHOSPHOR}`,\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n },\n titleAccent: {\n color: DAMNED,\n textShadow: `0 0 8px ${DAMNED}`,\n },\n tabs: {\n display: 'flex',\n gap: '4px',\n borderBottom: `1px solid ${GRAY}`,\n marginBottom: '12px',\n flexWrap: 'wrap',\n },\n tab: {\n background: 'transparent',\n border: `1px solid transparent`,\n borderBottom: 'none',\n color: '#5fb08c',\n font: 'inherit',\n fontSize: '12px',\n letterSpacing: '0.5px',\n padding: '6px 10px',\n cursor: 'pointer',\n },\n tabActive: {\n color: PHOSPHOR,\n borderColor: GRAY,\n background: 'rgba(0,40,24,.1)',\n textShadow: `0 0 6px ${PHOSPHOR}`,\n },\n columns: {\n display: 'grid',\n gridTemplateColumns: 'repeat(2, minmax(0, 1fr))',\n gap: '12px',\n alignItems: 'start',\n },\n column: {\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n minWidth: '0',\n },\n colHeader: {\n fontSize: '12px',\n fontWeight: 700,\n letterSpacing: '1px',\n color: AMBER,\n borderBottom: `1px solid ${GRAY}`,\n paddingBottom: '6px',\n marginBottom: '2px',\n },\n card: {\n border: `1px solid ${GRAY}`,\n background: 'rgba(0,40,24,.08)',\n padding: '8px 10px',\n },\n cardTop: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n },\n name: {\n fontSize: '12px',\n fontWeight: 700,\n wordBreak: 'break-all',\n },\n badge: {\n fontSize: '9px',\n letterSpacing: '1px',\n padding: '2px 6px',\n border: '1px solid currentColor',\n flex: 'none',\n },\n badgeEnabled: { color: PHOSPHOR },\n badgeDisabled: { color: DAMNED },\n badgeInstalled: { color: AMBER },\n desc: {\n fontSize: '11px',\n color: '#5fb08c',\n marginTop: '4px',\n },\n invokeHint: {\n fontSize: '10px',\n color: '#3f8f6a',\n marginTop: '4px',\n fontStyle: 'italic',\n },\n empty: {\n fontSize: '11px',\n color: GRAY,\n padding: '8px 0',\n },\n error: {\n color: DAMNED,\n fontSize: '11px',\n padding: '8px 0',\n },\n refreshBtn: {\n background: 'transparent',\n border: `1px solid ${GRAY}`,\n color: PHOSPHOR,\n font: 'inherit',\n fontSize: '11px',\n letterSpacing: '2px',\n textTransform: 'uppercase',\n padding: '4px 10px',\n cursor: 'pointer',\n },\n actionBtn: {\n background: 'transparent',\n border: `1px solid ${GRAY}`,\n color: PHOSPHOR,\n font: 'inherit',\n fontSize: '10px',\n letterSpacing: '1px',\n padding: '2px 8px',\n cursor: 'pointer',\n marginTop: '6px',\n },\n dangerBtn: {\n borderColor: DAMNED,\n color: DAMNED,\n },\n form: {\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n marginBottom: '10px',\n padding: '10px',\n border: `1px solid ${GRAY}`,\n background: 'rgba(0,40,24,.05)',\n },\n input: {\n background: '#04070a',\n border: `1px solid ${GRAY}`,\n color: PHOSPHOR,\n font: 'inherit',\n fontSize: '11px',\n padding: '6px 8px',\n },\n textarea: {\n background: '#04070a',\n border: `1px solid ${GRAY}`,\n color: PHOSPHOR,\n font: 'inherit',\n fontSize: '11px',\n padding: '6px 8px',\n minHeight: '80px',\n resize: 'vertical',\n },\n actions: {\n display: 'flex',\n gap: '6px',\n flexWrap: 'wrap',\n },\n hint: {\n color: GRAY,\n fontSize: '9px',\n letterSpacing: '1px',\n },\n scrollBox: {\n maxHeight: '520px',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n paddingRight: '4px',\n },\n searchInput: {\n background: '#04070a',\n border: `1px solid ${GRAY}`,\n color: '#5fb08c',\n font: 'inherit',\n fontSize: '10px',\n padding: '5px 8px',\n width: '100%',\n boxSizing: 'border-box',\n },\n fileBtn: {\n background: 'transparent',\n border: `1px dashed ${GRAY}`,\n color: '#5fb08c',\n font: 'inherit',\n fontSize: '10px',\n letterSpacing: '1px',\n padding: '8px',\n cursor: 'pointer',\n textAlign: 'center',\n },\n cliBox: {\n border: `1px dashed ${AMBER}`,\n padding: '8px 10px',\n fontSize: '10px',\n color: '#5fb08c',\n background: 'rgba(255,176,0,.04)',\n },\n versionBadge: {\n fontSize: '10px',\n fontWeight: 700,\n letterSpacing: '1px',\n color: PHOSPHOR,\n border: `1px solid ${PHOSPHOR}`,\n borderRadius: '3px',\n padding: '1px 6px',\n marginLeft: '6px',\n background: 'rgba(0,255,156,.08)',\n textShadow: `0 0 6px ${PHOSPHOR}`,\n flex: 'none',\n },\n};\n/** Open-book glyph. */\nfunction BookIcon({ size = 16 }) {\n return (_jsxs(\"svg\", { width: size, height: size, viewBox: \"0 0 16 16\", fill: \"none\", style: { flex: 'none' }, \"aria-hidden\": \"true\", children: [_jsx(\"path\", { d: \"M7.5 3.2C6.2 2.4 4.6 2.2 2.8 2.5c-.5.08-.8.5-.8 1v7.6c0 .4.3.7.7.7 1.7-.2 3.2.1 4.8 1V3.2z\", fill: \"currentColor\", opacity: \"0.55\" }), _jsx(\"path\", { d: \"M8.5 3.2c1.3-.8 2.9-1 4.7-.7.5.08.8.5.8 1v7.6c0 .4-.3.7-.7.7-1.7-.2-3.2.1-4.8 1V3.2z\", fill: \"currentColor\", opacity: \"0.85\" }), _jsx(\"path\", { d: \"M8 3.2v10.3\", stroke: \"currentColor\", strokeWidth: \"0.7\" })] }));\n}\n/** Bump with every release; keep in sync with package.json version + CHANGELOG. */\nconst ARMORY_VERSION = '0.4.1';\n/** Render the Prompt-SkillArmory management page. */\nexport function SwitchbladeSection(props) {\n const { useSwitchblade, t, load, setDefaultPreset, addPrompt, updatePrompt, setPromptEnabled, setDefaultPrompt, deletePrompt, installSkill, updateSkill, setSkillEnabled, uninstallSkill, } = props;\n const state = useSwitchblade((snapshot) => snapshot);\n const [promptName, setPromptName] = useState('');\n const [promptDesc, setPromptDesc] = useState('');\n const [promptContent, setPromptContent] = useState('');\n const [skillName, setSkillName] = useState('');\n const [skillDesc, setSkillDesc] = useState('');\n const [skillContent, setSkillContent] = useState('');\n const [busy, setBusy] = useState(false);\n const [pickedFile, setPickedFile] = useState('');\n const [promptQuery, setPromptQuery] = useState('');\n const [skillQuery, setSkillQuery] = useState('');\n const [presetQuery, setPresetQuery] = useState('');\n const [activeTab, setActiveTab] = useState('prompts');\n const [editingPromptId, setEditingPromptId] = useState();\n const [editingSkillName, setEditingSkillName] = useState();\n useEffect(() => {\n void load();\n }, [load]);\n const refresh = () => {\n void load();\n };\n const setDefault = (id) => {\n void setDefaultPreset(id);\n };\n /** Read a local skill .md file into the import form. */\n const onSkillFile = (file) => {\n if (file === undefined)\n return;\n setPickedFile(file.name);\n void file.text().then((text) => {\n const first = text.split('\\n')[0]?.trim() ?? '';\n const nameMatch = /^#\\s+([a-z0-9][a-z0-9-]*)$/i.exec(first);\n if (nameMatch !== null)\n setSkillName(nameMatch[1]?.toLowerCase() ?? '');\n setSkillContent(text.trim());\n const descLine = text.split('\\n').find((l) => l.startsWith('> '));\n if (descLine !== undefined)\n setSkillDesc(descLine.slice(2).trim());\n }).catch((error) => console.error('[switchblade] read skill file failed', error));\n };\n const submitPrompt = () => {\n if (promptName.trim() === '' || promptContent.trim() === '')\n return;\n setBusy(true);\n const action = editingPromptId !== undefined\n ? updatePrompt(editingPromptId, { name: promptName, description: promptDesc, content: promptContent })\n : addPrompt({ name: promptName, description: promptDesc, content: promptContent });\n void action\n .catch((error) => console.error('[switchblade] prompt save failed', error))\n .finally(() => {\n setBusy(false);\n setPromptName('');\n setPromptDesc('');\n setPromptContent('');\n setEditingPromptId(undefined);\n });\n };\n const startEditPrompt = (row) => {\n setEditingPromptId(row.promptId);\n setPromptName(row.name);\n setPromptDesc(row.desc);\n setPromptContent(row.content ?? '');\n };\n const togglePrompt = (id, enabled) => {\n void setPromptEnabled(id, enabled).catch((error) => console.error('[switchblade] toggle failed', error));\n };\n const markDefault = (id) => {\n void setDefaultPrompt(id).catch((error) => console.error('[switchblade] setDefault failed', error));\n };\n const removePrompt = (id) => {\n void deletePrompt(id).catch((error) => console.error('[switchblade] delete failed', error));\n };\n const submitSkill = () => {\n if (skillName.trim() === '' || skillContent.trim() === '')\n return;\n setBusy(true);\n const action = editingSkillName !== undefined\n ? updateSkill(editingSkillName, { name: skillName, description: skillDesc, content: skillContent })\n : installSkill({ name: skillName, description: skillDesc, content: skillContent });\n void action\n .catch((error) => console.error('[switchblade] skill save failed', error))\n .finally(() => {\n setBusy(false);\n setSkillName('');\n setSkillDesc('');\n setSkillContent('');\n setEditingSkillName(undefined);\n });\n };\n const startEditSkill = (row) => {\n const found = state.installedSkills.find((s) => s.name === row.installedName);\n setEditingSkillName(row.installedName);\n setSkillName(row.name);\n setSkillDesc(row.desc);\n setSkillContent(found?.content ?? '');\n };\n const toggleSkill = (name, enabled) => {\n void setSkillEnabled(name, enabled).catch((error) => console.error('[switchblade] toggle skill failed', error));\n };\n const removeSkill = (name) => {\n void uninstallSkill(name).catch((error) => console.error('[switchblade] uninstall failed', error));\n };\n /** Adopt a scanned (local) skill into the managed list. */\n const adoptSkill = (name) => {\n const found = state.skills.find((s) => s.name === name);\n if (found === undefined)\n return;\n void installSkill({ name: found.name, description: found.description, content: `# ${found.name}\\n\\n${found.description}` })\n .catch((error) => console.error('[switchblade] adopt skill failed', error));\n };\n const promptRows = state.prompts.map((p) => ({\n id: p.id, name: p.name, desc: p.description, state: p.enabled ? 'enabled' : 'disabled',\n promptId: p.id, isDefault: p.isDefault, content: p.content, promptEnabled: p.enabled,\n }));\n const presetRows = state.presets.map((p) => ({\n id: p.id, name: p.name ?? p.id, desc: p.description ?? p.trust,\n state: p.isDefault ? 'enabled' : 'installed',\n presetId: p.id, isDefault: p.isDefault,\n }));\n // Merge managed + scanned skills into ONE list, managed first.\n const managedNames = new Set(state.installedSkills.map((s) => s.name));\n const managedRows = state.installedSkills.map((s) => ({\n key: `m-${s.name}`, name: s.name, desc: s.description,\n state: s.enabled ? 'enabled' : 'disabled',\n installedName: s.name, skillEnabled: s.enabled, source: 'managed',\n }));\n const scannedRows = state.skills\n .filter((s) => !managedNames.has(s.name))\n .map((s) => ({\n key: `s-${s.name}`, name: s.name, desc: s.description,\n state: 'installed', installedName: s.name, skillEnabled: false, source: 'scanned',\n }));\n const allSkillRows = [...managedRows, ...scannedRows];\n const match = (row, q) => {\n const query = q.trim().toLowerCase();\n if (query === '')\n return true;\n return row.name.toLowerCase().includes(query) || row.desc.toLowerCase().includes(query);\n };\n const filteredPrompts = promptRows.filter((r) => match(r, promptQuery));\n const filteredPresets = presetRows.filter((r) => match(r, presetQuery));\n const filteredSkills = allSkillRows.filter((r) => match(r, skillQuery));\n const badge = (state) => (state === 'enabled' ? CSS.badgeEnabled : state === 'disabled' ? CSS.badgeDisabled : CSS.badgeInstalled);\n const label = (state) => (state === 'enabled' ? t('enabled') : state === 'disabled' ? t('disabled') : t('installed'));\n return (_jsxs(\"div\", { style: CSS.root, children: [_jsxs(\"div\", { style: CSS.head, children: [_jsxs(\"div\", { style: CSS.title, children: [_jsx(BookIcon, { size: 16 }), \" \", _jsx(\"span\", { style: CSS.titleAccent, children: \"Prompt\" }), \"-SkillArmory\", _jsxs(\"span\", { style: CSS.versionBadge, children: [\"v\", ARMORY_VERSION] })] }), _jsx(\"button\", { style: CSS.refreshBtn, onClick: refresh, children: t('refresh') })] }), state.status === 'error' && _jsxs(\"div\", { style: CSS.error, children: [\"\\u2716 \", t('loadFailed'), \": \", state.message] }), _jsxs(\"div\", { style: CSS.tabs, children: [_jsxs(\"button\", { style: { ...CSS.tab, ...(activeTab === 'prompts' ? CSS.tabActive : {}) }, onClick: () => setActiveTab('prompts'), children: [t('promptsTitle'), \" (\", state.status === 'loading' ? '…' : promptRows.length, \")\"] }), _jsxs(\"button\", { style: { ...CSS.tab, ...(activeTab === 'skills' ? CSS.tabActive : {}) }, onClick: () => setActiveTab('skills'), children: [t('installSkill'), \" (\", state.status === 'loading' ? '…' : allSkillRows.length, \")\"] }), _jsxs(\"button\", { style: { ...CSS.tab, ...(activeTab === 'presets' ? CSS.tabActive : {}) }, onClick: () => setActiveTab('presets'), children: [t('agentPresetsTitle'), \" (\", state.status === 'loading' ? '…' : presetRows.length, \")\"] })] }), activeTab === 'prompts' && (_jsxs(\"div\", { style: CSS.columns, children: [_jsx(\"div\", { style: CSS.column, children: _jsxs(\"div\", { style: CSS.form, children: [_jsx(\"input\", { style: CSS.input, placeholder: t('promptNamePlaceholder'), value: promptName, onChange: (e) => setPromptName(e.target.value) }), _jsx(\"input\", { style: CSS.input, placeholder: t('promptDescPlaceholder'), value: promptDesc, onChange: (e) => setPromptDesc(e.target.value) }), _jsx(\"textarea\", { style: CSS.textarea, placeholder: t('promptContentPlaceholder'), value: promptContent, onChange: (e) => setPromptContent(e.target.value) }), _jsxs(\"div\", { style: CSS.actions, children: [_jsx(\"button\", { style: CSS.actionBtn, disabled: busy, onClick: submitPrompt, children: editingPromptId !== undefined ? t('save') : t('addPrompt') }), editingPromptId !== undefined && (_jsx(\"button\", { style: CSS.actionBtn, onClick: () => { setEditingPromptId(undefined); setPromptName(''); setPromptDesc(''); setPromptContent(''); }, children: t('cancel') }))] })] }) }), _jsxs(\"div\", { style: CSS.column, children: [_jsx(\"input\", { style: CSS.searchInput, placeholder: t('searchPlaceholder'), value: promptQuery, onChange: (e) => setPromptQuery(e.target.value) }), _jsx(\"div\", { style: CSS.scrollBox, children: filteredPrompts.length === 0\n ? _jsx(\"div\", { style: CSS.empty, children: t('empty') })\n : filteredPrompts.map((row) => (_jsxs(\"div\", { style: CSS.card, children: [_jsxs(\"div\", { style: CSS.cardTop, children: [_jsxs(\"div\", { style: CSS.name, children: [row.isDefault ? '★ ' : '', row.name] }), _jsx(\"span\", { style: { ...CSS.badge, ...row.state === 'enabled' ? CSS.badgeEnabled : CSS.badgeDisabled }, children: row.state === 'enabled' ? t('enabled') : t('disabled') })] }), _jsx(\"div\", { style: CSS.desc, children: row.desc || row.content?.slice(0, 80) }), _jsxs(\"div\", { style: CSS.actions, children: [!row.isDefault && _jsx(\"button\", { style: CSS.actionBtn, onClick: () => markDefault(row.promptId), children: t('setDefault') }), _jsx(\"button\", { style: CSS.actionBtn, onClick: () => togglePrompt(row.promptId, !row.promptEnabled), children: row.state === 'enabled' ? t('disable') : t('enable') }), _jsx(\"button\", { style: CSS.actionBtn, onClick: () => startEditPrompt(row), children: t('edit') }), _jsx(\"button\", { style: { ...CSS.actionBtn, ...CSS.dangerBtn }, onClick: () => removePrompt(row.promptId), children: t('delete') })] })] }, row.id))) })] })] })), activeTab === 'skills' && (_jsxs(\"div\", { style: CSS.columns, children: [_jsxs(\"div\", { style: CSS.column, children: [_jsxs(\"div\", { style: CSS.form, children: [_jsxs(\"label\", { style: CSS.fileBtn, children: [pickedFile !== '' ? `📄 ${pickedFile}` : t('pickSkillFile'), _jsx(\"input\", { type: \"file\", accept: \".md,.markdown,text/markdown,text/plain\", style: { display: 'none' }, onChange: (e) => onSkillFile(e.target.files?.[0]) })] }), _jsx(\"input\", { style: CSS.input, placeholder: t('skillNamePlaceholder'), value: skillName, onChange: (e) => setSkillName(e.target.value) }), _jsx(\"input\", { style: CSS.input, placeholder: t('skillDescPlaceholder'), value: skillDesc, onChange: (e) => setSkillDesc(e.target.value) }), _jsx(\"textarea\", { style: CSS.textarea, placeholder: t('skillContentPlaceholder'), value: skillContent, onChange: (e) => setSkillContent(e.target.value) }), _jsxs(\"div\", { style: CSS.actions, children: [_jsx(\"button\", { style: CSS.actionBtn, disabled: busy, onClick: submitSkill, children: editingSkillName !== undefined ? t('save') : t('addSkill') }), editingSkillName !== undefined && (_jsx(\"button\", { style: CSS.actionBtn, onClick: () => { setEditingSkillName(undefined); setSkillName(''); setSkillDesc(''); setSkillContent(''); }, children: t('cancel') }))] })] }), _jsxs(\"div\", { style: CSS.cliBox, children: [_jsx(\"div\", { style: { marginBottom: '4px' }, children: t('cliHint') }), _jsx(\"code\", { style: { fontSize: '10px', color: PHOSPHOR }, children: \"/armory-skill-dir <\\u76EE\\u5F55>\" }), _jsx(\"br\", {}), _jsx(\"code\", { style: { fontSize: '10px', color: PHOSPHOR }, children: \"/armory-install-zip <zip\\u8DEF\\u5F84>\" })] })] }), _jsxs(\"div\", { style: CSS.column, children: [_jsx(\"input\", { style: CSS.searchInput, placeholder: t('searchPlaceholder'), value: skillQuery, onChange: (e) => setSkillQuery(e.target.value) }), _jsx(\"div\", { style: CSS.scrollBox, children: filteredSkills.length === 0\n ? _jsx(\"div\", { style: CSS.empty, children: t('empty') })\n : filteredSkills.map((row) => (_jsxs(\"div\", { style: CSS.card, children: [_jsxs(\"div\", { style: CSS.cardTop, children: [_jsx(\"div\", { style: CSS.name, children: row.name }), _jsx(\"span\", { style: { ...CSS.badge, ...badge(row.state) }, children: label(row.state) })] }), _jsx(\"div\", { style: CSS.desc, children: row.desc }), _jsxs(\"div\", { style: CSS.invokeHint, children: [\"/ \", row.name] }), _jsx(\"div\", { style: CSS.actions, children: row.source === 'scanned' ? (_jsx(\"button\", { style: CSS.actionBtn, onClick: () => adoptSkill(row.name), children: t('manage') })) : (_jsxs(_Fragment, { children: [_jsx(\"button\", { style: CSS.actionBtn, onClick: () => toggleSkill(row.installedName, !row.skillEnabled), children: row.state === 'enabled' ? t('disable') : t('enable') }), _jsx(\"button\", { style: CSS.actionBtn, onClick: () => startEditSkill(row), children: t('edit') }), _jsx(\"button\", { style: { ...CSS.actionBtn, ...CSS.dangerBtn }, onClick: () => removeSkill(row.installedName), children: t('uninstall') })] })) })] }, row.key))) })] })] })), activeTab === 'presets' && (_jsx(\"div\", { style: CSS.columns, children: _jsxs(\"div\", { style: CSS.column, children: [_jsxs(\"div\", { style: CSS.colHeader, children: [t('agentPresetsTitle'), \" (\", presetRows.length, \")\"] }), _jsx(\"input\", { style: CSS.searchInput, placeholder: t('searchPlaceholder'), value: presetQuery, onChange: (e) => setPresetQuery(e.target.value) }), _jsx(\"div\", { style: CSS.scrollBox, children: filteredPresets.length === 0\n ? _jsx(\"div\", { style: CSS.empty, children: t('empty') })\n : filteredPresets.map((row) => (_jsxs(\"div\", { style: CSS.card, children: [_jsxs(\"div\", { style: CSS.cardTop, children: [_jsxs(\"div\", { style: CSS.name, children: [row.isDefault ? '★ ' : '', row.name] }), _jsx(\"span\", { style: { ...CSS.badge, ...badge(row.state) }, children: label(row.state) })] }), _jsx(\"div\", { style: CSS.desc, children: row.desc }), !row.isDefault && _jsx(\"button\", { style: CSS.actionBtn, onClick: () => setDefault(row.presetId), children: t('setDefault') })] }, row.id))) })] }) }))] }));\n}\n//# sourceMappingURL=SwitchbladeSection.js.map","/**\n * Switchblade section data controller: reads the skill catalog and the prompt\n * preset roster through the existing connection RPC surface (no Typert\n * generation needed — these methods are already wired).\n * @module @deepseek-ai/dsh-client-ui-switchblade\n */\nimport { createSnapshotStore } from '@deepseek-ai/dsh-client-runtime/client';\n/** Initial (idle) state. */\nconst IDLE = {\n status: 'idle',\n skills: [],\n presets: [],\n commands: [],\n prompts: [],\n installedSkills: [],\n};\n/** Normalize a thrown wire error to a message. */\nfunction messageOf(error) {\n return error instanceof Error ? error.message : String(error);\n}\n/**\n * Data controller bound to one session's connection.\n * @param api - the connection's API client.\n * @param sessionId - session the skill catalog resolves against.\n */\nexport class SwitchbladeSectionController {\n api;\n sessionId;\n /** Snapshot store backing the section's view state. */\n store = createSnapshotStore(IDLE);\n constructor(api, sessionId) {\n this.api = api;\n this.sessionId = sessionId;\n }\n /**\n * Load skills, presets, prompts, and installed skills. Prompts and installed\n * skills come from the `switchblade` settings namespace (the Host watches\n * it and re-injects on change).\n */\n async load() {\n this.store.set({ ...IDLE, status: 'loading' });\n try {\n // skill.list requires a live session; without one we skip it (never\n // hang). Presets + settings always resolve, so the panel opens reliably.\n const sessionId = this.sessionId?.();\n const calls = [\n this.api.agentPresets.list({}),\n this.api.settings.describe({}),\n ];\n if (sessionId !== undefined)\n calls.push(this.api.skills.list({ sessionId }));\n const [presetRes, settingsRes, skillRes] = await Promise.all(calls);\n if (!presetRes.result.ok)\n throw new Error(`agentPreset.list: ${presetRes.result.error.message}`);\n if (!settingsRes.result.ok)\n throw new Error(`settings.describe: ${settingsRes.result.error.message}`);\n const skills = skillRes !== undefined && skillRes.result.ok\n ? skillRes.result.value.skills.map((skill) => ({\n name: skill.name,\n description: skill.description,\n modelInvocable: skill.modelInvocable,\n }))\n : [];\n const presets = presetRes.result.value.presets.map((preset) => ({\n id: preset.id,\n isDefault: preset.isDefault,\n trust: preset.trust,\n ...preset.name === undefined ? {} : { name: preset.name },\n ...preset.description === undefined ? {} : { description: preset.description },\n ...preset.broken === undefined ? {} : { broken: preset.broken },\n }));\n const switchbladeSection = this.sectionFromSettings(settingsRes.result.value, 'switchblade');\n const prompts = Array.isArray(switchbladeSection?.prompts) ? switchbladeSection.prompts : [];\n const installedSkills = Array.isArray(switchbladeSection?.installedSkills)\n ? switchbladeSection.installedSkills.map((s) => ({\n name: s.name ?? '',\n description: s.description ?? '',\n content: s.content ?? '',\n enabled: s.enabled ?? true,\n }))\n : [];\n this.store.set({\n status: 'ready',\n skills,\n presets,\n commands: [],\n prompts,\n installedSkills,\n });\n }\n catch (error) {\n this.store.set({ ...IDLE, status: 'error', message: messageOf(error) });\n }\n }\n /** Read one namespace's user section from a settings.describe value. */\n sectionFromSettings(value, ns) {\n if (typeof value !== 'object' || value === null)\n return undefined;\n const entries = value.namespaces;\n if (!Array.isArray(entries))\n return undefined;\n for (const entry of entries) {\n const row = entry;\n if (row.ns === ns) {\n const section = row.value;\n return typeof section === 'object' && section !== null ? section : undefined;\n }\n }\n return undefined;\n }\n // ---------------------------------------------------------------------------\n // Prompt CRUD (writes to the switchblade settings namespace; Host re-injects)\n // ---------------------------------------------------------------------------\n /** Add a prompt. */\n async addPrompt(input) {\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['prompts'], value: [...this.currentPrompts(), {\n id: this.slugify(input.name),\n name: input.name,\n description: input.description,\n content: input.content,\n order: this.currentPrompts().length,\n enabled: true,\n isDefault: this.currentPrompts().length === 0,\n }] }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n /** Toggle one prompt's enabled state. */\n async setPromptEnabled(id, enabled) {\n const next = this.currentPrompts().map((p) => p.id === id ? { ...p, enabled } : p);\n await this.writePrompts(next);\n }\n /** Mark one prompt default; clears others. */\n async setDefaultPrompt(id) {\n const next = this.currentPrompts().map((p) => ({ ...p, isDefault: p.id === id }));\n await this.writePrompts(next);\n }\n /** Delete one prompt. */\n async deletePrompt(id) {\n const next = this.currentPrompts().filter((p) => p.id !== id);\n await this.writePrompts(next);\n }\n /** Update a prompt's name/description/content. */\n async updatePrompt(id, patch) {\n const next = this.currentPrompts().map((p) => p.id === id ? {\n ...p,\n name: patch.name?.trim() || p.name,\n description: patch.description ?? p.description,\n content: patch.content ?? p.content,\n } : p);\n await this.writePrompts(next);\n }\n /** Persist the prompt list through the settings RPC. */\n async writePrompts(prompts) {\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['prompts'], value: prompts }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n /** Current prompt list from the loaded snapshot. */\n currentPrompts() {\n return this.store.getSnapshot().prompts;\n }\n /** Sluggify a name into an id. */\n slugify(value) {\n const slug = value.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');\n return slug.length > 0 ? slug : `prompt-${Date.now()}`;\n }\n // ---------------------------------------------------------------------------\n // Skill install/uninstall (writes to the switchblade settings namespace)\n // ---------------------------------------------------------------------------\n /** Install a skill from a name + content (enabled by default). */\n async installSkill(input) {\n const next = [...this.currentInstalledSkills(), {\n name: input.name,\n description: input.description,\n content: input.content,\n enabled: true,\n }];\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['installedSkills'], value: next }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n /** Toggle one installed skill's enabled state. */\n async setSkillEnabled(name, enabled) {\n const next = this.currentInstalledSkills().map((s) => s.name === name ? { ...s, enabled } : s);\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['installedSkills'], value: next }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n /** Uninstall one installed skill. */\n async uninstallSkill(name) {\n const next = this.currentInstalledSkills().filter((s) => s.name !== name);\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['installedSkills'], value: next }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n /** Update an installed skill's name/description/content. */\n async updateSkill(name, patch) {\n const next = this.currentInstalledSkills().map((s) => s.name === name ? {\n ...s,\n name: patch.name?.trim() || s.name,\n description: patch.description ?? s.description,\n content: patch.content ?? s.content,\n } : s);\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['installedSkills'], value: next }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n /** Current installed skills from the loaded snapshot. */\n currentInstalledSkills() {\n return this.store.getSnapshot().installedSkills;\n }\n /**\n * Queue a zip archive (base64) for extraction into ~/.dsh/skills. The Host\n * watch sees pendingZip and installs it (skil-filesystem then discovers it).\n */\n async installSkillFromZip(name, dataBase64) {\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['pendingZip'], value: { name, dataBase64 } }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n // Wait a tick for the Host watch to extract, then refresh.\n await new Promise((r) => setTimeout(r, 500));\n await this.load();\n }\n /** Set the default prompt preset. */\n async setDefaultPreset(id) {\n const res = await this.api.settings.update({ ns: 'agent-presets', patch: { default: id } });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n}\n//# sourceMappingURL=store.js.map","/**\n * Switchblade management page, browser half: registers the `settings.section`\n * navigation entry and renders the edgelord panel from the connection RPC\n * state. Global scope (root) — one management seat for every session.\n * @module @deepseek-ai/dsh-client-ui-switchblade\n */\nimport { en, NS, zh } from \"./locales.js\";\nimport { SwitchbladeSection } from \"./SwitchbladeSection.js\";\nimport { SwitchbladeSectionController } from \"./store.js\";\nexport { SwitchbladeSection } from \"./SwitchbladeSection.js\";\nexport { SwitchbladeSectionController } from \"./store.js\";\n/** Required services (cordis fiber inject). */\nexport const inject = ['slots', 'locale', 'connection', 'sessions'];\n/**\n * Mount the Switchblade settings section.\n * @param ctx - the browser plugin context.\n */\nexport function apply(ctx) {\n ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'ui-switchblade: dictionaries');\n const api = ctx.get('connection').api;\n const sessions = ctx.get('sessions');\n const controller = new SwitchbladeSectionController(api, () => {\n const state = sessions.list.getSnapshot();\n return state.current === undefined ? undefined : state.current;\n });\n ctx.slots.inject('settings.section', () => ctx.slots.register({\n name: 'settings.section',\n id: 'switchblade',\n order: 30,\n label: () => ctx.locale.bind(NS)('nav'),\n locale: NS,\n inject: () => ({\n hooks: { switchblade: controller.store },\n load: () => controller.load(),\n setDefaultPreset: (id) => controller.setDefaultPreset(id),\n addPrompt: (input) => controller.addPrompt(input),\n updatePrompt: (id, patch) => controller.updatePrompt(id, patch),\n setPromptEnabled: (id, enabled) => controller.setPromptEnabled(id, enabled),\n setDefaultPrompt: (id) => controller.setDefaultPrompt(id),\n deletePrompt: (id) => controller.deletePrompt(id),\n installSkill: (input) => controller.installSkill(input),\n updateSkill: (name, patch) => controller.updateSkill(name, patch),\n setSkillEnabled: (name, enabled) => controller.setSkillEnabled(name, enabled),\n uninstallSkill: (name) => controller.uninstallSkill(name),\n installSkillFromZip: (name, dataBase64) => controller.installSkillFromZip(name, dataBase64),\n }),\n }, SwitchbladeSection));\n}\n/** Cordis plugin identity. */\nexport const name = 'ui-switchblade';\n//# sourceMappingURL=index.js.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","names":["_Fragment"],"sources":["types/client/locales.js","types/client/SwitchbladeSection.js","types/client/store.js","types/client/index.js"],"sourcesContent":["/**\n * Switchblade management page dictionaries.\n * @module @deepseek-ai/dsh-client-ui-switchblade\n */\n/** Locale namespace owned by this plugin (settings.* prefix per the slot contract). */\nexport const NS = 'settings.switchblade';\n/** zh-CN copy. */\nexport const zh = {\n nav: 'Prompt•Skill-Armory',\n skillsTitle: '技能',\n presetsTitle: '提示词预设',\n promptsTitle: '提示词',\n commandsTitle: '命令',\n empty: '(空)',\n enabled: '启用',\n disabled: '停用',\n installed: '已装',\n refresh: '刷新',\n setDefault: '设为默认',\n loadFailed: '加载失败',\n globalHint: '· 全局生效',\n promptNamePlaceholder: '提示词名称',\n promptDescPlaceholder: '描述(可选)',\n promptContentPlaceholder: '提示词内容…',\n addPrompt: '添加提示词',\n enable: '启用',\n disable: '停用',\n delete: '删除',\n installSkill: '技能',\n skillNamePlaceholder: '技能名称(kebab-case)',\n skillDescPlaceholder: '描述(可选)',\n skillContentPlaceholder: '技能指令内容…',\n install: '安装',\n uninstall: '卸载',\n pickSkillFile: '选择本地 .md 技能文件导入',\n searchPlaceholder: '搜索…',\n installedSkills: '本地化技能',\n installedSkillsGoRight: '已安装的技能在右侧第四列管理',\n manage: '托管',\n localSkills: '本地扫描技能',\n agentPresetsTitle: 'Agent预设',\n edit: '编辑',\n save: '保存',\n cancel: '取消',\n addSkill: '添加技能',\n pickZipFile: '导入 .zip 技能包',\n cliHint: 'CLI 直接安装(在会话里输入):',\n};\n/** en-US copy. */\nexport const en = {\n nav: 'Prompt•Skill-Armory',\n skillsTitle: 'Skills',\n presetsTitle: 'Prompt Presets',\n promptsTitle: 'Prompts',\n commandsTitle: 'Commands',\n empty: '(empty)',\n enabled: 'enabled',\n disabled: 'disabled',\n installed: 'installed',\n refresh: 'Refresh',\n setDefault: 'Set default',\n loadFailed: 'Failed to load',\n globalHint: '· global',\n promptNamePlaceholder: 'Prompt name',\n promptDescPlaceholder: 'Description (optional)',\n promptContentPlaceholder: 'Prompt content…',\n addPrompt: 'Add prompt',\n enable: 'Enable',\n disable: 'Disable',\n delete: 'Delete',\n installSkill: 'Skills',\n skillNamePlaceholder: 'Skill name (kebab-case)',\n skillDescPlaceholder: 'Description (optional)',\n skillContentPlaceholder: 'Skill instructions…',\n install: 'Install',\n uninstall: 'Uninstall',\n pickSkillFile: 'Pick a local .md skill file',\n searchPlaceholder: 'Search…',\n installedSkills: 'Local skills',\n installedSkillsGoRight: 'Installed skills are managed in the right column',\n manage: 'Manage',\n localSkills: 'Scanned skills',\n agentPresetsTitle: 'Agent Presets',\n edit: 'Edit',\n save: 'Save',\n cancel: 'Cancel',\n addSkill: 'Add skill',\n pickZipFile: 'Import .zip skill bundle',\n cliHint: 'Install via CLI (type in a session):',\n};\n//# sourceMappingURL=locales.js.map","import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from \"react/jsx-runtime\";\n/**\n * Prompt-SkillArmory management page.\n *\n * Three tabs within the settings dialog's fixed width: Prompts / Skills /\n * Agent Presets. The Skills tab is the single home for skills — both the ones\n * installed through this panel and the ones scanned from the local skill\n * roots — merged into one list with full management (add / edit / toggle /\n * remove / invoke hint). A CLI entry box offers direct command installation.\n * @module @deepseek-ai/dsh-client-ui-switchblade\n */\nimport { useEffect, useState } from 'react';\nconst PHOSPHOR = '#00ff9c';\nconst DAMNED = '#ff2b4b';\nconst AMBER = '#ffb000';\nconst GRAY = '#0f3d2c';\nconst CSS = {\n root: {\n fontFamily: \"'JetBrains Mono','IBM Plex Mono',ui-monospace,monospace\",\n background: '#04070a',\n color: PHOSPHOR,\n padding: '16px',\n border: `1px solid ${GRAY}`,\n boxShadow: 'inset 0 0 40px rgba(0,255,156,.06), 0 0 18px rgba(0,255,156,.15)',\n borderRadius: '2px',\n width: '100%',\n boxSizing: 'border-box',\n },\n head: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderBottom: `1px solid ${GRAY}`,\n paddingBottom: '8px',\n marginBottom: '8px',\n },\n title: {\n fontSize: '14px',\n fontWeight: 700,\n letterSpacing: '1px',\n textShadow: `0 0 8px ${PHOSPHOR}`,\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n },\n titleAccent: {\n color: DAMNED,\n textShadow: `0 0 8px ${DAMNED}`,\n },\n tabs: {\n display: 'flex',\n gap: '4px',\n borderBottom: `1px solid ${GRAY}`,\n marginBottom: '12px',\n flexWrap: 'wrap',\n },\n tab: {\n background: 'transparent',\n border: `1px solid transparent`,\n borderBottom: 'none',\n color: '#5fb08c',\n font: 'inherit',\n fontSize: '12px',\n letterSpacing: '0.5px',\n padding: '6px 10px',\n cursor: 'pointer',\n },\n tabActive: {\n color: PHOSPHOR,\n borderColor: GRAY,\n background: 'rgba(0,40,24,.1)',\n textShadow: `0 0 6px ${PHOSPHOR}`,\n },\n columns: {\n display: 'grid',\n gridTemplateColumns: 'repeat(2, minmax(0, 1fr))',\n gap: '12px',\n alignItems: 'start',\n },\n column: {\n display: 'flex',\n flexDirection: 'column',\n gap: '10px',\n minWidth: '0',\n },\n colHeader: {\n fontSize: '12px',\n fontWeight: 700,\n letterSpacing: '1px',\n color: AMBER,\n borderBottom: `1px solid ${GRAY}`,\n paddingBottom: '6px',\n marginBottom: '2px',\n },\n card: {\n border: `1px solid ${GRAY}`,\n background: 'rgba(0,40,24,.08)',\n padding: '8px 10px',\n },\n cardTop: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n },\n name: {\n fontSize: '12px',\n fontWeight: 700,\n wordBreak: 'break-all',\n },\n badge: {\n fontSize: '9px',\n letterSpacing: '1px',\n padding: '2px 6px',\n border: '1px solid currentColor',\n flex: 'none',\n },\n badgeEnabled: { color: PHOSPHOR },\n badgeDisabled: { color: DAMNED },\n badgeInstalled: { color: AMBER },\n desc: {\n fontSize: '11px',\n color: '#5fb08c',\n marginTop: '4px',\n },\n invokeHint: {\n fontSize: '10px',\n color: '#3f8f6a',\n marginTop: '4px',\n fontStyle: 'italic',\n },\n empty: {\n fontSize: '11px',\n color: GRAY,\n padding: '8px 0',\n },\n error: {\n color: DAMNED,\n fontSize: '11px',\n padding: '8px 0',\n },\n refreshBtn: {\n background: 'transparent',\n border: `1px solid ${GRAY}`,\n color: PHOSPHOR,\n font: 'inherit',\n fontSize: '11px',\n letterSpacing: '2px',\n textTransform: 'uppercase',\n padding: '4px 10px',\n cursor: 'pointer',\n },\n actionBtn: {\n background: 'transparent',\n border: `1px solid ${GRAY}`,\n color: PHOSPHOR,\n font: 'inherit',\n fontSize: '10px',\n letterSpacing: '1px',\n padding: '2px 8px',\n cursor: 'pointer',\n marginTop: '6px',\n },\n dangerBtn: {\n borderColor: DAMNED,\n color: DAMNED,\n },\n form: {\n display: 'flex',\n flexDirection: 'column',\n gap: '6px',\n marginBottom: '10px',\n padding: '10px',\n border: `1px solid ${GRAY}`,\n background: 'rgba(0,40,24,.05)',\n },\n input: {\n background: '#04070a',\n border: `1px solid ${GRAY}`,\n color: PHOSPHOR,\n font: 'inherit',\n fontSize: '11px',\n padding: '6px 8px',\n },\n textarea: {\n background: '#04070a',\n border: `1px solid ${GRAY}`,\n color: PHOSPHOR,\n font: 'inherit',\n fontSize: '11px',\n padding: '6px 8px',\n minHeight: '80px',\n resize: 'vertical',\n },\n actions: {\n display: 'flex',\n gap: '6px',\n flexWrap: 'wrap',\n },\n hint: {\n color: GRAY,\n fontSize: '9px',\n letterSpacing: '1px',\n },\n scrollBox: {\n maxHeight: '520px',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n paddingRight: '4px',\n },\n searchInput: {\n background: '#04070a',\n border: `1px solid ${GRAY}`,\n color: '#5fb08c',\n font: 'inherit',\n fontSize: '10px',\n padding: '5px 8px',\n width: '100%',\n boxSizing: 'border-box',\n },\n fileBtn: {\n background: 'transparent',\n border: `1px dashed ${GRAY}`,\n color: '#5fb08c',\n font: 'inherit',\n fontSize: '10px',\n letterSpacing: '1px',\n padding: '8px',\n cursor: 'pointer',\n textAlign: 'center',\n },\n cliBox: {\n border: `1px dashed ${AMBER}`,\n padding: '8px 10px',\n fontSize: '10px',\n color: '#5fb08c',\n background: 'rgba(255,176,0,.04)',\n },\n versionBadge: {\n fontSize: '10px',\n fontWeight: 700,\n letterSpacing: '1px',\n color: PHOSPHOR,\n border: `1px solid ${PHOSPHOR}`,\n borderRadius: '3px',\n padding: '1px 6px',\n marginLeft: '6px',\n background: 'rgba(0,255,156,.08)',\n textShadow: `0 0 6px ${PHOSPHOR}`,\n flex: 'none',\n },\n};\n/** Open-book glyph. */\nfunction BookIcon({ size = 16 }) {\n return (_jsxs(\"svg\", { width: size, height: size, viewBox: \"0 0 16 16\", fill: \"none\", style: { flex: 'none' }, \"aria-hidden\": \"true\", children: [_jsx(\"path\", { d: \"M7.5 3.2C6.2 2.4 4.6 2.2 2.8 2.5c-.5.08-.8.5-.8 1v7.6c0 .4.3.7.7.7 1.7-.2 3.2.1 4.8 1V3.2z\", fill: \"currentColor\", opacity: \"0.55\" }), _jsx(\"path\", { d: \"M8.5 3.2c1.3-.8 2.9-1 4.7-.7.5.08.8.5.8 1v7.6c0 .4-.3.7-.7.7-1.7-.2-3.2.1-4.8 1V3.2z\", fill: \"currentColor\", opacity: \"0.85\" }), _jsx(\"path\", { d: \"M8 3.2v10.3\", stroke: \"currentColor\", strokeWidth: \"0.7\" })] }));\n}\n/** Bump with every release; keep in sync with package.json version + CHANGELOG. */\nconst ARMORY_VERSION = '0.4.7';\n/** Render the Prompt-SkillArmory management page. */\nexport function SwitchbladeSection(props) {\n const { useSwitchblade, t, load, setDefaultPreset, addPrompt, updatePrompt, setPromptEnabled, setDefaultPrompt, deletePrompt, installSkill, updateSkill, setSkillEnabled, uninstallSkill, } = props;\n const state = useSwitchblade((snapshot) => snapshot);\n const [promptName, setPromptName] = useState('');\n const [promptDesc, setPromptDesc] = useState('');\n const [promptContent, setPromptContent] = useState('');\n const [skillName, setSkillName] = useState('');\n const [skillDesc, setSkillDesc] = useState('');\n const [skillContent, setSkillContent] = useState('');\n const [busy, setBusy] = useState(false);\n const [pickedFile, setPickedFile] = useState('');\n const [promptQuery, setPromptQuery] = useState('');\n const [skillQuery, setSkillQuery] = useState('');\n const [presetQuery, setPresetQuery] = useState('');\n const [activeTab, setActiveTab] = useState('prompts');\n const [editingPromptId, setEditingPromptId] = useState();\n const [editingSkillName, setEditingSkillName] = useState();\n useEffect(() => {\n void load();\n }, [load]);\n const refresh = () => {\n void load();\n };\n const setDefault = (id) => {\n void setDefaultPreset(id);\n };\n /** Read a local skill .md file into the import form. */\n const onSkillFile = (file) => {\n if (file === undefined)\n return;\n setPickedFile(file.name);\n void file.text().then((text) => {\n const first = text.split('\\n')[0]?.trim() ?? '';\n const nameMatch = /^#\\s+([a-z0-9][a-z0-9-]*)$/i.exec(first);\n if (nameMatch !== null)\n setSkillName(nameMatch[1]?.toLowerCase() ?? '');\n setSkillContent(text.trim());\n const descLine = text.split('\\n').find((l) => l.startsWith('> '));\n if (descLine !== undefined)\n setSkillDesc(descLine.slice(2).trim());\n }).catch((error) => console.error('[switchblade] read skill file failed', error));\n };\n const submitPrompt = () => {\n if (promptName.trim() === '' || promptContent.trim() === '')\n return;\n setBusy(true);\n const action = editingPromptId !== undefined\n ? updatePrompt(editingPromptId, { name: promptName, description: promptDesc, content: promptContent })\n : addPrompt({ name: promptName, description: promptDesc, content: promptContent });\n void action\n .catch((error) => console.error('[switchblade] prompt save failed', error))\n .finally(() => {\n setBusy(false);\n setPromptName('');\n setPromptDesc('');\n setPromptContent('');\n setEditingPromptId(undefined);\n });\n };\n const startEditPrompt = (row) => {\n setEditingPromptId(row.promptId);\n setPromptName(row.name);\n setPromptDesc(row.desc);\n setPromptContent(row.content ?? '');\n };\n const togglePrompt = (id, enabled) => {\n void setPromptEnabled(id, enabled).catch((error) => console.error('[switchblade] toggle failed', error));\n };\n const markDefault = (id) => {\n void setDefaultPrompt(id).catch((error) => console.error('[switchblade] setDefault failed', error));\n };\n const removePrompt = (id) => {\n void deletePrompt(id).catch((error) => console.error('[switchblade] delete failed', error));\n };\n const submitSkill = () => {\n if (skillName.trim() === '' || skillContent.trim() === '')\n return;\n setBusy(true);\n const action = editingSkillName !== undefined\n ? updateSkill(editingSkillName, { name: skillName, description: skillDesc, content: skillContent })\n : installSkill({ name: skillName, description: skillDesc, content: skillContent });\n void action\n .catch((error) => console.error('[switchblade] skill save failed', error))\n .finally(() => {\n setBusy(false);\n setSkillName('');\n setSkillDesc('');\n setSkillContent('');\n setEditingSkillName(undefined);\n });\n };\n const startEditSkill = (row) => {\n const found = state.installedSkills.find((s) => s.name === row.installedName);\n setEditingSkillName(row.installedName);\n setSkillName(row.name);\n setSkillDesc(row.desc);\n setSkillContent(found?.content ?? '');\n };\n const toggleSkill = (name, enabled) => {\n void setSkillEnabled(name, enabled).catch((error) => console.error('[switchblade] toggle skill failed', error));\n };\n const removeSkill = (name) => {\n void uninstallSkill(name).catch((error) => console.error('[switchblade] uninstall failed', error));\n };\n /** Adopt a scanned (local) skill into the managed list. */\n const adoptSkill = (name) => {\n const found = state.skills.find((s) => s.name === name);\n if (found === undefined)\n return;\n void installSkill({ name: found.name, description: found.description, content: `# ${found.name}\\n\\n${found.description}` })\n .catch((error) => console.error('[switchblade] adopt skill failed', error));\n };\n const promptRows = state.prompts.map((p) => ({\n id: p.id, name: p.name, desc: p.description, state: p.enabled ? 'enabled' : 'disabled',\n promptId: p.id, isDefault: p.isDefault, content: p.content, promptEnabled: p.enabled,\n }));\n const presetRows = state.presets.map((p) => ({\n id: p.id, name: p.name ?? p.id, desc: p.description ?? p.trust,\n state: p.isDefault ? 'enabled' : 'installed',\n presetId: p.id, isDefault: p.isDefault,\n }));\n // Merge managed + scanned skills into ONE list, managed first.\n const managedNames = new Set(state.installedSkills.map((s) => s.name));\n const managedRows = state.installedSkills.map((s) => ({\n key: `m-${s.name}`, name: s.name, desc: s.description,\n state: s.enabled ? 'enabled' : 'disabled',\n installedName: s.name, skillEnabled: s.enabled, source: 'managed',\n }));\n const scannedRows = state.skills\n .filter((s) => !managedNames.has(s.name))\n .map((s) => ({\n key: `s-${s.name}`, name: s.name, desc: s.description,\n state: 'installed', installedName: s.name, skillEnabled: false, source: 'scanned',\n }));\n const allSkillRows = [...managedRows, ...scannedRows];\n const match = (row, q) => {\n const query = q.trim().toLowerCase();\n if (query === '')\n return true;\n return row.name.toLowerCase().includes(query) || row.desc.toLowerCase().includes(query);\n };\n const filteredPrompts = promptRows.filter((r) => match(r, promptQuery));\n const filteredPresets = presetRows.filter((r) => match(r, presetQuery));\n const filteredSkills = allSkillRows.filter((r) => match(r, skillQuery));\n const badge = (state) => (state === 'enabled' ? CSS.badgeEnabled : state === 'disabled' ? CSS.badgeDisabled : CSS.badgeInstalled);\n const label = (state) => (state === 'enabled' ? t('enabled') : state === 'disabled' ? t('disabled') : t('installed'));\n return (_jsxs(\"div\", { style: CSS.root, children: [_jsxs(\"div\", { style: CSS.head, children: [_jsxs(\"div\", { style: CSS.title, children: [_jsx(BookIcon, { size: 16 }), \" \", _jsx(\"span\", { style: CSS.titleAccent, children: \"Prompt\\u2022Skill\" }), \"-Armory\", _jsxs(\"span\", { style: CSS.versionBadge, children: [\"v\", ARMORY_VERSION] })] }), _jsx(\"button\", { style: CSS.refreshBtn, onClick: refresh, children: t('refresh') })] }), state.status === 'error' && _jsxs(\"div\", { style: CSS.error, children: [\"\\u2716 \", t('loadFailed'), \": \", state.message] }), _jsxs(\"div\", { style: CSS.tabs, children: [_jsxs(\"button\", { style: { ...CSS.tab, ...(activeTab === 'prompts' ? CSS.tabActive : {}) }, onClick: () => setActiveTab('prompts'), children: [t('promptsTitle'), \" (\", state.status === 'loading' ? '…' : promptRows.length, \")\"] }), _jsxs(\"button\", { style: { ...CSS.tab, ...(activeTab === 'skills' ? CSS.tabActive : {}) }, onClick: () => setActiveTab('skills'), children: [t('installSkill'), \" (\", state.status === 'loading' ? '…' : allSkillRows.length, \")\"] }), _jsxs(\"button\", { style: { ...CSS.tab, ...(activeTab === 'presets' ? CSS.tabActive : {}) }, onClick: () => setActiveTab('presets'), children: [t('agentPresetsTitle'), \" (\", state.status === 'loading' ? '…' : presetRows.length, \")\"] })] }), activeTab === 'prompts' && (_jsxs(\"div\", { style: CSS.columns, children: [_jsx(\"div\", { style: CSS.column, children: _jsxs(\"div\", { style: CSS.form, children: [_jsx(\"input\", { style: CSS.input, placeholder: t('promptNamePlaceholder'), value: promptName, onChange: (e) => setPromptName(e.target.value) }), _jsx(\"input\", { style: CSS.input, placeholder: t('promptDescPlaceholder'), value: promptDesc, onChange: (e) => setPromptDesc(e.target.value) }), _jsx(\"textarea\", { style: CSS.textarea, placeholder: t('promptContentPlaceholder'), value: promptContent, onChange: (e) => setPromptContent(e.target.value) }), _jsxs(\"div\", { style: CSS.actions, children: [_jsx(\"button\", { style: CSS.actionBtn, disabled: busy, onClick: submitPrompt, children: editingPromptId !== undefined ? t('save') : t('addPrompt') }), editingPromptId !== undefined && (_jsx(\"button\", { style: CSS.actionBtn, onClick: () => { setEditingPromptId(undefined); setPromptName(''); setPromptDesc(''); setPromptContent(''); }, children: t('cancel') }))] })] }) }), _jsxs(\"div\", { style: CSS.column, children: [_jsx(\"input\", { style: CSS.searchInput, placeholder: t('searchPlaceholder'), value: promptQuery, onChange: (e) => setPromptQuery(e.target.value) }), _jsx(\"div\", { style: CSS.scrollBox, children: filteredPrompts.length === 0\n ? _jsx(\"div\", { style: CSS.empty, children: t('empty') })\n : filteredPrompts.map((row) => (_jsxs(\"div\", { style: CSS.card, children: [_jsxs(\"div\", { style: CSS.cardTop, children: [_jsxs(\"div\", { style: CSS.name, children: [row.isDefault ? '★ ' : '', row.name] }), _jsx(\"span\", { style: { ...CSS.badge, ...row.state === 'enabled' ? CSS.badgeEnabled : CSS.badgeDisabled }, children: row.state === 'enabled' ? t('enabled') : t('disabled') })] }), _jsx(\"div\", { style: CSS.desc, children: row.desc || row.content?.slice(0, 80) }), _jsxs(\"div\", { style: CSS.actions, children: [!row.isDefault && _jsx(\"button\", { style: CSS.actionBtn, onClick: () => markDefault(row.promptId), children: t('setDefault') }), _jsx(\"button\", { style: CSS.actionBtn, onClick: () => togglePrompt(row.promptId, !row.promptEnabled), children: row.state === 'enabled' ? t('disable') : t('enable') }), _jsx(\"button\", { style: CSS.actionBtn, onClick: () => startEditPrompt(row), children: t('edit') }), _jsx(\"button\", { style: { ...CSS.actionBtn, ...CSS.dangerBtn }, onClick: () => removePrompt(row.promptId), children: t('delete') })] })] }, row.id))) })] })] })), activeTab === 'skills' && (_jsxs(\"div\", { style: CSS.columns, children: [_jsxs(\"div\", { style: CSS.column, children: [_jsxs(\"div\", { style: CSS.form, children: [_jsxs(\"label\", { style: CSS.fileBtn, children: [pickedFile !== '' ? `📄 ${pickedFile}` : t('pickSkillFile'), _jsx(\"input\", { type: \"file\", accept: \".md,.markdown,text/markdown,text/plain\", style: { display: 'none' }, onChange: (e) => onSkillFile(e.target.files?.[0]) })] }), _jsx(\"input\", { style: CSS.input, placeholder: t('skillNamePlaceholder'), value: skillName, onChange: (e) => setSkillName(e.target.value) }), _jsx(\"input\", { style: CSS.input, placeholder: t('skillDescPlaceholder'), value: skillDesc, onChange: (e) => setSkillDesc(e.target.value) }), _jsx(\"textarea\", { style: CSS.textarea, placeholder: t('skillContentPlaceholder'), value: skillContent, onChange: (e) => setSkillContent(e.target.value) }), _jsxs(\"div\", { style: CSS.actions, children: [_jsx(\"button\", { style: CSS.actionBtn, disabled: busy, onClick: submitSkill, children: editingSkillName !== undefined ? t('save') : t('addSkill') }), editingSkillName !== undefined && (_jsx(\"button\", { style: CSS.actionBtn, onClick: () => { setEditingSkillName(undefined); setSkillName(''); setSkillDesc(''); setSkillContent(''); }, children: t('cancel') }))] })] }), _jsxs(\"div\", { style: CSS.cliBox, children: [_jsx(\"div\", { style: { marginBottom: '4px' }, children: t('cliHint') }), _jsx(\"code\", { style: { fontSize: '10px', color: PHOSPHOR }, children: \"/armory-skill-dir <\\u76EE\\u5F55>\" }), _jsx(\"br\", {}), _jsx(\"code\", { style: { fontSize: '10px', color: PHOSPHOR }, children: \"/armory-install-zip <zip\\u8DEF\\u5F84>\" })] })] }), _jsxs(\"div\", { style: CSS.column, children: [_jsx(\"input\", { style: CSS.searchInput, placeholder: t('searchPlaceholder'), value: skillQuery, onChange: (e) => setSkillQuery(e.target.value) }), _jsx(\"div\", { style: CSS.scrollBox, children: filteredSkills.length === 0\n ? _jsx(\"div\", { style: CSS.empty, children: t('empty') })\n : filteredSkills.map((row) => (_jsxs(\"div\", { style: CSS.card, children: [_jsxs(\"div\", { style: CSS.cardTop, children: [_jsx(\"div\", { style: CSS.name, children: row.name }), _jsx(\"span\", { style: { ...CSS.badge, ...badge(row.state) }, children: label(row.state) })] }), _jsx(\"div\", { style: CSS.desc, children: row.desc }), _jsxs(\"div\", { style: CSS.invokeHint, children: [\"/ \", row.name] }), _jsx(\"div\", { style: CSS.actions, children: row.source === 'scanned' ? (_jsx(\"button\", { style: CSS.actionBtn, onClick: () => adoptSkill(row.name), children: t('manage') })) : (_jsxs(_Fragment, { children: [_jsx(\"button\", { style: CSS.actionBtn, onClick: () => toggleSkill(row.installedName, !row.skillEnabled), children: row.state === 'enabled' ? t('disable') : t('enable') }), _jsx(\"button\", { style: CSS.actionBtn, onClick: () => startEditSkill(row), children: t('edit') }), _jsx(\"button\", { style: { ...CSS.actionBtn, ...CSS.dangerBtn }, onClick: () => removeSkill(row.installedName), children: t('uninstall') })] })) })] }, row.key))) })] })] })), activeTab === 'presets' && (_jsx(\"div\", { style: CSS.columns, children: _jsxs(\"div\", { style: CSS.column, children: [_jsxs(\"div\", { style: CSS.colHeader, children: [t('agentPresetsTitle'), \" (\", presetRows.length, \")\"] }), _jsx(\"input\", { style: CSS.searchInput, placeholder: t('searchPlaceholder'), value: presetQuery, onChange: (e) => setPresetQuery(e.target.value) }), _jsx(\"div\", { style: CSS.scrollBox, children: filteredPresets.length === 0\n ? _jsx(\"div\", { style: CSS.empty, children: t('empty') })\n : filteredPresets.map((row) => (_jsxs(\"div\", { style: CSS.card, children: [_jsxs(\"div\", { style: CSS.cardTop, children: [_jsxs(\"div\", { style: CSS.name, children: [row.isDefault ? '★ ' : '', row.name] }), _jsx(\"span\", { style: { ...CSS.badge, ...badge(row.state) }, children: label(row.state) })] }), _jsx(\"div\", { style: CSS.desc, children: row.desc }), !row.isDefault && _jsx(\"button\", { style: CSS.actionBtn, onClick: () => setDefault(row.presetId), children: t('setDefault') })] }, row.id))) })] }) }))] }));\n}\n//# sourceMappingURL=SwitchbladeSection.js.map","/**\n * Switchblade section data controller: reads the skill catalog and the prompt\n * preset roster through the existing connection RPC surface (no Typert\n * generation needed — these methods are already wired).\n * @module @deepseek-ai/dsh-client-ui-switchblade\n */\nimport { createSnapshotStore } from '@deepseek-ai/dsh-client-runtime/client';\n/** Initial (idle) state. */\nconst IDLE = {\n status: 'idle',\n skills: [],\n presets: [],\n commands: [],\n prompts: [],\n installedSkills: [],\n};\n/** Normalize a thrown wire error to a message. */\nfunction messageOf(error) {\n return error instanceof Error ? error.message : String(error);\n}\n/**\n * Data controller bound to one session's connection.\n * @param api - the connection's API client.\n * @param sessionId - session the skill catalog resolves against.\n */\nexport class SwitchbladeSectionController {\n api;\n sessionId;\n /** Snapshot store backing the section's view state. */\n store = createSnapshotStore(IDLE);\n constructor(api, sessionId) {\n this.api = api;\n this.sessionId = sessionId;\n }\n /**\n * Load skills, presets, prompts, and installed skills. Prompts and installed\n * skills come from the `switchblade` settings namespace (the Host watches\n * it and re-injects on change).\n */\n async load() {\n this.store.set({ ...IDLE, status: 'loading' });\n try {\n // skill.list requires a live session; without one we skip it (never\n // hang). Presets + settings always resolve, so the panel opens reliably.\n const sessionId = this.sessionId?.();\n const calls = [\n this.api.agentPresets.list({}),\n this.api.settings.describe({}),\n ];\n if (sessionId !== undefined)\n calls.push(this.api.skills.list({ sessionId }));\n const [presetRes, settingsRes, skillRes] = await Promise.all(calls);\n if (!presetRes.result.ok)\n throw new Error(`agentPreset.list: ${presetRes.result.error.message}`);\n if (!settingsRes.result.ok)\n throw new Error(`settings.describe: ${settingsRes.result.error.message}`);\n const skills = skillRes !== undefined && skillRes.result.ok\n ? skillRes.result.value.skills.map((skill) => ({\n name: skill.name,\n description: skill.description,\n modelInvocable: skill.modelInvocable,\n }))\n : [];\n const presets = presetRes.result.value.presets.map((preset) => ({\n id: preset.id,\n isDefault: preset.isDefault,\n trust: preset.trust,\n ...preset.name === undefined ? {} : { name: preset.name },\n ...preset.description === undefined ? {} : { description: preset.description },\n ...preset.broken === undefined ? {} : { broken: preset.broken },\n }));\n const switchbladeSection = this.sectionFromSettings(settingsRes.result.value, 'switchblade');\n const prompts = Array.isArray(switchbladeSection?.prompts) ? switchbladeSection.prompts : [];\n const installedSkills = Array.isArray(switchbladeSection?.installedSkills)\n ? switchbladeSection.installedSkills.map((s) => ({\n name: s.name ?? '',\n description: s.description ?? '',\n content: s.content ?? '',\n enabled: s.enabled ?? true,\n }))\n : [];\n this.store.set({\n status: 'ready',\n skills,\n presets,\n commands: [],\n prompts,\n installedSkills,\n });\n }\n catch (error) {\n this.store.set({ ...IDLE, status: 'error', message: messageOf(error) });\n }\n }\n /** Read one namespace's user section from a settings.describe value. */\n sectionFromSettings(value, ns) {\n if (typeof value !== 'object' || value === null)\n return undefined;\n const entries = value.namespaces;\n if (!Array.isArray(entries))\n return undefined;\n for (const entry of entries) {\n const row = entry;\n if (row.ns === ns) {\n const section = row.value;\n return typeof section === 'object' && section !== null ? section : undefined;\n }\n }\n return undefined;\n }\n // ---------------------------------------------------------------------------\n // Prompt CRUD (writes to the switchblade settings namespace; Host re-injects)\n // ---------------------------------------------------------------------------\n /** Add a prompt. */\n async addPrompt(input) {\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['prompts'], value: [...this.currentPrompts(), {\n id: this.slugify(input.name),\n name: input.name,\n description: input.description,\n content: input.content,\n order: this.currentPrompts().length,\n enabled: true,\n isDefault: this.currentPrompts().length === 0,\n }] }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n /** Toggle one prompt's enabled state. */\n async setPromptEnabled(id, enabled) {\n const next = this.currentPrompts().map((p) => p.id === id ? { ...p, enabled } : p);\n await this.writePrompts(next);\n }\n /** Mark one prompt default; clears others. */\n async setDefaultPrompt(id) {\n const next = this.currentPrompts().map((p) => ({ ...p, isDefault: p.id === id }));\n await this.writePrompts(next);\n }\n /** Delete one prompt. */\n async deletePrompt(id) {\n const next = this.currentPrompts().filter((p) => p.id !== id);\n await this.writePrompts(next);\n }\n /** Update a prompt's name/description/content. */\n async updatePrompt(id, patch) {\n const next = this.currentPrompts().map((p) => p.id === id ? {\n ...p,\n name: patch.name?.trim() || p.name,\n description: patch.description ?? p.description,\n content: patch.content ?? p.content,\n } : p);\n await this.writePrompts(next);\n }\n /** Persist the prompt list through the settings RPC. */\n async writePrompts(prompts) {\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['prompts'], value: prompts }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n /** Current prompt list from the loaded snapshot. */\n currentPrompts() {\n return this.store.getSnapshot().prompts;\n }\n /** Sluggify a name into an id. */\n slugify(value) {\n const slug = value.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');\n return slug.length > 0 ? slug : `prompt-${Date.now()}`;\n }\n // ---------------------------------------------------------------------------\n // Skill install/uninstall (writes to the switchblade settings namespace)\n // ---------------------------------------------------------------------------\n /** Install a skill from a name + content (enabled by default). */\n async installSkill(input) {\n const next = [...this.currentInstalledSkills(), {\n name: input.name,\n description: input.description,\n content: input.content,\n enabled: true,\n }];\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['installedSkills'], value: next }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n /** Toggle one installed skill's enabled state. */\n async setSkillEnabled(name, enabled) {\n const next = this.currentInstalledSkills().map((s) => s.name === name ? { ...s, enabled } : s);\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['installedSkills'], value: next }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n /** Uninstall one installed skill. */\n async uninstallSkill(name) {\n const next = this.currentInstalledSkills().filter((s) => s.name !== name);\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['installedSkills'], value: next }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n /** Update an installed skill's name/description/content. */\n async updateSkill(name, patch) {\n const next = this.currentInstalledSkills().map((s) => s.name === name ? {\n ...s,\n name: patch.name?.trim() || s.name,\n description: patch.description ?? s.description,\n content: patch.content ?? s.content,\n } : s);\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['installedSkills'], value: next }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n /** Current installed skills from the loaded snapshot. */\n currentInstalledSkills() {\n return this.store.getSnapshot().installedSkills;\n }\n /**\n * Queue a zip archive (base64) for extraction into ~/.dsh/skills. The Host\n * watch sees pendingZip and installs it (skil-filesystem then discovers it).\n */\n async installSkillFromZip(name, dataBase64) {\n const res = await this.api.settings.mutate({\n ns: 'switchblade',\n ops: [{ op: 'set', path: ['pendingZip'], value: { name, dataBase64 } }],\n });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n // Wait a tick for the Host watch to extract, then refresh.\n await new Promise((r) => setTimeout(r, 500));\n await this.load();\n }\n /** Set the default prompt preset. */\n async setDefaultPreset(id) {\n const res = await this.api.settings.update({ ns: 'agent-presets', patch: { default: id } });\n if (!res.result.ok)\n throw new Error(res.result.error.message);\n await this.load();\n }\n}\n//# sourceMappingURL=store.js.map","/**\n * Switchblade management page, browser half: registers the `settings.section`\n * navigation entry and renders the edgelord panel from the connection RPC\n * state. Global scope (root) — one management seat for every session.\n * @module @deepseek-ai/dsh-client-ui-switchblade\n */\nimport { en, NS, zh } from \"./locales.js\";\nimport { SwitchbladeSection } from \"./SwitchbladeSection.js\";\nimport { SwitchbladeSectionController } from \"./store.js\";\nexport { SwitchbladeSection } from \"./SwitchbladeSection.js\";\nexport { SwitchbladeSectionController } from \"./store.js\";\n/** Required services (cordis fiber inject). */\nexport const inject = ['slots', 'locale', 'connection', 'sessions'];\n/**\n * Mount the Switchblade settings section.\n * @param ctx - the browser plugin context.\n */\nexport function apply(ctx) {\n ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'ui-switchblade: dictionaries');\n const api = ctx.get('connection').api;\n const sessions = ctx.get('sessions');\n const controller = new SwitchbladeSectionController(api, () => {\n const state = sessions.list.getSnapshot();\n return state.current === undefined ? undefined : state.current;\n });\n ctx.slots.inject('settings.section', () => ctx.slots.register({\n name: 'settings.section',\n id: 'switchblade',\n order: 30,\n label: () => ctx.locale.bind(NS)('nav'),\n locale: NS,\n inject: () => ({\n hooks: { switchblade: controller.store },\n load: () => controller.load(),\n setDefaultPreset: (id) => controller.setDefaultPreset(id),\n addPrompt: (input) => controller.addPrompt(input),\n updatePrompt: (id, patch) => controller.updatePrompt(id, patch),\n setPromptEnabled: (id, enabled) => controller.setPromptEnabled(id, enabled),\n setDefaultPrompt: (id) => controller.setDefaultPrompt(id),\n deletePrompt: (id) => controller.deletePrompt(id),\n installSkill: (input) => controller.installSkill(input),\n updateSkill: (name, patch) => controller.updateSkill(name, patch),\n setSkillEnabled: (name, enabled) => controller.setSkillEnabled(name, enabled),\n uninstallSkill: (name) => controller.uninstallSkill(name),\n installSkillFromZip: (name, dataBase64) => controller.installSkillFromZip(name, dataBase64),\n }),\n }, SwitchbladeSection));\n}\n/** Cordis plugin identity. */\nexport const name = 'ui-switchblade';\n//# sourceMappingURL=index.js.map"],"mappings":";;;;;;;;;;;;;;;EAKA,MAAa,KAAK;;EAElB,MAAa,KAAK;GACd,KAAK;GACL,aAAa;GACb,cAAc;GACd,cAAc;GACd,eAAe;GACf,OAAO;GACP,SAAS;GACT,UAAU;GACV,WAAW;GACX,SAAS;GACT,YAAY;GACZ,YAAY;GACZ,YAAY;GACZ,uBAAuB;GACvB,uBAAuB;GACvB,0BAA0B;GAC1B,WAAW;GACX,QAAQ;GACR,SAAS;GACT,QAAQ;GACR,cAAc;GACd,sBAAsB;GACtB,sBAAsB;GACtB,yBAAyB;GACzB,SAAS;GACT,WAAW;GACX,eAAe;GACf,mBAAmB;GACnB,iBAAiB;GACjB,wBAAwB;GACxB,QAAQ;GACR,aAAa;GACb,mBAAmB;GACnB,MAAM;GACN,MAAM;GACN,QAAQ;GACR,UAAU;GACV,aAAa;GACb,SAAS;EACb;;EAEA,MAAa,KAAK;GACd,KAAK;GACL,aAAa;GACb,cAAc;GACd,cAAc;GACd,eAAe;GACf,OAAO;GACP,SAAS;GACT,UAAU;GACV,WAAW;GACX,SAAS;GACT,YAAY;GACZ,YAAY;GACZ,YAAY;GACZ,uBAAuB;GACvB,uBAAuB;GACvB,0BAA0B;GAC1B,WAAW;GACX,QAAQ;GACR,SAAS;GACT,QAAQ;GACR,cAAc;GACd,sBAAsB;GACtB,sBAAsB;GACtB,yBAAyB;GACzB,SAAS;GACT,WAAW;GACX,eAAe;GACf,mBAAmB;GACnB,iBAAiB;GACjB,wBAAwB;GACxB,QAAQ;GACR,aAAa;GACb,mBAAmB;GACnB,MAAM;GACN,MAAM;GACN,QAAQ;GACR,UAAU;GACV,aAAa;GACb,SAAS;EACb;;;;;;;;;;;;;EC7EA,MAAM,WAAW;EACjB,MAAM,SAAS;EACf,MAAM,QAAQ;EACd,MAAM,OAAO;EACb,MAAM,MAAM;GACR,MAAM;IACF,YAAY;IACZ,YAAY;IACZ,OAAO;IACP,SAAS;IACT,QAAQ,aAAa;IACrB,WAAW;IACX,cAAc;IACd,OAAO;IACP,WAAW;GACf;GACA,MAAM;IACF,SAAS;IACT,YAAY;IACZ,gBAAgB;IAChB,cAAc,aAAa;IAC3B,eAAe;IACf,cAAc;GAClB;GACA,OAAO;IACH,UAAU;IACV,YAAY;IACZ,eAAe;IACf,YAAY,WAAW;IACvB,SAAS;IACT,YAAY;IACZ,KAAK;GACT;GACA,aAAa;IACT,OAAO;IACP,YAAY,WAAW;GAC3B;GACA,MAAM;IACF,SAAS;IACT,KAAK;IACL,cAAc,aAAa;IAC3B,cAAc;IACd,UAAU;GACd;GACA,KAAK;IACD,YAAY;IACZ,QAAQ;IACR,cAAc;IACd,OAAO;IACP,MAAM;IACN,UAAU;IACV,eAAe;IACf,SAAS;IACT,QAAQ;GACZ;GACA,WAAW;IACP,OAAO;IACP,aAAa;IACb,YAAY;IACZ,YAAY,WAAW;GAC3B;GACA,SAAS;IACL,SAAS;IACT,qBAAqB;IACrB,KAAK;IACL,YAAY;GAChB;GACA,QAAQ;IACJ,SAAS;IACT,eAAe;IACf,KAAK;IACL,UAAU;GACd;GACA,WAAW;IACP,UAAU;IACV,YAAY;IACZ,eAAe;IACf,OAAO;IACP,cAAc,aAAa;IAC3B,eAAe;IACf,cAAc;GAClB;GACA,MAAM;IACF,QAAQ,aAAa;IACrB,YAAY;IACZ,SAAS;GACb;GACA,SAAS;IACL,SAAS;IACT,YAAY;IACZ,gBAAgB;IAChB,KAAK;GACT;GACA,MAAM;IACF,UAAU;IACV,YAAY;IACZ,WAAW;GACf;GACA,OAAO;IACH,UAAU;IACV,eAAe;IACf,SAAS;IACT,QAAQ;IACR,MAAM;GACV;GACA,cAAc,EAAE,OAAO,SAAS;GAChC,eAAe,EAAE,OAAO,OAAO;GAC/B,gBAAgB,EAAE,OAAO,MAAM;GAC/B,MAAM;IACF,UAAU;IACV,OAAO;IACP,WAAW;GACf;GACA,YAAY;IACR,UAAU;IACV,OAAO;IACP,WAAW;IACX,WAAW;GACf;GACA,OAAO;IACH,UAAU;IACV,OAAO;IACP,SAAS;GACb;GACA,OAAO;IACH,OAAO;IACP,UAAU;IACV,SAAS;GACb;GACA,YAAY;IACR,YAAY;IACZ,QAAQ,aAAa;IACrB,OAAO;IACP,MAAM;IACN,UAAU;IACV,eAAe;IACf,eAAe;IACf,SAAS;IACT,QAAQ;GACZ;GACA,WAAW;IACP,YAAY;IACZ,QAAQ,aAAa;IACrB,OAAO;IACP,MAAM;IACN,UAAU;IACV,eAAe;IACf,SAAS;IACT,QAAQ;IACR,WAAW;GACf;GACA,WAAW;IACP,aAAa;IACb,OAAO;GACX;GACA,MAAM;IACF,SAAS;IACT,eAAe;IACf,KAAK;IACL,cAAc;IACd,SAAS;IACT,QAAQ,aAAa;IACrB,YAAY;GAChB;GACA,OAAO;IACH,YAAY;IACZ,QAAQ,aAAa;IACrB,OAAO;IACP,MAAM;IACN,UAAU;IACV,SAAS;GACb;GACA,UAAU;IACN,YAAY;IACZ,QAAQ,aAAa;IACrB,OAAO;IACP,MAAM;IACN,UAAU;IACV,SAAS;IACT,WAAW;IACX,QAAQ;GACZ;GACA,SAAS;IACL,SAAS;IACT,KAAK;IACL,UAAU;GACd;GACA,MAAM;IACF,OAAO;IACP,UAAU;IACV,eAAe;GACnB;GACA,WAAW;IACP,WAAW;IACX,WAAW;IACX,SAAS;IACT,eAAe;IACf,KAAK;IACL,cAAc;GAClB;GACA,aAAa;IACT,YAAY;IACZ,QAAQ,aAAa;IACrB,OAAO;IACP,MAAM;IACN,UAAU;IACV,SAAS;IACT,OAAO;IACP,WAAW;GACf;GACA,SAAS;IACL,YAAY;IACZ,QAAQ,cAAc;IACtB,OAAO;IACP,MAAM;IACN,UAAU;IACV,eAAe;IACf,SAAS;IACT,QAAQ;IACR,WAAW;GACf;GACA,QAAQ;IACJ,QAAQ,cAAc;IACtB,SAAS;IACT,UAAU;IACV,OAAO;IACP,YAAY;GAChB;GACA,cAAc;IACV,UAAU;IACV,YAAY;IACZ,eAAe;IACf,OAAO;IACP,QAAQ,aAAa;IACrB,cAAc;IACd,SAAS;IACT,YAAY;IACZ,YAAY;IACZ,YAAY,WAAW;IACvB,MAAM;GACV;EACJ;;EAEA,SAAS,SAAS,EAAE,OAAO,MAAM;GAC7B,QAAA,GAAA,kBAAA,KAAA,CAAc,OAAO;IAAE,OAAO;IAAM,QAAQ;IAAM,SAAS;IAAa,MAAM;IAAQ,OAAO,EAAE,MAAM,OAAO;IAAG,eAAe;IAAQ,UAAU;gCAAM,QAAQ;MAAE,GAAG;MAA8F,MAAM;MAAgB,SAAS;KAAO,CAAC;gCAAQ,QAAQ;MAAE,GAAG;MAAwF,MAAM;MAAgB,SAAS;KAAO,CAAC;gCAAQ,QAAQ;MAAE,GAAG;MAAe,QAAQ;MAAgB,aAAa;KAAM,CAAC;IAAC;GAAE,CAAC;EACphB;;EAEA,MAAM,iBAAiB;;EAEvB,SAAgB,mBAAmB,OAAO;GACtC,MAAM,EAAE,gBAAgB,GAAG,MAAM,kBAAkB,WAAW,cAAc,kBAAkB,kBAAkB,cAAc,cAAc,aAAa,iBAAiB,mBAAoB;GAC9L,MAAM,QAAQ,gBAAgB,aAAa,QAAQ;GACnD,MAAM,CAAC,YAAY,kBAAA,GAAA,MAAA,SAAA,CAA0B,EAAE;GAC/C,MAAM,CAAC,YAAY,kBAAA,GAAA,MAAA,SAAA,CAA0B,EAAE;GAC/C,MAAM,CAAC,eAAe,qBAAA,GAAA,MAAA,SAAA,CAA6B,EAAE;GACrD,MAAM,CAAC,WAAW,iBAAA,GAAA,MAAA,SAAA,CAAyB,EAAE;GAC7C,MAAM,CAAC,WAAW,iBAAA,GAAA,MAAA,SAAA,CAAyB,EAAE;GAC7C,MAAM,CAAC,cAAc,oBAAA,GAAA,MAAA,SAAA,CAA4B,EAAE;GACnD,MAAM,CAAC,MAAM,YAAA,GAAA,MAAA,SAAA,CAAoB,KAAK;GACtC,MAAM,CAAC,YAAY,kBAAA,GAAA,MAAA,SAAA,CAA0B,EAAE;GAC/C,MAAM,CAAC,aAAa,mBAAA,GAAA,MAAA,SAAA,CAA2B,EAAE;GACjD,MAAM,CAAC,YAAY,kBAAA,GAAA,MAAA,SAAA,CAA0B,EAAE;GAC/C,MAAM,CAAC,aAAa,mBAAA,GAAA,MAAA,SAAA,CAA2B,EAAE;GACjD,MAAM,CAAC,WAAW,iBAAA,GAAA,MAAA,SAAA,CAAyB,SAAS;GACpD,MAAM,CAAC,iBAAiB,uBAAA,GAAA,MAAA,SAAA,CAA+B;GACvD,MAAM,CAAC,kBAAkB,wBAAA,GAAA,MAAA,SAAA,CAAgC;GACzD,CAAA,GAAA,MAAA,UAAA,OAAgB;IACZ,KAAU;GACd,GAAG,CAAC,IAAI,CAAC;GACT,MAAM,gBAAgB;IAClB,KAAU;GACd;GACA,MAAM,cAAc,OAAO;IACvB,iBAAsB,EAAE;GAC5B;;GAEA,MAAM,eAAe,SAAS;IAC1B,IAAI,SAAS,KAAA,GACT;IACJ,cAAc,KAAK,IAAI;IACvB,KAAU,KAAK,CAAC,CAAC,MAAM,SAAS;KAC5B,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,EAAE,EAAE,KAAK,KAAK;KAC7C,MAAM,YAAY,8BAA8B,KAAK,KAAK;KAC1D,IAAI,cAAc,MACd,aAAa,UAAU,EAAE,EAAE,YAAY,KAAK,EAAE;KAClD,gBAAgB,KAAK,KAAK,CAAC;KAC3B,MAAM,WAAW,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,MAAM,EAAE,WAAW,IAAI,CAAC;KAChE,IAAI,aAAa,KAAA,GACb,aAAa,SAAS,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAC7C,CAAC,CAAC,CAAC,OAAO,UAAU,QAAQ,MAAM,wCAAwC,KAAK,CAAC;GACpF;GACA,MAAM,qBAAqB;IACvB,IAAI,WAAW,KAAK,MAAM,MAAM,cAAc,KAAK,MAAM,IACrD;IACJ,QAAQ,IAAI;IAIZ,CAHe,oBAAoB,KAAA,IAC7B,aAAa,iBAAiB;KAAE,MAAM;KAAY,aAAa;KAAY,SAAS;IAAc,CAAC,IACnG,UAAU;KAAE,MAAM;KAAY,aAAa;KAAY,SAAS;IAAc,CAAC,EAAA,CAEhF,OAAO,UAAU,QAAQ,MAAM,oCAAoC,KAAK,CAAC,CAAC,CAC1E,cAAc;KACf,QAAQ,KAAK;KACb,cAAc,EAAE;KAChB,cAAc,EAAE;KAChB,iBAAiB,EAAE;KACnB,mBAAmB,KAAA,CAAS;IAChC,CAAC;GACL;GACA,MAAM,mBAAmB,QAAQ;IAC7B,mBAAmB,IAAI,QAAQ;IAC/B,cAAc,IAAI,IAAI;IACtB,cAAc,IAAI,IAAI;IACtB,iBAAiB,IAAI,WAAW,EAAE;GACtC;GACA,MAAM,gBAAgB,IAAI,YAAY;IAClC,iBAAsB,IAAI,OAAO,CAAC,CAAC,OAAO,UAAU,QAAQ,MAAM,+BAA+B,KAAK,CAAC;GAC3G;GACA,MAAM,eAAe,OAAO;IACxB,iBAAsB,EAAE,CAAC,CAAC,OAAO,UAAU,QAAQ,MAAM,mCAAmC,KAAK,CAAC;GACtG;GACA,MAAM,gBAAgB,OAAO;IACzB,aAAkB,EAAE,CAAC,CAAC,OAAO,UAAU,QAAQ,MAAM,+BAA+B,KAAK,CAAC;GAC9F;GACA,MAAM,oBAAoB;IACtB,IAAI,UAAU,KAAK,MAAM,MAAM,aAAa,KAAK,MAAM,IACnD;IACJ,QAAQ,IAAI;IAIZ,CAHe,qBAAqB,KAAA,IAC9B,YAAY,kBAAkB;KAAE,MAAM;KAAW,aAAa;KAAW,SAAS;IAAa,CAAC,IAChG,aAAa;KAAE,MAAM;KAAW,aAAa;KAAW,SAAS;IAAa,CAAC,EAAA,CAEhF,OAAO,UAAU,QAAQ,MAAM,mCAAmC,KAAK,CAAC,CAAC,CACzE,cAAc;KACf,QAAQ,KAAK;KACb,aAAa,EAAE;KACf,aAAa,EAAE;KACf,gBAAgB,EAAE;KAClB,oBAAoB,KAAA,CAAS;IACjC,CAAC;GACL;GACA,MAAM,kBAAkB,QAAQ;IAC5B,MAAM,QAAQ,MAAM,gBAAgB,MAAM,MAAM,EAAE,SAAS,IAAI,aAAa;IAC5E,oBAAoB,IAAI,aAAa;IACrC,aAAa,IAAI,IAAI;IACrB,aAAa,IAAI,IAAI;IACrB,gBAAgB,OAAO,WAAW,EAAE;GACxC;GACA,MAAM,eAAe,MAAM,YAAY;IACnC,gBAAqB,MAAM,OAAO,CAAC,CAAC,OAAO,UAAU,QAAQ,MAAM,qCAAqC,KAAK,CAAC;GAClH;GACA,MAAM,eAAe,SAAS;IAC1B,eAAoB,IAAI,CAAC,CAAC,OAAO,UAAU,QAAQ,MAAM,kCAAkC,KAAK,CAAC;GACrG;;GAEA,MAAM,cAAc,SAAS;IACzB,MAAM,QAAQ,MAAM,OAAO,MAAM,MAAM,EAAE,SAAS,IAAI;IACtD,IAAI,UAAU,KAAA,GACV;IACJ,aAAkB;KAAE,MAAM,MAAM;KAAM,aAAa,MAAM;KAAa,SAAS,KAAK,MAAM,KAAK,MAAM,MAAM;IAAc,CAAC,CAAC,CACtH,OAAO,UAAU,QAAQ,MAAM,oCAAoC,KAAK,CAAC;GAClF;GACA,MAAM,aAAa,MAAM,QAAQ,KAAK,OAAO;IACzC,IAAI,EAAE;IAAI,MAAM,EAAE;IAAM,MAAM,EAAE;IAAa,OAAO,EAAE,UAAU,YAAY;IAC5E,UAAU,EAAE;IAAI,WAAW,EAAE;IAAW,SAAS,EAAE;IAAS,eAAe,EAAE;GACjF,EAAE;GACF,MAAM,aAAa,MAAM,QAAQ,KAAK,OAAO;IACzC,IAAI,EAAE;IAAI,MAAM,EAAE,QAAQ,EAAE;IAAI,MAAM,EAAE,eAAe,EAAE;IACzD,OAAO,EAAE,YAAY,YAAY;IACjC,UAAU,EAAE;IAAI,WAAW,EAAE;GACjC,EAAE;GAEF,MAAM,eAAe,IAAI,IAAI,MAAM,gBAAgB,KAAK,MAAM,EAAE,IAAI,CAAC;GACrE,MAAM,cAAc,MAAM,gBAAgB,KAAK,OAAO;IAClD,KAAK,KAAK,EAAE;IAAQ,MAAM,EAAE;IAAM,MAAM,EAAE;IAC1C,OAAO,EAAE,UAAU,YAAY;IAC/B,eAAe,EAAE;IAAM,cAAc,EAAE;IAAS,QAAQ;GAC5D,EAAE;GACF,MAAM,cAAc,MAAM,OACrB,QAAQ,MAAM,CAAC,aAAa,IAAI,EAAE,IAAI,CAAC,CAAC,CACxC,KAAK,OAAO;IACb,KAAK,KAAK,EAAE;IAAQ,MAAM,EAAE;IAAM,MAAM,EAAE;IAC1C,OAAO;IAAa,eAAe,EAAE;IAAM,cAAc;IAAO,QAAQ;GAC5E,EAAE;GACF,MAAM,eAAe,CAAC,GAAG,aAAa,GAAG,WAAW;GACpD,MAAM,SAAS,KAAK,MAAM;IACtB,MAAM,QAAQ,EAAE,KAAK,CAAC,CAAC,YAAY;IACnC,IAAI,UAAU,IACV,OAAO;IACX,OAAO,IAAI,KAAK,YAAY,CAAC,CAAC,SAAS,KAAK,KAAK,IAAI,KAAK,YAAY,CAAC,CAAC,SAAS,KAAK;GAC1F;GACA,MAAM,kBAAkB,WAAW,QAAQ,MAAM,MAAM,GAAG,WAAW,CAAC;GACtE,MAAM,kBAAkB,WAAW,QAAQ,MAAM,MAAM,GAAG,WAAW,CAAC;GACtE,MAAM,iBAAiB,aAAa,QAAQ,MAAM,MAAM,GAAG,UAAU,CAAC;GACtE,MAAM,SAAS,UAAW,UAAU,YAAY,IAAI,eAAe,UAAU,aAAa,IAAI,gBAAgB,IAAI;GAClH,MAAM,SAAS,UAAW,UAAU,YAAY,EAAE,SAAS,IAAI,UAAU,aAAa,EAAE,UAAU,IAAI,EAAE,WAAW;GACnH,QAAA,GAAA,kBAAA,KAAA,CAAc,OAAO;IAAE,OAAO,IAAI;IAAM,UAAU;iCAAO,OAAO;MAAE,OAAO,IAAI;MAAM,UAAU,EAAA,GAAA,kBAAA,KAAA,CAAO,OAAO;OAAE,OAAO,IAAI;OAAO,UAAU;mCAAM,UAAU,EAAE,MAAM,GAAG,CAAC;QAAG;mCAAU,QAAQ;SAAE,OAAO,IAAI;SAAa,UAAU;QAAoB,CAAC;QAAG;oCAAiB,QAAQ;SAAE,OAAO,IAAI;SAAc,UAAU,CAAC,KAAK,cAAc;QAAE,CAAC;OAAC;MAAE,CAAC,IAAA,GAAA,kBAAA,IAAA,CAAQ,UAAU;OAAE,OAAO,IAAI;OAAY,SAAS;OAAS,UAAU,EAAE,SAAS;MAAE,CAAC,CAAC;KAAE,CAAC;KAAG,MAAM,WAAW,YAAA,GAAA,kBAAA,KAAA,CAAiB,OAAO;MAAE,OAAO,IAAI;MAAO,UAAU;OAAC;OAAW,EAAE,YAAY;OAAG;OAAM,MAAM;MAAO;KAAE,CAAC;iCAAS,OAAO;MAAE,OAAO,IAAI;MAAM,UAAU;mCAAO,UAAU;QAAE,OAAO;SAAE,GAAG,IAAI;SAAK,GAAI,cAAc,YAAY,IAAI,YAAY,CAAC;QAAG;QAAG,eAAe,aAAa,SAAS;QAAG,UAAU;SAAC,EAAE,cAAc;SAAG;SAAM,MAAM,WAAW,YAAY,MAAM,WAAW;SAAQ;QAAG;OAAE,CAAC;mCAAS,UAAU;QAAE,OAAO;SAAE,GAAG,IAAI;SAAK,GAAI,cAAc,WAAW,IAAI,YAAY,CAAC;QAAG;QAAG,eAAe,aAAa,QAAQ;QAAG,UAAU;SAAC,EAAE,cAAc;SAAG;SAAM,MAAM,WAAW,YAAY,MAAM,aAAa;SAAQ;QAAG;OAAE,CAAC;mCAAS,UAAU;QAAE,OAAO;SAAE,GAAG,IAAI;SAAK,GAAI,cAAc,YAAY,IAAI,YAAY,CAAC;QAAG;QAAG,eAAe,aAAa,SAAS;QAAG,UAAU;SAAC,EAAE,mBAAmB;SAAG;SAAM,MAAM,WAAW,YAAY,MAAM,WAAW;SAAQ;QAAG;OAAE,CAAC;MAAC;KAAE,CAAC;KAAG,cAAc,cAAA,GAAA,kBAAA,KAAA,CAAoB,OAAO;MAAE,OAAO,IAAI;MAAS,UAAU,EAAA,GAAA,kBAAA,IAAA,CAAM,OAAO;OAAE,OAAO,IAAI;OAAQ,WAAA,GAAA,kBAAA,KAAA,CAAgB,OAAO;QAAE,OAAO,IAAI;QAAM,UAAU;oCAAM,SAAS;UAAE,OAAO,IAAI;UAAO,aAAa,EAAE,uBAAuB;UAAG,OAAO;UAAY,WAAW,MAAM,cAAc,EAAE,OAAO,KAAK;SAAE,CAAC;oCAAQ,SAAS;UAAE,OAAO,IAAI;UAAO,aAAa,EAAE,uBAAuB;UAAG,OAAO;UAAY,WAAW,MAAM,cAAc,EAAE,OAAO,KAAK;SAAE,CAAC;oCAAQ,YAAY;UAAE,OAAO,IAAI;UAAU,aAAa,EAAE,0BAA0B;UAAG,OAAO;UAAe,WAAW,MAAM,iBAAiB,EAAE,OAAO,KAAK;SAAE,CAAC;qCAAS,OAAO;UAAE,OAAO,IAAI;UAAS,UAAU,EAAA,GAAA,kBAAA,IAAA,CAAM,UAAU;WAAE,OAAO,IAAI;WAAW,UAAU;WAAM,SAAS;WAAc,UAAU,oBAAoB,KAAA,IAAY,EAAE,MAAM,IAAI,EAAE,WAAW;UAAE,CAAC,GAAG,oBAAoB,KAAA,MAAA,GAAA,kBAAA,IAAA,CAAmB,UAAU;WAAE,OAAO,IAAI;WAAW,eAAe;YAAE,mBAAmB,KAAA,CAAS;YAAG,cAAc,EAAE;YAAG,cAAc,EAAE;YAAG,iBAAiB,EAAE;WAAG;WAAG,UAAU,EAAE,QAAQ;UAAE,CAAC,CAAE;SAAE,CAAC;QAAC;OAAE,CAAC;MAAE,CAAC,IAAA,GAAA,kBAAA,KAAA,CAAS,OAAO;OAAE,OAAO,IAAI;OAAQ,UAAU,EAAA,GAAA,kBAAA,IAAA,CAAM,SAAS;QAAE,OAAO,IAAI;QAAa,aAAa,EAAE,mBAAmB;QAAG,OAAO;QAAa,WAAW,MAAM,eAAe,EAAE,OAAO,KAAK;OAAE,CAAC,IAAA,GAAA,kBAAA,IAAA,CAAQ,OAAO;QAAE,OAAO,IAAI;QAAW,UAAU,gBAAgB,WAAW,KAAA,GAAA,kBAAA,IAAA,CAC1/E,OAAO;SAAE,OAAO,IAAI;SAAO,UAAU,EAAE,OAAO;QAAE,CAAC,IACtD,gBAAgB,KAAK,SAAA,GAAA,kBAAA,KAAA,CAAe,OAAO;SAAE,OAAO,IAAI;SAAM,UAAU;sCAAO,OAAO;WAAE,OAAO,IAAI;WAAS,UAAU,EAAA,GAAA,kBAAA,KAAA,CAAO,OAAO;YAAE,OAAO,IAAI;YAAM,UAAU,CAAC,IAAI,YAAY,OAAO,IAAI,IAAI,IAAI;WAAE,CAAC,IAAA,GAAA,kBAAA,IAAA,CAAQ,QAAQ;YAAE,OAAO;aAAE,GAAG,IAAI;aAAO,GAAG,IAAI,UAAU,YAAY,IAAI,eAAe,IAAI;YAAc;YAAG,UAAU,IAAI,UAAU,YAAY,EAAE,SAAS,IAAI,EAAE,UAAU;WAAE,CAAC,CAAC;UAAE,CAAC;qCAAQ,OAAO;WAAE,OAAO,IAAI;WAAM,UAAU,IAAI,QAAQ,IAAI,SAAS,MAAM,GAAG,EAAE;UAAE,CAAC;sCAAS,OAAO;WAAE,OAAO,IAAI;WAAS,UAAU;YAAC,CAAC,IAAI,cAAA,GAAA,kBAAA,IAAA,CAAkB,UAAU;aAAE,OAAO,IAAI;aAAW,eAAe,YAAY,IAAI,QAAQ;aAAG,UAAU,EAAE,YAAY;YAAE,CAAC;uCAAQ,UAAU;aAAE,OAAO,IAAI;aAAW,eAAe,aAAa,IAAI,UAAU,CAAC,IAAI,aAAa;aAAG,UAAU,IAAI,UAAU,YAAY,EAAE,SAAS,IAAI,EAAE,QAAQ;YAAE,CAAC;uCAAQ,UAAU;aAAE,OAAO,IAAI;aAAW,eAAe,gBAAgB,GAAG;aAAG,UAAU,EAAE,MAAM;YAAE,CAAC;uCAAQ,UAAU;aAAE,OAAO;cAAE,GAAG,IAAI;cAAW,GAAG,IAAI;aAAU;aAAG,eAAe,aAAa,IAAI,QAAQ;aAAG,UAAU,EAAE,QAAQ;YAAE,CAAC;WAAC;UAAE,CAAC;SAAC;QAAE,GAAG,IAAI,EAAE,CAAE;OAAE,CAAC,CAAC;MAAE,CAAC,CAAC;KAAE,CAAC;KAAI,cAAc,aAAA,GAAA,kBAAA,KAAA,CAAmB,OAAO;MAAE,OAAO,IAAI;MAAS,UAAU,EAAA,GAAA,kBAAA,KAAA,CAAO,OAAO;OAAE,OAAO,IAAI;OAAQ,UAAU,EAAA,GAAA,kBAAA,KAAA,CAAO,OAAO;QAAE,OAAO,IAAI;QAAM,UAAU;qCAAO,SAAS;UAAE,OAAO,IAAI;UAAS,UAAU,CAAC,eAAe,KAAK,MAAM,eAAe,EAAE,eAAe,IAAA,GAAA,kBAAA,IAAA,CAAQ,SAAS;WAAE,MAAM;WAAQ,QAAQ;WAA0C,OAAO,EAAE,SAAS,OAAO;WAAG,WAAW,MAAM,YAAY,EAAE,OAAO,QAAQ,EAAE;UAAE,CAAC,CAAC;SAAE,CAAC;oCAAQ,SAAS;UAAE,OAAO,IAAI;UAAO,aAAa,EAAE,sBAAsB;UAAG,OAAO;UAAW,WAAW,MAAM,aAAa,EAAE,OAAO,KAAK;SAAE,CAAC;oCAAQ,SAAS;UAAE,OAAO,IAAI;UAAO,aAAa,EAAE,sBAAsB;UAAG,OAAO;UAAW,WAAW,MAAM,aAAa,EAAE,OAAO,KAAK;SAAE,CAAC;oCAAQ,YAAY;UAAE,OAAO,IAAI;UAAU,aAAa,EAAE,yBAAyB;UAAG,OAAO;UAAc,WAAW,MAAM,gBAAgB,EAAE,OAAO,KAAK;SAAE,CAAC;qCAAS,OAAO;UAAE,OAAO,IAAI;UAAS,UAAU,EAAA,GAAA,kBAAA,IAAA,CAAM,UAAU;WAAE,OAAO,IAAI;WAAW,UAAU;WAAM,SAAS;WAAa,UAAU,qBAAqB,KAAA,IAAY,EAAE,MAAM,IAAI,EAAE,UAAU;UAAE,CAAC,GAAG,qBAAqB,KAAA,MAAA,GAAA,kBAAA,IAAA,CAAmB,UAAU;WAAE,OAAO,IAAI;WAAW,eAAe;YAAE,oBAAoB,KAAA,CAAS;YAAG,aAAa,EAAE;YAAG,aAAa,EAAE;YAAG,gBAAgB,EAAE;WAAG;WAAG,UAAU,EAAE,QAAQ;UAAE,CAAC,CAAE;SAAE,CAAC;QAAC;OAAE,CAAC,IAAA,GAAA,kBAAA,KAAA,CAAS,OAAO;QAAE,OAAO,IAAI;QAAQ,UAAU;oCAAM,OAAO;UAAE,OAAO,EAAE,cAAc,MAAM;UAAG,UAAU,EAAE,SAAS;SAAE,CAAC;oCAAQ,QAAQ;UAAE,OAAO;WAAE,UAAU;WAAQ,OAAO;UAAS;UAAG,UAAU;SAAmC,CAAC;oCAAQ,MAAM,CAAC,CAAC;oCAAQ,QAAQ;UAAE,OAAO;WAAE,UAAU;WAAQ,OAAO;UAAS;UAAG,UAAU;SAAwC,CAAC;QAAC;OAAE,CAAC,CAAC;MAAE,CAAC,IAAA,GAAA,kBAAA,KAAA,CAAS,OAAO;OAAE,OAAO,IAAI;OAAQ,UAAU,EAAA,GAAA,kBAAA,IAAA,CAAM,SAAS;QAAE,OAAO,IAAI;QAAa,aAAa,EAAE,mBAAmB;QAAG,OAAO;QAAY,WAAW,MAAM,cAAc,EAAE,OAAO,KAAK;OAAE,CAAC,IAAA,GAAA,kBAAA,IAAA,CAAQ,OAAO;QAAE,OAAO,IAAI;QAAW,UAAU,eAAe,WAAW,KAAA,GAAA,kBAAA,IAAA,CAC96F,OAAO;SAAE,OAAO,IAAI;SAAO,UAAU,EAAE,OAAO;QAAE,CAAC,IACtD,eAAe,KAAK,SAAA,GAAA,kBAAA,KAAA,CAAe,OAAO;SAAE,OAAO,IAAI;SAAM,UAAU;sCAAO,OAAO;WAAE,OAAO,IAAI;WAAS,UAAU,EAAA,GAAA,kBAAA,IAAA,CAAM,OAAO;YAAE,OAAO,IAAI;YAAM,UAAU,IAAI;WAAK,CAAC,IAAA,GAAA,kBAAA,IAAA,CAAQ,QAAQ;YAAE,OAAO;aAAE,GAAG,IAAI;aAAO,GAAG,MAAM,IAAI,KAAK;YAAE;YAAG,UAAU,MAAM,IAAI,KAAK;WAAE,CAAC,CAAC;UAAE,CAAC;qCAAQ,OAAO;WAAE,OAAO,IAAI;WAAM,UAAU,IAAI;UAAK,CAAC;sCAAS,OAAO;WAAE,OAAO,IAAI;WAAY,UAAU,CAAC,MAAM,IAAI,IAAI;UAAE,CAAC;qCAAQ,OAAO;WAAE,OAAO,IAAI;WAAS,UAAU,IAAI,WAAW,aAAA,GAAA,kBAAA,IAAA,CAAkB,UAAU;YAAE,OAAO,IAAI;YAAW,eAAe,WAAW,IAAI,IAAI;YAAG,UAAU,EAAE,QAAQ;WAAE,CAAC,KAAA,GAAA,kBAAA,KAAA,CAAYA,kBAAAA,UAAW,EAAE,UAAU;uCAAM,UAAU;aAAE,OAAO,IAAI;aAAW,eAAe,YAAY,IAAI,eAAe,CAAC,IAAI,YAAY;aAAG,UAAU,IAAI,UAAU,YAAY,EAAE,SAAS,IAAI,EAAE,QAAQ;YAAE,CAAC;uCAAQ,UAAU;aAAE,OAAO,IAAI;aAAW,eAAe,eAAe,GAAG;aAAG,UAAU,EAAE,MAAM;YAAE,CAAC;uCAAQ,UAAU;aAAE,OAAO;cAAE,GAAG,IAAI;cAAW,GAAG,IAAI;aAAU;aAAG,eAAe,YAAY,IAAI,aAAa;aAAG,UAAU,EAAE,WAAW;YAAE,CAAC;WAAC,EAAE,CAAC;UAAG,CAAC;SAAC;QAAE,GAAG,IAAI,GAAG,CAAE;OAAE,CAAC,CAAC;MAAE,CAAC,CAAC;KAAE,CAAC;KAAI,cAAc,cAAA,GAAA,kBAAA,IAAA,CAAmB,OAAO;MAAE,OAAO,IAAI;MAAS,WAAA,GAAA,kBAAA,KAAA,CAAgB,OAAO;OAAE,OAAO,IAAI;OAAQ,UAAU;oCAAO,OAAO;SAAE,OAAO,IAAI;SAAW,UAAU;UAAC,EAAE,mBAAmB;UAAG;UAAM,WAAW;UAAQ;SAAG;QAAE,CAAC;mCAAQ,SAAS;SAAE,OAAO,IAAI;SAAa,aAAa,EAAE,mBAAmB;SAAG,OAAO;SAAa,WAAW,MAAM,eAAe,EAAE,OAAO,KAAK;QAAE,CAAC;mCAAQ,OAAO;SAAE,OAAO,IAAI;SAAW,UAAU,gBAAgB,WAAW,KAAA,GAAA,kBAAA,IAAA,CACh9C,OAAO;UAAE,OAAO,IAAI;UAAO,UAAU,EAAE,OAAO;SAAE,CAAC,IACtD,gBAAgB,KAAK,SAAA,GAAA,kBAAA,KAAA,CAAe,OAAO;UAAE,OAAO,IAAI;UAAM,UAAU;uCAAO,OAAO;YAAE,OAAO,IAAI;YAAS,UAAU,EAAA,GAAA,kBAAA,KAAA,CAAO,OAAO;aAAE,OAAO,IAAI;aAAM,UAAU,CAAC,IAAI,YAAY,OAAO,IAAI,IAAI,IAAI;YAAE,CAAC,IAAA,GAAA,kBAAA,IAAA,CAAQ,QAAQ;aAAE,OAAO;cAAE,GAAG,IAAI;cAAO,GAAG,MAAM,IAAI,KAAK;aAAE;aAAG,UAAU,MAAM,IAAI,KAAK;YAAE,CAAC,CAAC;WAAE,CAAC;sCAAQ,OAAO;YAAE,OAAO,IAAI;YAAM,UAAU,IAAI;WAAK,CAAC;WAAG,CAAC,IAAI,cAAA,GAAA,kBAAA,IAAA,CAAkB,UAAU;YAAE,OAAO,IAAI;YAAW,eAAe,WAAW,IAAI,QAAQ;YAAG,UAAU,EAAE,YAAY;WAAE,CAAC;UAAC;SAAE,GAAG,IAAI,EAAE,CAAE;QAAE,CAAC;OAAC;MAAE,CAAC;KAAE,CAAC;IAAE;GAAE,CAAC;EAC7hB;;;;;;;;;;ECtZA,MAAM,OAAO;GACT,QAAQ;GACR,QAAQ,CAAC;GACT,SAAS,CAAC;GACV,UAAU,CAAC;GACX,SAAS,CAAC;GACV,iBAAiB,CAAC;EACtB;;EAEA,SAAS,UAAU,OAAO;GACtB,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;EAChE;;;;;;EAMA,IAAa,+BAAb,MAA0C;GACtC;GACA;;GAEA,SAAA,GAAA,uCAAA,oBAAA,CAA4B,IAAI;GAChC,YAAY,KAAK,WAAW;IACxB,KAAK,MAAM;IACX,KAAK,YAAY;GACrB;;;;;;GAMA,MAAM,OAAO;IACT,KAAK,MAAM,IAAI;KAAE,GAAG;KAAM,QAAQ;IAAU,CAAC;IAC7C,IAAI;KAGA,MAAM,YAAY,KAAK,YAAY;KACnC,MAAM,QAAQ,CACV,KAAK,IAAI,aAAa,KAAK,CAAC,CAAC,GAC7B,KAAK,IAAI,SAAS,SAAS,CAAC,CAAC,CACjC;KACA,IAAI,cAAc,KAAA,GACd,MAAM,KAAK,KAAK,IAAI,OAAO,KAAK,EAAE,UAAU,CAAC,CAAC;KAClD,MAAM,CAAC,WAAW,aAAa,YAAY,MAAM,QAAQ,IAAI,KAAK;KAClE,IAAI,CAAC,UAAU,OAAO,IAClB,MAAM,IAAI,MAAM,qBAAqB,UAAU,OAAO,MAAM,SAAS;KACzE,IAAI,CAAC,YAAY,OAAO,IACpB,MAAM,IAAI,MAAM,sBAAsB,YAAY,OAAO,MAAM,SAAS;KAC5E,MAAM,SAAS,aAAa,KAAA,KAAa,SAAS,OAAO,KACnD,SAAS,OAAO,MAAM,OAAO,KAAK,WAAW;MAC3C,MAAM,MAAM;MACZ,aAAa,MAAM;MACnB,gBAAgB,MAAM;KAC1B,EAAE,IACA,CAAC;KACP,MAAM,UAAU,UAAU,OAAO,MAAM,QAAQ,KAAK,YAAY;MAC5D,IAAI,OAAO;MACX,WAAW,OAAO;MAClB,OAAO,OAAO;MACd,GAAG,OAAO,SAAS,KAAA,IAAY,CAAC,IAAI,EAAE,MAAM,OAAO,KAAK;MACxD,GAAG,OAAO,gBAAgB,KAAA,IAAY,CAAC,IAAI,EAAE,aAAa,OAAO,YAAY;MAC7E,GAAG,OAAO,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ,OAAO,OAAO;KAClE,EAAE;KACF,MAAM,qBAAqB,KAAK,oBAAoB,YAAY,OAAO,OAAO,aAAa;KAC3F,MAAM,UAAU,MAAM,QAAQ,oBAAoB,OAAO,IAAI,mBAAmB,UAAU,CAAC;KAC3F,MAAM,kBAAkB,MAAM,QAAQ,oBAAoB,eAAe,IACnE,mBAAmB,gBAAgB,KAAK,OAAO;MAC7C,MAAM,EAAE,QAAQ;MAChB,aAAa,EAAE,eAAe;MAC9B,SAAS,EAAE,WAAW;MACtB,SAAS,EAAE,WAAW;KAC1B,EAAE,IACA,CAAC;KACP,KAAK,MAAM,IAAI;MACX,QAAQ;MACR;MACA;MACA,UAAU,CAAC;MACX;MACA;KACJ,CAAC;IACL,SACO,OAAO;KACV,KAAK,MAAM,IAAI;MAAE,GAAG;MAAM,QAAQ;MAAS,SAAS,UAAU,KAAK;KAAE,CAAC;IAC1E;GACJ;;GAEA,oBAAoB,OAAO,IAAI;IAC3B,IAAI,OAAO,UAAU,YAAY,UAAU,MACvC,OAAO,KAAA;IACX,MAAM,UAAU,MAAM;IACtB,IAAI,CAAC,MAAM,QAAQ,OAAO,GACtB,OAAO,KAAA;IACX,KAAK,MAAM,SAAS,SAAS;KACzB,MAAM,MAAM;KACZ,IAAI,IAAI,OAAO,IAAI;MACf,MAAM,UAAU,IAAI;MACpB,OAAO,OAAO,YAAY,YAAY,YAAY,OAAO,UAAU,KAAA;KACvE;IACJ;GAEJ;;GAKA,MAAM,UAAU,OAAO;IACnB,MAAM,MAAM,MAAM,KAAK,IAAI,SAAS,OAAO;KACvC,IAAI;KACJ,KAAK,CAAC;MAAE,IAAI;MAAO,MAAM,CAAC,SAAS;MAAG,OAAO,CAAC,GAAG,KAAK,eAAe,GAAG;OACxD,IAAI,KAAK,QAAQ,MAAM,IAAI;OAC3B,MAAM,MAAM;OACZ,aAAa,MAAM;OACnB,SAAS,MAAM;OACf,OAAO,KAAK,eAAe,CAAC,CAAC;OAC7B,SAAS;OACT,WAAW,KAAK,eAAe,CAAC,CAAC,WAAW;MAChD,CAAC;KAAE,CAAC;IACpB,CAAC;IACD,IAAI,CAAC,IAAI,OAAO,IACZ,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,OAAO;IAC5C,MAAM,KAAK,KAAK;GACpB;;GAEA,MAAM,iBAAiB,IAAI,SAAS;IAChC,MAAM,OAAO,KAAK,eAAe,CAAC,CAAC,KAAK,MAAM,EAAE,OAAO,KAAK;KAAE,GAAG;KAAG;IAAQ,IAAI,CAAC;IACjF,MAAM,KAAK,aAAa,IAAI;GAChC;;GAEA,MAAM,iBAAiB,IAAI;IACvB,MAAM,OAAO,KAAK,eAAe,CAAC,CAAC,KAAK,OAAO;KAAE,GAAG;KAAG,WAAW,EAAE,OAAO;IAAG,EAAE;IAChF,MAAM,KAAK,aAAa,IAAI;GAChC;;GAEA,MAAM,aAAa,IAAI;IACnB,MAAM,OAAO,KAAK,eAAe,CAAC,CAAC,QAAQ,MAAM,EAAE,OAAO,EAAE;IAC5D,MAAM,KAAK,aAAa,IAAI;GAChC;;GAEA,MAAM,aAAa,IAAI,OAAO;IAC1B,MAAM,OAAO,KAAK,eAAe,CAAC,CAAC,KAAK,MAAM,EAAE,OAAO,KAAK;KACxD,GAAG;KACH,MAAM,MAAM,MAAM,KAAK,KAAK,EAAE;KAC9B,aAAa,MAAM,eAAe,EAAE;KACpC,SAAS,MAAM,WAAW,EAAE;IAChC,IAAI,CAAC;IACL,MAAM,KAAK,aAAa,IAAI;GAChC;;GAEA,MAAM,aAAa,SAAS;IACxB,MAAM,MAAM,MAAM,KAAK,IAAI,SAAS,OAAO;KACvC,IAAI;KACJ,KAAK,CAAC;MAAE,IAAI;MAAO,MAAM,CAAC,SAAS;MAAG,OAAO;KAAQ,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,IAAI,OAAO,IACZ,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,OAAO;IAC5C,MAAM,KAAK,KAAK;GACpB;;GAEA,iBAAiB;IACb,OAAO,KAAK,MAAM,YAAY,CAAC,CAAC;GACpC;;GAEA,QAAQ,OAAO;IACX,MAAM,OAAO,MAAM,YAAY,CAAC,CAAC,QAAQ,eAAe,GAAG,CAAC,CAAC,QAAQ,YAAY,EAAE;IACnF,OAAO,KAAK,SAAS,IAAI,OAAO,UAAU,KAAK,IAAI;GACvD;;GAKA,MAAM,aAAa,OAAO;IACtB,MAAM,OAAO,CAAC,GAAG,KAAK,uBAAuB,GAAG;KACxC,MAAM,MAAM;KACZ,aAAa,MAAM;KACnB,SAAS,MAAM;KACf,SAAS;IACb,CAAC;IACL,MAAM,MAAM,MAAM,KAAK,IAAI,SAAS,OAAO;KACvC,IAAI;KACJ,KAAK,CAAC;MAAE,IAAI;MAAO,MAAM,CAAC,iBAAiB;MAAG,OAAO;KAAK,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,IAAI,OAAO,IACZ,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,OAAO;IAC5C,MAAM,KAAK,KAAK;GACpB;;GAEA,MAAM,gBAAgB,MAAM,SAAS;IACjC,MAAM,OAAO,KAAK,uBAAuB,CAAC,CAAC,KAAK,MAAM,EAAE,SAAS,OAAO;KAAE,GAAG;KAAG;IAAQ,IAAI,CAAC;IAC7F,MAAM,MAAM,MAAM,KAAK,IAAI,SAAS,OAAO;KACvC,IAAI;KACJ,KAAK,CAAC;MAAE,IAAI;MAAO,MAAM,CAAC,iBAAiB;MAAG,OAAO;KAAK,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,IAAI,OAAO,IACZ,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,OAAO;IAC5C,MAAM,KAAK,KAAK;GACpB;;GAEA,MAAM,eAAe,MAAM;IACvB,MAAM,OAAO,KAAK,uBAAuB,CAAC,CAAC,QAAQ,MAAM,EAAE,SAAS,IAAI;IACxE,MAAM,MAAM,MAAM,KAAK,IAAI,SAAS,OAAO;KACvC,IAAI;KACJ,KAAK,CAAC;MAAE,IAAI;MAAO,MAAM,CAAC,iBAAiB;MAAG,OAAO;KAAK,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,IAAI,OAAO,IACZ,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,OAAO;IAC5C,MAAM,KAAK,KAAK;GACpB;;GAEA,MAAM,YAAY,MAAM,OAAO;IAC3B,MAAM,OAAO,KAAK,uBAAuB,CAAC,CAAC,KAAK,MAAM,EAAE,SAAS,OAAO;KACpE,GAAG;KACH,MAAM,MAAM,MAAM,KAAK,KAAK,EAAE;KAC9B,aAAa,MAAM,eAAe,EAAE;KACpC,SAAS,MAAM,WAAW,EAAE;IAChC,IAAI,CAAC;IACL,MAAM,MAAM,MAAM,KAAK,IAAI,SAAS,OAAO;KACvC,IAAI;KACJ,KAAK,CAAC;MAAE,IAAI;MAAO,MAAM,CAAC,iBAAiB;MAAG,OAAO;KAAK,CAAC;IAC/D,CAAC;IACD,IAAI,CAAC,IAAI,OAAO,IACZ,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,OAAO;IAC5C,MAAM,KAAK,KAAK;GACpB;;GAEA,yBAAyB;IACrB,OAAO,KAAK,MAAM,YAAY,CAAC,CAAC;GACpC;;;;;GAKA,MAAM,oBAAoB,MAAM,YAAY;IACxC,MAAM,MAAM,MAAM,KAAK,IAAI,SAAS,OAAO;KACvC,IAAI;KACJ,KAAK,CAAC;MAAE,IAAI;MAAO,MAAM,CAAC,YAAY;MAAG,OAAO;OAAE;OAAM;MAAW;KAAE,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,IAAI,OAAO,IACZ,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,OAAO;IAE5C,MAAM,IAAI,SAAS,MAAM,WAAW,GAAG,GAAG,CAAC;IAC3C,MAAM,KAAK,KAAK;GACpB;;GAEA,MAAM,iBAAiB,IAAI;IACvB,MAAM,MAAM,MAAM,KAAK,IAAI,SAAS,OAAO;KAAE,IAAI;KAAiB,OAAO,EAAE,SAAS,GAAG;IAAE,CAAC;IAC1F,IAAI,CAAC,IAAI,OAAO,IACZ,MAAM,IAAI,MAAM,IAAI,OAAO,MAAM,OAAO;IAC5C,MAAM,KAAK,KAAK;GACpB;EACJ;;;;;;;;;;ECtPA,MAAa,SAAS;GAAC;GAAS;GAAU;GAAc;EAAU;;;;;EAKlE,SAAgB,MAAM,KAAK;GACvB,IAAI,aAAa,IAAI,OAAO,SAAS,IAAI;IAAE;IAAI;GAAG,CAAC,GAAG,8BAA8B;GACpF,MAAM,MAAM,IAAI,IAAI,YAAY,CAAC,CAAC;GAClC,MAAM,WAAW,IAAI,IAAI,UAAU;GACnC,MAAM,aAAa,IAAI,6BAA6B,WAAW;IAC3D,MAAM,QAAQ,SAAS,KAAK,YAAY;IACxC,OAAO,MAAM,YAAY,KAAA,IAAY,KAAA,IAAY,MAAM;GAC3D,CAAC;GACD,IAAI,MAAM,OAAO,0BAA0B,IAAI,MAAM,SAAS;IAC1D,MAAM;IACN,IAAI;IACJ,OAAO;IACP,aAAa,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC,KAAK;IACtC,QAAQ;IACR,eAAe;KACX,OAAO,EAAE,aAAa,WAAW,MAAM;KACvC,YAAY,WAAW,KAAK;KAC5B,mBAAmB,OAAO,WAAW,iBAAiB,EAAE;KACxD,YAAY,UAAU,WAAW,UAAU,KAAK;KAChD,eAAe,IAAI,UAAU,WAAW,aAAa,IAAI,KAAK;KAC9D,mBAAmB,IAAI,YAAY,WAAW,iBAAiB,IAAI,OAAO;KAC1E,mBAAmB,OAAO,WAAW,iBAAiB,EAAE;KACxD,eAAe,OAAO,WAAW,aAAa,EAAE;KAChD,eAAe,UAAU,WAAW,aAAa,KAAK;KACtD,cAAc,MAAM,UAAU,WAAW,YAAY,MAAM,KAAK;KAChE,kBAAkB,MAAM,YAAY,WAAW,gBAAgB,MAAM,OAAO;KAC5E,iBAAiB,SAAS,WAAW,eAAe,IAAI;KACxD,sBAAsB,MAAM,eAAe,WAAW,oBAAoB,MAAM,UAAU;IAC9F;GACJ,GAAG,kBAAkB,CAAC;EAC1B;;EAEA,MAAa,OAAO"}
|