getkova 2026.4.21 → 2026.4.22
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/dist/control-ui/apple-touch-icon.png +0 -0
- package/dist/control-ui/assets/agents-CLtFQRXd.js +918 -0
- package/dist/control-ui/assets/agents-CLtFQRXd.js.map +1 -0
- package/dist/control-ui/assets/anthropic-CFEPAL-v.js +37 -0
- package/dist/control-ui/assets/anthropic-CFEPAL-v.js.map +1 -0
- package/dist/control-ui/assets/azure-openai-responses-CxiWQLmZ.js +2 -0
- package/dist/control-ui/assets/azure-openai-responses-CxiWQLmZ.js.map +1 -0
- package/dist/control-ui/assets/briefing-DS4VWpUL.js +121 -0
- package/dist/control-ui/assets/briefing-DS4VWpUL.js.map +1 -0
- package/dist/control-ui/assets/canvas-BfC_2Nqy.js +17 -0
- package/dist/control-ui/assets/canvas-BfC_2Nqy.js.map +1 -0
- package/dist/control-ui/assets/channel-config-extras-YNNd-4PG.js +2 -0
- package/dist/control-ui/assets/channel-config-extras-YNNd-4PG.js.map +1 -0
- package/dist/control-ui/assets/channels-BKdM7i5r.js +471 -0
- package/dist/control-ui/assets/channels-BKdM7i5r.js.map +1 -0
- package/dist/control-ui/assets/cron-C11m3yJi.js +928 -0
- package/dist/control-ui/assets/cron-C11m3yJi.js.map +1 -0
- package/dist/control-ui/assets/de-rLAkQOBc.js +2 -0
- package/dist/control-ui/assets/de-rLAkQOBc.js.map +1 -0
- package/dist/control-ui/assets/debug-DFf2qCcM.js +94 -0
- package/dist/control-ui/assets/debug-DFf2qCcM.js.map +1 -0
- package/dist/control-ui/assets/dist-D8DZLmCF.js +18 -0
- package/dist/control-ui/assets/dist-D8DZLmCF.js.map +1 -0
- package/dist/control-ui/assets/employees-DV-5FV4K.js +104 -0
- package/dist/control-ui/assets/employees-DV-5FV4K.js.map +1 -0
- package/dist/control-ui/assets/es-CIeD3O54.js +2 -0
- package/dist/control-ui/assets/es-CIeD3O54.js.map +1 -0
- package/dist/control-ui/assets/event-stream-B8X6sYaV.js +2 -0
- package/dist/control-ui/assets/event-stream-B8X6sYaV.js.map +1 -0
- package/dist/control-ui/assets/format-BahKhiOC.js +2 -0
- package/dist/control-ui/assets/format-BahKhiOC.js.map +1 -0
- package/dist/control-ui/assets/github-copilot-headers-CrI0CIJ7.js +2 -0
- package/dist/control-ui/assets/github-copilot-headers-CrI0CIJ7.js.map +1 -0
- package/dist/control-ui/assets/google-BT0bmsh5.js +2 -0
- package/dist/control-ui/assets/google-BT0bmsh5.js.map +1 -0
- package/dist/control-ui/assets/google-gemini-cli-BpxbH95Q.js +3 -0
- package/dist/control-ui/assets/google-gemini-cli-BpxbH95Q.js.map +1 -0
- package/dist/control-ui/assets/google-shared-CbPHVnPr.js +12 -0
- package/dist/control-ui/assets/google-shared-CbPHVnPr.js.map +1 -0
- package/dist/control-ui/assets/google-vertex-lQwbjEII.js +2 -0
- package/dist/control-ui/assets/google-vertex-lQwbjEII.js.map +1 -0
- package/dist/control-ui/assets/hash-Bt1aVMQ3.js +2 -0
- package/dist/control-ui/assets/hash-Bt1aVMQ3.js.map +1 -0
- package/dist/control-ui/assets/inbox-C4tOnlJr.js +100 -0
- package/dist/control-ui/assets/inbox-C4tOnlJr.js.map +1 -0
- package/dist/control-ui/assets/index-DYMuTfvX.css +1 -0
- package/dist/control-ui/assets/index-XGDpaFxG.js +5482 -0
- package/dist/control-ui/assets/index-XGDpaFxG.js.map +1 -0
- package/dist/control-ui/assets/instances-Cyr-tbN6.js +57 -0
- package/dist/control-ui/assets/instances-Cyr-tbN6.js.map +1 -0
- package/dist/control-ui/assets/kova-logo.png +0 -0
- package/dist/control-ui/assets/lit-zdTgzAJI.js +3 -0
- package/dist/control-ui/assets/lit-zdTgzAJI.js.map +1 -0
- package/dist/control-ui/assets/local-storage-D3baoRWx.js +2 -0
- package/dist/control-ui/assets/local-storage-D3baoRWx.js.map +1 -0
- package/dist/control-ui/assets/logs-B7--7dYP.js +74 -0
- package/dist/control-ui/assets/logs-B7--7dYP.js.map +1 -0
- package/dist/control-ui/assets/meetings-DSqn6s7n.js +185 -0
- package/dist/control-ui/assets/meetings-DSqn6s7n.js.map +1 -0
- package/dist/control-ui/assets/mistral-CBrDC_Gv.js +8 -0
- package/dist/control-ui/assets/mistral-CBrDC_Gv.js.map +1 -0
- package/dist/control-ui/assets/nodes-Cvq_sAqT.js +430 -0
- package/dist/control-ui/assets/nodes-Cvq_sAqT.js.map +1 -0
- package/dist/control-ui/assets/openai-Cn7eGqwa.js +17 -0
- package/dist/control-ui/assets/openai-Cn7eGqwa.js.map +1 -0
- package/dist/control-ui/assets/openai-codex-responses-DuhESMYF.js +8 -0
- package/dist/control-ui/assets/openai-codex-responses-DuhESMYF.js.map +1 -0
- package/dist/control-ui/assets/openai-completions-Bv33lqKL.js +6 -0
- package/dist/control-ui/assets/openai-completions-Bv33lqKL.js.map +1 -0
- package/dist/control-ui/assets/openai-responses-BPxpapOg.js +2 -0
- package/dist/control-ui/assets/openai-responses-BPxpapOg.js.map +1 -0
- package/dist/control-ui/assets/openai-responses-shared-8nKH8ywL.js +11 -0
- package/dist/control-ui/assets/openai-responses-shared-8nKH8ywL.js.map +1 -0
- package/dist/control-ui/assets/pdf-BwYFZMZM.js +57 -0
- package/dist/control-ui/assets/pdf-BwYFZMZM.js.map +1 -0
- package/dist/control-ui/assets/pdf.worker.min-BmpgcBpm.js +2 -0
- package/dist/control-ui/assets/pdf.worker.min-BmpgcBpm.js.map +1 -0
- package/dist/control-ui/assets/pdf.worker.min-C8PGFc0r.mjs +28 -0
- package/dist/control-ui/assets/preload-helper-Chd9yIcd.js +1 -0
- package/dist/control-ui/assets/pt-BR-lSsBb08k.js +2 -0
- package/dist/control-ui/assets/pt-BR-lSsBb08k.js.map +1 -0
- package/dist/control-ui/assets/routing-DizI_FiJ.js +157 -0
- package/dist/control-ui/assets/routing-DizI_FiJ.js.map +1 -0
- package/dist/control-ui/assets/sessions-N9rgJP2R.js +236 -0
- package/dist/control-ui/assets/sessions-N9rgJP2R.js.map +1 -0
- package/dist/control-ui/assets/skills-D1vP4MkL.js +280 -0
- package/dist/control-ui/assets/skills-D1vP4MkL.js.map +1 -0
- package/dist/control-ui/assets/skills-shared-Bg0Qcnkp.js +11 -0
- package/dist/control-ui/assets/skills-shared-Bg0Qcnkp.js.map +1 -0
- package/dist/control-ui/assets/transform-messages-XKqwKV3D.js +2 -0
- package/dist/control-ui/assets/transform-messages-XKqwKV3D.js.map +1 -0
- package/dist/control-ui/assets/zh-CN-C5tPG8Eu.js +2 -0
- package/dist/control-ui/assets/zh-CN-C5tPG8Eu.js.map +1 -0
- package/dist/control-ui/assets/zh-TW-CPSoC7Wz.js +2 -0
- package/dist/control-ui/assets/zh-TW-CPSoC7Wz.js.map +1 -0
- package/dist/control-ui/favicon-32.png +0 -0
- package/dist/control-ui/favicon.ico +0 -0
- package/dist/control-ui/favicon.png +0 -0
- package/dist/control-ui/favicon.svg +22 -0
- package/dist/control-ui/index.html +73 -0
- package/dist/control-ui/openclaw-canvas-auth-sw.js +57 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dist-D8DZLmCF.js","names":[],"sources":["../../../node_modules/@create-markdown/core/dist/index.js"],"sourcesContent":["// src/core/utils.ts\nvar ID_CHARS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\nvar ID_LENGTH = 8;\nfunction generateId(length = ID_LENGTH) {\n let id = \"\";\n const charsLength = ID_CHARS.length;\n for (let i = 0; i < length; i++) {\n id += ID_CHARS.charAt(Math.floor(Math.random() * charsLength));\n }\n return id;\n}\nfunction deepClone(block, regenerateIds = true) {\n return {\n id: regenerateIds ? generateId() : block.id,\n type: block.type,\n content: block.content.map((span) => ({\n text: span.text,\n styles: { ...span.styles }\n })),\n children: block.children.map((child) => deepClone(child, regenerateIds)),\n props: { ...block.props }\n };\n}\nfunction deepCloneBlocks(blocks, regenerateIds = true) {\n return blocks.map((block) => deepClone(block, regenerateIds));\n}\nfunction normalizeLineEndings(text2) {\n return text2.replace(/\\r\\n|\\r/g, \"\\n\");\n}\nfunction convertLineEndings(text2, lineEnding) {\n const normalized = normalizeLineEndings(text2);\n if (lineEnding === \"\\r\\n\") {\n return normalized.replace(/\\n/g, \"\\r\\n\");\n }\n return normalized;\n}\nvar MARKDOWN_ESCAPE_CHARS = /[\\\\`*_{}[\\]()#+\\-.!|]/g;\nfunction escapeMarkdown(text2) {\n return text2.replace(MARKDOWN_ESCAPE_CHARS, \"\\\\$&\");\n}\nfunction unescapeMarkdown(text2) {\n return text2.replace(/\\\\([\\\\`*_{}[\\]()#+\\-.!|])/g, \"$1\");\n}\nfunction escapeCodeBlock(text2) {\n return text2.replace(/```/g, \"\\\\`\\\\`\\\\`\");\n}\nfunction trimTrailingWhitespace(text2) {\n return text2.split(\"\\n\").map((line) => line.trimEnd()).join(\"\\n\");\n}\nfunction trimBlankLines(text2) {\n const lines = text2.split(\"\\n\");\n let start = 0;\n while (start < lines.length && lines[start].trim() === \"\") {\n start++;\n }\n let end = lines.length - 1;\n while (end >= start && lines[end].trim() === \"\") {\n end--;\n }\n return lines.slice(start, end + 1).join(\"\\n\");\n}\nfunction indent(text2, spaces) {\n const padding = \" \".repeat(spaces);\n return text2.split(\"\\n\").map((line) => line.trim() ? padding + line : line).join(\"\\n\");\n}\nfunction spansToPlainText(spans2) {\n return spans2.map((span) => span.text).join(\"\");\n}\nfunction plainSpan(text2) {\n return { text: text2, styles: {} };\n}\nfunction plainContent(text2) {\n return [plainSpan(text2)];\n}\nfunction hasContent(block) {\n return block.content.length > 0 && block.content.some((span) => span.text.length > 0);\n}\nfunction hasChildren(block) {\n return block.children.length > 0;\n}\nfunction isValidHeadingLevel(level) {\n return Number.isInteger(level) && level >= 1 && level <= 6;\n}\nfunction isValidBlockType(type) {\n const validTypes = [\n \"paragraph\",\n \"heading\",\n \"bulletList\",\n \"numberedList\",\n \"checkList\",\n \"codeBlock\",\n \"blockquote\",\n \"table\",\n \"image\",\n \"divider\",\n \"callout\"\n ];\n return validTypes.includes(type);\n}\n\n// src/core/blocks.ts\nfunction createBlock(type, content = [], props = {}, children = []) {\n return {\n id: generateId(),\n type,\n content,\n children,\n props\n };\n}\nfunction text(content) {\n return plainSpan(content);\n}\nfunction bold(content) {\n return { text: content, styles: { bold: true } };\n}\nfunction italic(content) {\n return { text: content, styles: { italic: true } };\n}\nfunction code(content) {\n return { text: content, styles: { code: true } };\n}\nfunction strikethrough(content) {\n return { text: content, styles: { strikethrough: true } };\n}\nfunction underline(content) {\n return { text: content, styles: { underline: true } };\n}\nfunction highlight(content) {\n return { text: content, styles: { highlight: true } };\n}\nfunction link(content, url, title) {\n return {\n text: content,\n styles: { link: { url, title } }\n };\n}\nfunction styled(content, styles) {\n return { text: content, styles };\n}\nfunction spans(...textSpans) {\n return textSpans;\n}\nfunction paragraph(content) {\n const textContent = typeof content === \"string\" ? plainContent(content) : content;\n return createBlock(\"paragraph\", textContent, {});\n}\nfunction heading(level, content) {\n const textContent = typeof content === \"string\" ? plainContent(content) : content;\n return createBlock(\"heading\", textContent, { level });\n}\nvar h1 = (content) => heading(1, content);\nvar h2 = (content) => heading(2, content);\nvar h3 = (content) => heading(3, content);\nvar h4 = (content) => heading(4, content);\nvar h5 = (content) => heading(5, content);\nvar h6 = (content) => heading(6, content);\nfunction bulletList(items) {\n const children = items.map((item) => {\n if (typeof item === \"string\") {\n return paragraph(item);\n }\n if (Array.isArray(item)) {\n return paragraph(item);\n }\n return item;\n });\n return createBlock(\"bulletList\", [], {}, children);\n}\nfunction numberedList(items) {\n const children = items.map((item) => {\n if (typeof item === \"string\") {\n return paragraph(item);\n }\n if (Array.isArray(item)) {\n return paragraph(item);\n }\n return item;\n });\n return createBlock(\"numberedList\", [], {}, children);\n}\nfunction checkListItem(content, checked = false) {\n const textContent = typeof content === \"string\" ? plainContent(content) : content;\n return createBlock(\"checkList\", textContent, { checked });\n}\nfunction checkList(items) {\n return items.map((item) => checkListItem(item.content, item.checked ?? false));\n}\nfunction codeBlock(code2, language) {\n return createBlock(\"codeBlock\", plainContent(code2), { language });\n}\nfunction blockquote(content) {\n const textContent = typeof content === \"string\" ? plainContent(content) : content;\n return createBlock(\"blockquote\", textContent, {});\n}\nfunction divider() {\n return createBlock(\"divider\", [], {});\n}\nfunction image(url, alt, options) {\n return createBlock(\"image\", [], {\n url,\n alt,\n title: options?.title,\n width: options?.width,\n height: options?.height\n });\n}\nfunction callout(type, content) {\n const textContent = typeof content === \"string\" ? plainContent(content) : content;\n return createBlock(\"callout\", textContent, { type });\n}\nvar infoCallout = (content) => callout(\"info\", content);\nvar warningCallout = (content) => callout(\"warning\", content);\nvar tipCallout = (content) => callout(\"tip\", content);\nvar dangerCallout = (content) => callout(\"danger\", content);\nvar noteCallout = (content) => callout(\"note\", content);\nfunction table(headers, rows, alignments) {\n return createBlock(\"table\", [], {\n headers,\n rows,\n alignments\n });\n}\nfunction appendContent(block, ...newSpans) {\n return {\n ...block,\n content: [...block.content, ...newSpans]\n };\n}\nfunction prependContent(block, ...newSpans) {\n return {\n ...block,\n content: [...newSpans, ...block.content]\n };\n}\nfunction setContent(block, content) {\n return {\n ...block,\n content\n };\n}\nfunction addChildren(block, ...newChildren) {\n return {\n ...block,\n children: [...block.children, ...newChildren]\n };\n}\nfunction updateProps(block, props) {\n return {\n ...block,\n props: { ...block.props, ...props }\n };\n}\n\n// src/core/document.ts\nvar DOCUMENT_VERSION = 1;\nfunction createDocument(blocks = [], options = {}) {\n const { meta = {} } = options;\n return {\n version: DOCUMENT_VERSION,\n blocks: deepCloneBlocks(blocks, false),\n meta: {\n createdAt: /* @__PURE__ */ new Date(),\n updatedAt: /* @__PURE__ */ new Date(),\n ...meta\n }\n };\n}\nfunction emptyDocument(options = {}) {\n return createDocument([], options);\n}\nfunction cloneDocument(doc) {\n return {\n version: doc.version,\n blocks: deepCloneBlocks(doc.blocks, true),\n meta: {\n ...doc.meta,\n createdAt: /* @__PURE__ */ new Date(),\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction insertBlock(doc, block, index) {\n const newBlocks = [...doc.blocks];\n const insertIndex = index ?? newBlocks.length;\n newBlocks.splice(insertIndex, 0, deepClone(block, false));\n return {\n ...doc,\n blocks: newBlocks,\n meta: {\n ...doc.meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction appendBlock(doc, block) {\n return insertBlock(doc, block);\n}\nfunction prependBlock(doc, block) {\n return insertBlock(doc, block, 0);\n}\nfunction insertBlocks(doc, blocks, index) {\n const newBlocks = [...doc.blocks];\n const insertIndex = index ?? newBlocks.length;\n newBlocks.splice(insertIndex, 0, ...deepCloneBlocks(blocks, false));\n return {\n ...doc,\n blocks: newBlocks,\n meta: {\n ...doc.meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction removeBlock(doc, blockId) {\n const newBlocks = doc.blocks.filter((block) => block.id !== blockId);\n if (newBlocks.length === doc.blocks.length) {\n return doc;\n }\n return {\n ...doc,\n blocks: newBlocks,\n meta: {\n ...doc.meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction removeBlocks(doc, blockIds) {\n const idSet = new Set(blockIds);\n const newBlocks = doc.blocks.filter((block) => !idSet.has(block.id));\n if (newBlocks.length === doc.blocks.length) {\n return doc;\n }\n return {\n ...doc,\n blocks: newBlocks,\n meta: {\n ...doc.meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction updateBlock(doc, blockId, updates) {\n const blockIndex = doc.blocks.findIndex((block) => block.id === blockId);\n if (blockIndex === -1) {\n return doc;\n }\n const newBlocks = [...doc.blocks];\n const existingBlock = newBlocks[blockIndex];\n newBlocks[blockIndex] = {\n ...existingBlock,\n ...updates,\n id: existingBlock.id,\n type: existingBlock.type,\n content: updates.content ?? existingBlock.content,\n children: updates.children ?? existingBlock.children,\n props: updates.props ? { ...existingBlock.props, ...updates.props } : existingBlock.props\n };\n return {\n ...doc,\n blocks: newBlocks,\n meta: {\n ...doc.meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction replaceBlock(doc, blockId, newBlock) {\n const blockIndex = doc.blocks.findIndex((block) => block.id === blockId);\n if (blockIndex === -1) {\n return doc;\n }\n const newBlocks = [...doc.blocks];\n newBlocks[blockIndex] = deepClone(newBlock, false);\n return {\n ...doc,\n blocks: newBlocks,\n meta: {\n ...doc.meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction moveBlock(doc, blockId, newIndex) {\n const currentIndex = doc.blocks.findIndex((block) => block.id === blockId);\n if (currentIndex === -1) {\n return doc;\n }\n const targetIndex = Math.max(0, Math.min(newIndex, doc.blocks.length - 1));\n if (currentIndex === targetIndex) {\n return doc;\n }\n const newBlocks = [...doc.blocks];\n const [movedBlock] = newBlocks.splice(currentIndex, 1);\n newBlocks.splice(targetIndex, 0, movedBlock);\n return {\n ...doc,\n blocks: newBlocks,\n meta: {\n ...doc.meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction swapBlocks(doc, blockId1, blockId2) {\n const index1 = doc.blocks.findIndex((block) => block.id === blockId1);\n const index2 = doc.blocks.findIndex((block) => block.id === blockId2);\n if (index1 === -1 || index2 === -1 || index1 === index2) {\n return doc;\n }\n const newBlocks = [...doc.blocks];\n [newBlocks[index1], newBlocks[index2]] = [newBlocks[index2], newBlocks[index1]];\n return {\n ...doc,\n blocks: newBlocks,\n meta: {\n ...doc.meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction findBlock(doc, blockId) {\n return doc.blocks.find((block) => block.id === blockId);\n}\nfunction getBlockIndex(doc, blockId) {\n return doc.blocks.findIndex((block) => block.id === blockId);\n}\nfunction getBlockAt(doc, index) {\n return doc.blocks[index];\n}\nfunction getFirstBlock(doc) {\n return doc.blocks[0];\n}\nfunction getLastBlock(doc) {\n return doc.blocks[doc.blocks.length - 1];\n}\nfunction findBlocksByType(doc, type) {\n return doc.blocks.filter((block) => block.type === type);\n}\nfunction hasBlock(doc, blockId) {\n return doc.blocks.some((block) => block.id === blockId);\n}\nfunction getBlockCount(doc) {\n return doc.blocks.length;\n}\nfunction isEmpty(doc) {\n return doc.blocks.length === 0;\n}\nfunction setBlockContent(doc, blockId, content) {\n return updateBlock(doc, blockId, { content });\n}\nfunction appendBlockContent(doc, blockId, content) {\n const block = findBlock(doc, blockId);\n if (!block) return doc;\n return updateBlock(doc, blockId, {\n content: [...block.content, ...content]\n });\n}\nfunction updateMeta(doc, meta) {\n return {\n ...doc,\n meta: {\n ...doc.meta,\n ...meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction setMetaField(doc, key, value) {\n return updateMeta(doc, { [key]: value });\n}\nfunction getMetaField(doc, key) {\n return doc.meta[key];\n}\nfunction clearBlocks(doc) {\n return {\n ...doc,\n blocks: [],\n meta: {\n ...doc.meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction setBlocks(doc, blocks) {\n return {\n ...doc,\n blocks: deepCloneBlocks(blocks, false),\n meta: {\n ...doc.meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction filterBlocks(doc, predicate) {\n const newBlocks = doc.blocks.filter(predicate);\n if (newBlocks.length === doc.blocks.length) {\n return doc;\n }\n return {\n ...doc,\n blocks: newBlocks,\n meta: {\n ...doc.meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\nfunction mapBlocks(doc, transform) {\n return {\n ...doc,\n blocks: doc.blocks.map(transform),\n meta: {\n ...doc.meta,\n updatedAt: /* @__PURE__ */ new Date()\n }\n };\n}\n\n// src/serializers/markdown.ts\nvar DEFAULT_OPTIONS = {\n lineEnding: \"\\n\",\n listIndent: 2,\n headingStyle: \"atx\",\n codeBlockStyle: \"fenced\",\n bulletChar: \"-\",\n emphasisChar: \"*\"\n};\nfunction blocksToMarkdown(blocks, options = {}) {\n const opts = { ...DEFAULT_OPTIONS, ...options };\n const serializedBlocks = blocks.map(\n (block, index) => serializeBlock(block, 0, opts, index, blocks)\n );\n return serializedBlocks.filter((s) => s !== null).join(opts.lineEnding + opts.lineEnding);\n}\nfunction documentToMarkdown(doc, options = {}) {\n return blocksToMarkdown(doc.blocks, options);\n}\nfunction serializeBlock(block, depth, options, index = 0, siblings = []) {\n switch (block.type) {\n case \"paragraph\":\n return serializeParagraph(block, options);\n case \"heading\":\n return serializeHeading(block, options);\n case \"bulletList\":\n return serializeBulletList(block, depth, options);\n case \"numberedList\":\n return serializeNumberedList(block, depth, options, index, siblings);\n case \"checkList\":\n return serializeCheckList(block, depth, options);\n case \"codeBlock\":\n return serializeCodeBlock(block, options);\n case \"blockquote\":\n return serializeBlockquote(block, options);\n case \"table\":\n return serializeTable(block, options);\n case \"image\":\n return serializeImage(block);\n case \"divider\":\n return \"---\";\n case \"callout\":\n return serializeCallout(block, options);\n default:\n return serializeInlineContent(block.content, options);\n }\n}\nfunction serializeParagraph(block, options) {\n return serializeInlineContent(block.content, options);\n}\nfunction serializeHeading(block, options) {\n const level = block.props.level;\n const content = serializeInlineContent(block.content, options);\n if (options.headingStyle === \"setext\" && (level === 1 || level === 2)) {\n const underline2 = level === 1 ? \"=\" : \"-\";\n return `${content}${options.lineEnding}${underline2.repeat(content.length)}`;\n }\n return `${\"#\".repeat(level)} ${content}`;\n}\nfunction serializeBulletList(block, depth, options) {\n const indent2 = \" \".repeat(depth * options.listIndent);\n const bullet = options.bulletChar;\n return block.children.map((child) => {\n const content = serializeListItemContent(child, depth, options);\n return `${indent2}${bullet} ${content}`;\n }).join(options.lineEnding);\n}\nfunction serializeNumberedList(block, depth, options, _blockIndex = 0, _siblings = []) {\n const indent2 = \" \".repeat(depth * options.listIndent);\n return block.children.map((child, index) => {\n const content = serializeListItemContent(child, depth, options);\n return `${indent2}${index + 1}. ${content}`;\n }).join(options.lineEnding);\n}\nfunction serializeCheckList(block, depth, options) {\n const indent2 = \" \".repeat(depth * options.listIndent);\n const checked = block.props.checked ? \"x\" : \" \";\n const content = serializeInlineContent(block.content, options);\n return `${indent2}- [${checked}] ${content}`;\n}\nfunction serializeListItemContent(item, depth, options) {\n if (item.children.length > 0) {\n const content = serializeInlineContent(item.content, options);\n const nestedContent = item.children.map(\n (child, index) => serializeBlock(child, depth + 1, options, index, item.children)\n ).join(options.lineEnding);\n return `${content}${options.lineEnding}${nestedContent}`;\n }\n return serializeInlineContent(item.content, options);\n}\nfunction serializeCodeBlock(block, options) {\n const code2 = spansToPlainText(block.content);\n const language = block.props.language ?? \"\";\n if (options.codeBlockStyle === \"indented\") {\n return code2.split(\"\\n\").map((line) => ` ${line}`).join(options.lineEnding);\n }\n return `\\`\\`\\`${language}${options.lineEnding}${code2}${options.lineEnding}\\`\\`\\``;\n}\nfunction serializeBlockquote(block, options) {\n const content = serializeInlineContent(block.content, options);\n return content.split(\"\\n\").map((line) => `> ${line}`).join(options.lineEnding);\n}\nfunction serializeImage(block) {\n const alt = block.props.alt ?? \"\";\n const url = block.props.url ?? \"\";\n const title = block.props.title;\n if (title) {\n return ``;\n }\n return ``;\n}\nfunction serializeTable(block, options) {\n const { headers, rows, alignments } = block.props;\n const lineEnding = options.lineEnding;\n const columnWidths = headers.map((header, i) => {\n const rowWidths = rows.map((row) => (row[i] ?? \"\").length);\n return Math.max(header.length, ...rowWidths, 3);\n });\n const headerRow = headers.map((header, i) => header.padEnd(columnWidths[i])).join(\" | \");\n const separatorRow = headers.map((_, i) => {\n const width = columnWidths[i];\n const alignment = alignments?.[i] ?? null;\n if (alignment === \"left\") return `:${\"-\".repeat(width - 1)}`;\n if (alignment === \"right\") return `${\"-\".repeat(width - 1)}:`;\n if (alignment === \"center\") return `:${\"-\".repeat(width - 2)}:`;\n return \"-\".repeat(width);\n }).join(\" | \");\n const dataRows = rows.map(\n (row) => row.map((cell, i) => (cell ?? \"\").padEnd(columnWidths[i])).join(\" | \")\n );\n return [\n `| ${headerRow} |`,\n `| ${separatorRow} |`,\n ...dataRows.map((row) => `| ${row} |`)\n ].join(lineEnding);\n}\nfunction serializeCallout(block, options) {\n const type = block.props.type.toUpperCase();\n const content = serializeInlineContent(block.content, options);\n const lineEnding = options.lineEnding;\n return `> [!${type}]${lineEnding}> ${content.split(\"\\n\").join(`${lineEnding}> `)}`;\n}\nfunction serializeInlineContent(spans2, options) {\n return spans2.map((span) => serializeSpan(span, options)).join(\"\");\n}\nfunction serializeSpan(span, options) {\n let text2 = span.text;\n const styles = span.styles;\n if (!hasStyles(styles)) {\n return text2;\n }\n if (styles.code) {\n text2 = `\\`${text2}\\``;\n }\n if (styles.highlight) {\n text2 = `==${text2}==`;\n }\n if (styles.strikethrough) {\n text2 = `~~${text2}~~`;\n }\n if (styles.bold && styles.italic) {\n const char = options.emphasisChar;\n text2 = `${char}${char}${char}${text2}${char}${char}${char}`;\n } else {\n if (styles.italic) {\n const char = options.emphasisChar;\n text2 = `${char}${text2}${char}`;\n }\n if (styles.bold) {\n const char = options.emphasisChar;\n text2 = `${char}${char}${text2}${char}${char}`;\n }\n }\n if (styles.underline) {\n text2 = `<u>${text2}</u>`;\n }\n if (styles.link) {\n const { url, title } = styles.link;\n if (title) {\n text2 = `[${text2}](${url} \"${title}\")`;\n } else {\n text2 = `[${text2}](${url})`;\n }\n }\n return text2;\n}\nfunction hasStyles(styles) {\n return !!(styles.bold || styles.italic || styles.underline || styles.strikethrough || styles.code || styles.highlight || styles.link);\n}\nfunction stringify(blocks, options) {\n return blocksToMarkdown(blocks, options);\n}\n\n// src/parsers/tokenizer.ts\nvar PATTERNS = {\n // Headings (ATX style)\n heading: /^(#{1,6})\\s+(.*)$/,\n // Setext headings\n setextH1: /^=+\\s*$/,\n setextH2: /^-+\\s*$/,\n // Lists\n bulletList: /^(\\s*)([-*+])\\s+(.*)$/,\n numberedList: /^(\\s*)(\\d+)\\.\\s+(.*)$/,\n checkList: /^(\\s*)[-*+]\\s+\\[([ xX])\\]\\s+(.*)$/,\n // Code blocks\n codeFence: /^(\\s*)(`{3,}|~{3,})(\\w*)?\\s*$/,\n // Blockquote\n blockquote: /^>\\s?(.*)$/,\n // Callout (GitHub style)\n callout: /^>\\s*\\[!(\\w+)\\]\\s*$/,\n // Dividers\n divider: /^(\\s*)(-{3,}|\\*{3,}|_{3,})\\s*$/,\n // Tables\n tableRow: /^\\|(.+)\\|$/,\n tableSeparator: /^\\|[\\s\\-:|]+\\|$/,\n // Images (standalone)\n image: /^!\\[([^\\]]*)\\]\\(([^)]+)\\)$/,\n // Blank line\n blank: /^\\s*$/\n};\nfunction tokenize(markdown) {\n const lines = markdown.split(/\\r?\\n/);\n const tokens = [];\n const state = {\n inCodeBlock: false,\n codeBlockFence: \"\",\n lineNumber: 0\n };\n for (let i = 0; i < lines.length; i++) {\n state.lineNumber = i + 1;\n const line = lines[i];\n const token = tokenizeLine(line, state, lines, i);\n if (token) {\n tokens.push(token);\n }\n }\n return tokens;\n}\nfunction tokenizeLine(line, state, allLines, lineIndex) {\n const lineNumber = state.lineNumber;\n if (state.inCodeBlock) {\n const fenceMatch = line.match(PATTERNS.codeFence);\n if (fenceMatch && line.trim().startsWith(state.codeBlockFence.charAt(0))) {\n state.inCodeBlock = false;\n state.codeBlockFence = \"\";\n return {\n type: \"code_fence_end\",\n raw: line,\n content: \"\",\n indent: 0,\n line: lineNumber\n };\n }\n return {\n type: \"code_content\",\n raw: line,\n content: line,\n indent: 0,\n line: lineNumber\n };\n }\n const codeFenceMatch = line.match(PATTERNS.codeFence);\n if (codeFenceMatch) {\n state.inCodeBlock = true;\n state.codeBlockFence = codeFenceMatch[2];\n const language = codeFenceMatch[3] || \"\";\n return {\n type: \"code_fence_start\",\n raw: line,\n content: \"\",\n indent: (codeFenceMatch[1] || \"\").length,\n line: lineNumber,\n meta: { language }\n };\n }\n if (PATTERNS.blank.test(line)) {\n return {\n type: \"blank\",\n raw: line,\n content: \"\",\n indent: 0,\n line: lineNumber\n };\n }\n const dividerMatch = line.match(PATTERNS.divider);\n if (dividerMatch) {\n const prevLine = lineIndex > 0 ? allLines[lineIndex - 1] : \"\";\n if (prevLine.trim() && !PATTERNS.blank.test(prevLine)) {\n if (PATTERNS.setextH2.test(line)) {\n }\n } else {\n return {\n type: \"divider\",\n raw: line,\n content: \"\",\n indent: (dividerMatch[1] || \"\").length,\n line: lineNumber\n };\n }\n }\n const headingMatch = line.match(PATTERNS.heading);\n if (headingMatch) {\n return {\n type: \"heading\",\n raw: line,\n content: headingMatch[2].trim(),\n indent: 0,\n line: lineNumber,\n meta: { level: headingMatch[1].length }\n };\n }\n const calloutMatch = line.match(PATTERNS.callout);\n if (calloutMatch) {\n return {\n type: \"callout\",\n raw: line,\n content: \"\",\n indent: 0,\n line: lineNumber,\n meta: { calloutType: calloutMatch[1].toLowerCase() }\n };\n }\n const blockquoteMatch = line.match(PATTERNS.blockquote);\n if (blockquoteMatch) {\n return {\n type: \"blockquote\",\n raw: line,\n content: blockquoteMatch[1],\n indent: 0,\n line: lineNumber\n };\n }\n const checkListMatch = line.match(PATTERNS.checkList);\n if (checkListMatch) {\n const checked = checkListMatch[2].toLowerCase() === \"x\";\n return {\n type: \"check_list_item\",\n raw: line,\n content: checkListMatch[3],\n indent: checkListMatch[1].length,\n line: lineNumber,\n meta: { checked }\n };\n }\n const bulletMatch = line.match(PATTERNS.bulletList);\n if (bulletMatch) {\n return {\n type: \"bullet_list_item\",\n raw: line,\n content: bulletMatch[3],\n indent: bulletMatch[1].length,\n line: lineNumber,\n meta: { listMarker: bulletMatch[2] }\n };\n }\n const numberedMatch = line.match(PATTERNS.numberedList);\n if (numberedMatch) {\n return {\n type: \"numbered_list_item\",\n raw: line,\n content: numberedMatch[3],\n indent: numberedMatch[1].length,\n line: lineNumber,\n meta: { listIndex: parseInt(numberedMatch[2], 10) }\n };\n }\n if (PATTERNS.tableSeparator.test(line)) {\n return {\n type: \"table_separator\",\n raw: line,\n content: line,\n indent: 0,\n line: lineNumber\n };\n }\n const tableRowMatch = line.match(PATTERNS.tableRow);\n if (tableRowMatch) {\n return {\n type: \"table_row\",\n raw: line,\n content: tableRowMatch[1],\n indent: 0,\n line: lineNumber\n };\n }\n const imageMatch = line.match(PATTERNS.image);\n if (imageMatch) {\n return {\n type: \"image\",\n raw: line,\n content: imageMatch[2],\n // URL\n indent: 0,\n line: lineNumber,\n meta: { language: imageMatch[1] }\n // Using language field for alt text\n };\n }\n if (PATTERNS.setextH1.test(line) || PATTERNS.setextH2.test(line)) {\n const prevLine = lineIndex > 0 ? allLines[lineIndex - 1] : \"\";\n if (prevLine.trim() && !PATTERNS.blank.test(prevLine)) {\n return {\n type: \"heading\",\n raw: line,\n content: prevLine.trim(),\n indent: 0,\n line: lineNumber,\n meta: { level: PATTERNS.setextH1.test(line) ? 1 : 2 }\n };\n }\n return {\n type: \"divider\",\n raw: line,\n content: \"\",\n indent: 0,\n line: lineNumber\n };\n }\n return {\n type: \"paragraph\",\n raw: line,\n content: line.trim(),\n indent: line.length - line.trimStart().length,\n line: lineNumber\n };\n}\nfunction groupTokens(tokens) {\n const groups = [];\n let currentGroup = [];\n let lastType = null;\n for (const token of tokens) {\n if (token.type === \"blank\") {\n if (currentGroup.length > 0) {\n groups.push(currentGroup);\n currentGroup = [];\n }\n lastType = null;\n continue;\n }\n if (lastType === token.type) {\n currentGroup.push(token);\n } else {\n if (currentGroup.length > 0) {\n groups.push(currentGroup);\n }\n currentGroup = [token];\n lastType = token.type;\n }\n }\n if (currentGroup.length > 0) {\n groups.push(currentGroup);\n }\n return groups;\n}\nfunction isListToken(token) {\n return token.type === \"bullet_list_item\" || token.type === \"numbered_list_item\" || token.type === \"check_list_item\";\n}\nfunction isCodeToken(token) {\n return token.type === \"code_fence_start\" || token.type === \"code_fence_end\" || token.type === \"code_content\";\n}\n\n// src/parsers/inline.ts\nfunction parseInlineContent(text2) {\n if (!text2) {\n return [];\n }\n const tokens = tokenizeInline(text2);\n return tokensToSpans(tokens);\n}\nfunction tokenizeInline(text2) {\n const tokens = [];\n let remaining = text2;\n let pos = 0;\n while (pos < remaining.length) {\n const matched = tryMatchInline(remaining, pos);\n if (matched) {\n if (matched.startIndex > pos) {\n tokens.push({\n type: \"text\",\n content: remaining.slice(pos, matched.startIndex)\n });\n }\n tokens.push(matched.token);\n pos = matched.endIndex;\n } else {\n pos++;\n }\n }\n return parseInlineTokens(text2);\n}\nfunction parseInlineTokens(text2) {\n const tokens = [];\n let i = 0;\n let textBuffer = \"\";\n const flushText = () => {\n if (textBuffer) {\n tokens.push({ type: \"text\", content: textBuffer });\n textBuffer = \"\";\n }\n };\n while (i < text2.length) {\n if (text2[i] === \"\\\\\" && i + 1 < text2.length) {\n textBuffer += text2[i + 1];\n i += 2;\n continue;\n }\n if (text2[i] === \"`\") {\n const match = matchCode(text2, i);\n if (match) {\n flushText();\n tokens.push(match.token);\n i = match.end;\n continue;\n }\n }\n if (text2[i] === \"[\" || text2[i] === \"!\" && text2[i + 1] === \"[\") {\n const isImage = text2[i] === \"!\";\n const match = matchLink(text2, isImage ? i + 1 : i, isImage);\n if (match) {\n flushText();\n tokens.push(match.token);\n i = match.end;\n continue;\n }\n }\n if (text2[i] === \"*\" || text2[i] === \"_\") {\n const match = matchEmphasis(text2, i);\n if (match) {\n flushText();\n tokens.push(match.token);\n i = match.end;\n continue;\n }\n }\n if (text2[i] === \"~\" && text2[i + 1] === \"~\") {\n const match = matchStrikethrough(text2, i);\n if (match) {\n flushText();\n tokens.push(match.token);\n i = match.end;\n continue;\n }\n }\n if (text2[i] === \"=\" && text2[i + 1] === \"=\") {\n const match = matchHighlight(text2, i);\n if (match) {\n flushText();\n tokens.push(match.token);\n i = match.end;\n continue;\n }\n }\n textBuffer += text2[i];\n i++;\n }\n flushText();\n return tokens;\n}\nfunction matchCode(text2, start) {\n let backticks = 0;\n let i = start;\n while (i < text2.length && text2[i] === \"`\") {\n backticks++;\n i++;\n }\n if (backticks === 0) return null;\n const closePattern = \"`\".repeat(backticks);\n const closeIndex = text2.indexOf(closePattern, i);\n if (closeIndex === -1) return null;\n if (text2[closeIndex + backticks] === \"`\") {\n return null;\n }\n const content = text2.slice(i, closeIndex);\n return {\n token: { type: \"code\", content: content.trim() },\n end: closeIndex + backticks\n };\n}\nfunction matchLink(text2, start, isImage = false) {\n if (text2[start] !== \"[\") return null;\n let bracketDepth = 1;\n let i = start + 1;\n while (i < text2.length && bracketDepth > 0) {\n if (text2[i] === \"[\") bracketDepth++;\n else if (text2[i] === \"]\") bracketDepth--;\n else if (text2[i] === \"\\\\\") i++;\n i++;\n }\n if (bracketDepth !== 0) return null;\n const linkText = text2.slice(start + 1, i - 1);\n if (text2[i] !== \"(\") return null;\n const urlStart = i + 1;\n let urlEnd = urlStart;\n let parenDepth = 1;\n while (urlEnd < text2.length && parenDepth > 0) {\n if (text2[urlEnd] === \"(\") parenDepth++;\n else if (text2[urlEnd] === \")\") parenDepth--;\n else if (text2[urlEnd] === \"\\\\\") urlEnd++;\n urlEnd++;\n }\n if (parenDepth !== 0) return null;\n const urlPart = text2.slice(urlStart, urlEnd - 1).trim();\n let url = urlPart;\n let title;\n const titleMatch = urlPart.match(/^(.+?)\\s+[\"'](.+?)[\"']$/);\n if (titleMatch) {\n url = titleMatch[1];\n title = titleMatch[2];\n }\n const children = parseInlineTokens(linkText);\n const token = isImage ? { type: \"image\", content: linkText, url, title, children } : { type: \"link\", content: linkText, url, title, children };\n return {\n token,\n end: isImage ? urlEnd + 1 : urlEnd\n };\n}\nfunction matchEmphasis(text2, start) {\n const char = text2[start];\n if (char !== \"*\" && char !== \"_\") return null;\n let count = 0;\n let i = start;\n while (i < text2.length && text2[i] === char && count < 3) {\n count++;\n i++;\n }\n if (count === 0) return null;\n const closePattern = char.repeat(count);\n let searchStart = i;\n while (searchStart < text2.length) {\n const closeIndex = text2.indexOf(closePattern, searchStart);\n if (closeIndex === -1) return null;\n if (text2[closeIndex + count] === char) {\n searchStart = closeIndex + 1;\n continue;\n }\n if (text2[closeIndex - 1] === \" \") {\n searchStart = closeIndex + 1;\n continue;\n }\n const content = text2.slice(i, closeIndex);\n if (!content.trim()) {\n searchStart = closeIndex + 1;\n continue;\n }\n const children = parseInlineTokens(content);\n if (count === 3) {\n return {\n token: {\n type: \"bold\",\n content,\n children: [{ type: \"italic\", content, children }]\n },\n end: closeIndex + count\n };\n } else if (count === 2) {\n return {\n token: { type: \"bold\", content, children },\n end: closeIndex + count\n };\n } else {\n return {\n token: { type: \"italic\", content, children },\n end: closeIndex + count\n };\n }\n }\n return null;\n}\nfunction matchStrikethrough(text2, start) {\n if (text2[start] !== \"~\" || text2[start + 1] !== \"~\") return null;\n const closeIndex = text2.indexOf(\"~~\", start + 2);\n if (closeIndex === -1) return null;\n const content = text2.slice(start + 2, closeIndex);\n if (!content.trim()) return null;\n const children = parseInlineTokens(content);\n return {\n token: { type: \"strikethrough\", content, children },\n end: closeIndex + 2\n };\n}\nfunction matchHighlight(text2, start) {\n if (text2[start] !== \"=\" || text2[start + 1] !== \"=\") return null;\n const closeIndex = text2.indexOf(\"==\", start + 2);\n if (closeIndex === -1) return null;\n const content = text2.slice(start + 2, closeIndex);\n if (!content.trim()) return null;\n const children = parseInlineTokens(content);\n return {\n token: { type: \"highlight\", content, children },\n end: closeIndex + 2\n };\n}\nfunction tokensToSpans(tokens) {\n const spans2 = [];\n for (const token of tokens) {\n const newSpans = tokenToSpans(token, {});\n spans2.push(...newSpans);\n }\n return mergeAdjacentSpans(spans2);\n}\nfunction tokenToSpans(token, inheritedStyles) {\n switch (token.type) {\n case \"text\":\n return [{ text: token.content, styles: { ...inheritedStyles } }];\n case \"bold\":\n return processStyledToken(token, { ...inheritedStyles, bold: true });\n case \"italic\":\n return processStyledToken(token, { ...inheritedStyles, italic: true });\n case \"code\":\n return [{ text: token.content, styles: { ...inheritedStyles, code: true } }];\n case \"strikethrough\":\n return processStyledToken(token, { ...inheritedStyles, strikethrough: true });\n case \"highlight\":\n return processStyledToken(token, { ...inheritedStyles, highlight: true });\n case \"link\":\n return processStyledToken(token, {\n ...inheritedStyles,\n link: { url: token.url || \"\", title: token.title }\n });\n case \"image\":\n return [{ text: `[image: ${token.content}]`, styles: inheritedStyles }];\n default:\n return [{ text: token.content, styles: inheritedStyles }];\n }\n}\nfunction processStyledToken(token, styles) {\n if (token.children && token.children.length > 0) {\n const spans2 = [];\n for (const child of token.children) {\n spans2.push(...tokenToSpans(child, styles));\n }\n return spans2;\n }\n return [{ text: token.content, styles }];\n}\nfunction mergeAdjacentSpans(spans2) {\n if (spans2.length === 0) return [];\n const merged = [spans2[0]];\n for (let i = 1; i < spans2.length; i++) {\n const current = spans2[i];\n const previous = merged[merged.length - 1];\n if (stylesEqual(current.styles, previous.styles)) {\n previous.text += current.text;\n } else {\n merged.push(current);\n }\n }\n return merged;\n}\nfunction stylesEqual(a, b) {\n return a.bold === b.bold && a.italic === b.italic && a.underline === b.underline && a.strikethrough === b.strikethrough && a.code === b.code && a.highlight === b.highlight && linksEqual(a.link, b.link);\n}\nfunction linksEqual(a, b) {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return a.url === b.url && a.title === b.title;\n}\nfunction tryMatchInline(text2, pos) {\n const matchers = [\n () => matchCode(text2, pos),\n () => matchEmphasis(text2, pos),\n () => matchStrikethrough(text2, pos),\n () => matchHighlight(text2, pos)\n ];\n for (const match of matchers) {\n const result = match();\n if (result) {\n return {\n token: result.token,\n startIndex: pos,\n endIndex: result.end\n };\n }\n }\n return null;\n}\n\n// src/parsers/markdown.ts\nvar DEFAULT_OPTIONS2 = {\n generateId,\n strict: false\n};\nfunction markdownToBlocks(markdown, options = {}) {\n const opts = { ...DEFAULT_OPTIONS2, ...options };\n const tokens = tokenize(markdown);\n return parseTokens(tokens, opts);\n}\nfunction markdownToDocument(markdown, options = {}) {\n const blocks = markdownToBlocks(markdown, options);\n return createDocument(blocks);\n}\nfunction parse(markdown, options) {\n return markdownToBlocks(markdown, options);\n}\nfunction parseTokens(tokens, options) {\n const blocks = [];\n const state = {\n options,\n tokens,\n index: 0\n };\n while (state.index < tokens.length) {\n const token = tokens[state.index];\n if (token.type === \"blank\") {\n state.index++;\n continue;\n }\n const block = parseBlock(state);\n if (block) {\n blocks.push(block);\n }\n }\n return blocks;\n}\nfunction parseBlock(state) {\n const token = state.tokens[state.index];\n switch (token.type) {\n case \"heading\":\n return parseHeading(state);\n case \"paragraph\":\n return parseParagraph(state);\n case \"bullet_list_item\":\n return parseBulletList(state);\n case \"numbered_list_item\":\n return parseNumberedList(state);\n case \"check_list_item\":\n return parseCheckListItem(state);\n case \"code_fence_start\":\n return parseCodeBlock(state);\n case \"blockquote\":\n return parseBlockquote(state);\n case \"callout\":\n return parseCallout(state);\n case \"divider\":\n return parseDivider(state);\n case \"table_row\":\n return parseTable(state);\n case \"image\":\n return parseImage(state);\n default:\n state.index++;\n return null;\n }\n}\nfunction parseHeading(state) {\n const token = state.tokens[state.index];\n const level = token.meta?.level ?? 1;\n const content = parseInlineContent(token.content);\n state.index++;\n return {\n id: state.options.generateId(),\n type: \"heading\",\n content,\n children: [],\n props: { level }\n };\n}\nfunction parseParagraph(state) {\n const lines = [];\n while (state.index < state.tokens.length && state.tokens[state.index].type === \"paragraph\") {\n lines.push(state.tokens[state.index].content);\n state.index++;\n }\n const content = parseInlineContent(lines.join(\" \"));\n return {\n id: state.options.generateId(),\n type: \"paragraph\",\n content,\n children: [],\n props: {}\n };\n}\nfunction parseBulletList(state) {\n const children = [];\n const baseIndent = state.tokens[state.index].indent;\n while (state.index < state.tokens.length && state.tokens[state.index].type === \"bullet_list_item\" && state.tokens[state.index].indent >= baseIndent) {\n const token = state.tokens[state.index];\n if (token.indent > baseIndent) {\n state.index++;\n continue;\n }\n const content = parseInlineContent(token.content);\n children.push({\n id: state.options.generateId(),\n type: \"paragraph\",\n content,\n children: [],\n props: {}\n });\n state.index++;\n }\n return {\n id: state.options.generateId(),\n type: \"bulletList\",\n content: [],\n children,\n props: {}\n };\n}\nfunction parseNumberedList(state) {\n const children = [];\n const baseIndent = state.tokens[state.index].indent;\n while (state.index < state.tokens.length && state.tokens[state.index].type === \"numbered_list_item\" && state.tokens[state.index].indent >= baseIndent) {\n const token = state.tokens[state.index];\n if (token.indent > baseIndent) {\n state.index++;\n continue;\n }\n const content = parseInlineContent(token.content);\n children.push({\n id: state.options.generateId(),\n type: \"paragraph\",\n content,\n children: [],\n props: {}\n });\n state.index++;\n }\n return {\n id: state.options.generateId(),\n type: \"numberedList\",\n content: [],\n children,\n props: {}\n };\n}\nfunction parseCheckListItem(state) {\n const token = state.tokens[state.index];\n const checked = token.meta?.checked ?? false;\n const content = parseInlineContent(token.content);\n state.index++;\n return {\n id: state.options.generateId(),\n type: \"checkList\",\n content,\n children: [],\n props: { checked }\n };\n}\nfunction parseCodeBlock(state) {\n const startToken = state.tokens[state.index];\n const language = startToken.meta?.language ?? \"\";\n const codeLines = [];\n state.index++;\n while (state.index < state.tokens.length && state.tokens[state.index].type === \"code_content\") {\n codeLines.push(state.tokens[state.index].content);\n state.index++;\n }\n if (state.index < state.tokens.length && state.tokens[state.index].type === \"code_fence_end\") {\n state.index++;\n }\n return {\n id: state.options.generateId(),\n type: \"codeBlock\",\n content: plainContent(codeLines.join(\"\\n\")),\n children: [],\n props: { language: language || void 0 }\n };\n}\nfunction parseBlockquote(state) {\n const lines = [];\n while (state.index < state.tokens.length && state.tokens[state.index].type === \"blockquote\") {\n lines.push(state.tokens[state.index].content);\n state.index++;\n }\n const content = parseInlineContent(lines.join(\"\\n\"));\n return {\n id: state.options.generateId(),\n type: \"blockquote\",\n content,\n children: [],\n props: {}\n };\n}\nfunction parseCallout(state) {\n const calloutToken = state.tokens[state.index];\n const calloutType = calloutToken.meta?.calloutType ?? \"note\";\n state.index++;\n const lines = [];\n while (state.index < state.tokens.length && state.tokens[state.index].type === \"blockquote\") {\n lines.push(state.tokens[state.index].content);\n state.index++;\n }\n const content = parseInlineContent(lines.join(\"\\n\"));\n return {\n id: state.options.generateId(),\n type: \"callout\",\n content,\n children: [],\n props: { type: calloutType }\n };\n}\nfunction parseDivider(state) {\n state.index++;\n return {\n id: state.options.generateId(),\n type: \"divider\",\n content: [],\n children: [],\n props: {}\n };\n}\nfunction parseTable(state) {\n const rows = [];\n let headers = [];\n let alignments = [];\n let isFirstRow = true;\n let hasSeparator = false;\n while (state.index < state.tokens.length && (state.tokens[state.index].type === \"table_row\" || state.tokens[state.index].type === \"table_separator\")) {\n const token = state.tokens[state.index];\n if (token.type === \"table_separator\") {\n alignments = parseTableAlignments(token.content);\n hasSeparator = true;\n state.index++;\n continue;\n }\n const cells = token.content.split(\"|\").map((cell) => cell.trim()).filter((cell) => cell !== \"\");\n if (isFirstRow && !hasSeparator) {\n headers = cells;\n isFirstRow = false;\n } else if (hasSeparator) {\n rows.push(cells);\n }\n state.index++;\n }\n if (!hasSeparator && headers.length > 0) {\n rows.unshift(headers);\n headers = [];\n }\n return {\n id: state.options.generateId(),\n type: \"table\",\n content: [],\n children: [],\n props: {\n headers,\n rows,\n alignments: alignments.length > 0 ? alignments : void 0\n }\n };\n}\nfunction parseTableAlignments(separator) {\n return separator.split(\"|\").map((cell) => cell.trim()).filter((cell) => cell !== \"\").map((cell) => {\n const leftColon = cell.startsWith(\":\");\n const rightColon = cell.endsWith(\":\");\n if (leftColon && rightColon) return \"center\";\n if (leftColon) return \"left\";\n if (rightColon) return \"right\";\n return null;\n });\n}\nfunction parseImage(state) {\n const token = state.tokens[state.index];\n const url = token.content;\n const alt = token.meta?.language ?? \"\";\n state.index++;\n return {\n id: state.options.generateId(),\n type: \"image\",\n content: [],\n children: [],\n props: {\n url,\n alt: alt || void 0\n }\n };\n}\n\n// src/index.ts\nfunction fromMarkdown(markdown) {\n const blocks = markdownToBlocks(markdown);\n return createDocument(blocks);\n}\nfunction toMarkdown(blocksOrDoc) {\n const blocks = Array.isArray(blocksOrDoc) ? blocksOrDoc : blocksOrDoc.blocks;\n return blocksToMarkdown(blocks);\n}\nvar VERSION = \"2.0.0\";\nexport {\n DOCUMENT_VERSION,\n VERSION,\n addChildren,\n appendBlock,\n appendBlockContent,\n appendContent,\n blockquote,\n blocksToMarkdown,\n bold,\n bulletList,\n callout,\n checkList,\n checkListItem,\n clearBlocks,\n cloneDocument,\n code,\n codeBlock,\n convertLineEndings,\n createBlock,\n createDocument,\n dangerCallout,\n deepClone,\n deepCloneBlocks,\n divider,\n documentToMarkdown,\n emptyDocument,\n escapeCodeBlock,\n escapeMarkdown,\n filterBlocks,\n findBlock,\n findBlocksByType,\n fromMarkdown,\n generateId,\n getBlockAt,\n getBlockCount,\n getBlockIndex,\n getFirstBlock,\n getLastBlock,\n getMetaField,\n groupTokens,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n hasBlock,\n hasChildren,\n hasContent,\n heading,\n highlight,\n image,\n indent,\n infoCallout,\n insertBlock,\n insertBlocks,\n isCodeToken,\n isEmpty,\n isListToken,\n isValidBlockType,\n isValidHeadingLevel,\n italic,\n link,\n mapBlocks,\n markdownToBlocks,\n markdownToDocument,\n moveBlock,\n normalizeLineEndings,\n noteCallout,\n numberedList,\n paragraph,\n parse,\n parseInlineContent,\n plainContent,\n plainSpan,\n prependBlock,\n prependContent,\n removeBlock,\n removeBlocks,\n replaceBlock,\n serializeBlock,\n serializeInlineContent,\n serializeSpan,\n setBlockContent,\n setBlocks,\n setContent,\n setMetaField,\n spans,\n spansToPlainText,\n strikethrough,\n stringify,\n styled,\n swapBlocks,\n table,\n text,\n tipCallout,\n toMarkdown,\n tokenize,\n trimBlankLines,\n trimTrailingWhitespace,\n underline,\n unescapeMarkdown,\n updateBlock,\n updateMeta,\n updateProps,\n warningCallout\n};\n//# sourceMappingURL=index.js.map"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import{i as e,n as t}from"./lit-zdTgzAJI.js";import{l as n}from"./format-BahKhiOC.js";function r(r){let a=r.dashboard?.employees??[],o=r.filterAgentId?a.find(e=>e.id===r.filterAgentId)??null:null,s=o?a.filter(e=>e.id===o.id):a,c=(r.dashboard?.activity??[]).filter(e=>!o||e.id===o.id);return e`
|
|
2
|
+
<div class="employees-page">
|
|
3
|
+
<section class="card employees-hero">
|
|
4
|
+
<div>
|
|
5
|
+
<div class="card-title employees-hero__title">Your AI Team</div>
|
|
6
|
+
<div class="card-sub">
|
|
7
|
+
${a.length===1?`1 employee available`:`${a.length} employees available`}
|
|
8
|
+
</div>
|
|
9
|
+
${o?e`
|
|
10
|
+
<div class="employees-hero__filter">
|
|
11
|
+
Showing activity for <strong>${o.avatar} ${o.name}</strong>
|
|
12
|
+
</div>
|
|
13
|
+
`:t}
|
|
14
|
+
</div>
|
|
15
|
+
<div class="employees-hero__actions">
|
|
16
|
+
${o?e`
|
|
17
|
+
<button class="btn btn--ghost" @click=${r.onClearFilter}>Show all</button>
|
|
18
|
+
`:t}
|
|
19
|
+
<button class="btn" ?disabled=${r.loading} @click=${r.onRefresh}>
|
|
20
|
+
${r.loading?`Refreshing...`:`Refresh`}
|
|
21
|
+
</button>
|
|
22
|
+
</div>
|
|
23
|
+
</section>
|
|
24
|
+
|
|
25
|
+
${r.error?e`<div class="callout danger">${r.error}</div>`:t}
|
|
26
|
+
|
|
27
|
+
${s.length===0?e`
|
|
28
|
+
<section class="card">
|
|
29
|
+
<div class="muted" style="font-size: 13px;">
|
|
30
|
+
${r.loading?`Loading Kova employees...`:`No Kova employees found yet. Create one from the Agents page to see it here.`}
|
|
31
|
+
</div>
|
|
32
|
+
</section>
|
|
33
|
+
`:e`
|
|
34
|
+
<section class="employees-grid">
|
|
35
|
+
${s.map(e=>i(e,r))}
|
|
36
|
+
</section>
|
|
37
|
+
`}
|
|
38
|
+
|
|
39
|
+
<section class="card employees-activity">
|
|
40
|
+
<div class="employees-activity__header">
|
|
41
|
+
<div class="card-title">Recent Activity</div>
|
|
42
|
+
</div>
|
|
43
|
+
${c.length===0?e`
|
|
44
|
+
<div class="employees-activity__empty">
|
|
45
|
+
${r.loading?`Loading recent activity...`:o?`No recent activity for ${o.name} yet.`:`No activity yet. Start chatting with your employees.`}
|
|
46
|
+
</div>
|
|
47
|
+
`:e`
|
|
48
|
+
<div class="employees-activity__list">
|
|
49
|
+
${c.map(t=>e`
|
|
50
|
+
<div class="employees-activity__row">
|
|
51
|
+
<div class="employees-activity__identity">
|
|
52
|
+
<span class="employees-activity__avatar">${t.avatar}</span>
|
|
53
|
+
<span class="employees-activity__name">${t.name}</span>
|
|
54
|
+
</div>
|
|
55
|
+
<div class="employees-activity__description">${t.description}</div>
|
|
56
|
+
<div class="employees-activity__time">
|
|
57
|
+
${n(t.timestamp)}
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
`)}
|
|
61
|
+
</div>
|
|
62
|
+
`}
|
|
63
|
+
</section>
|
|
64
|
+
</div>
|
|
65
|
+
`}function i(t,n){return e`
|
|
66
|
+
<article class="card employees-card">
|
|
67
|
+
<div class="employees-card__header">
|
|
68
|
+
<div class="employees-card__identity">
|
|
69
|
+
<div class="employees-card__avatar">${t.avatar}</div>
|
|
70
|
+
<div>
|
|
71
|
+
<div class="employees-card__name">${t.name}</div>
|
|
72
|
+
<div class="employees-card__role">${t.role}</div>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
75
|
+
<span class="employees-card__badge">${t.autonomy}</span>
|
|
76
|
+
</div>
|
|
77
|
+
|
|
78
|
+
<div class="employees-card__status-row">
|
|
79
|
+
<span class="employees-status employees-status--${t.status}">
|
|
80
|
+
<span class="employees-status__dot"></span>
|
|
81
|
+
<span>${o(t.status)}</span>
|
|
82
|
+
</span>
|
|
83
|
+
<span class="employees-card__last-active">Last active: ${s(t.lastActiveAt)}</span>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<div class="employees-card__metrics">
|
|
87
|
+
${a(`Sessions today`,c(t.sessionsToday))}
|
|
88
|
+
${a(`Total messages`,c(t.totalMessages))}
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
<div class="employees-card__actions">
|
|
92
|
+
<button class="btn btn--sm" @click=${()=>n.onOpenChat(t.id)}>Chat</button>
|
|
93
|
+
<button class="btn btn--sm btn--ghost" @click=${()=>n.onViewSessions(t.id)}>
|
|
94
|
+
View sessions
|
|
95
|
+
</button>
|
|
96
|
+
</div>
|
|
97
|
+
</article>
|
|
98
|
+
`}function a(t,n){return e`
|
|
99
|
+
<div class="employees-metric">
|
|
100
|
+
<div class="employees-metric__label">${t}</div>
|
|
101
|
+
<div class="employees-metric__value">${n}</div>
|
|
102
|
+
</div>
|
|
103
|
+
`}function o(e){switch(e){case`active`:return`Active`;case`idle`:return`Idle`;default:return`Never used`}}function s(e){return e?n(e):`never`}function c(e){return new Intl.NumberFormat().format(e)}export{r as renderEmployees};
|
|
104
|
+
//# sourceMappingURL=employees-DV-5FV4K.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"employees-DV-5FV4K.js","names":[],"sources":["../../../ui/src/ui/views/employees.ts"],"sourcesContent":["import { html, nothing } from \"lit\";\nimport { formatRelativeTimestamp } from \"../format.ts\";\nimport {\n type EmployeeCard,\n type EmployeesDashboardResult,\n} from \"../controllers/employees.ts\";\n\nexport type EmployeesProps = {\n loading: boolean;\n error: string | null;\n dashboard: EmployeesDashboardResult | null;\n filterAgentId: string | null;\n onClearFilter: () => void;\n onRefresh: () => void;\n onOpenChat: (agentId: string) => void;\n onViewSessions: (agentId: string) => void;\n};\n\nexport function renderEmployees(props: EmployeesProps) {\n const employees = props.dashboard?.employees ?? [];\n const selectedEmployee = props.filterAgentId\n ? (employees.find((employee) => employee.id === props.filterAgentId) ?? null)\n : null;\n const visibleEmployees = selectedEmployee\n ? employees.filter((employee) => employee.id === selectedEmployee.id)\n : employees;\n const activity = (props.dashboard?.activity ?? []).filter(\n (entry) => !selectedEmployee || entry.id === selectedEmployee.id,\n );\n\n return html`\n <div class=\"employees-page\">\n <section class=\"card employees-hero\">\n <div>\n <div class=\"card-title employees-hero__title\">Your AI Team</div>\n <div class=\"card-sub\">\n ${employees.length === 1 ? \"1 employee available\" : `${employees.length} employees available`}\n </div>\n ${selectedEmployee\n ? html`\n <div class=\"employees-hero__filter\">\n Showing activity for <strong>${selectedEmployee.avatar} ${selectedEmployee.name}</strong>\n </div>\n `\n : nothing}\n </div>\n <div class=\"employees-hero__actions\">\n ${selectedEmployee\n ? html`\n <button class=\"btn btn--ghost\" @click=${props.onClearFilter}>Show all</button>\n `\n : nothing}\n <button class=\"btn\" ?disabled=${props.loading} @click=${props.onRefresh}>\n ${props.loading ? \"Refreshing...\" : \"Refresh\"}\n </button>\n </div>\n </section>\n\n ${props.error ? html`<div class=\"callout danger\">${props.error}</div>` : nothing}\n\n ${visibleEmployees.length === 0\n ? html`\n <section class=\"card\">\n <div class=\"muted\" style=\"font-size: 13px;\">\n ${props.loading\n ? \"Loading Kova employees...\"\n : \"No Kova employees found yet. Create one from the Agents page to see it here.\"}\n </div>\n </section>\n `\n : html`\n <section class=\"employees-grid\">\n ${visibleEmployees.map((employee) => renderEmployeeCard(employee, props))}\n </section>\n `}\n\n <section class=\"card employees-activity\">\n <div class=\"employees-activity__header\">\n <div class=\"card-title\">Recent Activity</div>\n </div>\n ${activity.length === 0\n ? html`\n <div class=\"employees-activity__empty\">\n ${props.loading\n ? \"Loading recent activity...\"\n : selectedEmployee\n ? `No recent activity for ${selectedEmployee.name} yet.`\n : \"No activity yet. Start chatting with your employees.\"}\n </div>\n `\n : html`\n <div class=\"employees-activity__list\">\n ${activity.map(\n (entry) => html`\n <div class=\"employees-activity__row\">\n <div class=\"employees-activity__identity\">\n <span class=\"employees-activity__avatar\">${entry.avatar}</span>\n <span class=\"employees-activity__name\">${entry.name}</span>\n </div>\n <div class=\"employees-activity__description\">${entry.description}</div>\n <div class=\"employees-activity__time\">\n ${formatRelativeTimestamp(entry.timestamp)}\n </div>\n </div>\n `,\n )}\n </div>\n `}\n </section>\n </div>\n `;\n}\n\nfunction renderEmployeeCard(employee: EmployeeCard, props: EmployeesProps) {\n return html`\n <article class=\"card employees-card\">\n <div class=\"employees-card__header\">\n <div class=\"employees-card__identity\">\n <div class=\"employees-card__avatar\">${employee.avatar}</div>\n <div>\n <div class=\"employees-card__name\">${employee.name}</div>\n <div class=\"employees-card__role\">${employee.role}</div>\n </div>\n </div>\n <span class=\"employees-card__badge\">${employee.autonomy}</span>\n </div>\n\n <div class=\"employees-card__status-row\">\n <span class=\"employees-status employees-status--${employee.status}\">\n <span class=\"employees-status__dot\"></span>\n <span>${statusLabel(employee.status)}</span>\n </span>\n <span class=\"employees-card__last-active\">Last active: ${formatLastActive(employee.lastActiveAt)}</span>\n </div>\n\n <div class=\"employees-card__metrics\">\n ${renderMetric(\"Sessions today\", formatCount(employee.sessionsToday))}\n ${renderMetric(\"Total messages\", formatCount(employee.totalMessages))}\n </div>\n\n <div class=\"employees-card__actions\">\n <button class=\"btn btn--sm\" @click=${() => props.onOpenChat(employee.id)}>Chat</button>\n <button class=\"btn btn--sm btn--ghost\" @click=${() => props.onViewSessions(employee.id)}>\n View sessions\n </button>\n </div>\n </article>\n `;\n}\n\nfunction renderMetric(label: string, value: string) {\n return html`\n <div class=\"employees-metric\">\n <div class=\"employees-metric__label\">${label}</div>\n <div class=\"employees-metric__value\">${value}</div>\n </div>\n `;\n}\n\nfunction statusLabel(status: EmployeeCard[\"status\"]) {\n switch (status) {\n case \"active\":\n return \"Active\";\n case \"idle\":\n return \"Idle\";\n default:\n return \"Never used\";\n }\n}\n\nfunction formatLastActive(timestamp: number | null) {\n return timestamp ? formatRelativeTimestamp(timestamp) : \"never\";\n}\n\nfunction formatCount(value: number) {\n return new Intl.NumberFormat().format(value);\n}\n"],"mappings":"sFAkBA,SAAgB,EAAgB,EAAuB,CACrD,IAAM,EAAY,EAAM,WAAW,WAAa,EAAE,CAC5C,EAAmB,EAAM,cAC1B,EAAU,KAAM,GAAa,EAAS,KAAO,EAAM,cAAc,EAAI,KACtE,KACE,EAAmB,EACrB,EAAU,OAAQ,GAAa,EAAS,KAAO,EAAiB,GAAG,CACnE,EACE,GAAY,EAAM,WAAW,UAAY,EAAE,EAAE,OAChD,GAAU,CAAC,GAAoB,EAAM,KAAO,EAAiB,GAC/D,CAED,MAAO,EAAI;;;;;;cAMC,EAAU,SAAW,EAAI,uBAAyB,GAAG,EAAU,OAAO,sBAAsB;;YAE9F,EACE,CAAI;;iDAE+B,EAAiB,OAAO,GAAG,EAAiB,KAAK;;gBAGpF,EAAQ;;;YAGV,EACE,CAAI;wDACsC,EAAM,cAAc;gBAE9D,EAAQ;0CACoB,EAAM,QAAQ,UAAU,EAAM,UAAU;cACpE,EAAM,QAAU,gBAAkB,UAAU;;;;;QAKlD,EAAM,MAAQ,CAAI,+BAA+B,EAAM,MAAM,QAAU,EAAQ;;QAE/E,EAAiB,SAAW,EAC1B,CAAI;;;kBAGI,EAAM,QACJ,4BACA,+EAA+E;;;YAIzF,CAAI;;gBAEE,EAAiB,IAAK,GAAa,EAAmB,EAAU,EAAM,CAAC,CAAC;;YAE5E;;;;;;UAMF,EAAS,SAAW,EAClB,CAAI;;kBAEE,EAAM,QACJ,6BACA,EACE,0BAA0B,EAAiB,KAAK,OAChD,uDAAuD;;cAGjE,CAAI;;kBAEE,EAAS,IACR,GAAU,CAAI;;;mEAGkC,EAAM,OAAO;iEACf,EAAM,KAAK;;qEAEP,EAAM,YAAY;;0BAE7D,EAAwB,EAAM,UAAU,CAAC;;;oBAIlD,CAAC;;cAEJ;;;IAMd,SAAS,EAAmB,EAAwB,EAAuB,CACzE,MAAO,EAAI;;;;gDAImC,EAAS,OAAO;;gDAEhB,EAAS,KAAK;gDACd,EAAS,KAAK;;;8CAGhB,EAAS,SAAS;;;;0DAIN,EAAS,OAAO;;kBAExD,EAAY,EAAS,OAAO,CAAC;;iEAEkB,EAAiB,EAAS,aAAa,CAAC;;;;UAI/F,EAAa,iBAAkB,EAAY,EAAS,cAAc,CAAC,CAAC;UACpE,EAAa,iBAAkB,EAAY,EAAS,cAAc,CAAC,CAAC;;;;iDAI3B,EAAM,WAAW,EAAS,GAAG,CAAC;4DACnB,EAAM,eAAe,EAAS,GAAG,CAAC;;;;;IAQhG,SAAS,EAAa,EAAe,EAAe,CAClD,MAAO,EAAI;;6CAEgC,EAAM;6CACN,EAAM;;IAKnD,SAAS,EAAY,EAAgC,CACnD,OAAQ,EAAR,CACE,IAAK,SACH,MAAO,SACT,IAAK,OACH,MAAO,OACT,QACE,MAAO,cAIb,SAAS,EAAiB,EAA0B,CAClD,OAAO,EAAY,EAAwB,EAAU,CAAG,QAG1D,SAAS,EAAY,EAAe,CAClC,OAAO,IAAI,KAAK,cAAc,CAAC,OAAO,EAAM"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e={common:{version:`Versión`,health:`Estado`,ok:`Correcto`,online:`En línea`,offline:`Desconectado`,connect:`Conectar`,refresh:`Actualizar`,enabled:`Habilitado`,disabled:`Deshabilitado`,na:`n/a`,docs:`Docs`,resources:`Recursos`},nav:{chat:`Chat`,control:`Control`,agent:`Agente`,settings:`Ajustes`,expand:`Expandir barra lateral`,collapse:`Contraer barra lateral`},tabs:{employees:`Equipo`,agents:`Agentes`,overview:`Resumen`,channels:`Canales`,instances:`Instancias`,sessions:`Sesiones`,usage:`Uso`,cron:`Tareas Cron`,skills:`Habilidades`,nodes:`Nodos`,chat:`Chat`,config:`Configuración`,apiKeys:`API Keys`,debug:`Depuración`,logs:`Registros`},subtitles:{employees:`Equipo de IA y actividad reciente.`,agents:`Gestionar espacios de trabajo, herramientas e identidades de agentes.`,overview:`Estado de la puerta de enlace, puntos de entrada y lectura rápida de salud.`,channels:`Gestionar canales y ajustes.`,instances:`Balizas de presencia de clientes y nodos conectados.`,sessions:`Inspeccionar sesiones activas y ajustar valores predeterminados por sesión.`,usage:`Monitorear uso de API y costes.`,cron:`Programar despertares y ejecuciones recurrentes de agentes.`,skills:`Gestionar disponibilidad de habilidades e inyección de claves API.`,nodes:`Dispositivos emparejados, capacidades y exposición de comandos.`,chat:`Sesión de chat directa con la puerta de enlace para intervenciones rápidas.`,config:`Editar ~/.openclaw/openclaw.json de forma segura.`,apiKeys:`OpenRouter key and model defaults.`,debug:`Instantáneas de la puerta de enlace, eventos y llamadas RPC manuales.`,logs:`Seguimiento en vivo de los registros de la puerta de enlace.`},overview:{access:{title:`Acceso a la puerta de enlace`,subtitle:`Dónde se conecta el panel y cómo se autentica.`,wsUrl:`URL de WebSocket`,token:`Token de la puerta de enlace`,password:`Contraseña (no se guarda)`,sessionKey:`Clave de sesión predeterminada`,language:`Idioma`,connectHint:`Haz clic en Conectar para aplicar los cambios de conexión.`,trustedProxy:`Autenticado mediante proxy de confianza.`},snapshot:{title:`Instantánea`,subtitle:`Información más reciente del saludo con la puerta de enlace.`,status:`Estado`,uptime:`Tiempo de actividad`,tickInterval:`Intervalo de tick`,lastChannelsRefresh:`Última actualización de canales`,channelsHint:`Usa Canales para vincular WhatsApp, Telegram, Discord, Signal o iMessage.`},stats:{instances:`Instancias`,instancesHint:`Balizas de presencia en los últimos 5 minutos.`,sessions:`Sesiones`,sessionsHint:`Claves de sesión recientes rastreadas por la puerta de enlace.`,cron:`Cron`,cronNext:`Próximo despertar {time}`},notes:{title:`Notas`,subtitle:`Recordatorios rápidos para configuraciones de control remoto.`,tailscaleTitle:`Tailscale serve`,tailscaleText:`Prefiere el modo serve para mantener la puerta de enlace en loopback con autenticación tailnet.`,sessionTitle:`Higiene de sesión`,sessionText:`Usa /new o sessions.patch para reiniciar el contexto.`,cronTitle:`Recordatorios de Cron`,cronText:`Usa sesiones aisladas para ejecuciones recurrentes.`},auth:{required:`Esta puerta de enlace requiere autenticación. Añade un token o contraseña y haz clic en Conectar.`,failed:`Autenticación fallida. Vuelve a copiar una URL con token mediante {command}, o actualiza el token y haz clic en Conectar.`},pairing:{hint:`Este dispositivo necesita aprobación de emparejamiento del host de la puerta de enlace.`,mobileHint:`¿En el móvil? Copia la URL completa (incluyendo #token=...) desde kova dashboard --no-open en tu escritorio.`},insecure:{hint:`Esta página es HTTP, por lo que el navegador bloquea el acceso a la identidad del dispositivo. Usa HTTPS (Tailscale Serve) o abre {url} en el equipo host.`,stayHttp:`Si debes permanecer en HTTP, utiliza {config} (solo token).`}},chat:{disconnected:`Desconectado de la puerta de enlace.`,refreshTitle:`Actualizar datos del chat`,thinkingToggle:`Alternar salida de pensamiento/trabajo del asistente`,focusToggle:`Alternar modo de enfoque (ocultar barra lateral + cabecera)`,hideCronSessions:`Ocultar sesiones de cron`,showCronSessions:`Mostrar sesiones de cron`,showCronSessionsHidden:`Mostrar sesiones de cron ({count} ocultas)`,onboardingDisabled:`Deshabilitado durante el inicio guiado`},languages:{en:`Inglés (English)`,zhCN:`Chino simplificado (简体中文)`,zhTW:`Chino tradicional (繁體中文)`,ptBR:`Portugués brasileño (Português)`,de:`Deutsch (Alemán)`,es:`Español`},cron:{summary:{enabled:`Habilitado`,yes:`Sí`,no:`No`,jobs:`Tareas`,nextWake:`Próxima activación`,refreshing:`Actualizando...`,refresh:`Actualizar`},jobs:{title:`Tareas`,subtitle:`Todas las tareas programadas almacenadas en la puerta de enlace.`,shownOf:`{shown} mostradas de {total}`,searchJobs:`Buscar tareas`,searchPlaceholder:`Nombre, descripción o agente`,enabled:`Habilitado`,schedule:`Programación`,lastRun:`Última ejecución`,all:`Todas`,sort:`Ordenar`,nextRun:`Próxima ejecución`,recentlyUpdated:`Actualizadas recientemente`,name:`Nombre`,direction:`Dirección`,ascending:`Ascendente`,descending:`Descendente`,reset:`Restablecer`,noMatching:`No hay tareas coincidentes.`,loading:`Cargando...`,loadMore:`Cargar más tareas`},runs:{title:`Historial de ejecuciones`,subtitleAll:`Últimas ejecuciones de todas las tareas.`,subtitleJob:`Últimas ejecuciones de {title}.`,scope:`Alcance`,allJobs:`Todas las tareas`,selectedJob:`Tarea seleccionada`,searchRuns:`Buscar ejecuciones`,searchPlaceholder:`Resumen, error o tarea`,newestFirst:`Más recientes primero`,oldestFirst:`Más antiguas primero`,status:`Estado`,delivery:`Entrega`,clear:`Limpiar`,allStatuses:`Todos los estados`,allDelivery:`Todas las entregas`,selectJobHint:`Selecciona una tarea para ver su historial de ejecuciones.`,noMatching:`No hay ejecuciones coincidentes.`,loadMore:`Cargar más ejecuciones`,runStatusOk:`OK`,runStatusError:`Error`,runStatusSkipped:`Omitida`,runStatusUnknown:`Desconocido`,deliveryDelivered:`Entregado`,deliveryNotDelivered:`No entregado`,deliveryUnknown:`Desconocido`,deliveryNotRequested:`No solicitado`},form:{editJob:`Editar tarea`,newJob:`Nueva tarea`,updateSubtitle:`Actualiza la tarea programada seleccionada.`,createSubtitle:`Crea una activación programada o ejecución de agente.`,required:`Requerido`,requiredSr:`requerido`,basics:`Básico`,basicsSub:`Asigna un nombre, elige el asistente y define si está habilitada.`,fieldName:`Nombre`,description:`Descripción`,agentId:`ID de agente`,namePlaceholder:`Resumen matutino`,descriptionPlaceholder:`Contexto opcional para esta tarea`,agentPlaceholder:`main u ops`,agentHelp:`Comienza a escribir para seleccionar un agente conocido o ingresa uno personalizado.`,schedule:`Programación`,scheduleSub:`Controla cuándo se ejecuta esta tarea.`,every:`Cada`,at:`A las`,cronOption:`Cron`,runAt:`Ejecutar a las`,unit:`Unidad`,minutes:`Minutos`,hours:`Horas`,days:`Días`,expression:`Expresión`,expressionPlaceholder:`0 7 * * *`,everyAmountPlaceholder:`30`,timezoneOptional:`Zona horaria (opcional)`,timezonePlaceholder:`America/Los_Angeles`,timezoneHelp:`Selecciona una zona horaria común o ingresa cualquier zona IANA válida.`,jitterHelp:`¿Necesitas variación? Usa Avanzado → Ventana de escalonamiento / Unidad de escalonamiento.`,execution:`Ejecución`,executionSub:`Elige cuándo activar y qué debe hacer esta tarea.`,session:`Sesión`,main:`Principal`,isolated:`Aislada`,sessionHelp:`Principal publica un evento del sistema. Aislada ejecuta un turno dedicado del agente.`,wakeMode:`Modo de activación`,now:`Ahora`,nextHeartbeat:`Próximo latido`,wakeModeHelp:`Ahora se activa inmediatamente. Próximo latido espera el siguiente ciclo.`,payloadKind:`¿Qué debe ejecutarse?`,systemEvent:`Publicar mensaje en la línea de tiempo principal`,agentTurn:`Ejecutar tarea del asistente (aislada)`,systemEventHelp:`Envía tu texto a la línea de tiempo principal de la puerta de enlace (ideal para recordatorios/activadores).`,agentTurnHelp:`Inicia una ejecución del asistente en su propia sesión usando tu indicación.`,timeoutSeconds:`Tiempo de espera (segundos)`,timeoutPlaceholder:`Opcional, ej. 90`,timeoutHelp:`Opcional. Déjalo en blanco para usar el comportamiento de tiempo de espera predeterminado de la puerta de enlace para esta ejecución.`,mainTimelineMessage:`Mensaje de la línea de tiempo principal`,assistantTaskPrompt:`Indicación para la tarea del asistente`,deliverySection:`Entrega`,deliverySub:`Elige dónde se envían los resúmenes de ejecución.`,resultDelivery:`Entrega de resultados`,announceDefault:`Anunciar resumen (predeterminado)`,webhookPost:`Webhook POST`,noneInternal:`Ninguna (interno)`,deliveryHelp:`Anunciar publica un resumen en el chat. Ninguna mantiene la ejecución interna.`,webhookUrl:`URL del webhook`,channel:`Canal`,webhookPlaceholder:`https://example.com/cron`,channelHelp:`Elige qué canal conectado recibe el resumen.`,webhookHelp:`Envía resúmenes de ejecución a un endpoint webhook.`,to:`Para`,toPlaceholder:`+1555... o ID de chat`,toHelp:`Anulación opcional del destinatario (ID de chat, teléfono o ID de usuario).`,advanced:`Avanzado`,advancedHelp:`Anulaciones opcionales para garantías de entrega, variación de programación y controles del modelo.`,deleteAfterRun:`Eliminar después de ejecutar`,deleteAfterRunHelp:`Ideal para recordatorios de un solo uso que deben limpiarse automáticamente.`,clearAgentOverride:`Limpiar anulación de agente`,clearAgentHelp:`Forza a esta tarea a usar el asistente predeterminado de la puerta de enlace.`,exactTiming:`Tiempo exacto (sin escalonamiento)`,exactTimingHelp:`Ejecutar en límites exactos de cron sin dispersión.`,staggerWindow:`Ventana de escalonamiento`,staggerUnit:`Unidad de escalonamiento`,staggerPlaceholder:`30`,seconds:`Segundos`,model:`Modelo`,modelPlaceholder:`openai/gpt-5.2`,modelHelp:`Comienza a escribir para seleccionar un modelo conocido o ingresa uno personalizado.`,thinking:`Pensamiento`,thinkingPlaceholder:`bajo`,thinkingHelp:`Usa un nivel sugerido o ingresa un valor específico del proveedor.`,bestEffortDelivery:`Entrega de mejor esfuerzo`,bestEffortHelp:`No fallar la tarea si la entrega misma falla.`,cantAddYet:`Aún no se puede agregar la tarea`,fillRequired:`Completa los campos requeridos a continuación para habilitar el envío.`,fixFields:`Corrige {count} campo para continuar.`,fixFieldsPlural:`Corrige {count} campos para continuar.`,saving:`Guardando...`,saveChanges:`Guardar cambios`,addJob:`Agregar tarea`,cancel:`Cancelar`},jobList:{allJobs:`todas las tareas`,selectJob:`(selecciona una tarea)`,enabled:`habilitada`,disabled:`deshabilitada`,edit:`Editar`,clone:`Clonar`,disable:`Deshabilitar`,enable:`Habilitar`,run:`Ejecutar`,history:`Historial`,remove:`Eliminar`},jobDetail:{system:`Sistema`,prompt:`Indicación`,delivery:`Entrega`,agent:`Agente`},jobState:{status:`Estado`,next:`Próxima`,last:`Última`},runEntry:{noSummary:`Sin resumen.`,runAt:`Ejecutada a las`,openRunChat:`Abrir chat de ejecución`,next:`Próxima {rel}`,due:`Programada {rel}`},errors:{nameRequired:`El nombre es requerido.`,scheduleAtInvalid:`Ingresa una fecha/hora válida.`,everyAmountInvalid:`El intervalo debe ser mayor a 0.`,cronExprRequired:`La expresión Cron es requerida.`,staggerAmountInvalid:`El escalonamiento debe ser mayor a 0.`,systemTextRequired:`El texto del sistema es requerido.`,agentMessageRequired:`El mensaje del agente es requerido.`,timeoutInvalid:`Si se establece, el tiempo de espera debe ser mayor a 0 segundos.`,webhookUrlRequired:`La URL del webhook es requerida.`,webhookUrlInvalid:`La URL del webhook debe comenzar con http:// o https://.`,invalidRunTime:`Tiempo de ejecución inválido.`,invalidIntervalAmount:`Cantidad de intervalo inválida.`,cronExprRequiredShort:`Expresión Cron requerida.`,invalidStaggerAmount:`Cantidad de escalonamiento inválida.`,systemEventTextRequired:`Texto de evento del sistema requerido.`,agentMessageRequiredShort:`Mensaje del agente requerido.`,nameRequiredShort:`Nombre requerido.`}}};export{e as es};
|
|
2
|
+
//# sourceMappingURL=es-CIeD3O54.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"es-CIeD3O54.js","names":[],"sources":["../../../ui/src/i18n/locales/es.ts"],"sourcesContent":["import type { TranslationMap } from \"../lib/types.ts\";\n\nexport const es: TranslationMap = {\n common: {\n version: \"Versión\",\n health: \"Estado\",\n ok: \"Correcto\",\n online: \"En línea\",\n offline: \"Desconectado\",\n connect: \"Conectar\",\n refresh: \"Actualizar\",\n enabled: \"Habilitado\",\n disabled: \"Deshabilitado\",\n na: \"n/a\",\n docs: \"Docs\",\n resources: \"Recursos\",\n },\n nav: {\n chat: \"Chat\",\n control: \"Control\",\n agent: \"Agente\",\n settings: \"Ajustes\",\n expand: \"Expandir barra lateral\",\n collapse: \"Contraer barra lateral\",\n },\n tabs: {\n employees: \"Equipo\",\n agents: \"Agentes\",\n overview: \"Resumen\",\n channels: \"Canales\",\n instances: \"Instancias\",\n sessions: \"Sesiones\",\n usage: \"Uso\",\n cron: \"Tareas Cron\",\n skills: \"Habilidades\",\n nodes: \"Nodos\",\n chat: \"Chat\",\n config: \"Configuración\",\n apiKeys: \"API Keys\",\n debug: \"Depuración\",\n logs: \"Registros\",\n },\n subtitles: {\n employees: \"Equipo de IA y actividad reciente.\",\n agents: \"Gestionar espacios de trabajo, herramientas e identidades de agentes.\",\n overview: \"Estado de la puerta de enlace, puntos de entrada y lectura rápida de salud.\",\n channels: \"Gestionar canales y ajustes.\",\n instances: \"Balizas de presencia de clientes y nodos conectados.\",\n sessions: \"Inspeccionar sesiones activas y ajustar valores predeterminados por sesión.\",\n usage: \"Monitorear uso de API y costes.\",\n cron: \"Programar despertares y ejecuciones recurrentes de agentes.\",\n skills: \"Gestionar disponibilidad de habilidades e inyección de claves API.\",\n nodes: \"Dispositivos emparejados, capacidades y exposición de comandos.\",\n chat: \"Sesión de chat directa con la puerta de enlace para intervenciones rápidas.\",\n config: \"Editar ~/.openclaw/openclaw.json de forma segura.\",\n apiKeys: \"OpenRouter key and model defaults.\",\n debug: \"Instantáneas de la puerta de enlace, eventos y llamadas RPC manuales.\",\n logs: \"Seguimiento en vivo de los registros de la puerta de enlace.\",\n },\n overview: {\n access: {\n title: \"Acceso a la puerta de enlace\",\n subtitle: \"Dónde se conecta el panel y cómo se autentica.\",\n wsUrl: \"URL de WebSocket\",\n token: \"Token de la puerta de enlace\",\n password: \"Contraseña (no se guarda)\", // pragma: allowlist secret\n sessionKey: \"Clave de sesión predeterminada\",\n language: \"Idioma\",\n connectHint: \"Haz clic en Conectar para aplicar los cambios de conexión.\",\n trustedProxy: \"Autenticado mediante proxy de confianza.\",\n },\n snapshot: {\n title: \"Instantánea\",\n subtitle: \"Información más reciente del saludo con la puerta de enlace.\",\n status: \"Estado\",\n uptime: \"Tiempo de actividad\",\n tickInterval: \"Intervalo de tick\",\n lastChannelsRefresh: \"Última actualización de canales\",\n channelsHint: \"Usa Canales para vincular WhatsApp, Telegram, Discord, Signal o iMessage.\",\n },\n stats: {\n instances: \"Instancias\",\n instancesHint: \"Balizas de presencia en los últimos 5 minutos.\",\n sessions: \"Sesiones\",\n sessionsHint: \"Claves de sesión recientes rastreadas por la puerta de enlace.\",\n cron: \"Cron\",\n cronNext: \"Próximo despertar {time}\",\n },\n notes: {\n title: \"Notas\",\n subtitle: \"Recordatorios rápidos para configuraciones de control remoto.\",\n tailscaleTitle: \"Tailscale serve\",\n tailscaleText:\n \"Prefiere el modo serve para mantener la puerta de enlace en loopback con autenticación tailnet.\",\n sessionTitle: \"Higiene de sesión\",\n sessionText: \"Usa /new o sessions.patch para reiniciar el contexto.\",\n cronTitle: \"Recordatorios de Cron\",\n cronText: \"Usa sesiones aisladas para ejecuciones recurrentes.\",\n },\n auth: {\n required:\n \"Esta puerta de enlace requiere autenticación. Añade un token o contraseña y haz clic en Conectar.\",\n failed:\n \"Autenticación fallida. Vuelve a copiar una URL con token mediante {command}, o actualiza el token y haz clic en Conectar.\",\n },\n pairing: {\n hint: \"Este dispositivo necesita aprobación de emparejamiento del host de la puerta de enlace.\",\n mobileHint:\n \"¿En el móvil? Copia la URL completa (incluyendo #token=...) desde kova dashboard --no-open en tu escritorio.\",\n },\n insecure: {\n hint: \"Esta página es HTTP, por lo que el navegador bloquea el acceso a la identidad del dispositivo. Usa HTTPS (Tailscale Serve) o abre {url} en el equipo host.\",\n stayHttp: \"Si debes permanecer en HTTP, utiliza {config} (solo token).\",\n },\n },\n chat: {\n disconnected: \"Desconectado de la puerta de enlace.\",\n refreshTitle: \"Actualizar datos del chat\",\n thinkingToggle: \"Alternar salida de pensamiento/trabajo del asistente\",\n focusToggle: \"Alternar modo de enfoque (ocultar barra lateral + cabecera)\",\n hideCronSessions: \"Ocultar sesiones de cron\",\n showCronSessions: \"Mostrar sesiones de cron\",\n showCronSessionsHidden: \"Mostrar sesiones de cron ({count} ocultas)\",\n onboardingDisabled: \"Deshabilitado durante el inicio guiado\",\n },\n languages: {\n en: \"Inglés (English)\",\n zhCN: \"Chino simplificado (简体中文)\",\n zhTW: \"Chino tradicional (繁體中文)\",\n ptBR: \"Portugués brasileño (Português)\",\n de: \"Deutsch (Alemán)\",\n es: \"Español\",\n },\n cron: {\n summary: {\n enabled: \"Habilitado\",\n yes: \"Sí\",\n no: \"No\",\n jobs: \"Tareas\",\n nextWake: \"Próxima activación\",\n refreshing: \"Actualizando...\",\n refresh: \"Actualizar\",\n },\n jobs: {\n title: \"Tareas\",\n subtitle: \"Todas las tareas programadas almacenadas en la puerta de enlace.\",\n shownOf: \"{shown} mostradas de {total}\",\n searchJobs: \"Buscar tareas\",\n searchPlaceholder: \"Nombre, descripción o agente\",\n enabled: \"Habilitado\",\n schedule: \"Programación\",\n lastRun: \"Última ejecución\",\n all: \"Todas\",\n sort: \"Ordenar\",\n nextRun: \"Próxima ejecución\",\n recentlyUpdated: \"Actualizadas recientemente\",\n name: \"Nombre\",\n direction: \"Dirección\",\n ascending: \"Ascendente\",\n descending: \"Descendente\",\n reset: \"Restablecer\",\n noMatching: \"No hay tareas coincidentes.\",\n loading: \"Cargando...\",\n loadMore: \"Cargar más tareas\",\n },\n runs: {\n title: \"Historial de ejecuciones\",\n subtitleAll: \"Últimas ejecuciones de todas las tareas.\",\n subtitleJob: \"Últimas ejecuciones de {title}.\",\n scope: \"Alcance\",\n allJobs: \"Todas las tareas\",\n selectedJob: \"Tarea seleccionada\",\n searchRuns: \"Buscar ejecuciones\",\n searchPlaceholder: \"Resumen, error o tarea\",\n newestFirst: \"Más recientes primero\",\n oldestFirst: \"Más antiguas primero\",\n status: \"Estado\",\n delivery: \"Entrega\",\n clear: \"Limpiar\",\n allStatuses: \"Todos los estados\",\n allDelivery: \"Todas las entregas\",\n selectJobHint: \"Selecciona una tarea para ver su historial de ejecuciones.\",\n noMatching: \"No hay ejecuciones coincidentes.\",\n loadMore: \"Cargar más ejecuciones\",\n runStatusOk: \"OK\",\n runStatusError: \"Error\",\n runStatusSkipped: \"Omitida\",\n runStatusUnknown: \"Desconocido\",\n deliveryDelivered: \"Entregado\",\n deliveryNotDelivered: \"No entregado\",\n deliveryUnknown: \"Desconocido\",\n deliveryNotRequested: \"No solicitado\",\n },\n form: {\n editJob: \"Editar tarea\",\n newJob: \"Nueva tarea\",\n updateSubtitle: \"Actualiza la tarea programada seleccionada.\",\n createSubtitle: \"Crea una activación programada o ejecución de agente.\",\n required: \"Requerido\",\n requiredSr: \"requerido\",\n basics: \"Básico\",\n basicsSub: \"Asigna un nombre, elige el asistente y define si está habilitada.\",\n fieldName: \"Nombre\",\n description: \"Descripción\",\n agentId: \"ID de agente\",\n namePlaceholder: \"Resumen matutino\",\n descriptionPlaceholder: \"Contexto opcional para esta tarea\",\n agentPlaceholder: \"main u ops\",\n agentHelp:\n \"Comienza a escribir para seleccionar un agente conocido o ingresa uno personalizado.\",\n schedule: \"Programación\",\n scheduleSub: \"Controla cuándo se ejecuta esta tarea.\",\n every: \"Cada\",\n at: \"A las\",\n cronOption: \"Cron\",\n runAt: \"Ejecutar a las\",\n unit: \"Unidad\",\n minutes: \"Minutos\",\n hours: \"Horas\",\n days: \"Días\",\n expression: \"Expresión\",\n expressionPlaceholder: \"0 7 * * *\",\n everyAmountPlaceholder: \"30\",\n timezoneOptional: \"Zona horaria (opcional)\",\n timezonePlaceholder: \"America/Los_Angeles\",\n timezoneHelp: \"Selecciona una zona horaria común o ingresa cualquier zona IANA válida.\",\n jitterHelp:\n \"¿Necesitas variación? Usa Avanzado → Ventana de escalonamiento / Unidad de escalonamiento.\",\n execution: \"Ejecución\",\n executionSub: \"Elige cuándo activar y qué debe hacer esta tarea.\",\n session: \"Sesión\",\n main: \"Principal\",\n isolated: \"Aislada\",\n sessionHelp:\n \"Principal publica un evento del sistema. Aislada ejecuta un turno dedicado del agente.\",\n wakeMode: \"Modo de activación\",\n now: \"Ahora\",\n nextHeartbeat: \"Próximo latido\",\n wakeModeHelp: \"Ahora se activa inmediatamente. Próximo latido espera el siguiente ciclo.\",\n payloadKind: \"¿Qué debe ejecutarse?\",\n systemEvent: \"Publicar mensaje en la línea de tiempo principal\",\n agentTurn: \"Ejecutar tarea del asistente (aislada)\",\n systemEventHelp:\n \"Envía tu texto a la línea de tiempo principal de la puerta de enlace (ideal para recordatorios/activadores).\",\n agentTurnHelp: \"Inicia una ejecución del asistente en su propia sesión usando tu indicación.\",\n timeoutSeconds: \"Tiempo de espera (segundos)\",\n timeoutPlaceholder: \"Opcional, ej. 90\",\n timeoutHelp:\n \"Opcional. Déjalo en blanco para usar el comportamiento de tiempo de espera predeterminado de la puerta de enlace para esta ejecución.\",\n mainTimelineMessage: \"Mensaje de la línea de tiempo principal\",\n assistantTaskPrompt: \"Indicación para la tarea del asistente\",\n deliverySection: \"Entrega\",\n deliverySub: \"Elige dónde se envían los resúmenes de ejecución.\",\n resultDelivery: \"Entrega de resultados\",\n announceDefault: \"Anunciar resumen (predeterminado)\",\n webhookPost: \"Webhook POST\",\n noneInternal: \"Ninguna (interno)\",\n deliveryHelp:\n \"Anunciar publica un resumen en el chat. Ninguna mantiene la ejecución interna.\",\n webhookUrl: \"URL del webhook\",\n channel: \"Canal\",\n webhookPlaceholder: \"https://example.com/cron\",\n channelHelp: \"Elige qué canal conectado recibe el resumen.\",\n webhookHelp: \"Envía resúmenes de ejecución a un endpoint webhook.\",\n to: \"Para\",\n toPlaceholder: \"+1555... o ID de chat\",\n toHelp: \"Anulación opcional del destinatario (ID de chat, teléfono o ID de usuario).\",\n advanced: \"Avanzado\",\n advancedHelp:\n \"Anulaciones opcionales para garantías de entrega, variación de programación y controles del modelo.\",\n deleteAfterRun: \"Eliminar después de ejecutar\",\n deleteAfterRunHelp:\n \"Ideal para recordatorios de un solo uso que deben limpiarse automáticamente.\",\n clearAgentOverride: \"Limpiar anulación de agente\",\n clearAgentHelp:\n \"Forza a esta tarea a usar el asistente predeterminado de la puerta de enlace.\",\n exactTiming: \"Tiempo exacto (sin escalonamiento)\",\n exactTimingHelp: \"Ejecutar en límites exactos de cron sin dispersión.\",\n staggerWindow: \"Ventana de escalonamiento\",\n staggerUnit: \"Unidad de escalonamiento\",\n staggerPlaceholder: \"30\",\n seconds: \"Segundos\",\n model: \"Modelo\",\n modelPlaceholder: \"openai/gpt-5.2\",\n modelHelp:\n \"Comienza a escribir para seleccionar un modelo conocido o ingresa uno personalizado.\",\n thinking: \"Pensamiento\",\n thinkingPlaceholder: \"bajo\",\n thinkingHelp: \"Usa un nivel sugerido o ingresa un valor específico del proveedor.\",\n bestEffortDelivery: \"Entrega de mejor esfuerzo\",\n bestEffortHelp: \"No fallar la tarea si la entrega misma falla.\",\n cantAddYet: \"Aún no se puede agregar la tarea\",\n fillRequired: \"Completa los campos requeridos a continuación para habilitar el envío.\",\n fixFields: \"Corrige {count} campo para continuar.\",\n fixFieldsPlural: \"Corrige {count} campos para continuar.\",\n saving: \"Guardando...\",\n saveChanges: \"Guardar cambios\",\n addJob: \"Agregar tarea\",\n cancel: \"Cancelar\",\n },\n jobList: {\n allJobs: \"todas las tareas\",\n selectJob: \"(selecciona una tarea)\",\n enabled: \"habilitada\",\n disabled: \"deshabilitada\",\n edit: \"Editar\",\n clone: \"Clonar\",\n disable: \"Deshabilitar\",\n enable: \"Habilitar\",\n run: \"Ejecutar\",\n history: \"Historial\",\n remove: \"Eliminar\",\n },\n jobDetail: {\n system: \"Sistema\",\n prompt: \"Indicación\",\n delivery: \"Entrega\",\n agent: \"Agente\",\n },\n jobState: {\n status: \"Estado\",\n next: \"Próxima\",\n last: \"Última\",\n },\n runEntry: {\n noSummary: \"Sin resumen.\",\n runAt: \"Ejecutada a las\",\n openRunChat: \"Abrir chat de ejecución\",\n next: \"Próxima {rel}\",\n due: \"Programada {rel}\",\n },\n errors: {\n nameRequired: \"El nombre es requerido.\",\n scheduleAtInvalid: \"Ingresa una fecha/hora válida.\",\n everyAmountInvalid: \"El intervalo debe ser mayor a 0.\",\n cronExprRequired: \"La expresión Cron es requerida.\",\n staggerAmountInvalid: \"El escalonamiento debe ser mayor a 0.\",\n systemTextRequired: \"El texto del sistema es requerido.\",\n agentMessageRequired: \"El mensaje del agente es requerido.\",\n timeoutInvalid: \"Si se establece, el tiempo de espera debe ser mayor a 0 segundos.\",\n webhookUrlRequired: \"La URL del webhook es requerida.\",\n webhookUrlInvalid: \"La URL del webhook debe comenzar con http:// o https://.\",\n invalidRunTime: \"Tiempo de ejecución inválido.\",\n invalidIntervalAmount: \"Cantidad de intervalo inválida.\",\n cronExprRequiredShort: \"Expresión Cron requerida.\",\n invalidStaggerAmount: \"Cantidad de escalonamiento inválida.\",\n systemEventTextRequired: \"Texto de evento del sistema requerido.\",\n agentMessageRequiredShort: \"Mensaje del agente requerido.\",\n nameRequiredShort: \"Nombre requerido.\",\n },\n },\n};\n"],"mappings":"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"}
|